cvs: embed /php-irssi php-core.c

From: Date: Thu, 30 Jan 2003 12:51:30 +0000
Subject: cvs: embed /php-irssi php-core.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-18292@lists.php.net to get a copy of this message
wez Thu Jan 30 07:51:30 2003 EDT Modified files: /embed/php-irssi php-core.c Log: Add some helpful comments Index: embed/php-irssi/php-core.c diff -u embed/php-irssi/php-core.c:1.3 embed/php-irssi/php-core.c:1.4 --- embed/php-irssi/php-core.c:1.3 Thu Jan 30 07:25:39 2003 +++ embed/php-irssi/php-core.c Thu Jan 30 07:51:30 2003 @@ -14,7 +14,7 @@ +----------------------------------------------------------------------+ | Author: Wez Furlong <wez@php.net> | +----------------------------------------------------------------------+ - $Id: php-core.c,v 1.3 2003/01/30 12:25:39 wez Exp $ + $Id: php-core.c,v 1.4 2003/01/30 12:51:30 wez Exp $ */ #define MODULE_NAME "php/core" #include "common.h" @@ -45,7 +45,8 @@ int signal_php_error; WINDOW_REC *target_win; -/* output to irssi crap output. +/* Catch output pushed from the output buffer mechanism. + * Route it to "php output" signal. * TODO: this should line-buffer the output */ static int ub_write(const char *str, unsigned int str_length TSRMLS_DC) { @@ -53,11 +54,13 @@ return SUCCESS; } +/* Catch log-errors and route them to the "php error" signal */ static void log_message(char *message) { signal_emit_id(signal_php_error, 1, message); } +/* Catch general php errors, format them and route them to "php error" signal */ static void sapi_error(int type, const char *fmt, ...) { char *buf; @@ -70,6 +73,9 @@ va_end(ap); } +/* Eval some PHP code, but do it in such a way that an engine bail event wont + * kill off process. Returns a tristate indicating success, error and fatal + * doom. */ static enum eval_ret_t php_eval_string(const char *source, const char *fmt, ...) { enum eval_ret_t retval; @@ -121,11 +127,15 @@ static void fini_php(void) { + /* This is not an MSHUTDOWN function because there were issues with the resource + * destruction order. Explicitly calling this before the sapi is closed down + * saves that nightmare */ php_irssi_module_shutdown(); php_embed_shutdown(TSRMLS_C); } +/* Handler for the "/php" command */ static void cmd_php(const char *data) { target_win = active_win; @@ -142,16 +152,19 @@ } } +/* default "php error" signal handler */ static void error_handler(char *message) { printtext_window(target_win, MSGLEVEL_CLIENTCRAP, "-!- php error: %s", message); } +/* default "php output" signal handler */ static void output_handler(const char *str, unsigned int str_length) { printtext_window(target_win, MSGLEVEL_CLIENTCRAP, "%s", str); } +/* autorun any .php scripts found in the users scripts/autorun dir */ static void do_autorun(void) { target_win = active_win; @@ -171,13 +184,16 @@ } } +/* "irssi init finished" event handler. + * This is used to ensure that the whole of irssi has completed its + * init prior to launching autorun */ static void sig_autorun(void) { signal_remove("irssi init finished", (SIGNAL_FUNC)sig_autorun); do_autorun(); } -/* Module init */ +/* Module init: called by irssi when the user types "/load php" */ void php_core_init(void) { init_php(); @@ -190,15 +206,23 @@ command_bind("php", NULL, (SIGNAL_FUNC)cmd_php); if (irssi_init_finished) { + /* if the module is being loaded manually execute autorun directly */ do_autorun(); } else { + /* otherwise arrange for it to be run when init is completed */ signal_add("irssi init finished", (SIGNAL_FUNC)sig_autorun); settings_check(); } + /* Tell irssi that we are loaded and ready */ module_register("php", "core"); } +/* Called by irssi when the user types "/unload php". + * It is *absolutely essential* that *all* signal and command bindings are + * removed before this function exits, otherwise you will encounter random + * crashes. + * */ void php_core_deinit(void) { /* bind to this event to implement destructors for your scripts, @@ -209,6 +233,8 @@ command_unbind("php", (SIGNAL_FUNC)cmd_php); signal_remove("php output", (SIGNAL_FUNC)output_handler); signal_remove("php error", (SIGNAL_FUNC)error_handler); + + fini_php(); signal_emit("php unloaded", 0);

« previous php.cvs (#18292) next »