mirror of
https://github.com/php/php-gtk-src.git
synced 2026-04-25 01:38:04 +02:00
175 lines
4.4 KiB
C
175 lines
4.4 KiB
C
/*
|
|
* PHP-GTK - The PHP language bindings for GTK+
|
|
*
|
|
* Copyright (C) 2001 Andrei Zmievski <andrei@php.net>
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|
|
|
|
/* $Id$: */
|
|
|
|
#include "php_gtk.h"
|
|
#include "SAPI.h"
|
|
|
|
#if HAVE_PHP_GTK
|
|
|
|
HashTable php_gtk_ext_registry;
|
|
GHashTable *php_gtk_class_hash = NULL;
|
|
|
|
zend_module_entry gtk_module_entry = {
|
|
"gtk",
|
|
NULL,
|
|
PHP_MINIT(gtk),
|
|
PHP_MSHUTDOWN(gtk),
|
|
PHP_RINIT(gtk), /* Replace with NULL if there's nothing to do at request start */
|
|
PHP_RSHUTDOWN(gtk), /* Replace with NULL if there's nothing to do at request end */
|
|
PHP_MINFO(gtk),
|
|
STANDARD_MODULE_PROPERTIES
|
|
};
|
|
|
|
#ifdef COMPILE_DL_PHP_GTK
|
|
ZEND_GET_MODULE(gtk)
|
|
#endif
|
|
|
|
/* Remove comments and fill if you need to have entries in php.ini
|
|
PHP_INI_BEGIN()
|
|
PHP_INI_END()
|
|
*/
|
|
|
|
PHP_MINIT_FUNCTION(gtk)
|
|
{
|
|
// ZEND_INIT_MODULE_GLOBALS(gtk, NULL, NULL);
|
|
|
|
/* Remove comments if you have entries in php.ini
|
|
REGISTER_INI_ENTRIES();
|
|
*/
|
|
|
|
return SUCCESS;
|
|
}
|
|
|
|
PHP_MSHUTDOWN_FUNCTION(gtk)
|
|
{
|
|
/* Remove comments if you have entries in php.ini
|
|
UNREGISTER_INI_ENTRIES();
|
|
*/
|
|
return SUCCESS;
|
|
}
|
|
|
|
static void php_gtk_ext_destructor(php_gtk_ext_entry *ext)
|
|
{
|
|
if (ext->ext_started && ext->ext_shutdown_func)
|
|
ext->ext_shutdown_func();
|
|
ext->ext_started = 0;
|
|
}
|
|
|
|
/* Remove if there's nothing to do at request start */
|
|
PHP_RINIT_FUNCTION(gtk)
|
|
{
|
|
zend_hash_init_ex(&php_gtk_ext_registry, 10, NULL, (void (*)(void *))php_gtk_ext_destructor, 1, 0);
|
|
|
|
php_gtk_class_hash = g_hash_table_new(g_str_hash, g_str_equal);
|
|
zend_hash_init_ex(&php_gtk_prop_getters, 20, NULL, NULL, 1, 0);
|
|
zend_hash_init_ex(&php_gtk_prop_setters, 20, NULL, NULL, 1, 0);
|
|
zend_hash_init_ex(&php_gtk_rsrc_hash, 50, NULL, NULL, 1, 0);
|
|
zend_hash_init_ex(&php_gtk_type_hash, 50, NULL, NULL, 1, 0);
|
|
|
|
zend_unset_timeout();
|
|
zend_set_timeout(0);
|
|
|
|
if (php_gtk_startup_all_extensions(module_number) == FAILURE) {
|
|
php_error(E_WARNING, "Unable to start extensions");
|
|
return FAILURE;
|
|
}
|
|
|
|
return SUCCESS;
|
|
}
|
|
|
|
/* Remove if there's nothing to do at request end */
|
|
PHP_RSHUTDOWN_FUNCTION(gtk)
|
|
{
|
|
zend_hash_destroy(&php_gtk_prop_getters);
|
|
zend_hash_destroy(&php_gtk_prop_setters);
|
|
zend_hash_destroy(&php_gtk_rsrc_hash);
|
|
zend_hash_destroy(&php_gtk_type_hash);
|
|
|
|
zend_hash_destroy(&php_gtk_ext_registry);
|
|
|
|
return SUCCESS;
|
|
}
|
|
|
|
PHP_MINFO_FUNCTION(gtk)
|
|
{
|
|
char buf[32];
|
|
|
|
php_info_print_table_start();
|
|
php_info_print_table_row(2, "GTK+ support", "enabled");
|
|
sprintf(buf, "%d.%d.%d", gtk_major_version, gtk_minor_version, gtk_micro_version);
|
|
php_info_print_table_row(2, "GTK+ v", buf);
|
|
php_info_print_table_end();
|
|
|
|
/* Remove comments if you have entries in php.ini
|
|
DISPLAY_INI_ENTRIES();
|
|
*/
|
|
}
|
|
|
|
PHP_FUNCTION(wrap_no_constructor)
|
|
{
|
|
php_error(E_WARNING, "%s: An abstract or unimplemented class", get_active_function_name());
|
|
php_gtk_invalidate(this_ptr);
|
|
}
|
|
|
|
PHP_FUNCTION(wrap_no_direct_constructor)
|
|
{
|
|
php_error(E_WARNING, "Class %s cannot be constructed directly", get_active_function_name());
|
|
php_gtk_invalidate(this_ptr);
|
|
}
|
|
|
|
static int php_gtk_startup_extension(php_gtk_ext_entry *ext, int module_number)
|
|
{
|
|
ELS_FETCH();
|
|
|
|
if (ext) {
|
|
if (ext->ext_startup_func) {
|
|
if (ext->ext_startup_func(module_number ELS_CC) == FAILURE) {
|
|
php_error(E_WARNING, "Unable to start '%s' PHP-GTK extension", ext->name);
|
|
return FAILURE;
|
|
}
|
|
}
|
|
ext->ext_started = 1;
|
|
zend_hash_add(&php_gtk_ext_registry, ext->name, strlen(ext->name)+1,
|
|
(void *)ext, sizeof(php_gtk_ext_entry), NULL);
|
|
}
|
|
|
|
return SUCCESS;
|
|
}
|
|
|
|
int php_gtk_startup_extensions(php_gtk_ext_entry **ext, int ext_count, int module_number)
|
|
{
|
|
php_gtk_ext_entry **end = ext + ext_count;
|
|
|
|
while (ext < end) {
|
|
if (*ext) {
|
|
if (php_gtk_startup_extension(*ext, module_number)==FAILURE) {
|
|
return FAILURE;
|
|
}
|
|
}
|
|
ext++;
|
|
}
|
|
|
|
return SUCCESS;
|
|
}
|
|
|
|
#endif /* HAVE_PHP_GTK */
|