From 9fc848d393049557f18b5ca6e05e3e1ceae6082e Mon Sep 17 00:00:00 2001 From: perry.werneck@gmail.com Date: Thu, 10 Apr 2014 22:43:27 +0000 Subject: [PATCH] Iniciando implementação de módulo PHP --- src/php/init.cc | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/php/main.cc | 123 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/php/php3270.cbp | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/php/php3270.h | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/php/sample.php | 8 ++++++++ 5 files changed, 329 insertions(+), 0 deletions(-) create mode 100644 src/php/init.cc create mode 100644 src/php/main.cc create mode 100644 src/php/php3270.cbp create mode 100644 src/php/php3270.h create mode 100644 src/php/sample.php diff --git a/src/php/init.cc b/src/php/init.cc new file mode 100644 index 0000000..33fb2fd --- /dev/null +++ b/src/php/init.cc @@ -0,0 +1,69 @@ +/* + * "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 init.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" + +/*--[ Implement ]--------------------------------------------------------------------------------------------------*/ + +PHP_METHOD(tn3270, __construct) +{ + char * name; + int szName = 0; + char * url; + int szURL = 0; + tn3270_object * obj = (tn3270_object *) zend_object_store_get_object(getThis() TSRMLS_CC); + + trace("%s %d",__FUNCTION__,ZEND_NUM_ARGS()); + + // http://www.php.net/manual/pt_BR/internals2.funcs.php + if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sss", &name, &szName, &url, &szURL) == FAILURE) + RETURN_NULL(); + + trace("szName=%d",szName); + + if(szName) + { + char text[szName+1]; + strncpy(text,name,szName); + text[szName] = 0; + trace("session_name=\"%s\"",text); + obj->hSession = session::start(text); + } + else + { + obj->hSession = session::start(); + } + + +} + diff --git a/src/php/main.cc b/src/php/main.cc new file mode 100644 index 0000000..8f99a48 --- /dev/null +++ b/src/php/main.cc @@ -0,0 +1,123 @@ +/* + * "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_function_entry tn3270_methods[] = +{ + PHP_ME( tn3270, __construct, 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 ); + + object_properties_init((zend_object*) &(obj->std), type); + + 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 + PHP_LIB3270_EXTNAME, + NULL, /* Functions */ + PHP_MINIT(tn3270), + NULL, /* MSHUTDOWN */ + NULL, /* RINIT */ + NULL, /* RSHUTDOWN */ + NULL, /* MINFO */ +#if ZEND_MODULE_API_NO >= 20010901 + PHP_LIB3270_EXTVER, +#endif + STANDARD_MODULE_PROPERTIES +}; + +// #ifdef COMPILE_DL_LIB3270 +extern "C" +{ + ZEND_GET_MODULE(lib3270) +} +// #endif + diff --git a/src/php/php3270.cbp b/src/php/php3270.cbp new file mode 100644 index 0000000..5647f8c --- /dev/null +++ b/src/php/php3270.cbp @@ -0,0 +1,61 @@ + + + + + + diff --git a/src/php/php3270.h b/src/php/php3270.h new file mode 100644 index 0000000..c391b39 --- /dev/null +++ b/src/php/php3270.h @@ -0,0 +1,68 @@ +/* + * "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 php3270.h 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/ + * + */ + +#ifndef PHP_LIB3270_INCLUDED + + #define PHP_LIB3270_INCLUDED 1 + + #define PHP_LIB3270_EXTNAME "lib3270" + #define PHP_LIB3270_EXTVER "5.0" + + extern "C" + { + #include "php.h" + } + + extern zend_module_entry lib3270_module_entry; + #define phpext_lib3270_ptr &lib3270_module_entry; + + // 3270 session methods + PHP_METHOD(tn3270,__construct); + + + #undef PACKAGE_NAME + #undef PACKAGE_VERSION + #undef HAVE_MALLOC_H + #include + + // PHP object + using namespace PW3270_NAMESPACE; + + struct tn3270_object + { + zend_object std; + session * hSession; + }; + + +#endif // PHP_LIB3270_INCLUDED diff --git a/src/php/sample.php b/src/php/sample.php new file mode 100644 index 0000000..6b56667 --- /dev/null +++ b/src/php/sample.php @@ -0,0 +1,8 @@ + -- libgit2 0.21.2