<?PHP
//"wrap-functions" for ASP-->PHP conversion;
//version 40;
//some features available only from PHP4;
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// to imitate ASP-type err object exception handling.
// PHP 4.1.0
//------------------------------------------------------------------------------
//in particular this function sets important global $err_number variable
//which will be used instead of err.number in converted PHP result.
//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
// IMPORTANT
global $err_number_c_;
global $err_description_c_;
global $err_display_c_;
global $err_notify_c_;
global $err_helpcontext_c_; //rudi: useless unless use manually
//added to RESULT
global $err_helpfile_c_; //rudi
// set_error_handler( handle_exc_c_ ); //to exclude a=1/0 reports.
// error_reporting (0); //set this to suppress some exceptions.
//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
function handle_exc_c_($errno, $errstr, $file_name, $string_number) {
global $err_number_c_;
global $err_description_c_;
global $err_display_c_;
global $err_notify_c_;
$err_number_c_ = $errno;
$err_description_c_ = $errstr . "\n" .
"in file: " . $file_name . "\n" .
"in line: " . $string_number;
$err_notify_c_ =false;
$err_display_c_ = false;
}
//--------------------------------------------------------------------
//preserves VB err.rase values, restricts err.number accroding to PHP;
//no input restrictions;
//only first an third arguments: number and description close to their
//ASP equivalents;
//NULL is used to imitate skipped VB arguments;
//--------------------------------------------------------------------
function err_raise_c_() {
$n=func_num_args();
$number = func_get_arg(0);
$fdescr = "number: " . $number;
if( $n>=2 ) {
$source = func_get_arg(1);
if($source != NULL) {$fdescr .= "\nsource: " . $source; }
if( $n>=3 ) {
$description = func_get_arg(2);
if($description != NULL) {$fdescr .= "\ndescription: " . $description;}
if( $n>=4 ) {
$helpfile = func_get_arg (3);
if($helpfile != NULL) {$fdescr .= "\nhelp file: " . $helpfile; }
if( $n==5 ) {
$helpcontext = func_get_arg (4);
if($helpcontext != NULL) {$fdescr .= "\nhelp context: " . $helpcontext;}
}
}
}
}
if( $number != E_USER_ERROR &&
$number != E_USER_NOTICE &&
$number != E_USER_WARNING ) { $number = E_USER_ERROR; }
trigger_error ( $fdescr, $number );
}
function err_clear_c_() {
global $err_number_c_, $err_description_c_;
global $err_display_c_, $err_notify_c_;
$err_number_c_ = 0; $err_description_c_="";
}
function on_error_resume_next_c_() {
err_clear_c_();
restore_error_handler();
}
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//==================================================================================
// replace
//----------------------------------------------------------------------------------
//! if extra 4, 5, 6 arguments (""start"",""count"", . .) are submitted,
//manual correction is required;
function replace_c_($where_to_replace, $what_to_replace, $with_to_replace) {
return (str_replace($what_to_replace, $with_to_replace,$where_to_replace));
}
//==================================================================================
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//because
// 1) string numeration in VB, posVB, and string position in PHP, posPHP, are different:
// posVB = posPHP+1
// 2) and PHP has vague return value 0 (can be 0, but can be ""false"",)
//
//then the following approach solves this in this schema:
// extra preceding character ""x"" has been added to a string;
// so, variables and function returns have VB meaning,
// and 0 matches ""false"" as it is in VB and PHP
// so, call instr(2,''moo'',''0'') will be converted to strpos(''x''.''moo'',''0'',2);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//==============================================================================
// instr
// will work for case of two parameters: $a - where to search
// $b - what to search
// for case of three parameters: $a - position from which to search
// $b - where to search
// $c - what to search
//------------------------------------------------------------------------------
function instr_c_() {
$n=func_num_args();
// echo ("args number = " . $n );
$a = func_get_arg (0);
$b = func_get_arg (1);
if( $n==2 ) {
$pos = strpos( "x".$a, $b, 1);
return $pos;
} else {
$c = func_get_arg (2);
$pos = strpos("x".$b, $c, $a );
return $pos;
// return (strpos("x".$b, $c, $a ));
}
}
//==============================================================================
//===============================================================
// instrrev
//---------------------------------------------------------------
// done for two or three arguments;
// for debug and comments, use //echo statement;
function instrrev_c_() {
$n=func_num_args();
if( $n==2 ) {
$a = func_get_arg (0);
$la = strlen($a);
$b = func_get_arg (1);
$s = $la;
} else {
$a = func_get_arg (1);
$la = strlen($a);
$b = func_get_arg (2);
$s = func_get_arg (0);
}
$lb = strlen($b);
//echo "\r\n where to search=" . $a;
//echo "\r\n what to search=" . $b;
//echo "\r\n where to start=" . $s;
//this formula inverses origin 1 ---> a:
// 1.........s......s+b-1........a
// and sets following restriction on s:
if( $s + $lb - 1 > $la || $s < 1 ) { return 0; }
$start = $la - ($s + $lb - 1) + 1;
// add char "x" to avoid 0-origin:
// char "x" will be always skipped in search
// because starting position will be never 0;
$r1 = strrev($a . "x");
$r2 = strrev($b);
//echo "\r\n where reversed=" . $r1;
//echo "\r\n what reversed=" . $r2;
//echo "\r\n start reversed=" . $start;
$pos = strpos( $r1, $r2, $start);
//echo "\r\n pos reversed=" . $pos;
if( $pos <> 0 ) {
//inverse back:
$pos = $la - ($pos + $lb - 1) + 1;
}
//echo "\r\n pos found=" . $pos;
return $pos;
}
//===============================================================
//===============================================================
// right
//---------------------------------------------------------------
function right_c_($swhere,$spos) {
return (substr($swhere, strlen($swhere)-$spos, $spos));
}
//===============================================================
// space
// returns empty string padded with spaces $size times;
//---------------------------------------------------------------
function space_c_($size) {
return (str_pad("",$size));
}
//===============================================================
// Request.Form
// This is depricated in 4.1.0. New var is $_POST
//---------------------------------------------------------------
function request_form_c_($a) {
global $HTTP_POST_VARS;
return $HTTP_POST_VARS[$a];
}
//===============================================================
// Request.QueryString. Use $_GET from 4.1.0.
//---------------------------------------------------------------
function request_query_string_c_($a) {
global $HTTP_GET_VARS;
return $HTTP_GET_VARS[$a];
}
//===============================================================
// Request.ServerVariables
//---------------------------------------------------------------
function request_server_var_c_($a) {
//$return_it = $HTTP_ENV_VARS[$a]; - may be useful.
//[1]ASP: http://localhost/iishelp/iis/htm/asp/intr5vsj.htm
//[2]PHP: http://www.php.net/manual/en/reserved.variables.php#reserved.variables.server
switch (strtoupper($a)) {
case "SCRIPT_NAME": $a="PHP_SELF";
//on olm.net hosting: PHP-"SCRIPT_NAME" = /cgi-bin/php
//PHP-"PATH_INFO" was not documented, but was the same as PHP-"PHP_SELF";
break;
case "APPL_PHYSICAL_PATH": $a="PATH_TRANSLATED";
//not always precise: on olm.net hosting: it is "rooted" to /www/...
//PHP-"SCRIPT_FILENAME" would be incorrect; this is a path to an "engine" itself;
break;
case "REMOTE_HOST": $a="REMOTE_ADDR";
//! not precise: please see [1];
break;
case "URL": $a="REQUEST_URI"; //!
break;
//nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
//no difference between ASP and PHP.
//-------------------------------------------------------
// - - - - - - - - - - - - - - - - -
//HTTP headers sent from the client:
//HTTP_ACCEPT
//HTTP_ACCEPT_LANGUAGE
//HTTP_CONNECTION
//HTTP_HOST
//HTTP_USER_AGENT
//HTTP_COOKIE assumed
//HTTP_ACCEPT_ENCODING
//assumed that other headers from the
//client are the same.
//- - - - - - - - - - - - - - - - - -
//SERVER_NAME
//SERVER_PORT
//PATH_INFO '! assumed that is the same
//QUERY_STRING
//SERVER_SOFTWARE
//SERVER_PROTOCOL
//REQUEST_METHOD
//GATEWAY_INTERFACE
//REMOTE_ADDR
//nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
//It is notable that PHP has "REMOTE_PORT" and ASP does not.
//It seems that in ASP most reliable are
//HTTP_HOST, SERVER_PORT, REMOTE_ADDR, SCRIPT_NAME.
//ALL OTHER ASP server variables will be submitted to
//PHP $_SERVER array "as is". To correct this, more
//"case" lines can be added in the body of this function.
//ALL_RAW ??
//APPL_MD_PATH ??
}
$return_it = $_SERVER[$a];
//if(substr($return_it,0,1)=="/") {$return_it = substr($return_it,1); } //! cut first "/" if any;
return $return_it;
}
//===============================================================
//===============================================================
// Ubound
//---------------------------------------------------------------
//this wrapper simply shifts elements count:
//! done only for the first argument:
//low bound in ASP is 0, so first argument case matches PHP syntax precisely;
//must be updated for full case: UBound(arrayname[, dimension])
function ubound_c_($array) { return(sizeof($array) - 1); }
//===============================================================
//===============================================================
// split
//---------------------------------------------------------------
//this wrapper simply swaps arguments:
//! done only for 2 arguments. when more than two, must be rewritten:
//two more are: [, count[, compare]]]
function split_c_($string, $separator) { return (explode($separator, $string)); }
//===============================================================
//===============================================================
// rnd
//---------------------------------------------------------------
// If rnd has positive argument or no arguments, then
// this wrapper should be a right replacement for rnd.
// If argument is zero or less than zero, this wrapper will
// give incorrect results than in ASP specifications.
//
// accuracy is about 9 digits
//
function rand_c_() {
return (float)rand(0,2000000000.)/2e9;
}
//===============================================================
//===============================================================
// randomize [number]
//---------------------------------------------------------------
function srand_c_() {
static $already_called = false;
$n=func_num_args();
if($n==0) { //pick up seed from timer as this is done in ASP:
if(!$already_called) {
$seed= (double)microtime() * 1000000;
$already_called = true;
//or use something like this to avoid duplicate call:
//credit to: hagen@von-eitzen.de in php.net
//10-Oct-2000 03:51
//if (!$GLOBALS["IHaveCalledSrandBefore"]++) {
// srand((double) microtime() * 1000000);
}
} else { //trying to convert ASP supplied seed to big enough integer:
$seed = func_get_arg (0);
if(abs($seed) < 100000 ) { $seed = abs($seed) * 10000; }
}
srand($seed);
}
//===============================================================
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// RESPONSE OBJECT
//================================================================================
//Response.Buffer [=flag] False is default.
//in PHP: ob_start ([string output_when_flush])
function set_buffer_c_() {
$n=func_num_args();
if($n==0) { ob_end_flush();
} else {
$Flag = func_get_arg (0);
if(Flag) { ob_start();
} else { ob_end_flush();
}
}
}
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
?>