cvs: php4 /scripts/ext_skel_ng php_global.php php_ini.php

From: Date: Sat, 26 Apr 2003 15:05:09 +0000
Subject: cvs: php4 /scripts/ext_skel_ng php_global.php php_ini.php
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-20508@lists.php.net to get a copy of this message
hholzgra Sat Apr 26 11:05:09 2003 EDT Added files: /php4/scripts/ext_skel_ng php_global.php php_ini.php Log: module global variables and ini parameters now have their own generator classes Index: php4/scripts/ext_skel_ng/php_global.php +++ php4/scripts/ext_skel_ng/php_global.php <?php class php_global extends php_element { function __construct($attr) { $this->name = $attr["name"]; if (!$this->is_name($this->name)) { $this->error[] = "'$attr[name]' is not a valid C variable name"; } $this->type = $attr['type']; if (!$this->is_type($this->type)) { $this->error[] = "'$attr[type]' is not a valid C data type"; } } /* overriding type check as we deal with C types here check is rather naive as it doesn't know about context so we check for a sequence of valid names for now TODO: check for either simple type, struct/class or single word (typedef) */ function is_type($type) { $array = explode(" ", str_replace('*',' ',$type)); foreach ($array as $name) { if (empty($name)) continue; if (!$this->is_name($name)) return false; } return true; } static function c_code_header($name) { return "static void php_{name}_init_globals(zend_{name}_globals *{name}_globals)\n{\n"; } function c_code($name) { $code = " {$name}_globals->{$this->name} = "; if (strstr($this->type, "*")) { $code .= "NULL;\n"; } else { $code .= "0;\n"; } return $code; } static function c_code_footer() { return "}\n\n"; } static function h_code_header($name) { return "ZEND_BEGIN_MODULE_GLOBALS({$name})\n"; } function h_code($name) { return " {$this->type} {$this->name};\n"; } static function h_code_footer($name) { $upname = strtoupper($name); return " ZEND_END_MODULE_GLOBALS({$name}) #ifdef ZTS #define {$upname}_G(v) TSRMG({$name}_globals_id, zend_{$name}_globals *, v) #else #define {$upname}_G(v) ({$name}_globals.v) #endif "; } } ?> Index: php4/scripts/ext_skel_ng/php_ini.php +++ php4/scripts/ext_skel_ng/php_ini.php <?php class php_ini extends php_element { function __construct($attr) { $this->name = $attr["name"]; if (!$this->is_name($this->name)) { $this->error[] = "'$attr[name]' is not a valid php.ini directive name"; } $this->type = $this->is_type($attr['type']); if (!$this->type) { $this->error[] = "'$attr[type]' is not a valid PHP data type"; } $this->value = $attr["value"]; $this->desc = $attr["desc"]; switch ($attr["access"]) { case "system": $this->access = "PHP_INI_SYSTEM"; break; case "perdir": $this->access = "PHP_INI_PERDIR"; break; case "user": $this->access = "PHP_INI_USER"; break; case "all": case "": $this->access = "PHP_INI_ALL"; break; default: $this->error[] = "'$attr[access]' is not a valid access mode (system|perdir|user|all)"; } switch ($this->type) { case "bool": $this->onupdate = "OnUpdateBool"; $this->c_type = "zend_bool"; break; case "int": $this->onupdate = "OnUpdateLong"; $this->c_type = "long"; break; case "float": $this->onupdate = "OnUpdateReal"; $this->c_type = "double"; break; case "string": $this->onupdate = "OnUpdateString"; $this->c_type = "char *"; break; default: $this->error[] = "'$this->type' not supported, only bool, int, float and string"; break; } if (isset($attr["onupdate"])) { $this->onupdate = $attr["onupdate"]; } } static function c_code_header($name) { return "PHP_INI_BEGIN()\n"; } function c_code($name) { return " STD_PHP_INI_ENTRY(\"{$name}.$name\", \"{$this->value}\", {$this->access}, {$this->onupdate}, $name, zend_{$name}_globals, {$name}_globals)\n"; } static function c_code_footer() { return "PHP_INI_END()\n\n"; } static function docbook_xml_header($name) { return " <table> <title>$name runtime configuration</title> <tgroup cols='3'> <thead> <row> <entry>directive</entry> <entry>default value</entry> <entry>descrpition</entry> </row> </thead> <tbody> "; } function docbook_xml() { return " <row> <entry>$this->name</entry> <entry>$this->value</entry> <entry>$this->desc</entry> </row> "; } static function docbook_xml_footer() { return " </tbody> </tgroup> </table> "; } } ?>

« previous php.cvs (#20508) next »