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

Reply via email to