Commit c743daed758953a60a4867c8434c230e9b34ba71

Authored by perry.werneck@gmail.com
1 parent aff1fde6

Ajustando módulo PHP

configure.ac
... ... @@ -239,6 +239,7 @@ AC_MSG_RESULT($app_cv_fvisibility_ok)
239 239 if test $app_cv_fvisibility_ok = yes; then
240 240 CFLAGS="$CFLAGS -fvisibility=hidden"
241 241 OO_CXXFLAGS="$OO_CXXFLAGS -fvisibility=hidden"
  242 + CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
242 243 fi
243 244  
244 245 #--[ Options ]------------------------------------------------------------------------------------------------------------------------------------------------
... ... @@ -624,6 +625,7 @@ AC_CONFIG_FILES([
624 625 makegtkruntime.sh
625 626 src/sample/Makefile
626 627 mac/pw3270.bundle
  628 + src/php/Makefile
627 629 ])
628 630  
629 631 dnl Output the generated config.status script.
... ...
src/classlib/local.cc
... ... @@ -425,7 +425,7 @@
425 425  
426 426 int set_url(const char *uri)
427 427 {
428   - return (_set_url(hSession,uri) != 0) ? 1 : 0;
  428 + return (_set_url(hSession,uri) == 0);
429 429 }
430 430  
431 431 int disconnect(void)
... ...
src/classlib/session.cc
... ... @@ -483,7 +483,10 @@
483 483 int rc = 0;
484 484  
485 485 if(host && *host)
  486 + {
486 487 rc = set_url(host);
  488 + trace("%s: set_url(%s) = %d",__FUNCTION__,host,rc);
  489 + }
487 490  
488 491 if(!rc)
489 492 rc = connect(wait);
... ...
src/php/Makefile.in 0 → 100644
... ... @@ -0,0 +1,99 @@
  1 +#
  2 +# "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 +# (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 +# aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 +#
  6 +# Copyright (C) <2008> <Banco do Brasil S.A.>
  7 +#
  8 +# Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 +# os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 +# Free Software Foundation.
  11 +#
  12 +# Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 +# GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 +# A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 +# obter mais detalhes.
  16 +#
  17 +# Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 +# programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple
  19 +# Place, Suite 330, Boston, MA, 02111-1307, USA
  20 +#
  21 +# Contatos:
  22 +#
  23 +# perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  24 +# erico.mendonca@gmail.com (Erico Mascarenhas de Mendonça)
  25 +#
  26 +
  27 +PACKAGE_NAME=@PACKAGE_NAME@
  28 +SOURCES=get.cc init.cc main.cc misc.cc set.cc
  29 +
  30 +#---[ Paths ]------------------------------------------------------------------
  31 +
  32 +prefix=@prefix@
  33 +exec_prefix=@exec_prefix@
  34 +bindir=@bindir@
  35 +sbindir=@sbindir@
  36 +libdir=@libdir@
  37 +includedir=@includedir@
  38 +
  39 +#---[ Tools ]------------------------------------------------------------------
  40 +
  41 +CXX=@CXX@
  42 +MKDIR=@MKDIR_P@
  43 +INSTALL=@INSTALL@
  44 +INSTALL_DATA=@INSTALL_DATA@
  45 +INSTALL_PROGRAM=@INSTALL_PROGRAM@
  46 +PHPCONFIG=@PHPCONFIG@
  47 +
  48 +#---[ Paths ]------------------------------------------------------------------
  49 +
  50 +OBJDIR = .obj
  51 +BINDIR = .bin
  52 +
  53 +OBJDBG = $(OBJDIR)/Debug
  54 +BINDBG = $(BINDIR)/Debug
  55 +
  56 +OBJRLS = $(OBJDIR)/Release
  57 +BINRLS = $(BINDIR)/Release
  58 +
  59 +#---[ lib3270 common class ]---------------------------------------------------
  60 +
  61 +DEBUG_CFLAGS=-DDEBUG=1 -g -Wall
  62 +PW3270_CFLAGS=-I../include
  63 +CLASSLIBDIR=../classlib
  64 +include $(CLASSLIBDIR)/class.mak
  65 +
  66 +#---[ Build options ]----------------------------------------------------------
  67 +
  68 +CXXFLAGS=@CXXFLAGS@ @DLL_CFLAGS@ `$(PHPCONFIG) --includes` -I../include
  69 +
  70 +#---[ Rules ]------------------------------------------------------------------
  71 +
  72 +$(OBJDBG)/%.o: %.cc php3270.h Makefile
  73 + @echo " CC `basename $@`"
  74 + @mkdir -p `dirname $@`
  75 + $(CXX) -DDEBUG=1 $(CXXFLAGS) -o $@ -c $<
  76 +
  77 +
  78 +#---[ Release targets ]--------------------------------------------------------
  79 +
  80 +#---[ Debug targets ]----------------------------------------------------------
  81 +
  82 +Debug: $(BINDBG)/php3270@DLLEXT@
  83 +
  84 +$(BINDBG)/php3270@DLLEXT@: $(foreach SRC, $(basename $(SOURCES)), $(OBJDBG)/$(SRC)@OBJEXT@) \
  85 + $(CLASS_DEBUG_OBJECTS)
  86 + @echo " LD `basename $@`"
  87 + @$(MKDIR) `dirname $@`
  88 + $(CXX) -shared $(LDFLAGS) $(OO_LDFLAGS) $(CLASS_LIBS) -o $@ $^
  89 +
  90 +
  91 +run: $(BINDBG)/php3270@DLLEXT@
  92 + php -d extension=$(BINDBG)/php3270@DLLEXT@ sample.php
  93 +
  94 +#---[ Misc targets ]-----------------------------------------------------------
  95 +
  96 +clean:
  97 + @rm -fr $(OBJDIR)
  98 + @rm -fr $(BINDIR)
  99 +
