/* * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a * aplicativos mainframe. Registro no INPI sob o nome G3270. * * Copyright (C) <2008> * * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela * Free Software Foundation. * * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para * obter mais detalhes. * * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin * St, Fifth Floor, Boston, MA 02110-1301 USA * * Este programa está nomeado como main.cc e possui - linhas de código. * * Contatos: * * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) * * Referências: * * http://devzone.zend.com/1435/wrapping-c-classes-in-a-php-extension/ * */ #include "php3270.h" /*--[ Globals ]----------------------------------------------------------------------------------------------------*/ static zend_class_entry * tn3270_ce = NULL; static zend_object_handlers tn3270_object_handlers; /*--[ Implement ]--------------------------------------------------------------------------------------------------*/ ZEND_BEGIN_ARG_INFO_EX(get_args, 0, 0, 1) ZEND_ARG_INFO(0, value) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(set_args, 0, 0, 2) ZEND_ARG_INFO(0, name) ZEND_ARG_INFO(0, value) ZEND_END_ARG_INFO() zend_function_entry tn3270_methods[] = { PHP_ME( tn3270, __construct, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) PHP_ME( tn3270, __tostring, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) PHP_ME( tn3270, __get, get_args, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) PHP_ME( tn3270, __set, set_args, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) PHP_ME( tn3270, getversion, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) PHP_ME( tn3270, getrevision, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) PHP_ME( tn3270, getname, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) PHP_ME( tn3270, connect, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) PHP_ME( tn3270, disconnect, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) PHP_ME( tn3270, close, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) PHP_ME( tn3270, isconnected, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) PHP_ME( tn3270, isready, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) PHP_ME( tn3270, waitforready, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) PHP_ME( tn3270, wait, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) PHP_ME( tn3270, iterate, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) PHP_ME( tn3270, pfkey, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) PHP_ME( tn3270, pakey, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) PHP_ME( tn3270, enter, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) PHP_ME( tn3270, getstringat, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) PHP_ME( tn3270, setstringat, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) PHP_ME( tn3270, cmpstringat, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) PHP_ME( tn3270, getisprotected, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) PHP_ME( tn3270, getisprotectedat, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) PHP_ME( tn3270, action, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) {NULL, NULL, NULL} }; void tn3270_free_storage(void *object TSRMLS_DC) { tn3270_object *obj = (tn3270_object *)object; trace("%s",__FUNCTION__); zend_object_std_dtor(&obj->std TSRMLS_CC); delete obj->hSession; efree(obj); } zend_object_value tn3270_create_handler(zend_class_entry *type TSRMLS_DC) { zend_object_value retval; tn3270_object * obj = (tn3270_object *) emalloc(sizeof(tn3270_object)); trace("%s",__FUNCTION__); memset(obj, 0, sizeof(tn3270_object)); zend_object_std_init( &(obj->std), type TSRMLS_CC ); // http://stackoverflow.com/questions/14105529/writing-a-c-extension-for-php-5-4-example-code-is-obsolete // object_properties_init((zend_object*) &(obj->std), type); #if PHP_VERSION_ID < 50399 zend_hash_copy(obj->std.properties, &(type->default_properties),(copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval*)); #else object_properties_init(&obj->std, type); #endif retval.handle = zend_objects_store_put(obj, NULL, tn3270_free_storage, NULL TSRMLS_CC); retval.handlers = &tn3270_object_handlers; return retval; } PHP_MINIT_FUNCTION(tn3270) { zend_class_entry ce; trace("%s",__FUNCTION__); INIT_CLASS_ENTRY(ce, "tn3270", tn3270_methods); tn3270_ce = zend_register_internal_class(&ce TSRMLS_CC); tn3270_ce->create_object = tn3270_create_handler; memcpy(&tn3270_object_handlers,zend_get_std_object_handlers(), sizeof(zend_object_handlers)); tn3270_object_handlers.clone_obj = NULL; return SUCCESS; } zend_module_entry lib3270_module_entry = { #if ZEND_MODULE_API_NO >= 20010901 STANDARD_MODULE_HEADER, #endif PHP3270_EXTNAME, NULL, /* Functions */ PHP_MINIT(tn3270), NULL, /* MSHUTDOWN */ NULL, /* RINIT */ NULL, /* RSHUTDOWN */ NULL, /* MINFO */ #if ZEND_MODULE_API_NO >= 20010901 PHP3270_EXTVER, #endif STANDARD_MODULE_PROPERTIES }; // #ifdef COMPILE_DL_LIB3270 extern "C" { ZEND_GET_MODULE(lib3270) } // #endif