From c743daed758953a60a4867c8434c230e9b34ba71 Mon Sep 17 00:00:00 2001 From: perry.werneck@gmail.com Date: Fri, 11 Apr 2014 10:58:40 +0000 Subject: [PATCH] Ajustando módulo PHP --- configure.ac | 2 ++ src/classlib/local.cc | 2 +- src/classlib/session.cc | 3 +++ src/php/Makefile.in | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/php/main.cc | 36 +++++------------------------------- src/php/misc.cc | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/php/php3270.cbp | 1 + src/php/php3270.h | 3 +++ src/php/sample.php | 3 ++- src/plugins/dbus3270/gobject.c | 2 +- 10 files changed, 234 insertions(+), 34 deletions(-) create mode 100644 src/php/Makefile.in create mode 100644 src/php/misc.cc diff --git a/configure.ac b/configure.ac index bc0609d..aad43cf 100644 --- a/configure.ac +++ b/configure.ac @@ -239,6 +239,7 @@ AC_MSG_RESULT($app_cv_fvisibility_ok) if test $app_cv_fvisibility_ok = yes; then CFLAGS="$CFLAGS -fvisibility=hidden" OO_CXXFLAGS="$OO_CXXFLAGS -fvisibility=hidden" + CXXFLAGS="$CXXFLAGS -fvisibility=hidden" fi #--[ Options ]------------------------------------------------------------------------------------------------------------------------------------------------ @@ -624,6 +625,7 @@ AC_CONFIG_FILES([ makegtkruntime.sh src/sample/Makefile mac/pw3270.bundle + src/php/Makefile ]) dnl Output the generated config.status script. diff --git a/src/classlib/local.cc b/src/classlib/local.cc index 2ebfa90..1807e3c 100644 --- a/src/classlib/local.cc +++ b/src/classlib/local.cc @@ -425,7 +425,7 @@ int set_url(const char *uri) { - return (_set_url(hSession,uri) != 0) ? 1 : 0; + return (_set_url(hSession,uri) == 0); } int disconnect(void) diff --git a/src/classlib/session.cc b/src/classlib/session.cc index b8ca517..96f53ac 100644 --- a/src/classlib/session.cc +++ b/src/classlib/session.cc @@ -483,7 +483,10 @@ int rc = 0; if(host && *host) + { rc = set_url(host); + trace("%s: set_url(%s) = %d",__FUNCTION__,host,rc); + } if(!rc) rc = connect(wait); diff --git a/src/php/Makefile.in b/src/php/Makefile.in new file mode 100644 index 0000000..e5cce14 --- /dev/null +++ b/src/php/Makefile.in @@ -0,0 +1,99 @@ +# +# "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., 59 Temple +# Place, Suite 330, Boston, MA, 02111-1307, USA +# +# Contatos: +# +# perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) +# erico.mendonca@gmail.com (Erico Mascarenhas de Mendonça) +# + +PACKAGE_NAME=@PACKAGE_NAME@ +SOURCES=get.cc init.cc main.cc misc.cc set.cc + +#---[ Paths ]------------------------------------------------------------------ + +prefix=@prefix@ +exec_prefix=@exec_prefix@ +bindir=@bindir@ +sbindir=@sbindir@ +libdir=@libdir@ +includedir=@includedir@ + +#---[ Tools ]------------------------------------------------------------------ + +CXX=@CXX@ +MKDIR=@MKDIR_P@ +INSTALL=@INSTALL@ +INSTALL_DATA=@INSTALL_DATA@ +INSTALL_PROGRAM=@INSTALL_PROGRAM@ +PHPCONFIG=@PHPCONFIG@ + +#---[ Paths ]------------------------------------------------------------------ + +OBJDIR = .obj +BINDIR = .bin + +OBJDBG = $(OBJDIR)/Debug +BINDBG = $(BINDIR)/Debug + +OBJRLS = $(OBJDIR)/Release +BINRLS = $(BINDIR)/Release + +#---[ lib3270 common class ]--------------------------------------------------- + +DEBUG_CFLAGS=-DDEBUG=1 -g -Wall +PW3270_CFLAGS=-I../include +CLASSLIBDIR=../classlib +include $(CLASSLIBDIR)/class.mak + +#---[ Build options ]---------------------------------------------------------- + +CXXFLAGS=@CXXFLAGS@ @DLL_CFLAGS@ `$(PHPCONFIG) --includes` -I../include + +#---[ Rules ]------------------------------------------------------------------ + +$(OBJDBG)/%.o: %.cc php3270.h Makefile + @echo " CC `basename $@`" + @mkdir -p `dirname $@` + $(CXX) -DDEBUG=1 $(CXXFLAGS) -o $@ -c $< + + +#---[ Release targets ]-------------------------------------------------------- + +#---[ Debug targets ]---------------------------------------------------------- + +Debug: $(BINDBG)/php3270@DLLEXT@ + +$(BINDBG)/php3270@DLLEXT@: $(foreach SRC, $(basename $(SOURCES)), $(OBJDBG)/$(SRC)@OBJEXT@) \ + $(CLASS_DEBUG_OBJECTS) + @echo " LD `basename $@`" + @$(MKDIR) `dirname $@` + $(CXX) -shared $(LDFLAGS) $(OO_LDFLAGS) $(CLASS_LIBS) -o $@ $^ + + +run: $(BINDBG)/php3270@DLLEXT@ + php -d extension=$(BINDBG)/php3270@DLLEXT@ sample.php + +#---[ Misc targets ]----------------------------------------------------------- + +clean: + @rm -fr $(OBJDIR) + @rm -fr $(BINDIR) + diff --git a/src/php/main.cc b/src/php/main.cc index 1d0814f..4f01d05 100644 --- a/src/php/main.cc +++ b/src/php/main.cc @@ -43,12 +43,17 @@ static zend_object_handlers tn3270_object_handlers; zend_function_entry tn3270_methods[] = { PHP_ME( tn3270, __construct, 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, 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) @@ -129,34 +134,3 @@ extern "C" } // #endif -PHP_METHOD(tn3270, connect) -{ - const char * host; - int szHost; - zend_bool wait = 0; - int rc = 0; - tn3270_object * obj = (tn3270_object *) zend_object_store_get_object(getThis() TSRMLS_CC); - - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sb", &host, &szHost, &wait) == FAILURE) - RETURN_NULL(); - - if(szHost) - { - char text[szHost+1]; - strncpy(text,host,szHost); - text[szHost] = 0; - rc = obj->hSession->connect(text,wait); - } - else - { - rc = obj->hSession->connect(); - } - - RETURN_LONG(rc); -} - -PHP_METHOD(tn3270, disconnect) -{ - tn3270_object * obj = (tn3270_object *) zend_object_store_get_object(getThis() TSRMLS_CC); - RETURN_LONG(obj->hSession->disconnect()); -} diff --git a/src/php/misc.cc b/src/php/misc.cc new file mode 100644 index 0000000..3cfff65 --- /dev/null +++ b/src/php/misc.cc @@ -0,0 +1,117 @@ +/* + * "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" + +/*--[ Implement ]--------------------------------------------------------------------------------------------------*/ + +PHP_METHOD(tn3270, connect) +{ + const char * host; + int szHost; + zend_bool wait = 0; + int rc = 0; + tn3270_object * obj = (tn3270_object *) zend_object_store_get_object(getThis() TSRMLS_CC); + + if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sb", &host, &szHost, &wait) == FAILURE) + RETURN_NULL(); + + if(szHost) + { + char text[szHost+1]; + strncpy(text,host,szHost); + text[szHost] = 0; + rc = obj->hSession->connect(text,wait); + } + else + { + rc = obj->hSession->connect(); + } + + RETURN_LONG(rc); +} + +PHP_METHOD(tn3270, disconnect) +{ + tn3270_object * obj = (tn3270_object *) zend_object_store_get_object(getThis() TSRMLS_CC); + RETURN_LONG(obj->hSession->disconnect()); +} + +PHP_METHOD(tn3270, waitforready) +{ + long seconds; + tn3270_object * obj = (tn3270_object *) zend_object_store_get_object(getThis() TSRMLS_CC); + + // http://www.php.net/manual/pt_BR/internals2.funcs.php + if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &seconds) == FAILURE) + RETURN_NULL(); + + RETURN_LONG(obj->hSession->wait_for_ready((int) seconds)); +} + +PHP_METHOD(tn3270, waity) +{ + long seconds; + tn3270_object * obj = (tn3270_object *) zend_object_store_get_object(getThis() TSRMLS_CC); + + // http://www.php.net/manual/pt_BR/internals2.funcs.php + if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &seconds) == FAILURE) + RETURN_NULL(); + + RETURN_LONG(obj->hSession->wait((int) seconds)); +} + +PHP_METHOD(tn3270, wait) +{ + long seconds; + tn3270_object * obj = (tn3270_object *) zend_object_store_get_object(getThis() TSRMLS_CC); + + // http://www.php.net/manual/pt_BR/internals2.funcs.php + if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &seconds) == FAILURE) + RETURN_NULL(); + + RETURN_LONG(obj->hSession->wait((int) seconds)); +} + + +PHP_METHOD(tn3270, iterate) +{ + zend_bool wait = 0; + tn3270_object * obj = (tn3270_object *) zend_object_store_get_object(getThis() TSRMLS_CC); + + // http://www.php.net/manual/pt_BR/internals2.funcs.php + if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "b", &wait) == FAILURE) + RETURN_NULL(); + + RETURN_LONG(obj->hSession->iterate(wait)); +} diff --git a/src/php/php3270.cbp b/src/php/php3270.cbp index 5f71afe..3cc530f 100644 --- a/src/php/php3270.cbp +++ b/src/php/php3270.cbp @@ -51,6 +51,7 @@ + diff --git a/src/php/php3270.h b/src/php/php3270.h index 8d1b94a..645e1b0 100644 --- a/src/php/php3270.h +++ b/src/php/php3270.h @@ -52,6 +52,9 @@ PHP_METHOD(tn3270,disconnect); PHP_METHOD(tn3270,isconnected); PHP_METHOD(tn3270,isready); + PHP_METHOD(tn3270,waitforready); + PHP_METHOD(tn3270,wait); + PHP_METHOD(tn3270,iterate); PHP_METHOD(tn3270,pfkey); PHP_METHOD(tn3270,pakey); diff --git a/src/php/sample.php b/src/php/sample.php index e16f31b..31068c9 100644 --- a/src/php/sample.php +++ b/src/php/sample.php @@ -7,7 +7,8 @@ $rc = $host->connect(); print("connect() exits with rc=" . $rc . "\n"); - + $rc = $host->waitforready(10); + print("waitforready() exits with rc=" . $rc . "\n"); $rc = $host->disconnect(); print("disconnect() exits with rc=" . $rc . "\n"); diff --git a/src/plugins/dbus3270/gobject.c b/src/plugins/dbus3270/gobject.c index 1d1a638..06940d6 100644 --- a/src/plugins/dbus3270/gobject.c +++ b/src/plugins/dbus3270/gobject.c @@ -109,7 +109,7 @@ void pw3270_dbus_set_host(PW3270Dbus *object, const gchar *uri, DBusGMethodInvoc g_message("Changing host to \"%s\" by remote request",uri); - dbus_g_method_return(context,lib3270_set_url(pw3270_dbus_get_session_handle(PW3270_DBUS(object)),uri) != NULL); + dbus_g_method_return(context,lib3270_set_url(pw3270_dbus_get_session_handle(PW3270_DBUS(object)),uri) == NULL); } void pw3270_dbus_disconnect(PW3270Dbus *object, DBusGMethodInvocation *context) -- libgit2 0.21.2