... ...
src/php/main.cc
... ... @@ -43,12 +43,17 @@ static zend_object_handlers tn3270_object_handlers;
43 43 zend_function_entry tn3270_methods[] =
44 44 {
45 45 PHP_ME( tn3270, __construct, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR)
  46 +
46 47 PHP_ME( tn3270, connect, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR)
47 48 PHP_ME( tn3270, disconnect, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR)
48 49  
49 50 PHP_ME( tn3270, isconnected, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR)
50 51 PHP_ME( tn3270, isready, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR)
51 52  
  53 + PHP_ME( tn3270, waitforready, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR)
  54 + PHP_ME( tn3270, wait, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR)
  55 + PHP_ME( tn3270, iterate, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR)
  56 +
52 57 PHP_ME( tn3270, pfkey, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR)
53 58 PHP_ME( tn3270, pakey, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR)
54 59 PHP_ME( tn3270, enter, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR)
... ... @@ -129,34 +134,3 @@ extern &quot;C&quot;
129 134 }
130 135 // #endif
131 136  
132   -PHP_METHOD(tn3270, connect)
133   -{
134   - const char * host;
135   - int szHost;
136   - zend_bool wait = 0;
137   - int rc = 0;
138   - tn3270_object * obj = (tn3270_object *) zend_object_store_get_object(getThis() TSRMLS_CC);
139   -
140   - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sb", &host, &szHost, &wait) == FAILURE)
141   - RETURN_NULL();
142   -
143   - if(szHost)
144   - {
145   - char text[szHost+1];
146   - strncpy(text,host,szHost);
147   - text[szHost] = 0;
148   - rc = obj->hSession->connect(text,wait);
149   - }
150   - else
151   - {
152   - rc = obj->hSession->connect();
153   - }
154   -
155   - RETURN_LONG(rc);
156   -}
157   -
158   -PHP_METHOD(tn3270, disconnect)
159   -{
160   - tn3270_object * obj = (tn3270_object *) zend_object_store_get_object(getThis() TSRMLS_CC);
161   - RETURN_LONG(obj->hSession->disconnect());
162   -}
... ...
src/php/misc.cc 0 → 100644
... ... @@ -0,0 +1,117 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Este programa está nomeado como main.cc e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + *
  28 + * Referências:
  29 + *
  30 + * http://devzone.zend.com/1435/wrapping-c-classes-in-a-php-extension/
  31 + *
  32 + */
  33 +
  34 + #include "php3270.h"
  35 +
  36 +/*--[ Implement ]--------------------------------------------------------------------------------------------------*/
  37 +
  38 +PHP_METHOD(tn3270, connect)
  39 +{
  40 + const char * host;
  41 + int szHost;
  42 + zend_bool wait = 0;
  43 + int rc = 0;
  44 + tn3270_object * obj = (tn3270_object *) zend_object_store_get_object(getThis() TSRMLS_CC);
  45 +
  46 + if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sb", &host, &szHost, &wait) == FAILURE)
  47 + RETURN_NULL();
  48 +
  49 + if(szHost)
  50 + {
  51 + char text[szHost+1];
  52 + strncpy(text,host,szHost);
  53 + text[szHost] = 0;
  54 + rc = obj->hSession->connect(text,wait);
  55 + }
  56 + else
  57 + {
  58 + rc = obj->hSession->connect();
  59 + }
  60 +
  61 + RETURN_LONG(rc);
  62 +}
  63 +
  64 +PHP_METHOD(tn3270, disconnect)
  65 +{
  66 + tn3270_object * obj = (tn3270_object *) zend_object_store_get_object(getThis() TSRMLS_CC);
  67 + RETURN_LONG(obj->hSession->disconnect());
  68 +}
  69 +
  70 +PHP_METHOD(tn3270, waitforready)
  71 +{
  72 + long seconds;
  73 + tn3270_object * obj = (tn3270_object *) zend_object_store_get_object(getThis() TSRMLS_CC);
  74 +
  75 + // http://www.php.net/manual/pt_BR/internals2.funcs.php
  76 + if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &seconds) == FAILURE)
  77 + RETURN_NULL();
  78 +
  79 + RETURN_LONG(obj->hSession->wait_for_ready((int) seconds));
  80 +}
  81 +
  82 +PHP_METHOD(tn3270, waity)
  83 +{
  84 + long seconds;
  85 + tn3270_object * obj = (tn3270_object *) zend_object_store_get_object(getThis() TSRMLS_CC);
  86 +
  87 + // http://www.php.net/manual/pt_BR/internals2.funcs.php
  88 + if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &seconds) == FAILURE)
  89 + RETURN_NULL();
  90 +
  91 + RETURN_LONG(obj->hSession->wait((int) seconds));
  92 +}
  93 +
  94 +PHP_METHOD(tn3270, wait)
  95 +{
  96 + long seconds;
  97 + tn3270_object * obj = (tn3270_object *) zend_object_store_get_object(getThis() TSRMLS_CC);
  98 +
  99 + // http://www.php.net/manual/pt_BR/internals2.funcs.php
  100 + if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &seconds) == FAILURE)
  101 + RETURN_NULL();
  102 +
  103 + RETURN_LONG(obj->hSession->wait((int) seconds));
  104 +}
  105 +
  106 +
  107 +PHP_METHOD(tn3270, iterate)
  108 +{
  109 + zend_bool wait = 0;
  110 + tn3270_object * obj = (tn3270_object *) zend_object_store_get_object(getThis() TSRMLS_CC);
  111 +
  112 + // http://www.php.net/manual/pt_BR/internals2.funcs.php
  113 + if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "b", &wait) == FAILURE)
  114 + RETURN_NULL();
  115 +
  116 + RETURN_LONG(obj->hSession->iterate(wait));
  117 +}
