wez Thu Jan 30 07:12:21 2003 EDT Modified files: /embed/php-irssi genobjdefs.php gensignals.php php-irssi-obj.c php-irssi.h typemap.php Log: Return a vestigal class entry for non-ZE2 aware code. Expose the php module signals to php scripts. Some refinements to the code generator scripts. Index: embed/php-irssi/genobjdefs.php diff -u embed/php-irssi/genobjdefs.php:1.2 embed/php-irssi/genobjdefs.php:1.3 --- embed/php-irssi/genobjdefs.php:1.2 Thu Jan 30 04:45:04 2003 +++ embed/php-irssi/genobjdefs.php Thu Jan 30 07:12:20 2003 @@ -15,7 +15,7 @@ +----------------------------------------------------------------------+ | Author: Wez Furlong <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ - $Id: genobjdefs.php,v 1.2 2003/01/30 09:45:04 wez Exp $ + $Id: genobjdefs.php,v 1.3 2003/01/30 12:12:20 wez Exp $ */ /* We build three sets of tables: @@ -27,12 +27,6 @@ */ $top_srcdir = realpath($argv[1]); -$objects_to_scan = array( - "src/core/server-rec.h" => array("SERVER_REC", "server"), - "src/core/channel-rec.h"=> array("CHANNEL_REC", "channel"), - "src/core/nick-rec.h"=> array("NICK_REC", "nick"), - ); - $obj_bind = array(); include "typemap.php"; Index: embed/php-irssi/gensignals.php diff -u embed/php-irssi/gensignals.php:1.2 embed/php-irssi/gensignals.php:1.3 --- embed/php-irssi/gensignals.php:1.2 Thu Jan 30 04:04:35 2003 +++ embed/php-irssi/gensignals.php Thu Jan 30 07:12:20 2003 @@ -15,7 +15,7 @@ +----------------------------------------------------------------------+ | Author: Wez Furlong <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ - $Id: gensignals.php,v 1.2 2003/01/30 09:04:35 wez Exp $ + $Id: gensignals.php,v 1.3 2003/01/30 12:12:20 wez Exp $ */ /* Generate signal information from the signals.txt file in the docs @@ -25,23 +25,20 @@ echo "static struct php_irssi_signal_args php_irssi_sig_args_table[] = {\n"; -while (!feof(STDIN)) { - $line = fgets(STDIN); - if ($line === false) - break; - +function read_signal($line) +{ if (!preg_match('/^ "([^"]+)"(<.*>)?,\s*(.*)/', $line, $matches)) - continue; + return; if (strpos($line, '...') || strpos($line, '(')) - continue; + return; $signal = $matches[1]; $thing = $matches[2]; if ($thing) - continue; - + return; + $args = explode(", ", $matches[3]); $ok = true; @@ -53,13 +50,39 @@ if ($ok) $record[] = $handler; else - break; + return; } if ($ok) { echo "{ \"$signal\", 0, " . count($record) . ", {" . implode(",", $record) . "} },\n"; } } + +while (!feof(STDIN)) { + $line = fgets(STDIN); + if ($line === false) + break; + + read_signal($line); +} + +/* signals provided by the php module itself. + * the "php error" signal is dangerous to bind to php code as there + * is a high potential of infinite loops. + * We don't list "php unloaded" as there is no PHP around to + * handle that event at that time... + */ + +$php_signals = <<<EOD + "php output", char *data + "php error", char *data + "php unloading" +EOD; + +foreach (explode("\n", $php_signals) as $line) { + read_signal($line); +} + echo "{ NULL, 0, 0 }\n};\n"; Index: embed/php-irssi/php-irssi-obj.c diff -u embed/php-irssi/php-irssi-obj.c:1.1 embed/php-irssi/php-irssi-obj.c:1.2 --- embed/php-irssi/php-irssi-obj.c:1.1 Thu Jan 30 04:04:35 2003 +++ embed/php-irssi/php-irssi-obj.c Thu Jan 30 07:12:20 2003 @@ -14,11 +14,13 @@ +----------------------------------------------------------------------+ | Author: Wez Furlong <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ - $Id: php-irssi-obj.c,v 1.1 2003/01/30 09:04:35 wez Exp $ + $Id: php-irssi-obj.c,v 1.2 2003/01/30 12:12:20 wez Exp $ */ #include "php-irssi.h" #include "php-irssi-obj-defs.h" +static zend_class_entry php_irssi_ce; + void *php_irssi_resolve_to_SERVER_REC(struct php_irssi_obj_ref *ref) { return server_find_tag(ref->idents[IDX_SERVER]); @@ -63,7 +65,7 @@ ZVAL_NULL(val); } *rval = val; - ZVAL_DELREF(val); + /* ZVAL_DELREF(val); */ } @@ -148,6 +150,11 @@ return NULL; } +static zend_class_entry *pih_get_class(zval *object TSRMLS_DC) +{ + return &php_irssi_ce; +} + static int pih_get_class_name(zval *object, char **class_name, zend_uint *class_name_len, int parent TSRMLS_DC) { struct php_irssi_obj_ref *ref = zend_object_store_get_object(object TSRMLS_CC); @@ -182,7 +189,7 @@ pih_get_method, NULL, pih_get_ctor, - NULL, + pih_get_class, pih_get_class_name, }; @@ -231,7 +238,7 @@ if (zobj) { Z_TYPE_P(zobj) = IS_OBJECT; zobj->value.obj = retval; - ZVAL_DELREF(zobj); +/* ZVAL_DELREF(zobj); */ } return retval; @@ -250,7 +257,6 @@ } -static zend_class_entry php_irssi_ce; int php_irssi_init_objects(void) Index: embed/php-irssi/php-irssi.h diff -u embed/php-irssi/php-irssi.h:1.1 embed/php-irssi/php-irssi.h:1.2 --- embed/php-irssi/php-irssi.h:1.1 Thu Jan 30 04:04:35 2003 +++ embed/php-irssi/php-irssi.h Thu Jan 30 07:12:20 2003 @@ -14,7 +14,7 @@ +----------------------------------------------------------------------+ | Author: Wez Furlong <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ - $Id: php-irssi.h,v 1.1 2003/01/30 09:04:35 wez Exp $ + $Id: php-irssi.h,v 1.2 2003/01/30 12:12:20 wez Exp $ */ #define MODULE_NAME "php/core" @@ -45,7 +45,7 @@ PIAT_ULONG, PIAT_NICK, PIAT_ARRAY_OF_STRING, - PIAT_BOOL + PIAT_BOOL, }; struct php_irssi_signal_args { Index: embed/php-irssi/typemap.php diff -u embed/php-irssi/typemap.php:1.1 embed/php-irssi/typemap.php:1.2 --- embed/php-irssi/typemap.php:1.1 Thu Jan 30 04:04:35 2003 +++ embed/php-irssi/typemap.php Thu Jan 30 07:12:20 2003 @@ -15,23 +15,33 @@ +----------------------------------------------------------------------+ | Author: Wez Furlong <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ - $Id: typemap.php,v 1.1 2003/01/30 09:04:35 wez Exp $ + $Id: typemap.php,v 1.2 2003/01/30 12:12:20 wez Exp $ */ /* This array describes the functions that can be used to convert between * irssi and php/ze types */ +$objects_to_scan = array( + "src/core/server-rec.h" => array("SERVER_REC", "server"), + "src/core/channel-rec.h" => array("CHANNEL_REC", "channel"), + "src/core/nick-rec.h" => array("NICK_REC", "nick"), + ); + $marshal = array( "char *" => array("PIAT_STRING", false), - "SERVER_REC" => array("PIAT_SERVER", true), - "CHANNEL_REC" => array("PIAT_CHANNEL", true), "time_t" => array("PIAT_INT", false), "int" => array("PIAT_INT", false), "unsigned int" => array("PIAT_INT", false), "ulong" => array("PIAT_ULONG", false), - "NICK_REC" => array("PIAT_NICK", true), "GList * of char*" => array("PIAT_ARRAY_OF_STRING", false), ); + +/* fixup the marshal array to include supported objects */ +foreach ($objects_to_scan as $data) { + list($rec, $name) = $data; + $label = preg_replace('/_.*/', '', $rec); + $marshal[$rec] = array("PIAT_$label", true); +} function match_decl($decl, &$name, &$handler, $pointers = false) {
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php