function pical_minical_ex_show($options)
 {
     global $xoopsConfig, $xoopsDB, $xoopsUser;
     // speed check
     //global $GIJ_common_time ;
     //list($usec, $sec) = explode(" ",microtime());
     //echo ((float)$sec + (float)$usec) - $GIJ_common_time ;
     // get bid
     if (defined('XOOPS_CUBE_LEGACY')) {
         // XoopsCube 2.1
         $bid = $options[sizeof($options) - 1];
     } else {
         if (substr(XOOPS_VERSION, 6, 3) == '2.2') {
             // XOOPS 2.2
             // instanceid as bid from block_instance
             $bid = @$GLOBALS['pical_blockinstance_id'];
         } else {
             // XOOPS 2.0.x/2.3.x/ImpressCMS
             if (is_object($GLOBALS['block_arr'][$GLOBALS['i']])) {
                 // bid from newblocks
                 $bid = $GLOBALS['block_arr'][$GLOBALS['i']]->getVar('bid');
             } else {
                 return array();
             }
         }
     }
     $mydirname = empty($options[0]) ? basename(dirname(dirname(__FILE__))) : $options[0];
     $gifaday = empty($options[1]) ? 2 : intval($options[1]);
     $just1gif = empty($options[2]) ? 0 : 1;
     //	$plugins_tmp = empty( $options[3] ) ? array() : explode( ',' , $options[3] ) ;
     // robots mode (arrows in minicalex will point not a current page but piCal)
     $robots_mode = preg_match('/(msnbot|Googlebot|Yahoo! Slurp)/i', $_SERVER['HTTP_USER_AGENT']);
     // GET URL extraction
     // Only integer values are valid (for preventing from XSS)
     $additional_get = '';
     if (!$robots_mode) {
         foreach ($_GET as $g_key => $g_val) {
             if ($g_key == 'caldate' || $g_key == session_name()) {
                 continue;
             }
             if (intval($g_val) != $g_val) {
                 $additional_get = '';
                 break;
             } else {
                 $additional_get .= '&' . urlencode($g_key) . '=' . intval($g_val);
             }
         }
     }
     // cache enable or not
     if (empty($_POST['pical_jumpcaldate']) && (empty($_GET['caldate']) || in_array(substr($_GET['caldate'], 0, 4), array(date('Y'), date('Y') - 1)))) {
         $enable_cache = true;
         //		$enable_cache = false ;
     } else {
         $enable_cache = false;
     }
     // cache read
     if ($enable_cache) {
         if (empty($_GET['caldate'])) {
             $Ym = date('Ym');
         } else {
             list($Y, $m) = explode('-', $_GET['caldate']);
             if (empty($m)) {
                 $Ym = date('Ym');
             } else {
                 $Ym = sprintf('%04d%02d', $Y, $m);
             }
         }
         $bid_hash = substr(md5($bid . XOOPS_DB_PREFIX), -6);
         $uid = is_object($xoopsUser) ? $xoopsUser->getVar('uid') : 0;
         $cache_file = XOOPS_CACHE_PATH . "/{$mydirname}_minical_ex_{$bid_hash}_{$xoopsConfig['language']}_";
         if (file_exists($cache_file . $Ym)) {
             $cache_bodies = file($cache_file . $Ym);
             if (sizeof($cache_bodies) == 3) {
                 $expire = intval($cache_bodies[0]);
                 $prev_uid = intval($cache_bodies[1]);
                 if ($expire > time() && $prev_uid == $uid) {
                     $block = unserialize($cache_bodies[2]);
                     if ($robots_mode) {
                         $block['root_url'] = $block['mod_url'] . '/';
                         // $block['php_self'] = '/' ;
                         $block['additional_get'] = '';
                     } else {
                         $block['root_url'] = '';
                         // $block['php_self'] = $_SERVER['SCRIPT_NAME'] ;
                         $block['additional_get'] = $additional_get;
                     }
                     // speed check
                     //list($usec, $sec) = explode(" ",microtime());
                     //echo ((float)$sec + (float)$usec) - $GIJ_common_time ;
                     return $block;
                 }
             }
         }
     }
     // MyTextSanitizer
     $myts =& MyTextSanitizer::getInstance();
     // setting physical & virtual paths
     $mod_path = XOOPS_ROOT_PATH . "/modules/{$mydirname}";
     $mod_url = XOOPS_URL . "/modules/{$mydirname}";
     // defining class of piCal
     if (!class_exists('piCal_xoops')) {
         require_once "{$mod_path}/class/piCal.php";
         require_once "{$mod_path}/class/piCal_xoops.php";
     }
     // creating an instance of piCal
     $cal = new piCal_xoops("", $xoopsConfig['language'], true);
     // ignoring cid from GET
     $cal->now_cid = 0;
     // setting properties of piCal
     $cal->conn = $xoopsDB->conn;
     include "{$mod_path}/include/read_configs.php";
     $cal->base_url = $mod_url;
     $cal->base_path = $mod_path;
     $cal->images_url = "{$mod_url}/images/{$skin_folder}";
     $cal->images_path = "{$mod_path}/images/{$skin_folder}";
     $block = $cal->get_minical_ex($gifaday, $just1gif, $cal->get_plugins("mcx{$bid}"));
     // speed check
     // global $GIJ_common_time ;
     // list($usec, $sec) = explode(" ",microtime());
     // echo ((float)$sec + (float)$usec) - $GIJ_common_time ;
     if ($enable_cache) {
         $fp = fopen($cache_file . sprintf('%04d%02d', $cal->year, $cal->month), 'w');
         fwrite($fp, time() + 300 . "\n");
         // 5 mininutes (hard coded)
         fwrite($fp, intval($uid) . "\n");
         fwrite($fp, serialize($block));
         fclose($fp);
     }
     if ($robots_mode) {
         $block['root_url'] = $block['mod_url'] . '/';
         // $block['php_self'] = '/' ;
         $block['additional_get'] = '';
     } else {
         $block['root_url'] = '';
         $block['additional_get'] = $additional_get;
     }
     return $block;
 }