... ...
src/php/php3270.cbp
... ... @@ -51,6 +51,7 @@
51 51 <Unit filename="get.cc" />
52 52 <Unit filename="init.cc" />
53 53 <Unit filename="main.cc" />
  54 + <Unit filename="misc.cc" />
54 55 <Unit filename="php3270.h" />
55 56 <Unit filename="sample.php" />
56 57 <Unit filename="set.cc" />
... ...
src/php/php3270.h
... ... @@ -52,6 +52,9 @@
52 52 PHP_METHOD(tn3270,disconnect);
53 53 PHP_METHOD(tn3270,isconnected);
54 54 PHP_METHOD(tn3270,isready);
  55 + PHP_METHOD(tn3270,waitforready);
  56 + PHP_METHOD(tn3270,wait);
  57 + PHP_METHOD(tn3270,iterate);
55 58  
56 59 PHP_METHOD(tn3270,pfkey);
57 60 PHP_METHOD(tn3270,pakey);
... ...
src/php/sample.php
... ... @@ -7,7 +7,8 @@
7 7 $rc = $host->connect();
8 8 print("connect() exits with rc=" . $rc . "\n");
9 9  
10   -
  10 + $rc = $host->waitforready(10);
  11 + print("waitforready() exits with rc=" . $rc . "\n");
11 12  
12 13 $rc = $host->disconnect();
13 14 print("disconnect() exits with rc=" . $rc . "\n");
... ...
src/plugins/dbus3270/gobject.c
... ... @@ -109,7 +109,7 @@ void pw3270_dbus_set_host(PW3270Dbus *object, const gchar *uri, DBusGMethodInvoc
109 109  
110 110 g_message("Changing host to \"%s\" by remote request",uri);
111 111  
112   - dbus_g_method_return(context,lib3270_set_url(pw3270_dbus_get_session_handle(PW3270_DBUS(object)),uri) != NULL);
  112 + dbus_g_method_return(context,lib3270_set_url(pw3270_dbus_get_session_handle(PW3270_DBUS(object)),uri) == NULL);
113 113 }
114 114  
115 115 void pw3270_dbus_disconnect(PW3270Dbus *object, DBusGMethodInvocation *context)
... ...