Commit 1870de30b5fb1a656c403bccb31100a692f325c9
1 parent
8a1561e6
Exists in
master
and in
1 other branch
Refactoring hllapi module.
Showing
17 changed files
with
680 additions
and
1144 deletions
Show diff stats
Makefile.in
... | ... | @@ -27,6 +27,7 @@ |
27 | 27 | #---[ Library configuration ]------------------------------------------------------------ |
28 | 28 | |
29 | 29 | LIBNAME=libhllapi |
30 | +SONAME=@SONAME@ | |
30 | 31 | |
31 | 32 | SOURCES= \ |
32 | 33 | $(wildcard src/core/*.cc) \ |
... | ... | @@ -82,7 +83,9 @@ BINRLS=$(BINDIR)/Release |
82 | 83 | |
83 | 84 | DEPENDS= \ |
84 | 85 | Makefile \ |
85 | - src/include/*.h | |
86 | + src/include/*.h \ | |
87 | + src/include/lib3270/*.h | |
88 | + | |
86 | 89 | |
87 | 90 | CFLAGS= \ |
88 | 91 | @CFLAGS@ \ |
... | ... | @@ -98,7 +101,7 @@ LIBS= \ |
98 | 101 | #---[ Debug Rules ]---------------------------------------------------------------------- |
99 | 102 | |
100 | 103 | $(OBJDBG)/%.o: \ |
101 | - %.c \ | |
104 | + %.cc \ | |
102 | 105 | $(DEPENDS) |
103 | 106 | |
104 | 107 | @echo $< ... |
... | ... | @@ -121,7 +124,7 @@ $(OBJDBG)/%.o: \ |
121 | 124 | #---[ Release Rules ]-------------------------------------------------------------------- |
122 | 125 | |
123 | 126 | $(OBJRLS)/%.o: \ |
124 | - %.c \ | |
127 | + %.cc \ | |
125 | 128 | $(DEPENDS) |
126 | 129 | |
127 | 130 | @echo $< ... | ... | ... |
configure.ac
... | ... | @@ -120,6 +120,7 @@ dnl --------------------------------------------------------------------------- |
120 | 120 | |
121 | 121 | AC_PATH_TOOL([AR], [ar], [ar]) |
122 | 122 | AC_PATH_TOOL([WINDRES], [windres], [no]) |
123 | +AC_PATH_TOOL([VALGRIND], [valgrind], [no]) | |
123 | 124 | |
124 | 125 | PKG_CHECK_EXISTS |
125 | 126 | |
... | ... | @@ -166,6 +167,27 @@ case "$host" in |
166 | 167 | esac |
167 | 168 | |
168 | 169 | dnl --------------------------------------------------------------------------- |
170 | +dnl Check for C++ 2011 support | |
171 | +dnl --------------------------------------------------------------------------- | |
172 | +AC_DEFUN([AX_CHECK_COMPILE_FLAG], | |
173 | +[AC_PREREQ(2.59)dnl for _AC_LANG_PREFIX | |
174 | +AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl | |
175 | +AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ | |
176 | + ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS | |
177 | + _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" | |
178 | + AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], | |
179 | + [AS_VAR_SET(CACHEVAR,[yes])], | |
180 | + [AS_VAR_SET(CACHEVAR,[no])]) | |
181 | + _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) | |
182 | +AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes], | |
183 | + [m4_default([$2], :)], | |
184 | + [m4_default([$3], :)]) | |
185 | +AS_VAR_POPDEF([CACHEVAR])dnl | |
186 | +])dnl AX_CHECK_COMPILE_FLAGS | |
187 | + | |
188 | +AX_CHECK_COMPILE_FLAG([-std=gnu++11], [CFLAGS="$CFLAGS -std=gnu++11"]) | |
189 | + | |
190 | +dnl --------------------------------------------------------------------------- | |
169 | 191 | dnl Check for libintl |
170 | 192 | dnl --------------------------------------------------------------------------- |
171 | 193 | ... | ... |
hllapi.cbp
... | ... | @@ -32,22 +32,13 @@ |
32 | 32 | <Compiler> |
33 | 33 | <Add option="-Wall" /> |
34 | 34 | </Compiler> |
35 | - <Unit filename="src/daemon/linux/daemon.c"> | |
36 | - <Option compilerVar="CC" /> | |
37 | - </Unit> | |
38 | - <Unit filename="src/daemon/linux/iocallback.c"> | |
39 | - <Option compilerVar="CC" /> | |
40 | - </Unit> | |
41 | - <Unit filename="src/hllapi/calls.cc" /> | |
42 | - <Unit filename="src/hllapi/client.h" /> | |
43 | - <Unit filename="src/hllapi/hllapi.c"> | |
44 | - <Option compilerVar="CC" /> | |
45 | - </Unit> | |
46 | - <Unit filename="src/hllapi/remotectl.h" /> | |
35 | + <Unit filename="src/core/calls.cc" /> | |
36 | + <Unit filename="src/core/controller.cc" /> | |
37 | + <Unit filename="src/core/hllapi.cc" /> | |
38 | + <Unit filename="src/core/private.h" /> | |
39 | + <Unit filename="src/core/windows/resources.rc" /> | |
47 | 40 | <Unit filename="src/include/config.h" /> |
48 | - <Unit filename="src/include/dbus-glue.h" /> | |
49 | - <Unit filename="src/ipc3270c/linux/daemon.h" /> | |
50 | - <Unit filename="src/ipc3270c/linux/globals.h" /> | |
41 | + <Unit filename="src/include/lib3270/hllapi.h" /> | |
51 | 42 | <Unit filename="src/ipc3270c/linux/gobject.c"> |
52 | 43 | <Option compilerVar="CC" /> |
53 | 44 | </Unit> |
... | ... | @@ -57,20 +48,10 @@ |
57 | 48 | <Unit filename="src/ipc3270c/linux/misc.c"> |
58 | 49 | <Option compilerVar="CC" /> |
59 | 50 | </Unit> |
60 | - <Unit filename="src/ipc3270c/linux/service.h" /> | |
61 | 51 | <Unit filename="src/ipc3270c/windows/main.c"> |
62 | 52 | <Option compilerVar="CC" /> |
63 | 53 | </Unit> |
64 | - <Unit filename="src/ipc3270c/windows/private.h" /> | |
65 | - <Unit filename="src/ipc3270c/windows/resources.rc" /> | |
66 | - <Unit filename="src/plugin/windows/private.h" /> | |
67 | - <Unit filename="src/plugin/windows/resources.rc" /> | |
68 | - <Unit filename="src/testprograms/hllapi.c"> | |
69 | - <Option compilerVar="CC" /> | |
70 | - </Unit> | |
71 | - <Unit filename="src/testprograms/ipc3270c.c"> | |
72 | - <Option compilerVar="CC" /> | |
73 | - </Unit> | |
54 | + <Unit filename="src/testprogram/testprogram.cc" /> | |
74 | 55 | <Extensions> |
75 | 56 | <code_completion /> |
76 | 57 | <envvars /> | ... | ... |
pw3270dbus.xml
... | ... | @@ -1,251 +0,0 @@ |
1 | -<?xml version="1.0" encoding="UTF-8" ?> | |
2 | -<node name="/br/com/bb/pw3270"> | |
3 | - <interface name="br.com.bb.pw3270"> | |
4 | - <method name="getRevision"> | |
5 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
6 | - <arg type="s" name="revision" direction="out" /> | |
7 | - </method> | |
8 | - <method name="quit"> | |
9 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
10 | - <arg type="i" name="result" direction="out" /> | |
11 | - </method> | |
12 | - <method name="connect"> | |
13 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
14 | - <arg type="s" name="uri" direction="in" /> | |
15 | - <arg type="i" name="result" direction="out" /> | |
16 | - </method> | |
17 | - <method name="setURL"> | |
18 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
19 | - <arg type="s" name="uri" direction="in" /> | |
20 | - <arg type="i" name="result" direction="out" /> | |
21 | - </method> | |
22 | - <method name="getURL"> | |
23 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
24 | - <arg type="s" name="uri" direction="out" /> | |
25 | - </method> | |
26 | - <method name="disconnect"> | |
27 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
28 | - <arg type="i" name="result" direction="out" /> | |
29 | - </method> | |
30 | - <method name="getMessageID"> | |
31 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
32 | - <arg type="i" name="status" direction="out" /> | |
33 | - </method> | |
34 | - <method name="getConnectionState"> | |
35 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
36 | - <arg type="i" name="status" direction="out" /> | |
37 | - </method> | |
38 | - <method name="getSecureState"> | |
39 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
40 | - <arg type="i" name="status" direction="out" /> | |
41 | - </method> | |
42 | - <method name="getScreenContents"> | |
43 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
44 | - <arg type="s" name="contents" direction="out" /> | |
45 | - </method> | |
46 | - <method name="enter"> | |
47 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
48 | - <arg type="i" name="result" direction="out" /> | |
49 | - </method> | |
50 | - <method name="pfKey"> | |
51 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
52 | - <arg type="i" name="key" direction="in" /> | |
53 | - <arg type="i" name="result" direction="out" /> | |
54 | - </method> | |
55 | - <method name="paKey"> | |
56 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
57 | - <arg type="i" name="key" direction="in" /> | |
58 | - <arg type="i" name="result" direction="out" /> | |
59 | - </method> | |
60 | - <method name="input"> | |
61 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
62 | - <arg type="s" name="text" direction="in" /> | |
63 | - </method> | |
64 | - <method name="setTextAt"> | |
65 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
66 | - <arg type="i" name="row" direction="in" /> | |
67 | - <arg type="i" name="col" direction="in" /> | |
68 | - <arg type="s" name="text" direction="in" /> | |
69 | - <arg type="i" name="result" direction="out" /> | |
70 | - </method> | |
71 | - <method name="getTextAt"> | |
72 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
73 | - <arg type="i" name="row" direction="in" /> | |
74 | - <arg type="i" name="col" direction="in" /> | |
75 | - <arg type="i" name="len" direction="in" /> | |
76 | - <arg type="y" name="lf" direction="in" /> | |
77 | - <arg type="s" name="text" direction="out" /> | |
78 | - </method> | |
79 | - <method name="getText"> | |
80 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
81 | - <arg type="i" name="addr" direction="in" /> | |
82 | - <arg type="i" name="len" direction="in" /> | |
83 | - <arg type="y" name="lf" direction="in" /> | |
84 | - <arg type="s" name="text" direction="out" /> | |
85 | - </method> | |
86 | - <method name="setClipboard"> | |
87 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
88 | - <arg type="s" name="text" direction="in" /> | |
89 | - <arg type="i" name="result" direction="out" /> | |
90 | - </method> | |
91 | - <method name="getClipboard"> | |
92 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
93 | - <arg type="s" name="text" direction="out" /> | |
94 | - </method> | |
95 | - <method name="isConnected"> | |
96 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
97 | - <arg type="i" name="result" direction="out" /> | |
98 | - </method> | |
99 | - <method name="isReady"> | |
100 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
101 | - <arg type="i" name="result" direction="out" /> | |
102 | - </method> | |
103 | - <method name="inTN3270E"> | |
104 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
105 | - <arg type="i" name="result" direction="out" /> | |
106 | - </method> | |
107 | - <method name="waitForReady"> | |
108 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
109 | - <arg type="i" name="timeout" direction="in" /> | |
110 | - <arg type="i" name="result" direction="out" /> | |
111 | - </method> | |
112 | - <method name="setCursorAt"> | |
113 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
114 | - <arg type="i" name="row" direction="in" /> | |
115 | - <arg type="i" name="col" direction="in" /> | |
116 | - <arg type="i" name="result" direction="out" /> | |
117 | - </method> | |
118 | - <method name="setCursorAddress"> | |
119 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
120 | - <arg type="i" name="addr" direction="in" /> | |
121 | - <arg type="i" name="result" direction="out" /> | |
122 | - </method> | |
123 | - <method name="getCursorAddress"> | |
124 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
125 | - <arg type="i" name="addr" direction="out" /> | |
126 | - </method> | |
127 | - <method name="getScreenWidth"> | |
128 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
129 | - <arg type="i" name="width" direction="out" /> | |
130 | - </method> | |
131 | - <method name="getScreenHeight"> | |
132 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
133 | - <arg type="i" name="height" direction="out" /> | |
134 | - </method> | |
135 | - <method name="getScreenLength"> | |
136 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
137 | - <arg type="i" name="len" direction="out" /> | |
138 | - </method> | |
139 | - <method name="getNextUnprotected"> | |
140 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
141 | - <arg type="i" name="addr" direction="in" /> | |
142 | - <arg type="i" name="result" direction="out" /> | |
143 | - </method> | |
144 | - <method name="getIsProtected"> | |
145 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
146 | - <arg type="i" name="addr" direction="in" /> | |
147 | - <arg type="i" name="result" direction="out" /> | |
148 | - </method> | |
149 | - <method name="getIsProtectedAt"> | |
150 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
151 | - <arg type="i" name="row" direction="in" /> | |
152 | - <arg type="i" name="col" direction="in" /> | |
153 | - <arg type="i" name="result" direction="out" /> | |
154 | - </method> | |
155 | - <method name="setToggle"> | |
156 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
157 | - <arg type="i" name="id" direction="in" /> | |
158 | - <arg type="i" name="value" direction="in" /> | |
159 | - <arg type="i" name="result" direction="out" /> | |
160 | - </method> | |
161 | - <method name="cmpTextAt"> | |
162 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
163 | - <arg type="i" name="row" direction="in" /> | |
164 | - <arg type="i" name="col" direction="in" /> | |
165 | - <arg type="s" name="text" direction="in" /> | |
166 | - <arg type="y" name="lf" direction="in" /> | |
167 | - <arg type="i" name="result" direction="out" /> | |
168 | - </method> | |
169 | - <method name="getFieldStart"> | |
170 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
171 | - <arg type="i" name="addr" direction="in" /> | |
172 | - <arg type="i" name="result" direction="out" /> | |
173 | - </method> | |
174 | - <method name="getFieldLength"> | |
175 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
176 | - <arg type="i" name="addr" direction="in" /> | |
177 | - <arg type="i" name="result" direction="out" /> | |
178 | - </method> | |
179 | - <method name="setScript"> | |
180 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
181 | - <arg type="s" name="id" direction="in" /> | |
182 | - <arg type="i" name="status" direction="in" /> | |
183 | - <arg type="i" name="result" direction="out" /> | |
184 | - </method> | |
185 | - <method name="showPopup"> | |
186 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
187 | - <arg type="i" name="id" direction="in" /> | |
188 | - <arg type="s" name="title" direction="in" /> | |
189 | - <arg type="s" name="msg" direction="in" /> | |
190 | - <arg type="s" name="text" direction="in" /> | |
191 | - </method> | |
192 | - <method name="getHostCharset"> | |
193 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
194 | - <arg type="s" name="charset" direction="out" /> | |
195 | - </method> | |
196 | - <method name="getDisplayCharset"> | |
197 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
198 | - <arg type="s" name="charset" direction="out" /> | |
199 | - </method> | |
200 | - <method name="setHostCharset"> | |
201 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
202 | - <arg type="s" name="charset" direction="in" /> | |
203 | - <arg type="i" name="result" direction="out" /> | |
204 | - </method> | |
205 | - <method name="eraseEof"> | |
206 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
207 | - <arg type="i" name="result" direction="out" /> | |
208 | - </method> | |
209 | - <method name="print"> | |
210 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
211 | - <arg type="i" name="result" direction="out" /> | |
212 | - </method> | |
213 | - <method name="ebc2asc"> | |
214 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
215 | - <arg type="s" name="from" direction="in" /> | |
216 | - <arg type="s" name="to" direction="out" /> | |
217 | - </method> | |
218 | - <method name="asc2ebc"> | |
219 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
220 | - <arg type="s" name="from" direction="in" /> | |
221 | - <arg type="s" name="to" direction="out" /> | |
222 | - </method> | |
223 | - | |
224 | - <method name="action"> | |
225 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
226 | - <arg type="s" name="name" direction="in" /> | |
227 | - <arg type="i" name="result" direction="out" /> | |
228 | - </method> | |
229 | - | |
230 | - <method name="filetransfer"> | |
231 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
232 | - <arg type="s" name="local" direction="in" /> | |
233 | - <arg type="s" name="remote" direction="in" /> | |
234 | - <arg type="i" name="flags" direction="in" /> | |
235 | - <arg type="i" name="lrecl" direction="in" /> | |
236 | - <arg type="i" name="blksize" direction="in" /> | |
237 | - <arg type="i" name="primspace" direction="in" /> | |
238 | - <arg type="i" name="secspace" direction="in" /> | |
239 | - <arg type="i" name="dft" direction="in" /> | |
240 | - <arg type="i" name="result" direction="out" /> | |
241 | - </method> | |
242 | - | |
243 | - <method name="setUnlockDelay"> | |
244 | - <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | |
245 | - <arg type="i" name="value" direction="in" /> | |
246 | - <arg type="i" name="result" direction="out" /> | |
247 | - </method> | |
248 | - | |
249 | - </interface> | |
250 | - | |
251 | -</node> |
src/core/calls.cc
... | ... | @@ -18,7 +18,7 @@ |
18 | 18 | * programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple |
19 | 19 | * Place, Suite 330, Boston, MA, 02111-1307, USA |
20 | 20 | * |
21 | - * Este programa está nomeado como calls.cc e possui - linhas de código. | |
21 | + * Este programa está nomeado como - e possui - linhas de código. | |
22 | 22 | * |
23 | 23 | * Contatos: |
24 | 24 | * |
... | ... | @@ -27,145 +27,136 @@ |
27 | 27 | * |
28 | 28 | */ |
29 | 29 | |
30 | - #include <exception> | |
31 | - #include <cstdlib> | |
32 | - #include <cstring> | |
33 | - | |
34 | - #include <pw3270/hllapi.h> | |
35 | - #include <pw3270/pw3270cpp.h> | |
36 | - #include "client.h" | |
37 | - | |
38 | - using namespace std; | |
39 | - using namespace PW3270_NAMESPACE; | |
40 | - | |
41 | -/*--[ Globals ]--------------------------------------------------------------------------------------*/ | |
42 | - | |
43 | - static session * hSession = NULL; | |
44 | - static time_t hllapi_timeout = 120; | |
30 | + #include "private.h" | |
45 | 31 | |
46 | 32 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
47 | 33 | |
48 | - HLLAPI_API_CALL hllapi_init(LPSTR mode) | |
34 | + HLLAPI_API_CALL hllapi_get_revision(void) | |
49 | 35 | { |
50 | - trace("%s(%s)",__FUNCTION__,mode); | |
36 | + try { | |
51 | 37 | |
52 | - try | |
53 | - { | |
54 | - if(hSession) | |
55 | - delete hSession; | |
56 | - hSession = session::create(mode); | |
38 | + return atoi(getSession().getRevision().c_str()); | |
57 | 39 | |
58 | - if(!hSession) { | |
59 | - return HLLAPI_STATUS_UNAVAILABLE; | |
60 | - } | |
40 | + } catch(std::exception &e) { | |
61 | 41 | |
62 | - hSession->set_display_charset(); | |
42 | + hllapi_lasterror = e.what(); | |
63 | 43 | |
64 | - trace("hSession=%p",hSession); | |
65 | - } | |
66 | - catch(std::exception &e) | |
67 | - { | |
68 | - trace("Error \"%s\"",e.what()); | |
69 | - return HLLAPI_STATUS_SYSTEM_ERROR; | |
70 | 44 | } |
71 | 45 | |
72 | - return HLLAPI_STATUS_SUCCESS; | |
73 | - | |
46 | + return (DWORD) -1; | |
74 | 47 | } |
75 | 48 | |
76 | - HLLAPI_API_CALL hllapi_deinit(void) | |
49 | + HLLAPI_API_CALL hllapi_connect(const LPSTR uri, WORD wait) | |
77 | 50 | { |
78 | - trace("%s()",__FUNCTION__); | |
51 | + try { | |
79 | 52 | |
80 | - try | |
81 | - { | |
82 | - if(hSession) | |
83 | - { | |
84 | - delete hSession; | |
85 | - hSession = NULL; | |
86 | - } | |
87 | - } | |
88 | - catch(std::exception &e) | |
89 | - { | |
53 | + getSession().connect((const char *) uri, wait); | |
54 | + | |
55 | + } catch(std::exception &e) { | |
56 | + | |
57 | + hllapi_lasterror = e.what(); | |
90 | 58 | return HLLAPI_STATUS_SYSTEM_ERROR; |
91 | 59 | } |
92 | 60 | |
93 | - return HLLAPI_STATUS_SUCCESS; | |
61 | + return hllapi_get_state(); | |
62 | + | |
94 | 63 | } |
95 | 64 | |
96 | - HLLAPI_API_CALL hllapi_get_revision(void) | |
97 | - { | |
98 | - try | |
99 | - { | |
100 | - return atoi(session::get_default()->get_revision().c_str()); | |
101 | - } | |
102 | - catch(std::exception &e) | |
103 | - { | |
104 | - return -1; | |
65 | + HLLAPI_API_CALL hllapi_is_connected(void) { | |
66 | + | |
67 | + try { | |
68 | + | |
69 | + return getSession().isConnected(); | |
70 | + | |
71 | + } catch(std::exception &e) { | |
72 | + | |
73 | + hllapi_lasterror = e.what(); | |
105 | 74 | } |
106 | - return (DWORD) -1; | |
75 | + | |
76 | + return 0; | |
107 | 77 | } |
108 | 78 | |
109 | - HLLAPI_API_CALL hllapi_connect(LPSTR uri, WORD wait) | |
110 | - { | |
111 | - try | |
112 | - { | |
113 | - session::get_default()->connect(uri,hllapi_timeout); | |
114 | - } | |
115 | - catch(std::exception &e) | |
116 | - { | |
79 | + HLLAPI_API_CALL hllapi_get_state(void) { | |
80 | + | |
81 | + try { | |
82 | + | |
83 | + switch(hllapi_get_message_id()) { | |
84 | + case LIB3270_MESSAGE_NONE: // 0 - No message | |
85 | + return HLLAPI_STATUS_SUCCESS; // keyboard was unlocked and ready for input. | |
86 | + | |
87 | + case LIB3270_MESSAGE_DISCONNECTED: // 4 - Disconnected from host | |
88 | + return HLLAPI_STATUS_DISCONNECTED; // Your application program was not connected to a valid session. | |
89 | + | |
90 | + case LIB3270_MESSAGE_MINUS: | |
91 | + case LIB3270_MESSAGE_PROTECTED: | |
92 | + case LIB3270_MESSAGE_NUMERIC: | |
93 | + case LIB3270_MESSAGE_OVERFLOW: | |
94 | + case LIB3270_MESSAGE_INHIBIT: | |
95 | + case LIB3270_MESSAGE_KYBDLOCK: | |
96 | + return HLLAPI_STATUS_KEYBOARD_LOCKED; // keyboard is locked. | |
97 | + | |
98 | + case LIB3270_MESSAGE_SYSWAIT: | |
99 | + case LIB3270_MESSAGE_TWAIT: | |
100 | + case LIB3270_MESSAGE_AWAITING_FIRST: | |
101 | + case LIB3270_MESSAGE_X: | |
102 | + case LIB3270_MESSAGE_RESOLVING: | |
103 | + case LIB3270_MESSAGE_CONNECTING: | |
104 | + return HLLAPI_STATUS_WAITING; // time-out while still busy (in XCLOCK or XSYSTEM in X) for the 3270 terminal emulation. | |
105 | + } | |
106 | + | |
107 | + } catch(std::exception &e) { | |
108 | + | |
109 | + hllapi_lasterror = e.what(); | |
117 | 110 | return HLLAPI_STATUS_SYSTEM_ERROR; |
118 | 111 | } |
119 | 112 | |
120 | - return hllapi_get_state(); | |
113 | + hllapi_lasterror = "Unexpected message id"; | |
114 | + return HLLAPI_STATUS_SYSTEM_ERROR; | |
121 | 115 | } |
122 | 116 | |
123 | - HLLAPI_API_CALL hllapi_is_connected(void) | |
124 | - { | |
125 | - if(!session::has_default()) | |
126 | - { | |
127 | - return 0; | |
128 | - } | |
117 | + HLLAPI_API_CALL hllapi_get_message_id(void) { | |
129 | 118 | |
130 | - return session::get_default()->is_connected(); | |
131 | - } | |
119 | + try { | |
132 | 120 | |
133 | - HLLAPI_API_CALL hllapi_get_state(void) | |
134 | - { | |
135 | - switch(hllapi_get_message_id()) | |
136 | - { | |
137 | - case LIB3270_MESSAGE_NONE: // 0 - No message | |
138 | - return HLLAPI_STATUS_SUCCESS; // keyboard was unlocked and ready for input. | |
121 | + TN3270::Host & session = getSession(); | |
139 | 122 | |
140 | - case LIB3270_MESSAGE_DISCONNECTED: // 4 - Disconnected from host | |
141 | - return HLLAPI_STATUS_DISCONNECTED; // Your application program was not connected to a valid session. | |
123 | + if(!session.isConnected()) { | |
124 | + hllapi_lasterror = strerror(ENOTCONN); | |
125 | + return HLLAPI_STATUS_DISCONNECTED; | |
126 | + } | |
142 | 127 | |
143 | - case LIB3270_MESSAGE_MINUS: | |
144 | - case LIB3270_MESSAGE_PROTECTED: | |
145 | - case LIB3270_MESSAGE_NUMERIC: | |
146 | - case LIB3270_MESSAGE_OVERFLOW: | |
147 | - case LIB3270_MESSAGE_INHIBIT: | |
148 | - case LIB3270_MESSAGE_KYBDLOCK: | |
149 | - return HLLAPI_STATUS_KEYBOARD_LOCKED; // keyboard is locked. | |
128 | + return (DWORD) session.getProgramMessage(); | |
129 | + | |
130 | + } catch(std::exception &e) { | |
131 | + | |
132 | + hllapi_lasterror = e.what(); | |
133 | + return HLLAPI_STATUS_SYSTEM_ERROR; | |
150 | 134 | |
151 | - case LIB3270_MESSAGE_SYSWAIT: | |
152 | - case LIB3270_MESSAGE_TWAIT: | |
153 | - case LIB3270_MESSAGE_AWAITING_FIRST: | |
154 | - case LIB3270_MESSAGE_X: | |
155 | - case LIB3270_MESSAGE_RESOLVING: | |
156 | - case LIB3270_MESSAGE_CONNECTING: | |
157 | - return HLLAPI_STATUS_WAITING; // time-out while still busy (in XCLOCK or XSYSTEM in X) for the 3270 terminal emulation. | |
158 | 135 | } |
159 | 136 | |
160 | - return HLLAPI_STATUS_SYSTEM_ERROR; | |
137 | + return 0; | |
138 | + | |
161 | 139 | } |
162 | 140 | |
163 | - HLLAPI_API_CALL hllapi_disconnect(void) | |
164 | - { | |
165 | - session::get_default()->disconnect(); | |
141 | + HLLAPI_API_CALL hllapi_disconnect(void) { | |
142 | + | |
143 | + try { | |
144 | + | |
145 | + getSession().disconnect(); | |
146 | + | |
147 | + } catch(std::exception &e) { | |
148 | + | |
149 | + hllapi_lasterror = e.what(); | |
150 | + return HLLAPI_STATUS_SYSTEM_ERROR; | |
151 | + | |
152 | + } | |
153 | + | |
166 | 154 | return HLLAPI_STATUS_SUCCESS; |
167 | 155 | } |
168 | 156 | |
157 | + | |
158 | + /* | |
159 | + | |
169 | 160 | HLLAPI_API_CALL hllapi_wait_for_ready(WORD seconds) |
170 | 161 | { |
171 | 162 | if(!hllapi_is_connected()) |
... | ... | @@ -186,14 +177,6 @@ |
186 | 177 | return hllapi_get_state(); |
187 | 178 | } |
188 | 179 | |
189 | - HLLAPI_API_CALL hllapi_get_message_id(void) | |
190 | - { | |
191 | - if(!hllapi_is_connected()) | |
192 | - return HLLAPI_STATUS_DISCONNECTED; | |
193 | - | |
194 | - return session::get_default()->get_program_message(); | |
195 | - } | |
196 | - | |
197 | 180 | HLLAPI_API_CALL hllapi_get_screen_at(WORD row, WORD col, LPSTR buffer) |
198 | 181 | { |
199 | 182 | if(!hllapi_is_connected()) |
... | ... | @@ -765,44 +748,40 @@ |
765 | 748 | break; |
766 | 749 | |
767 | 750 | |
768 | -/* | |
769 | - | |
770 | -Global Const PC_TEST = "@A@C" | |
771 | -Global Const PC_WORDDELETE = "@A@D" | |
772 | -Global Const PC_FIELDEXIT = "@A@E" | |
773 | -Global Const PC_ERASEINPUT = "@A@F" | |
774 | -Global Const PC_SYSTEMREQUEST = "@A@H" | |
775 | -Global Const PC_INSERTTOGGLE = "@A@I" | |
776 | -Global Const PC_CURSORSELECT = "@A@J" | |
777 | -Global Const PC_CURSLEFTFAST = "@A@L" | |
778 | -Global Const PC_GETCURSOR = "@A@N" | |
779 | -Global Const PC_LOCATECURSOR = "@A@O" | |
780 | -Global Const PC_ATTENTION = "@A@Q" | |
781 | -Global Const PC_DEVICECANCEL = "@A@R" | |
782 | -Global Const PC_PRINTPS = "@A@T" | |
783 | -Global Const PC_CURSUPFAST = "@A@U" | |
784 | -Global Const PC_CURSDOWNFAST = "@A@V" | |
785 | -Global Const PC_HEX = "@A@X" | |
786 | -Global Const PC_FUNCTIONKEY = "@A@Y" | |
787 | -Global Const PC_CURSRIGHTFAST = "@A@Z" | |
788 | - | |
789 | -Global Const PC_REVERSEVIDEO = "@A@9" | |
790 | -Global Const PC_UNDERSCORE = "@A@b" | |
791 | -Global Const PC_BLINK = "@A@c" | |
792 | -Global Const PC_RED = "@A@d" | |
793 | -Global Const PC_PINK = "@A@e" | |
794 | -Global Const PC_GREEN = "@A@f" | |
795 | -Global Const PC_YELLOW = "@A@g" | |
796 | -Global Const PC_BLUE = "@A@h" | |
797 | -Global Const PC_TURQOISE = "@A@i" | |
798 | -Global Const PC_WHITE = "@A@j" | |
799 | -Global Const PC_RSTHOSTCOLORS = "@A@l" | |
800 | -Global Const PC_PRINTPC = "@A@t" | |
801 | - | |
802 | -Global Const PC_FIELDMINUS = "@A@-" | |
803 | -Global Const PC_FIELDPLUS = "@A@+" | |
804 | - | |
805 | -*/ | |
751 | +// Global Const PC_TEST = "@A@C" | |
752 | +// Global Const PC_WORDDELETE = "@A@D" | |
753 | +// Global Const PC_FIELDEXIT = "@A@E" | |
754 | +// Global Const PC_ERASEINPUT = "@A@F" | |
755 | +// Global Const PC_SYSTEMREQUEST = "@A@H" | |
756 | +// Global Const PC_INSERTTOGGLE = "@A@I" | |
757 | +// Global Const PC_CURSORSELECT = "@A@J" | |
758 | +// Global Const PC_CURSLEFTFAST = "@A@L" | |
759 | +// Global Const PC_GETCURSOR = "@A@N" | |
760 | +// Global Const PC_LOCATECURSOR = "@A@O" | |
761 | +// Global Const PC_ATTENTION = "@A@Q" | |
762 | +// Global Const PC_DEVICECANCEL = "@A@R" | |
763 | +// Global Const PC_PRINTPS = "@A@T" | |
764 | +// Global Const PC_CURSUPFAST = "@A@U" | |
765 | +// Global Const PC_CURSDOWNFAST = "@A@V" | |
766 | +// Global Const PC_HEX = "@A@X" | |
767 | +// Global Const PC_FUNCTIONKEY = "@A@Y" | |
768 | +// Global Const PC_CURSRIGHTFAST = "@A@Z" | |
769 | + | |
770 | +// Global Const PC_REVERSEVIDEO = "@A@9" | |
771 | +// Global Const PC_UNDERSCORE = "@A@b" | |
772 | +// Global Const PC_BLINK = "@A@c" | |
773 | +// Global Const PC_RED = "@A@d" | |
774 | +// Global Const PC_PINK = "@A@e" | |
775 | +// Global Const PC_GREEN = "@A@f" | |
776 | +// Global Const PC_YELLOW = "@A@g" | |
777 | +// Global Const PC_BLUE = "@A@h" | |
778 | +// Global Const PC_TURQOISE = "@A@i" | |
779 | +// Global Const PC_WHITE = "@A@j" | |
780 | +// Global Const PC_RSTHOSTCOLORS = "@A@l" | |
781 | +// Global Const PC_PRINTPC = "@A@t" | |
782 | + | |
783 | +// Global Const PC_FIELDMINUS = "@A@-" | |
784 | +// Global Const PC_FIELDPLUS = "@A@+" | |
806 | 785 | |
807 | 786 | } |
808 | 787 | |
... | ... | @@ -824,3 +803,4 @@ Global Const PC_FIELDPLUS = "@A@+" |
824 | 803 | return rc; |
825 | 804 | } |
826 | 805 | |
806 | +*/ | ... | ... |
... | ... | @@ -0,0 +1,97 @@ |
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 | + * Este programa está nomeado como - 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 | + */ | |
29 | + | |
30 | + #include "private.h" | |
31 | + | |
32 | +/*--[ Globals ]--------------------------------------------------------------------------------------*/ | |
33 | + | |
34 | + static TN3270::Host * hllapi_host = nullptr; | |
35 | + static time_t hllapi_timeout = 120; | |
36 | + std::string hllapi_lasterror = ""; | |
37 | + | |
38 | +/*--[ Implement ]------------------------------------------------------------------------------------*/ | |
39 | + | |
40 | + HLLAPI_API_CALL hllapi_init(LPSTR id) | |
41 | + { | |
42 | + trace("%s(%s)",__FUNCTION__,id); | |
43 | + | |
44 | + try | |
45 | + { | |
46 | + if(hllapi_host) | |
47 | + delete hllapi_host; | |
48 | + | |
49 | + hllapi_host = new TN3270::Host(*id ? id : nullptr,nullptr,hllapi_timeout); | |
50 | + | |
51 | + } | |
52 | + catch(std::exception &e) | |
53 | + { | |
54 | + hllapi_lasterror = e.what(); | |
55 | + return HLLAPI_STATUS_SYSTEM_ERROR; | |
56 | + } | |
57 | + | |
58 | + return HLLAPI_STATUS_SUCCESS; | |
59 | + | |
60 | + } | |
61 | + | |
62 | + HLLAPI_API_CALL hllapi_deinit(void) | |
63 | + { | |
64 | + trace("%s()",__FUNCTION__); | |
65 | + | |
66 | + try | |
67 | + { | |
68 | + if(hllapi_host) | |
69 | + { | |
70 | + delete hllapi_host; | |
71 | + hllapi_host = NULL; | |
72 | + } | |
73 | + | |
74 | + } | |
75 | + catch(std::exception &e) | |
76 | + { | |
77 | + hllapi_lasterror = e.what(); | |
78 | + return HLLAPI_STATUS_SYSTEM_ERROR; | |
79 | + } | |
80 | + | |
81 | + return HLLAPI_STATUS_SUCCESS; | |
82 | + } | |
83 | + | |
84 | + TN3270::Host & getSession() { | |
85 | + | |
86 | + if(!hllapi_host) { | |
87 | + throw runtime_error("Not initialized"); | |
88 | + } | |
89 | + | |
90 | + return *hllapi_host; | |
91 | + | |
92 | + } | |
93 | + | |
94 | + HLLAPI_API_CSTR hllapi_get_last_error() { | |
95 | + return hllapi_lasterror.c_str(); | |
96 | + } | |
97 | + | ... | ... |
src/core/environ.bat
src/core/hllapi.cbp
... | ... | @@ -1,89 +0,0 @@ |
1 | -<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> | |
2 | -<CodeBlocks_project_file> | |
3 | - <FileVersion major="1" minor="6" /> | |
4 | - <Project> | |
5 | - <Option title="pw3270 HLLAPI" /> | |
6 | - <Option makefile_is_custom="1" /> | |
7 | - <Option pch_mode="2" /> | |
8 | - <Option compiler="gcc" /> | |
9 | - <Build> | |
10 | - <Target title="Debug"> | |
11 | - <Option output=".bin/Debug/pw3270 HLLAPI" prefix_auto="1" extension_auto="1" /> | |
12 | - <Option object_output=".obj/Debug/" /> | |
13 | - <Option type="1" /> | |
14 | - <Option compiler="gcc" /> | |
15 | - <Compiler> | |
16 | - <Add option="-g" /> | |
17 | - </Compiler> | |
18 | - <MakeCommands> | |
19 | - <Build command="$make LIB3270_MODE=Debug -f $makefile $target" /> | |
20 | - <CompileFile command="$make -f $makefile $file" /> | |
21 | - <Clean command="$make -f $makefile clean$target" /> | |
22 | - <DistClean command="$make -f $makefile distclean$target" /> | |
23 | - <AskRebuildNeeded command="$make -q -f $makefile $target" /> | |
24 | - <SilentBuild command="$make LIB3270_MODE=Debug -f $makefile $target > $(CMD_NULL)" /> | |
25 | - </MakeCommands> | |
26 | - </Target> | |
27 | - <Target title="Release"> | |
28 | - <Option output=".bin/Release/pw3270 HLLAPI" prefix_auto="1" extension_auto="1" /> | |
29 | - <Option object_output=".obj/Release/" /> | |
30 | - <Option type="1" /> | |
31 | - <Option compiler="gcc" /> | |
32 | - <Compiler> | |
33 | - <Add option="-O2" /> | |
34 | - </Compiler> | |
35 | - <Linker> | |
36 | - <Add option="-s" /> | |
37 | - </Linker> | |
38 | - </Target> | |
39 | - <Target title="test"> | |
40 | - <Option output=".bin/Debug/test" prefix_auto="1" extension_auto="1" /> | |
41 | - <Option object_output=".obj/Debug/" /> | |
42 | - <Option type="1" /> | |
43 | - <Option compiler="gcc" /> | |
44 | - <Compiler> | |
45 | - <Add option="-g" /> | |
46 | - </Compiler> | |
47 | - <Environment> | |
48 | - <Variable name="LIB3270_CFLAGS" value='"-I../../../src/include"' /> | |
49 | - <Variable name="LIB3270_LIBS" value='"-L../../../.bin/Debug -l3270"' /> | |
50 | - <Variable name="PW3270_LIBS" value='"-L../../../.bin/Debug -lpw3270 -l3270"' /> | |
51 | - </Environment> | |
52 | - <MakeCommands> | |
53 | - <Build command="$make LIB3270_MODE=Debug -f $makefile $target" /> | |
54 | - <CompileFile command="$make -f $makefile $file" /> | |
55 | - <Clean command="$make -f $makefile clean$target" /> | |
56 | - <DistClean command="$make -f $makefile distclean$target" /> | |
57 | - <AskRebuildNeeded command="$make -q -f $makefile $target" /> | |
58 | - <SilentBuild command="$make LIB3270_MODE=Debug -f $makefile $target > $(CMD_NULL)" /> | |
59 | - </MakeCommands> | |
60 | - </Target> | |
61 | - </Build> | |
62 | - <Compiler> | |
63 | - <Add option="-Wall" /> | |
64 | - </Compiler> | |
65 | - <Unit filename="../../include/lib3270.h" /> | |
66 | - <Unit filename="../../include/pw3270/hllapi.h" /> | |
67 | - <Unit filename="../../include/pw3270cpp.h" /> | |
68 | - <Unit filename="Makefile.in" /> | |
69 | - <Unit filename="calls.cc" /> | |
70 | - <Unit filename="client.h" /> | |
71 | - <Unit filename="hllapi.c"> | |
72 | - <Option compilerVar="CC" /> | |
73 | - </Unit> | |
74 | - <Unit filename="pluginmain.c"> | |
75 | - <Option compilerVar="CC" /> | |
76 | - </Unit> | |
77 | - <Unit filename="remotectl.h" /> | |
78 | - <Unit filename="server.h" /> | |
79 | - <Unit filename="testprogram.c"> | |
80 | - <Option compilerVar="CC" /> | |
81 | - </Unit> | |
82 | - <Extensions> | |
83 | - <code_completion /> | |
84 | - <envvars /> | |
85 | - <debugger /> | |
86 | - <lib_finder disable_auto="1" /> | |
87 | - </Extensions> | |
88 | - </Project> | |
89 | -</CodeBlocks_project_file> |
src/core/hllapi.cc
... | ... | @@ -27,15 +27,7 @@ |
27 | 27 | * |
28 | 28 | */ |
29 | 29 | |
30 | - #include <lib3270.h> | |
31 | - #include <malloc.h> | |
32 | - #include <string.h> | |
33 | - #include <errno.h> | |
34 | - #include <pw3270/hllapi.h> | |
35 | - #include <stdio.h> | |
36 | - #include <time.h> | |
37 | - #include <lib3270/log.h> | |
38 | - #include "client.h" | |
30 | + #include <lib3270/hllapi.h> | |
39 | 31 | |
40 | 32 | /*--[ Prototipes ]-----------------------------------------------------------------------------------*/ |
41 | 33 | |
... | ... | @@ -92,6 +84,7 @@ |
92 | 84 | |
93 | 85 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
94 | 86 | |
87 | +/* | |
95 | 88 | HLLAPI_API_CALL hllapi(const LPWORD func, LPSTR buffer, LPWORD length, LPWORD rc) |
96 | 89 | { |
97 | 90 | unsigned int f; |
... | ... | @@ -200,27 +193,27 @@ static int input_string(char *buffer, unsigned short *length, unsigned short *rc |
200 | 193 | |
201 | 194 | static int search_ps(char *buffer, unsigned short *length, unsigned short *ps) |
202 | 195 | { |
203 | - /* | |
204 | - * Data String Target string for search. | |
205 | - * Length Length of the target data string. Overridden in EOT mode. | |
206 | - * PS Position Position within the host presentation space where the search is to begin (SRCHFRWD option) or to end | |
207 | - * (SRCHBKWD option). Overridden in SRCHALL (default) mode. | |
208 | - * | |
209 | - * Return in *ps: | |
210 | - * | |
211 | - * = 0 The string was not found. | |
212 | - * > 0 The string was found at the indicated host presentation space position. | |
213 | - * | |
214 | - * Return code: | |
215 | - * | |
216 | - * 0 The Search Presentation Space function was successful. | |
217 | - * 1 Your program is not connected to a host session. | |
218 | - * 2 An error was made in specifying parameters. | |
219 | - * 7 The host presentation space position is not valid. | |
220 | - * 9 A system error was encountered. | |
221 | - * 24 The search string was not found. | |
222 | - * | |
223 | - */ | |
196 | + // | |
197 | + // Data String Target string for search. | |
198 | + // Length Length of the target data string. Overridden in EOT mode. | |
199 | + // PS Position Position within the host presentation space where the search is to begin (SRCHFRWD option) or to end | |
200 | + // (SRCHBKWD option). Overridden in SRCHALL (default) mode. | |
201 | + // | |
202 | + // Return in *ps: | |
203 | + // | |
204 | + // = 0 The string was not found. | |
205 | + // > 0 The string was found at the indicated host presentation space position. | |
206 | + // | |
207 | + // Return code: | |
208 | + // | |
209 | + // 0 The Search Presentation Space function was successful. | |
210 | + // 1 Your program is not connected to a host session. | |
211 | + // 2 An error was made in specifying parameters. | |
212 | + // 7 The host presentation space position is not valid. | |
213 | + // 9 A system error was encountered. | |
214 | + // 24 The search string was not found. | |
215 | + // | |
216 | + // | |
224 | 217 | size_t szBuffer = strlen(buffer); |
225 | 218 | char * text; |
226 | 219 | int rc = HLLAPI_STATUS_SYSTEM_ERROR; |
... | ... | @@ -256,22 +249,22 @@ static int search_ps(char *buffer, unsigned short *length, unsigned short *ps) |
256 | 249 | |
257 | 250 | static int copy_ps(char *buffer, unsigned short *length, unsigned short *rc) |
258 | 251 | { |
259 | - /* | |
260 | - * Data String Preallocated target string the size of your host presentation space. This can vary depending on how your host presentation space is configured. When the Set Session Parameters (9) function with the EAB option is issued, the length of the data string must be at least twice the length of the presentation space. | |
261 | - * DBCS Only: When the EAD option is specified, the length of the data string must be at least three times the length of the presentation space. When both the EAB and EAD options are specified, the length of the data string must be at least four times the length of the presentation space. | |
262 | - * | |
263 | - * Length NA (the length of the host presentation space is implied). | |
264 | - * PS Position NA. | |
265 | - * | |
266 | - * Return values: | |
267 | - * | |
268 | - * 0 The host presentation space contents were copied to the application program. The target presentation space was active, and the keyboard was unlocked. | |
269 | - * 1 Your program is not connected to a host session. | |
270 | - * 4 The host presentation space contents were copied. The connected host presentation space was waiting for host response. | |
271 | - * 5 The host presentation space was copied. The keyboard was locked. | |
272 | - * 9 A system error was encountered. | |
273 | - * | |
274 | - */ | |
252 | + // | |
253 | + // Data String Preallocated target string the size of your host presentation space. This can vary depending on how your host presentation space is configured. When the Set Session Parameters (9) function with the EAB option is issued, the length of the data string must be at least twice the length of the presentation space. | |
254 | + // DBCS Only: When the EAD option is specified, the length of the data string must be at least three times the length of the presentation space. When both the EAB and EAD options are specified, the length of the data string must be at least four times the length of the presentation space. | |
255 | + // | |
256 | + // Length NA (the length of the host presentation space is implied). | |
257 | + // PS Position NA. | |
258 | + // | |
259 | + // Return values: | |
260 | + // | |
261 | + // 0 The host presentation space contents were copied to the application program. The target presentation space was active, and the keyboard was unlocked. | |
262 | + // 1 Your program is not connected to a host session. | |
263 | + // 4 The host presentation space contents were copied. The connected host presentation space was waiting for host response. | |
264 | + // 5 The host presentation space was copied. The keyboard was locked. | |
265 | + // 9 A system error was encountered. | |
266 | + // | |
267 | + // | |
275 | 268 | size_t szBuffer = strlen(buffer); |
276 | 269 | char * text; |
277 | 270 | |
... | ... | @@ -292,40 +285,23 @@ static int copy_ps(char *buffer, unsigned short *length, unsigned short *rc) |
292 | 285 | |
293 | 286 | static int wait_system(char *buffer, unsigned short *length, unsigned short *rc) |
294 | 287 | { |
295 | - /* | |
296 | - * Checks the status of the host-connected presentation space. If the session is | |
297 | - * waiting for a host response (indicated by XCLOCK (X []) or XSYSTEM), the Wait | |
298 | - * function causes HLLAPI to wait up to 1 minute to see if the condition clears. | |
299 | - * | |
300 | - */ | |
301 | - | |
302 | - /* | |
303 | - * Return Code Definition | |
304 | - * | |
305 | - * HLLAPI_STATUS_SUCCESS 0 The keyboard is unlocked and ready for input. | |
306 | - * HLLAPI_STATUS_DISCONNECTED 1 Your application program is not connected to a valid session. | |
307 | - * HLLAPI_STATUS_TIMEOUT 4 Timeout while still in XCLOCK (X []) or XSYSTEM. | |
308 | - * HLLAPI_STATUS_KEYBOARD_LOCKED 5 The keyboard is locked. | |
309 | - * HLLAPI_STATUS_SYSTEM_ERROR 9 A system error was encountered. | |
310 | - * | |
311 | - */ | |
312 | - | |
313 | - /* | |
314 | - time_t end = time(0) + 60; | |
315 | - | |
316 | - while(time(0) < end) | |
317 | - { | |
318 | - int state = hllapi_get_state(); | |
319 | - | |
320 | - if(state != HLLAPI_STATUS_WAITING) | |
321 | - return state; | |
322 | - | |
323 | - hllapi_wait(1); | |
324 | - | |
325 | - } | |
326 | - | |
327 | - return HLLAPI_STATUS_TIMEOUT; | |
328 | - */ | |
288 | + // | |
289 | + // Checks the status of the host-connected presentation space. If the session is | |
290 | + // waiting for a host response (indicated by XCLOCK (X []) or XSYSTEM), the Wait | |
291 | + // function causes HLLAPI to wait up to 1 minute to see if the condition clears. | |
292 | + // | |
293 | + // | |
294 | + | |
295 | + // | |
296 | + // Return Code Definition | |
297 | + // | |
298 | + // HLLAPI_STATUS_SUCCESS 0 The keyboard is unlocked and ready for input. | |
299 | + // HLLAPI_STATUS_DISCONNECTED 1 Your application program is not connected to a valid session. | |
300 | + // HLLAPI_STATUS_TIMEOUT 4 Timeout while still in XCLOCK (X []) or XSYSTEM. | |
301 | + // HLLAPI_STATUS_KEYBOARD_LOCKED 5 The keyboard is locked. | |
302 | + // HLLAPI_STATUS_SYSTEM_ERROR 9 A system error was encountered. | |
303 | + // | |
304 | + // | |
329 | 305 | |
330 | 306 | int state = hllapi_wait_for_ready(60); |
331 | 307 | return (state == HLLAPI_STATUS_WAITING ? HLLAPI_STATUS_TIMEOUT : state); |
... | ... | @@ -334,24 +310,24 @@ static int wait_system(char *buffer, unsigned short *length, unsigned short *rc) |
334 | 310 | |
335 | 311 | static int copy_str_to_ps(char *text, unsigned short *length, unsigned short *ps) |
336 | 312 | { |
337 | - /* | |
338 | - * Call Parameters | |
339 | - * | |
340 | - * Data String of ASCII data to be copied into the host presentation space. | |
341 | - * Length Length, in number of bytes, of the source data string. Overridden if in EOT mode. | |
342 | - * PS Position in the host presentation space to begin the copy, a value between 1 and the configured size of your host presentation space. | |
343 | - * | |
344 | - * Return Parameters | |
345 | - * | |
346 | - * HLLAPI_STATUS_SUCCESS 0 The Copy String to Presentation Space function was successful. | |
347 | - * HLLAPI_STATUS_DISCONNECTED 1 Your program is not connected to a host session. | |
348 | - * HLLAPI_STATUS_BAD_PARAMETER 2 Parameter error or zero length for copy. | |
349 | - * HLLAPI_STATUS_KEYBOARD_LOCKED 5 The target presentation space is protected or inhibited, or incorrect data was sent to the target presentation space (such as a field attribute byte). | |
350 | - * 6 The copy was completed, but the data was truncated. | |
351 | - * 7 The host presentation space position is not valid. | |
352 | - * HLLAPI_STATUS_SYSTEM_ERROR 9 A system error was encountered. | |
353 | - * | |
354 | - */ | |
313 | + // | |
314 | + // Call Parameters | |
315 | + // | |
316 | + // Data String of ASCII data to be copied into the host presentation space. | |
317 | + // Length Length, in number of bytes, of the source data string. Overridden if in EOT mode. | |
318 | + // PS Position in the host presentation space to begin the copy, a value between 1 and the configured size of your host presentation space. | |
319 | + // | |
320 | + // Return Parameters | |
321 | + // | |
322 | + // HLLAPI_STATUS_SUCCESS 0 The Copy String to Presentation Space function was successful. | |
323 | + // HLLAPI_STATUS_DISCONNECTED 1 Your program is not connected to a host session. | |
324 | + // HLLAPI_STATUS_BAD_PARAMETER 2 Parameter error or zero length for copy. | |
325 | + // HLLAPI_STATUS_KEYBOARD_LOCKED 5 The target presentation space is protected or inhibited, or incorrect data was sent to the target presentation space (such as a field attribute byte). | |
326 | + // 6 The copy was completed, but the data was truncated. | |
327 | + // 7 The host presentation space position is not valid. | |
328 | + // HLLAPI_STATUS_SYSTEM_ERROR 9 A system error was encountered. | |
329 | + // | |
330 | + // | |
355 | 331 | size_t szText = strlen(text); |
356 | 332 | |
357 | 333 | if(*length < szText) |
... | ... | @@ -464,3 +440,4 @@ HLLAPI_API_CALL hllapi_set_session_parameter(LPSTR param, WORD len, WORD value) |
464 | 440 | |
465 | 441 | return HLLAPI_STATUS_SUCCESS; |
466 | 442 | } |
443 | +*/ | ... | ... |
src/core/idlcomp.bat
... | ... | @@ -0,0 +1,50 @@ |
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 | + * Este programa está nomeado como - 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 | + */ | |
29 | + | |
30 | +#ifndef PRIVATE_H_INCLUDED | |
31 | + | |
32 | + #define PRIVATE_H_INCLUDED 1 | |
33 | + | |
34 | + #include <exception> | |
35 | + #include <stdexcept> | |
36 | + #include <string> | |
37 | + #include <cerrno> | |
38 | + #include <cstring> | |
39 | + #include <lib3270/ipc.h> | |
40 | + #include <lib3270/log.h> | |
41 | + #include <lib3270/hllapi.h> | |
42 | + | |
43 | + using std::runtime_error; | |
44 | + using std::string; | |
45 | + | |
46 | + extern string hllapi_lasterror; | |
47 | + | |
48 | + TN3270::Host & getSession(); | |
49 | + | |
50 | +#endif // PRIVATE_H_INCLUDED | ... | ... |
src/core/remotectl.h
... | ... | @@ -1,84 +0,0 @@ |
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. 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 remotectl.h 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 | - * Agradecimento: | |
29 | - * | |
30 | - * Hélio Passos | |
31 | - * | |
32 | - */ | |
33 | - | |
34 | - #define ENABLE_NLS | |
35 | - #define GETTEXT_PACKAGE PACKAGE_NAME | |
36 | - | |
37 | - #include <libintl.h> | |
38 | - #include <glib/gi18n.h> | |
39 | - #include <gtk/gtk.h> | |
40 | - | |
41 | - #include <lib3270.h> | |
42 | - #include <lib3270/log.h> | |
43 | - #include <pw3270/hllapi.h> | |
44 | - | |
45 | - typedef struct _remotequery | |
46 | - { | |
47 | -#ifdef _WIN32 | |
48 | - HANDLE hPipe; /**< Pipe handle (for response) */ | |
49 | -#endif // _WIN32 | |
50 | - | |
51 | - H3270 * hSession; /**< 3270 Session */ | |
52 | - int cmd; /**< Command */ | |
53 | - int rc; /**< Response status */ | |
54 | - | |
55 | - int pos; | |
56 | - unsigned short length; /**< Query string length */ | |
57 | - const gchar * text; /**< Query string */ | |
58 | - | |
59 | - } QUERY; | |
60 | - | |
61 | - G_GNUC_INTERNAL void enqueue_request(QUERY *qry); | |
62 | - G_GNUC_INTERNAL void request_complete(QUERY *qry, int rc, const gchar *text); | |
63 | - | |
64 | - G_GNUC_INTERNAL void request_status(QUERY *qry, int rc); | |
65 | - G_GNUC_INTERNAL void request_value(QUERY *qry, int rc, unsigned int value); | |
66 | - G_GNUC_INTERNAL void request_buffer(QUERY *qry, int rc, size_t sz, const gpointer buffer); | |
67 | - | |
68 | -// int run_hllapi(unsigned long function, char *string, unsigned short length, unsigned short rc); | |
69 | - | |
70 | - | |
71 | -#ifdef _WIN32 | |
72 | - | |
73 | - #define PIPE_BUFFER_LENGTH 8192 | |
74 | - | |
75 | - void init_source_pipe(HANDLE hPipe); | |
76 | - void popup_lasterror(const gchar *fmt, ...); | |
77 | - | |
78 | -#endif // _WIN32 | |
79 | - | |
80 | - | |
81 | - | |
82 | - | |
83 | - | |
84 | - |
src/include/lib3270/hllapi.h
... | ... | @@ -18,7 +18,7 @@ |
18 | 18 | * programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple |
19 | 19 | * Place, Suite 330, Boston, MA, 02111-1307, USA |
20 | 20 | * |
21 | - * Este programa está nomeado como private.h e possui - linhas de código. | |
21 | + * Este programa está nomeado como - e possui - linhas de código. | |
22 | 22 | * |
23 | 23 | * Contatos: |
24 | 24 | * |
... | ... | @@ -27,27 +27,186 @@ |
27 | 27 | * |
28 | 28 | */ |
29 | 29 | |
30 | - #include <pw3270/hllapi.h> | |
30 | + #ifdef __cplusplus | |
31 | + extern "C" { | |
32 | + #endif | |
31 | 33 | |
32 | - #ifndef ETIMEDOUT | |
33 | - #define ETIMEDOUT 1238 | |
34 | - #endif // ETIMEDOUT | |
34 | + #define HLLAPI_MAXLENGTH 4096 | |
35 | 35 | |
36 | - #define PIPE_BUFFER_LENGTH 8192 | |
36 | + /** | |
37 | + * @brief Function codes | |
38 | + * | |
39 | + * Reference http://www.ibm.com/support/knowledgecenter/SSEQ5Y_6.0.0/com.ibm.pcomm.doc/books/html/emulator_programming08.htm | |
40 | + * | |
41 | + */ | |
42 | + typedef enum hllapi_cmd { | |
43 | + HLLAPI_CMD_CONNECTPS = 1, /// @brief connect presentation space | |
44 | + HLLAPI_CMD_DISCONNECTPS = 2, /// @brief disconnect presentation space | |
45 | + HLLAPI_CMD_INPUTSTRING = 3, /// @brief send string | |
46 | + HLLAPI_CMD_WAIT = 4, /// @brief Wait if the session is waiting for a host response | |
47 | + HLLAPI_CMD_COPYPS = 5, /// @brief Copies the contents of the presentation space into a string buffer. | |
48 | + HLLAPI_CMD_SEARCHPS = 6, /// @brief Search the presentation space for a specified string. | |
49 | + HLLAPI_CMD_QUERYCURSOR = 7, /// @brief Determines the location of the cursor in the presentation space. | |
50 | + HLLAPI_CMD_COPYPSTOSTR = 8, /// @brief Copy presentation space to string | |
51 | + HLLAPI_SET_SESSION_PARAMETERS = 9, /// @brief Lets you change certain default session options in EHLLAPI for all sessions. | |
52 | + HLLAPI_CMD_COPYSTRTOPS = 15, /// @brief Copies an ASCII string directly to a specified position in the presentation space. | |
53 | + HLLAPI_CMD_PAUSE = 18, /// @brief Waits for a specified amount of time. | |
54 | + HLLAPI_RESET_SYSTEM = 21, /// @brief Reinitializes EHLLAPI to its starting state. | |
55 | + HLLAPI_CMD_SETCURSOR = 40, /// @brief Places the cursor at a specified position in presentation space. | |
56 | + HLLAPI_CMD_SENDFILE = 90, /// @brief Send file to the host | |
57 | + HLLAPI_CMD_RECEIVEFILE = 91, /// @brief Receive a file from the host | |
37 | 58 | |
38 | - #define set_active(x) /* x */ | |
59 | + HLLAPI_CMD_GETREVISION = 2000 /// @brief Get lib3270 revision | |
60 | + } HLLAPI_CMD; | |
39 | 61 | |
40 | - #if defined(DEBUG) && defined(_WIN32) | |
41 | - #undef trace | |
42 | - #define trace( fmt, ... ) fprintf(stderr, "%s(%d) " fmt "\n", __FILE__, __LINE__, __VA_ARGS__ ); fflush(stderr); | |
43 | - #endif // DEBUG | |
44 | 62 | |
45 | - #ifdef __cplusplus | |
46 | - extern "C" { | |
47 | - #endif | |
63 | + /** | |
64 | + * @brief Standard Return Codes | |
65 | + * | |
66 | + * http://ps-2.kev009.com/tl/techlib/manuals/adoclib/3270hcon/hconugd/retrncod.htm#C20819C058kmar | |
67 | + */ | |
68 | + typedef enum hllapi_status { | |
69 | + | |
70 | + /// @brief Good return code. | |
71 | + /// | |
72 | + /// Either the function was successfully executed, or there were no host updates since the last call was issued. | |
73 | + HLLAPI_STATUS_SUCCESS = 0, | |
74 | + | |
75 | + /// @brief The presentation space was not valid or not connected. | |
76 | + /// | |
77 | + /// Either the presentation space short session ID was invalid, or the application is not connected. | |
78 | + HLLAPI_STATUS_DISCONNECTED = 1, | |
79 | + | |
80 | + /// @brief An incorrect option was specified. | |
81 | + HLLAPI_STATUS_BAD_PARAMETER = 2, | |
82 | + | |
83 | + /// @brief The execution of the function was inhibited because the target presentation space was busy. | |
84 | + /// | |
85 | + /// For example, X or XSYSTEM is displayed in the OIA for the 3270 terminal emulation. | |
86 | + HLLAPI_STATUS_TIMEOUT = 4, | |
87 | + | |
88 | + /// @brief The execution of the function was inhibited for some reason other than the reasons stated in return code 4. | |
89 | + HLLAPI_STATUS_KEYBOARD_LOCKED = 5, | |
90 | + | |
91 | + // 06 A data error occurred due to specification of an invalid parameter (for example, a length error causing truncation). | |
92 | + // 07 The specified presentation space position was invalid. | |
93 | + // 08 No prerequisite function was issued. | |
94 | + | |
95 | + /// @brief A system error occurred. | |
96 | + HLLAPI_STATUS_SYSTEM_ERROR = 9, | |
97 | + | |
98 | + /// @brief The function number is not supported by the emulation program. | |
99 | + HLLAPI_STATUS_UNSUPPORTED = 10, | |
100 | + | |
101 | + /// @brief Resource unavailable at this time. | |
102 | + /// | |
103 | + /// The resource that you requested is unavailable (for example, too many attempts have been made to connect to the same presentation space (PS) or another application is connected to the PS). | |
104 | + HLLAPI_STATUS_UNAVAILABLE = 11, | |
105 | + | |
106 | + // 20 Invalid keystroke caused by ESC= option. | |
107 | + // 21 OIA was updated. | |
108 | + // 22 PS was updated. | |
109 | + // 23 Both OIA and PS were updated. | |
110 | + | |
111 | + /// @brief Either the string was not found, or the presentation space is unformatted. | |
112 | + HLLAPI_STATUS_NOT_FOUND = 24, | |
113 | + | |
114 | + // 25 Keystrokes were not available on input queue. | |
115 | + // 26 A host event occurred. See QUERY HOST UPDATE (24) for details. | |
116 | + // 28 Field length was 0. | |
117 | + // 31 Keystroke queue overflow. Keystrokes were lost. | |
118 | + | |
119 | + } HLLAPI_STATUS; | |
120 | + | |
121 | + #define HLLAPI_STATUS_WAITING HLLAPI_STATUS_TIMEOUT | |
122 | + | |
123 | + #if defined(_WIN32) | |
124 | + | |
125 | + #include <windows.h> | |
126 | + | |
127 | + // http://www.mingw.org/wiki/Visual_Basic_DLL | |
128 | + #define HLLAPI_API_CALL __declspec (dllexport) DWORD __stdcall | |
129 | + #define HLLAPI_API_CSTR __declspec (dllexport) const char * __stdcall | |
130 | + | |
131 | + #else | |
132 | + | |
133 | + #include <cstdint> | |
134 | + | |
135 | + // From wtypesbase.h | |
136 | + typedef uint8_t BYTE; | |
137 | + typedef uint16_t WORD; | |
138 | + typedef unsigned int UINT; | |
139 | + typedef int INT; | |
140 | + typedef uint32_t LONG; | |
141 | + typedef LONG WINBOOL; | |
142 | + typedef uint32_t DWORD; | |
143 | + typedef void *HANDLE; | |
144 | + typedef WORD *LPWORD; | |
145 | + typedef DWORD *LPDWORD; | |
146 | + typedef char CHAR; | |
147 | + typedef CHAR *LPSTR; | |
148 | + typedef const CHAR *LPCSTR; | |
149 | + typedef char WCHAR; | |
150 | + typedef WCHAR TCHAR; | |
151 | + typedef WCHAR *LPWSTR; | |
152 | + typedef TCHAR *LPTSTR; | |
153 | + typedef const WCHAR *LPCWSTR; | |
154 | + typedef const TCHAR *LPCTSTR; | |
155 | + typedef HANDLE *LPHANDLE; | |
156 | + | |
157 | + #define LPWORD uint16_t * | |
158 | + | |
159 | + #define LPSTR char * | |
160 | + #define HANDLE int | |
161 | + | |
162 | + #define HLLAPI_API_CALL __attribute__((visibility("default"))) extern DWORD | |
163 | + #define HLLAPI_API_CSTR __attribute__((visibility("default"))) extern const char * | |
164 | + | |
165 | + #endif // _WIN32 | |
166 | + | |
167 | + HLLAPI_API_CALL hllapi(const LPWORD func, LPSTR str, LPWORD length, LPWORD rc); | |
168 | + | |
169 | + HLLAPI_API_CALL hllapi_init(LPSTR mode); | |
170 | + HLLAPI_API_CALL hllapi_deinit(void); | |
171 | + HLLAPI_API_CALL hllapi_get_revision(void); | |
172 | + | |
173 | + HLLAPI_API_CALL hllapi_reset(void); | |
174 | + | |
175 | + HLLAPI_API_CALL hllapi_connect(const LPSTR uri, WORD wait); | |
176 | + HLLAPI_API_CALL hllapi_disconnect(void); | |
177 | + | |
178 | + HLLAPI_API_CALL hllapi_get_message_id(void); | |
179 | + HLLAPI_API_CALL hllapi_is_connected(void); | |
180 | + HLLAPI_API_CALL hllapi_get_state(void); | |
181 | + HLLAPI_API_CALL hllapi_get_screen_at(WORD row, WORD col, LPSTR buffer); | |
182 | + HLLAPI_API_CALL hllapi_get_screen(WORD pos, LPSTR buffer, WORD len); | |
183 | + HLLAPI_API_CALL hllapi_enter(void); | |
184 | + HLLAPI_API_CALL hllapi_set_text_at(WORD row, WORD col, LPSTR text); | |
185 | + HLLAPI_API_CALL hllapi_cmp_text_at(WORD row, WORD col, LPSTR text); | |
186 | + HLLAPI_API_CALL hllapi_find_text(LPSTR text); | |
187 | + HLLAPI_API_CALL hllapi_emulate_input(const LPSTR buffer, WORD len, WORD pasting); | |
188 | + HLLAPI_API_CALL hllapi_input_string(LPSTR buffer, WORD len); | |
189 | + HLLAPI_API_CALL hllapi_wait_for_ready(WORD seconds); | |
190 | + HLLAPI_API_CALL hllapi_wait_for_change(WORD seconds); | |
191 | + HLLAPI_API_CALL hllapi_wait(WORD seconds); | |
192 | + HLLAPI_API_CALL hllapi_pfkey(WORD key); | |
193 | + HLLAPI_API_CALL hllapi_pakey(WORD key); | |
194 | + | |
195 | + HLLAPI_API_CALL hllapi_set_session_parameter(LPSTR param, WORD len, WORD value); | |
196 | + | |
197 | + HLLAPI_API_CALL hllapi_erase(void); | |
198 | + HLLAPI_API_CALL hllapi_erase_eof(void); | |
199 | + HLLAPI_API_CALL hllapi_erase_eol(void); | |
200 | + HLLAPI_API_CALL hllapi_erase_input(void); | |
201 | + | |
202 | + HLLAPI_API_CALL hllapi_action(LPSTR buffer); | |
203 | + | |
204 | + HLLAPI_API_CALL hllapi_print(void); | |
205 | + | |
206 | + HLLAPI_API_CALL hllapi_get_datadir(LPSTR datadir); | |
207 | + HLLAPI_API_CALL hllapi_set_charset(LPSTR datadir); | |
48 | 208 | |
49 | - char * hllapi_get_string(int offset, size_t len); | |
50 | - void hllapi_free(void *p); | |
209 | + HLLAPI_API_CSTR hllapi_get_last_error(); | |
51 | 210 | |
52 | 211 | #ifdef __cplusplus |
53 | 212 | } /* end of extern "C" */ | ... | ... |
src/testprogram/hllapi.c
... | ... | @@ -1,185 +0,0 @@ |
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 | - * Este programa está nomeado como testprogram.c 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 | - */ | |
29 | - | |
30 | - #include <stdio.h> | |
31 | - #include <string.h> | |
32 | - #include <time.h> | |
33 | - #include <getopt.h> | |
34 | - #include <pw3270/hllapi.h> | |
35 | - | |
36 | - #if defined(DEBUG) && defined(_WIN32) | |
37 | - #undef trace | |
38 | - #define trace( fmt, ... ) { FILE *out = fopen("c:\\Users\\Perry\\hllapi.log","a"); if(out) { fprintf(out, "%s(%d) " fmt "\n", __FILE__, __LINE__, __VA_ARGS__ ); fclose(out); } } | |
39 | - #endif // DEBUG | |
40 | - | |
41 | - #define MAX_DATA_SIZE 8000 //< Maximum data size for this application. | |
42 | - | |
43 | -// static CHAR hllapi_data[MAX_DATA_SIZE]; | |
44 | - | |
45 | -/*---[ Implement ]--------------------------------------------------------------------------------*/ | |
46 | - | |
47 | - /* | |
48 | - static void connect_ps(const char *session) | |
49 | - { | |
50 | - WORD len; | |
51 | - WORD fn = HLLAPI_CMD_CONNECTPS; | |
52 | - WORD rc = 0; | |
53 | - | |
54 | - strncpy(hllapi_data,session,MAX_DATA_SIZE); | |
55 | - | |
56 | - len = strlen(session); | |
57 | - hllapi(&fn,hllapi_data,&len,&rc); | |
58 | - | |
59 | - } | |
60 | - */ | |
61 | - | |
62 | - int main(int argc, char **argv) | |
63 | - { | |
64 | - const char *host = NULL; | |
65 | - const char *session = "pw3270:A"; | |
66 | - | |
67 | - #pragma GCC diagnostic push | |
68 | - static struct option options[] = | |
69 | - { | |
70 | - { "host", required_argument, 0, 'h' }, | |
71 | - { "session-name", required_argument, 0, 'S' }, | |
72 | - { 0, 0, 0, 0} | |
73 | - }; | |
74 | - #pragma GCC diagnostic pop | |
75 | - | |
76 | - int long_index =0; | |
77 | - int opt; | |
78 | - while((opt = getopt_long(argc, argv, "h:S:", options, &long_index )) != -1) | |
79 | - { | |
80 | - | |
81 | - switch(opt) | |
82 | - { | |
83 | - case 'h': | |
84 | - host = optarg; | |
85 | - break; | |
86 | - | |
87 | - case 'S': | |
88 | - session = optarg; | |
89 | - break; | |
90 | - | |
91 | - } | |
92 | - | |
93 | - } | |
94 | - | |
95 | - int rc = hllapi_init((char *) session); | |
96 | - if(rc) | |
97 | - { | |
98 | - printf("hllapi_init returns with rc=%d\n",rc); | |
99 | - return rc; | |
100 | - } | |
101 | - | |
102 | - printf("Library revision is %d\n",(int) hllapi_get_revision()); | |
103 | - | |
104 | - if(host) { | |
105 | - | |
106 | - printf("connect=%d\n",(int) hllapi_connect((char *) host,1)); | |
107 | - printf("wait_for_ready=%d\n",(int) hllapi_wait_for_ready(10)); | |
108 | - printf("connected=%s\n",(int) hllapi_is_connected() ? "Yes" : "No"); | |
109 | - | |
110 | - printf("disconnect=%d\n",(int) hllapi_disconnect()); | |
111 | - } | |
112 | - | |
113 | - printf("connected=%s\n",(int) hllapi_is_connected() ? "Yes" : "No"); | |
114 | - | |
115 | - rc = hllapi_deinit(); | |
116 | - printf("hllapi_deinit exits with rc=%d\n",rc); | |
117 | - | |
118 | - return 0; | |
119 | - } | |
120 | - | |
121 | -/* | |
122 | - int main(int numpar, char *param[]) | |
123 | - { | |
124 | - char buffer[BUFFER_LENGTH]; | |
125 | - unsigned short rc; | |
126 | - unsigned short len; | |
127 | - unsigned long fn; | |
128 | - | |
129 | - static const struct _cmd | |
130 | - { | |
131 | - const char * name; | |
132 | - unsigned short fn; | |
133 | - const char * arg; | |
134 | - } cmd[] = | |
135 | - { | |
136 | - { "GetRevision", HLLAPI_CMD_GETREVISION, " " }, | |
137 | - { "ConnectPS", HLLAPI_CMD_CONNECTPS, "pw3270A" }, | |
138 | - { "InputString", HLLAPI_CMD_INPUTSTRING, "test" }, | |
139 | - | |
140 | - }; | |
141 | - | |
142 | - int f; | |
143 | - | |
144 | - | |
145 | - for(f=0;f< (sizeof(cmd)/sizeof(struct _cmd)); f++) | |
146 | - { | |
147 | - len = strlen(cmd[f].arg); | |
148 | - memcpy(buffer,cmd[f].arg,len); | |
149 | - hllapi((LPWORD) &cmd[f].fn,buffer,&len,&rc); | |
150 | - printf("%s exits with rc=%d\n[%s]\n",cmd[f].name,rc,buffer); | |
151 | - } | |
152 | - | |
153 | - len = 80; | |
154 | - rc = 1040; | |
155 | - fn = HLLAPI_CMD_COPYPSTOSTR; | |
156 | - hllapi((LPWORD) &fn,buffer,&len,&rc); | |
157 | - printf("%s exits with rc=%d\n%s\n","HLLAPI_CMD_COPYPSTOSTR",rc,buffer); | |
158 | - | |
159 | - // Performance | |
160 | - len = strlen(cmd[0].arg); | |
161 | - memcpy(buffer,cmd[0].arg,len); | |
162 | - if(hllapi((LPWORD) &cmd[0].fn,buffer,&len,&rc) == 0 && rc == 0) | |
163 | - { | |
164 | - time_t end = time(0) + 5; | |
165 | - int qtd = 0; | |
166 | - do | |
167 | - { | |
168 | - qtd++; | |
169 | - } while(hllapi((LPWORD) &cmd[0].fn,buffer,&len,&rc) == 0 && rc == 0 && time(0)<end); | |
170 | - printf("%d interacoes em 5 segundos (rc=%d)\n",qtd,rc); | |
171 | - | |
172 | - } | |
173 | - | |
174 | - // Disconnect | |
175 | - len = 10; | |
176 | - rc = 1; | |
177 | - fn = HLLAPI_CMD_DISCONNECTPS; | |
178 | - *buffer = 0; | |
179 | - hllapi((LPWORD) &fn,buffer,&len,&rc); | |
180 | - printf("%s exits with rc=%d\n[%s]\n","HLLAPI_CMD_DISCONNECTPS",rc,buffer); | |
181 | - | |
182 | - | |
183 | - return 0; | |
184 | - } | |
185 | -*/ |
src/testprogram/ipc3270c.c
... | ... | @@ -1,236 +0,0 @@ |
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. Registro no INPI sob | |
5 | - * o nome G3270. | |
6 | - * | |
7 | - * Copyright (C) <2008> <Banco do Brasil S.A.> | |
8 | - * | |
9 | - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
10 | - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
11 | - * Free Software Foundation. | |
12 | - * | |
13 | - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
14 | - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
15 | - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
16 | - * obter mais detalhes. | |
17 | - * | |
18 | - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
19 | - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
20 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
21 | - * | |
22 | - * Este programa está nomeado como testprogram.c e possui - linhas de código. | |
23 | - * | |
24 | - * Contatos: | |
25 | - * | |
26 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
27 | - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
28 | - * | |
29 | - */ | |
30 | - | |
31 | - | |
32 | - /** | |
33 | - * @brief Test program for pw3270 HLLAPI compatibility plugin. | |
34 | - * | |
35 | - */ | |
36 | - | |
37 | - #include <config.h> | |
38 | - #include <v3270.h> | |
39 | - #include <v3270/trace.h> | |
40 | - #include <pw3270/plugin.h> | |
41 | - #include <string.h> | |
42 | - #include <stdlib.h> | |
43 | - #include <pw3270.h> | |
44 | - | |
45 | - /*---[ Globals ]------------------------------------------------------------------------------------*/ | |
46 | - | |
47 | - const gchar * plugin_path = ".bin/Debug"; | |
48 | - const gchar * session_name = "pw3270"; | |
49 | - const gchar * plugin_name = "ipc3270c." G_MODULE_SUFFIX; | |
50 | - | |
51 | - /*---[ Implement ]----------------------------------------------------------------------------------*/ | |
52 | - | |
53 | - static void close_module(GtkWidget *widget, GModule *module) | |
54 | - { | |
55 | - g_message("Closing module %p",module); | |
56 | - | |
57 | - static void (*stop)(GtkWidget *window, GtkWidget *terminal) = NULL; | |
58 | - if(!g_module_symbol(module,"pw3270_plugin_stop",(void **) &stop)) | |
59 | - { | |
60 | - g_message("Can't get stop method from plugin: %s",g_module_error()); | |
61 | - } | |
62 | - else | |
63 | - { | |
64 | - stop(gtk_widget_get_toplevel(widget),widget); | |
65 | - } | |
66 | - | |
67 | - g_module_close(module); | |
68 | - g_message("Module %p was closed",module); | |
69 | - } | |
70 | - | |
71 | - static void toggle_ds_trace(GtkToggleToolButton *button, GtkWidget *terminal) | |
72 | - { | |
73 | - v3270_set_toggle(terminal,LIB3270_TOGGLE_DS_TRACE,gtk_toggle_tool_button_get_active(button)); | |
74 | - } | |
75 | - | |
76 | - static void toggle_event_trace(GtkToggleToolButton *button, GtkWidget *terminal) | |
77 | - { | |
78 | - v3270_set_toggle(terminal,LIB3270_TOGGLE_EVENT_TRACE,gtk_toggle_tool_button_get_active(button)); | |
79 | - } | |
80 | - | |
81 | - static void toggle_ssl_trace(GtkToggleToolButton *button, GtkWidget *terminal) | |
82 | - { | |
83 | - v3270_set_toggle(terminal,LIB3270_TOGGLE_SSL_TRACE,gtk_toggle_tool_button_get_active(button)); | |
84 | - } | |
85 | - | |
86 | - static void toggle_screen_trace(GtkToggleToolButton *button, GtkWidget *terminal) | |
87 | - { | |
88 | - v3270_set_toggle(terminal,LIB3270_TOGGLE_SCREEN_TRACE,gtk_toggle_tool_button_get_active(button)); | |
89 | - } | |
90 | - | |
91 | - static void toggle_started_trace(GtkToggleToolButton *button, GModule *module) | |
92 | - { | |
93 | - if(!module) | |
94 | - return; | |
95 | - | |
96 | - GtkWidget * terminal = GTK_WIDGET(g_object_get_data(G_OBJECT(button),"terminal")); | |
97 | - | |
98 | - const gchar * method_name = (gtk_toggle_tool_button_get_active(button) ? "pw3270_plugin_start" : "pw3270_plugin_stop"); | |
99 | - | |
100 | - static void (*call)(GtkWidget *window, GtkWidget *terminal) = NULL; | |
101 | - if(!g_module_symbol(module,method_name,(void **) &call)) | |
102 | - { | |
103 | - g_message("Can't get method \"%s\": %s",method_name,g_module_error()); | |
104 | - return; | |
105 | - } | |
106 | - | |
107 | - g_message("Calling %s",method_name); | |
108 | - call(gtk_widget_get_toplevel(terminal), GTK_WIDGET(terminal)); | |
109 | - | |
110 | - } | |
111 | - | |
112 | - static GtkToolItem * create_tool_item(GtkWidget *terminal, const gchar *label, const gchar *tooltip, GCallback callback) | |
113 | - { | |
114 | - GtkToolItem * item = gtk_toggle_tool_button_new(); | |
115 | - gtk_tool_button_set_label(GTK_TOOL_BUTTON(item),label); | |
116 | - | |
117 | - g_signal_connect(GTK_WIDGET(item), "toggled", G_CALLBACK(callback), terminal); | |
118 | - | |
119 | - if(tooltip) | |
120 | - gtk_widget_set_tooltip_text(GTK_WIDGET(item),tooltip); | |
121 | - | |
122 | - return item; | |
123 | - } | |
124 | - | |
125 | - static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) { | |
126 | - | |
127 | - GtkWidget * window = gtk_application_window_new(app); | |
128 | - GtkWidget * terminal = v3270_new(); | |
129 | - GtkWidget * notebook = gtk_notebook_new(); | |
130 | - GModule * module = NULL; | |
131 | - | |
132 | - gtk_widget_set_name(window,session_name); | |
133 | - v3270_set_session_name(terminal, session_name); | |
134 | - | |
135 | - // Setup tabs | |
136 | - gtk_notebook_append_page(GTK_NOTEBOOK(notebook),terminal,gtk_label_new(v3270_get_session_name(terminal))); | |
137 | - | |
138 | - // Load plugin | |
139 | - { | |
140 | - g_autofree gchar * plugin = g_build_filename(plugin_path,plugin_name,NULL); | |
141 | - | |
142 | - g_message("Loading %s",plugin); | |
143 | - | |
144 | - module = g_module_open(plugin,G_MODULE_BIND_LOCAL); | |
145 | - | |
146 | - if(module) | |
147 | - { | |
148 | - g_signal_connect (terminal, "destroy", G_CALLBACK(close_module), module); | |
149 | - } | |
150 | - else | |
151 | - { | |
152 | - g_message("Can't open \"%s\": %s",plugin,g_module_error()); | |
153 | - gtk_main_quit(); | |
154 | - } | |
155 | - | |
156 | - } | |
157 | - // Create trace window | |
158 | - { | |
159 | - GtkWidget * box = gtk_box_new(GTK_ORIENTATION_VERTICAL,0); | |
160 | - GtkWidget * trace = v3270_trace_new(terminal); | |
161 | - GtkWidget * toolbar = gtk_toolbar_new(); | |
162 | - GtkToolItem * start = gtk_toggle_tool_button_new(); | |
163 | - | |
164 | - gtk_widget_set_sensitive(GTK_WIDGET(start),module != NULL); | |
165 | - | |
166 | - g_object_set_data(G_OBJECT(start),"terminal",terminal); | |
167 | - | |
168 | - gtk_tool_button_set_label(GTK_TOOL_BUTTON(start),"Enable"); | |
169 | - g_signal_connect(GTK_WIDGET(start), "toggled", G_CALLBACK(toggle_started_trace), module); | |
170 | - gtk_widget_set_tooltip_text(GTK_WIDGET(start),"Start/Stop plugin module"); | |
171 | - | |
172 | - gtk_toolbar_insert(GTK_TOOLBAR(toolbar), start, -1); | |
173 | - | |
174 | - gtk_toolbar_insert(GTK_TOOLBAR(toolbar),gtk_separator_tool_item_new(),-1); | |
175 | - | |
176 | - gtk_toolbar_insert(GTK_TOOLBAR(toolbar),create_tool_item(terminal, "DS Trace","Toggle DS Trace",G_CALLBACK(toggle_ds_trace)),-1); | |
177 | - gtk_toolbar_insert(GTK_TOOLBAR(toolbar),create_tool_item(terminal, "Event Trace","Toggle Event Trace",G_CALLBACK(toggle_event_trace)),-1); | |
178 | - gtk_toolbar_insert(GTK_TOOLBAR(toolbar),create_tool_item(terminal, "Screen Trace","Toggle Screen Trace",G_CALLBACK(toggle_screen_trace)),-1); | |
179 | - gtk_toolbar_insert(GTK_TOOLBAR(toolbar),create_tool_item(terminal, "SSL Trace","Toggle SSL Trace",G_CALLBACK(toggle_ssl_trace)),-1); | |
180 | - | |
181 | - gtk_box_pack_start(GTK_BOX(box),toolbar,FALSE,FALSE,0); | |
182 | - gtk_box_pack_start(GTK_BOX(box),trace,TRUE,TRUE,0); | |
183 | - gtk_notebook_append_page(GTK_NOTEBOOK(notebook),box,gtk_label_new("Trace")); | |
184 | - } | |
185 | - | |
186 | - // Setup and show main window | |
187 | - gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); | |
188 | - gtk_window_set_default_size (GTK_WINDOW (window), 800, 500); | |
189 | - gtk_container_add(GTK_CONTAINER(window),notebook); | |
190 | - gtk_widget_show_all (window); | |
191 | - | |
192 | - // Setup title. | |
193 | - const gchar *url = lib3270_get_url(v3270_get_session(terminal)); | |
194 | - if(url) { | |
195 | - | |
196 | - v3270_set_url(terminal,url); | |
197 | - v3270_reconnect(terminal); | |
198 | - | |
199 | - gchar * title = g_strdup_printf("%s - %s", v3270_get_session_name(terminal), url); | |
200 | - gtk_window_set_title(GTK_WINDOW(window), title); | |
201 | - g_free(title); | |
202 | - | |
203 | - } else { | |
204 | - | |
205 | - gtk_window_set_title(GTK_WINDOW(window), v3270_get_session_name(terminal)); | |
206 | - | |
207 | - } | |
208 | - | |
209 | -} | |
210 | - | |
211 | -int main (int argc, char **argv) { | |
212 | - | |
213 | - static const GOptionEntry app_options[] = { | |
214 | - { "plugin-path", 'P', 0, G_OPTION_ARG_STRING, &plugin_path, "Path for plugin search", NULL }, | |
215 | - { "session-name", 'S', 0, G_OPTION_ARG_STRING, &session_name, "Session name", "pw3270" }, | |
216 | - { "module", 'm', 0, G_OPTION_ARG_STRING, &plugin_name, "Module name", "ipc3270c." G_MODULE_SUFFIX }, | |
217 | - | |
218 | - { NULL } | |
219 | - }; | |
220 | - | |
221 | - GtkApplication *app; | |
222 | - int status; | |
223 | - | |
224 | - app = gtk_application_new("br.com.bb.ipc3270c",G_APPLICATION_FLAGS_NONE); | |
225 | - | |
226 | - g_application_add_main_option_entries(G_APPLICATION(app),app_options); | |
227 | - g_signal_connect (app, "activate", G_CALLBACK(activate), NULL); | |
228 | - | |
229 | - status = g_application_run (G_APPLICATION (app), argc, argv); | |
230 | - g_object_unref (app); | |
231 | - | |
232 | - g_message("rc=%d",status); | |
233 | - return status; | |
234 | - | |
235 | -} | |
236 | - |
... | ... | @@ -0,0 +1,107 @@ |
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 | + * Este programa está nomeado como testprogram.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 | + */ | |
29 | + | |
30 | + #include <iostream> | |
31 | + #include <getopt.h> | |
32 | + #include <lib3270/hllapi.h> | |
33 | + | |
34 | + using namespace std; | |
35 | + | |
36 | +/*---[ Implement ]--------------------------------------------------------------------------------*/ | |
37 | + | |
38 | + int main(int argc, char **argv) { | |
39 | + | |
40 | + const char *host = ""; | |
41 | + const char *session = ""; // "pw3270:A"; | |
42 | + | |
43 | + #pragma GCC diagnostic push | |
44 | + static struct option options[] = | |
45 | + { | |
46 | + { "host", required_argument, 0, 'h' }, | |
47 | + { "session-name", required_argument, 0, 'S' }, | |
48 | + { 0, 0, 0, 0} | |
49 | + }; | |
50 | + #pragma GCC diagnostic pop | |
51 | + | |
52 | + int long_index =0; | |
53 | + int opt; | |
54 | + while((opt = getopt_long(argc, argv, "h:S:", options, &long_index )) != -1) | |
55 | + { | |
56 | + | |
57 | + switch(opt) | |
58 | + { | |
59 | + case 'h': | |
60 | + host = optarg; | |
61 | + break; | |
62 | + | |
63 | + case 'S': | |
64 | + session = optarg; | |
65 | + break; | |
66 | + | |
67 | + } | |
68 | + | |
69 | + } | |
70 | + | |
71 | + int rc = hllapi_init((char *) session); | |
72 | + if(rc) { | |
73 | + cout << "hllapi_init returns with rc=" << rc << " (" << hllapi_get_last_error() << ")" << endl; | |
74 | + return rc; | |
75 | + } | |
76 | + | |
77 | + cout << "TN3270 library revision is " << ((int) hllapi_get_revision()) << endl; | |
78 | + | |
79 | + rc = hllapi_connect(host,1); | |
80 | + if(rc) { | |
81 | + cout << "hllapi_connect returns with rc=" << rc << " (" << hllapi_get_last_error() << ")" << endl; | |
82 | + return rc; | |
83 | + } | |
84 | + | |
85 | + cout << "HLLAPI Last error was \"" << hllapi_get_last_error() << "\"" << endl; | |
86 | + | |
87 | + /* | |
88 | + printf("Library revision is %d\n",(int) hllapi_get_revision()); | |
89 | + | |
90 | + if(host) { | |
91 | + | |
92 | + printf("connect=%d\n",(int) hllapi_connect((char *) host,1)); | |
93 | + printf("wait_for_ready=%d\n",(int) hllapi_wait_for_ready(10)); | |
94 | + printf("connected=%s\n",(int) hllapi_is_connected() ? "Yes" : "No"); | |
95 | + | |
96 | + printf("disconnect=%d\n",(int) hllapi_disconnect()); | |
97 | + } | |
98 | + | |
99 | + printf("connected=%s\n",(int) hllapi_is_connected() ? "Yes" : "No"); | |
100 | + */ | |
101 | + | |
102 | + rc = hllapi_deinit(); | |
103 | + cout << "hllapi_deinit exits with rc=" << rc << endl; | |
104 | + | |
105 | + return 0; | |
106 | + } | |
107 | + | ... | ... |