Commit 816f7f49b7b7a03522099b6885de7a49be3b0fca
1 parent
6d6dd3a3
Exists in
master
and in
3 other branches
Language bindings library is now part of the IPC plugin package.
Showing
21 changed files
with
1 additions
and
3139 deletions
Show diff stats
Makefile.in
... | ... | @@ -87,12 +87,6 @@ $(BINDBG)/lib@LIB3270_NAME@@DLLEXT@: \ |
87 | 87 | |
88 | 88 | @$(MAKE) -C src/lib3270 $@ |
89 | 89 | |
90 | -$(BINDBG)/lib@LIB3270_NAME@++@DLLEXT@: \ | |
91 | - src/lib3270++/* \ | |
92 | - $(DEPENDS) | |
93 | - | |
94 | - @$(MAKE) -C src/lib3270++ $@ | |
95 | - | |
96 | 90 | #---[ Release Rules ]-------------------------------------------------------------------- |
97 | 91 | |
98 | 92 | $(BINRLS)/lib@LIB3270_NAME@@DLLEXT@: \ |
... | ... | @@ -101,13 +95,6 @@ $(BINRLS)/lib@LIB3270_NAME@@DLLEXT@: \ |
101 | 95 | |
102 | 96 | @$(MAKE) -C src/lib3270 $@ |
103 | 97 | |
104 | -$(BINRLS)/lib@LIB3270_NAME@++@DLLEXT@: \ | |
105 | - src/lib3270/* \ | |
106 | - $(DEPENDS) | |
107 | - | |
108 | - @$(MAKE) -C src/lib3270++ $@ | |
109 | - | |
110 | - | |
111 | 98 | #---[ Misc Rules ]----------------------------------------------------------------------- |
112 | 99 | |
113 | 100 | $(POTDIR)/lib3270.pot: \ |
... | ... | @@ -119,24 +106,13 @@ $(POTDIR)/lib3270.pot: \ |
119 | 106 | |
120 | 107 | @$(MAKE) -C src/lib3270 $@ |
121 | 108 | |
122 | -$(POTDIR)/lib3270++.pot: \ | |
123 | - src/lib3270++/* \ | |
124 | - src/lib3270++/local/* \ | |
125 | - src/lib3270++/@OSNAME@/* \ | |
126 | - src/lib3270++/ipc/* \ | |
127 | - $(DEPENDS) | |
128 | - | |
129 | - @$(MAKE) -C src/lib3270++ $@ | |
130 | - | |
131 | 109 | #---[ Release Targets ]------------------------------------------------------------------ |
132 | 110 | |
133 | 111 | all: |
134 | 112 | @$(MAKE) -C src/lib3270 $@ |
135 | - @$(MAKE) -C src/lib3270++ $@ | |
136 | 113 | |
137 | 114 | Release: \ |
138 | - $(BINRLS)/lib@LIB3270_NAME@@DLLEXT@ \ | |
139 | - $(BINRLS)/lib@LIB3270_NAME@++@DLLEXT@ | |
115 | + $(BINRLS)/lib@LIB3270_NAME@@DLLEXT@ | |
140 | 116 | |
141 | 117 | #---[ Misc Targets ]--------------------------------------------------------------------- |
142 | 118 | |
... | ... | @@ -161,17 +137,14 @@ install: \ |
161 | 137 | |
162 | 138 | install-shared: |
163 | 139 | @$(MAKE) DESTDIR=$(DESTDIR) -C src/lib3270 $@ |
164 | - @$(MAKE) DESTDIR=$(DESTDIR) -C src/lib3270++ $@ | |
165 | 140 | |
166 | 141 | install-static: |
167 | 142 | @$(MAKE) DESTDIR=$(DESTDIR) -C src/lib3270 $@ |
168 | - @$(MAKE) DESTDIR=$(DESTDIR) -C src/lib3270++ $@ | |
169 | 143 | |
170 | 144 | install-dev: \ |
171 | 145 | lib@LIB3270_NAME@.pot |
172 | 146 | |
173 | 147 | @$(MAKE) DESTDIR=$(DESTDIR) -C src/lib3270 $@ |
174 | - @$(MAKE) DESTDIR=$(DESTDIR) -C src/lib3270++ $@ | |
175 | 148 | |
176 | 149 | @$(MKDIR) $(DESTDIR)$(datarootdir)/pw3270/pot |
177 | 150 | @$(INSTALL_DATA) lib@LIB3270_NAME@.pot $(DESTDIR)$(datarootdir)/pw3270/pot/lib3270.pot |
... | ... | @@ -196,13 +169,11 @@ cleanDebug: |
196 | 169 | |
197 | 170 | @rm -fr $(BINDBG) |
198 | 171 | @$(MAKE) -C src/lib3270 $@ |
199 | - @$(MAKE) -C src/lib3270++ $@ | |
200 | 172 | |
201 | 173 | cleanRelease: |
202 | 174 | |
203 | 175 | @rm -fr $(BINRLS) |
204 | 176 | @$(MAKE) -C src/lib3270 $@ |
205 | - @$(MAKE) -C src/lib3270++ $@ | |
206 | 177 | |
207 | 178 | clean: \ |
208 | 179 | cleanDebug \ | ... | ... |
configure.ac
... | ... | @@ -88,7 +88,6 @@ case "$host" in |
88 | 88 | AC_SUBST(WIN32_VERSION,$app_win32_revision) |
89 | 89 | |
90 | 90 | AC_CONFIG_FILES(src/lib3270/windows/resources.rc) |
91 | - AC_CONFIG_FILES(src/lib3270++/windows/resources.rc) | |
92 | 91 | |
93 | 92 | app_cv_static='yes' |
94 | 93 | |
... | ... | @@ -589,11 +588,6 @@ AC_CONFIG_FILES(src/lib3270/version.c) |
589 | 588 | AC_CONFIG_FILES(src/lib3270/lib3270.pc) |
590 | 589 | AC_CONFIG_FILES(src/lib3270/lib3270-static.pc) |
591 | 590 | |
592 | -AC_CONFIG_FILES(src/lib3270++/lib3270++.pc) | |
593 | -AC_CONFIG_FILES(src/lib3270++/lib3270++static.pc) | |
594 | - | |
595 | -AC_CONFIG_FILES(src/lib3270++/Makefile) | |
596 | - | |
597 | 591 | dnl --------------------------------------------------------------------------- |
598 | 592 | dnl Output the generated config.status script. |
599 | 593 | dnl --------------------------------------------------------------------------- | ... | ... |
src/lib3270++/Makefile.in
... | ... | @@ -1,391 +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 | -# 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 | -#---[ Library configuration ]------------------------------------------------------------ | |
28 | - | |
29 | -LIBNAME=lib@LIB3270_NAME@++ | |
30 | - | |
31 | -SOURCES= \ | |
32 | - $(wildcard *.cc) \ | |
33 | - $(wildcard local/*.cc) \ | |
34 | - $(wildcard ipc/*.cc) \ | |
35 | - $(wildcard @OSNAME@/*.cc) \ | |
36 | - $(wildcard @OSNAME@/*.rc) | |
37 | - | |
38 | -TEST_SOURCES= \ | |
39 | - $(wildcard testprogram/*.cc) | |
40 | - | |
41 | -#---[ Tools ]---------------------------------------------------------------------------- | |
42 | - | |
43 | -CXX=@CXX@ | |
44 | -HOST_CC=@HOST_CC@ | |
45 | -LD=@CXX@ | |
46 | -LN_S=@LN_S@ | |
47 | -MKDIR=@MKDIR_P@ | |
48 | -INSTALL=@INSTALL@ | |
49 | -INSTALL_DATA=@INSTALL_DATA@ | |
50 | -INSTALL_PROGRAM=@INSTALL_PROGRAM@ | |
51 | -XGETTEXT=@XGETTEXT@ | |
52 | -MSGCAT=@MSGCAT@ | |
53 | -WINDRES=@WINDRES@ | |
54 | -AR=@AR@ | |
55 | -VALGRIND=@VALGRIND@ | |
56 | - | |
57 | -#---[ Paths ]---------------------------------------------------------------------------- | |
58 | - | |
59 | -prefix=@prefix@ | |
60 | -exec_prefix=@exec_prefix@ | |
61 | -bindir=@bindir@ | |
62 | -sbindir=@sbindir@ | |
63 | -libdir=@libdir@ | |
64 | -includedir=@includedir@ | |
65 | -datarootdir=@datarootdir@ | |
66 | -localedir=@localedir@ | |
67 | -docdir=@docdir@ | |
68 | -sysconfdir=@sysconfdir@ | |
69 | - | |
70 | -BASEDIR=@BASEDIR@ | |
71 | - | |
72 | -POTDIR=$(BASEDIR)/.pot | |
73 | - | |
74 | -OBJDIR=$(BASEDIR)/.obj/$(LIBNAME) | |
75 | -OBJDBG=$(OBJDIR)/Debug | |
76 | -OBJRLS=$(OBJDIR)/Release | |
77 | - | |
78 | -BINDIR=$(BASEDIR)/.bin | |
79 | -BINDBG=$(BINDIR)/Debug | |
80 | -BINRLS=$(BINDIR)/Release | |
81 | - | |
82 | -#---[ Rules ]---------------------------------------------------------------------------- | |
83 | - | |
84 | -DEPENDS= \ | |
85 | - Makefile \ | |
86 | - ../include/*.h \ | |
87 | - ../include/lib3270/*.h \ | |
88 | - ../lib3270/*.h | |
89 | - | |
90 | - | |
91 | -CFLAGS= \ | |
92 | - @CFLAGS@ \ | |
93 | - @CPPFLAGS@ \ | |
94 | - -g \ | |
95 | - -I../include \ | |
96 | - -DBUILD_DATE=`date +%Y%m%d` \ | |
97 | - @DBUS_CFLAGS@ | |
98 | - | |
99 | -LIBS= \ | |
100 | - @LIBS@ \ | |
101 | - @LIBSSL_LIBS@ \ | |
102 | - @LIBICONV@ \ | |
103 | - @INTL_LIBS@ \ | |
104 | - @DBUS_LIBS@ | |
105 | - | |
106 | - | |
107 | -#---[ Debug Rules ]---------------------------------------------------------------------- | |
108 | - | |
109 | -$(OBJDBG)/%.o: \ | |
110 | - %.cc \ | |
111 | - $(DEPENDS) | |
112 | - | |
113 | - @echo $< ... | |
114 | - @$(MKDIR) `dirname $@` | |
115 | - @$(CXX) \ | |
116 | - $(CFLAGS) \ | |
117 | - -Wall -Wextra -fstack-check \ | |
118 | - -DDEBUG=1 \ | |
119 | - -o $@ -c $< | |
120 | - | |
121 | -$(OBJDBG)/%.o: \ | |
122 | - %.rc | |
123 | - | |
124 | - @echo $< ... | |
125 | - @$(MKDIR) `dirname $@` | |
126 | - @$(WINDRES) $< -O coff -o $@ | |
127 | - | |
128 | -#---[ Release Rules ]-------------------------------------------------------------------- | |
129 | - | |
130 | -$(OBJRLS)/%.o: \ | |
131 | - %.cc \ | |
132 | - $(DEPENDS) | |
133 | - | |
134 | - @echo $< ... | |
135 | - @$(MKDIR) `dirname $@` | |
136 | - @$(CXX) \ | |
137 | - $(CFLAGS) \ | |
138 | - -DNDEBUG=1 \ | |
139 | - -o $@ -c $< | |
140 | - | |
141 | -$(OBJRLS)/%.o: \ | |
142 | - %.rc | |
143 | - | |
144 | - @echo $< ... | |
145 | - @$(MKDIR) `dirname $@` | |
146 | - @$(WINDRES) $< -O coff -o $@ | |
147 | - | |
148 | -#---[ Misc Rules ]----------------------------------------------------------------------- | |
149 | - | |
150 | -$(POTDIR)/$(LIBNAME)/%.pot: \ | |
151 | - %.cc | |
152 | - | |
153 | - @echo $(notdir $@) ... | |
154 | - @$(MKDIR) `dirname $@` | |
155 | - @$(XGETTEXT) \ | |
156 | - --language=C \ | |
157 | - --keyword=_ \ | |
158 | - --keyword=N_ \ | |
159 | - --keyword=MSG_:2 \ | |
160 | - --output=$@ \ | |
161 | - $< | |
162 | - @touch $@ | |
163 | - | |
164 | -$(POTDIR)/$(LIBNAME)/%.pot: \ | |
165 | - %.rc | |
166 | - | |
167 | - @echo $< ... | |
168 | - @$(MKDIR) `dirname $@` | |
169 | - @touch $@ | |
170 | - | |
171 | -#---[ Release Targets ]------------------------------------------------------------------ | |
172 | - | |
173 | -all: \ | |
174 | - $(BINRLS)/$(LIBNAME)@DLLEXT@ \ | |
175 | - $(BINRLS)/static/$(LIBNAME).a \ | |
176 | - $(POTDIR)/$(LIBNAME).pot | |
177 | - | |
178 | - | |
179 | -Release: \ | |
180 | - $(BINRLS)/$(LIBNAME)@DLLEXT@ \ | |
181 | - $(BINRLS)/static/$(LIBNAME).a | |
182 | - | |
183 | - | |
184 | -$(BINRLS)/$(LIBNAME)@DLLEXT@: \ | |
185 | - $(BINRLS)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@ | |
186 | - | |
187 | - @echo $< ... | |
188 | - @rm -f $@ | |
189 | - @$(LN_S) \ | |
190 | - $^ \ | |
191 | - $@ | |
192 | - | |
193 | -$(BINRLS)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@: \ | |
194 | - $(BINRLS)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@ | |
195 | - | |
196 | - @rm -f $@ | |
197 | - @$(LN_S) \ | |
198 | - $^ \ | |
199 | - $@ | |
200 | - | |
201 | -$(BINRLS)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@: \ | |
202 | - $(foreach SRC, $(basename $(SOURCES)), $(OBJRLS)/$(SRC).o) | |
203 | - | |
204 | - @$(MKDIR) $(@D) | |
205 | - @echo $< ... | |
206 | - | |
207 | - @$(LD) \ | |
208 | - @DLL_LDFLAGS@ \ | |
209 | - -o $@ \ | |
210 | - $(LDFLAGS) \ | |
211 | - $(foreach SRC, $(basename $(SOURCES)), $(OBJRLS)/$(SRC).o) \ | |
212 | - -L$(BINRLS) \ | |
213 | - $(LIBS) \ | |
214 | - -l@LIB3270_NAME@ | |
215 | - | |
216 | -$(BINRLS)/static/$(LIBNAME).a: \ | |
217 | - $(foreach SRC, $(basename $(SOURCES)), $(OBJRLS)/$(SRC).o) | |
218 | - | |
219 | - @echo $@ ... | |
220 | - @$(MKDIR) `dirname $@` | |
221 | - @$(AR) rcs $@ $^ | |
222 | - | |
223 | - | |
224 | -#---[ Install Targets ]------------------------------------------------------------------ | |
225 | - | |
226 | -install: \ | |
227 | - install-shared \ | |
228 | - install-static \ | |
229 | - install-dev | |
230 | - | |
231 | -install-shared: \ | |
232 | - $(BINRLS)/$(LIBNAME)@DLLEXT@ | |
233 | - | |
234 | - # Install library | |
235 | - @mkdir -p $(DESTDIR)$(libdir) | |
236 | - | |
237 | - @$(INSTALL_PROGRAM) \ | |
238 | - $(BINRLS)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@ \ | |
239 | - $(DESTDIR)$(libdir) | |
240 | - | |
241 | - | |
242 | - @$(LN_S) \ | |
243 | - $(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@ \ | |
244 | - $(DESTDIR)$(libdir)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@ | |
245 | - | |
246 | - @$(LN_S) \ | |
247 | - $(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@ \ | |
248 | - $(DESTDIR)$(libdir)/$(LIBNAME)@DLLEXT@ | |
249 | - | |
250 | -install-static: \ | |
251 | - $(BINRLS)/static/$(LIBNAME).a | |
252 | - | |
253 | - # Install static library | |
254 | - @mkdir -p $(DESTDIR)$(libdir) | |
255 | - @$(INSTALL_DATA) \ | |
256 | - $(BINRLS)/static/$(LIBNAME).a \ | |
257 | - $(DESTDIR)$(libdir)/$(LIBNAME)static.a | |
258 | - | |
259 | - # Install static PKG-CONFIG files | |
260 | - @mkdir -p $(DESTDIR)$(libdir)/pkgconfig | |
261 | - @$(INSTALL_DATA) \ | |
262 | - lib3270++static.pc \ | |
263 | - $(DESTDIR)$(libdir)/pkgconfig/lib3270++static.pc | |
264 | - | |
265 | -install-dev: | |
266 | - | |
267 | - # Install SDK | |
268 | - @$(INSTALL_DATA) \ | |
269 | - ../include/lib3270++.h \ | |
270 | - $(DESTDIR)$(includedir)/lib3270++.h | |
271 | - | |
272 | - # Install PKG-CONFIG files | |
273 | - @mkdir -p $(DESTDIR)$(libdir)/pkgconfig | |
274 | - @$(INSTALL_DATA) \ | |
275 | - lib3270++.pc \ | |
276 | - $(DESTDIR)$(libdir)/pkgconfig/lib3270++.pc | |
277 | - | |
278 | - | |
279 | -#---[ Misc Targets ]--------------------------------------------------------------------- | |
280 | - | |
281 | -$(POTDIR)/$(LIBNAME).pot: \ | |
282 | - $(foreach SRC, $(basename $(SOURCES)), $(POTDIR)/$(LIBNAME)/$(SRC).pot) | |
283 | - | |
284 | - @rm -f $@ | |
285 | - @mkdir -p `dirname $@` | |
286 | - @$(MSGCAT) --sort-output $^ > $@ | |
287 | - | |
288 | -locale: \ | |
289 | - $(POTDIR)/$(LIBNAME).pot | |
290 | - | |
291 | - | |
292 | -#---[ Debug Targets ]-------------------------------------------------------------------- | |
293 | - | |
294 | -Debug: \ | |
295 | - $(BINDBG)/$(LIBNAME)@EXEEXT@ | |
296 | - | |
297 | -$(BINDBG)/$(LIBNAME)@EXEEXT@: \ | |
298 | - $(foreach SRC, $(basename $(TEST_SOURCES)), $(OBJDBG)/$(SRC).o) \ | |
299 | - $(BINDBG)/$(LIBNAME)@DLLEXT@ | |
300 | - | |
301 | - @$(MKDIR) `dirname $@` | |
302 | - @echo $< ... | |
303 | - @$(LD) \ | |
304 | - -Wl,--rpath,$(BINDBG) \ | |
305 | - -o $@ \ | |
306 | - $^ \ | |
307 | - $(LDFLAGS) \ | |
308 | - $(LIBS) | |
309 | - | |
310 | -run: \ | |
311 | - $(BINDBG)/$(LIBNAME)@EXEEXT@ | |
312 | - | |
313 | -ifeq ($(VALGRIND),no) | |
314 | - | |
315 | - @LD_LIBRARY_PATH=$(BINDBG) \ | |
316 | - $(BINDBG)/$(LIBNAME)@EXEEXT@ | |
317 | - | |
318 | -else | |
319 | - @touch valgrind.suppression | |
320 | - | |
321 | - @LD_LIBRARY_PATH=$(BINDBG) \ | |
322 | - $(VALGRIND) --leak-check=full --track-origins=yes --gen-suppressions=all --suppressions=valgrind.suppression \ | |
323 | - $(BINDBG)/$(LIBNAME)@EXEEXT@ | |
324 | -endif | |
325 | - | |
326 | - | |
327 | -$(BINDBG)/$(LIBNAME)@DLLEXT@: \ | |
328 | - $(BINDBG)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@ | |
329 | - | |
330 | - @echo $< ... | |
331 | - @rm -f $@ | |
332 | - @$(LN_S) \ | |
333 | - $^ \ | |
334 | - $@ | |
335 | - | |
336 | -$(BINDBG)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@: \ | |
337 | - $(BINDBG)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@ | |
338 | - | |
339 | - @rm -f $@ | |
340 | - @$(LN_S) \ | |
341 | - $^ \ | |
342 | - $@ | |
343 | - | |
344 | -$(BINDBG)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@: \ | |
345 | - $(foreach SRC, $(basename $(SOURCES)), $(OBJDBG)/$(SRC).o) | |
346 | - | |
347 | - @$(MKDIR) `dirname $@` | |
348 | - @echo $< ... | |
349 | - @$(LD) \ | |
350 | - -shared \ | |
351 | - -Wl,-soname,$(@F) \ | |
352 | - -Wl,--rpath,$(BINDBG) \ | |
353 | - -o $@ \ | |
354 | - $(LDFLAGS) \ | |
355 | - $(foreach SRC, $(basename $(SOURCES)), $(OBJDBG)/$(SRC).o) \ | |
356 | - -L$(BINDBG) \ | |
357 | - $(LIBS) \ | |
358 | - -l@LIB3270_NAME@ | |
359 | - | |
360 | -#---[ Clean Targets ]-------------------------------------------------------------------- | |
361 | - | |
362 | -clean: \ | |
363 | - cleanDebug \ | |
364 | - cleanRelease | |
365 | - | |
366 | - @rm -fr $(BASEDIR)/.tmp/$(LIBNAME) | |
367 | - @rm -fr $(POTDIR)/$(LIBNAME) | |
368 | - | |
369 | -cleanDebug: | |
370 | - | |
371 | - @rm -fr $(OBJDBG) | |
372 | - @rm -f $(BINDBG)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@ | |
373 | - @rm -f $(BINDBG)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@ | |
374 | - @rm -f $(BINDBG)/$(LIBNAME)@DLLEXT@ | |
375 | - | |
376 | -cleanRelease: | |
377 | - | |
378 | - @rm -fr $(OBJRLS) | |
379 | - | |
380 | - @rm -f $(BINRLS)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@ | |
381 | - @rm -f $(BINRLS)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@ | |
382 | - @rm -f $(BINRLS)/$(LIBNAME)@DLLEXT@ | |
383 | - | |
384 | - @rm -fr $(POTDIR) | |
385 | - @rm -f lib$(LIBNAME).pot | |
386 | - | |
387 | -clean: \ | |
388 | - cleanDebug \ | |
389 | - cleanRelease | |
390 | - | |
391 | - |
src/lib3270++/abstract.cc
... | ... | @@ -1,153 +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., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | - * | |
21 | - * Este programa está nomeado como lib3270++.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 | - */ | |
29 | - | |
30 | -/** | |
31 | - * @file src/lib3270++/abstract.cc | |
32 | - * | |
33 | - * @brief | |
34 | - * | |
35 | - * @author perry.werneck@gmail.com | |
36 | - * | |
37 | - */ | |
38 | - | |
39 | - #include "private.h" | |
40 | - #include <cstring> | |
41 | - | |
42 | - | |
43 | -/*---[ Implement ]----------------------------------------------------------------------------------*/ | |
44 | - | |
45 | - namespace TN3270 { | |
46 | - | |
47 | - Abstract::Session::Session() { | |
48 | - | |
49 | -#ifdef HAVE_ICONV | |
50 | - this->converter.local = (iconv_t) (-1); | |
51 | - this->converter.host = (iconv_t) (-1); | |
52 | -#endif | |
53 | - | |
54 | - this->baddr = 0; | |
55 | - | |
56 | - } | |
57 | - | |
58 | - Abstract::Session::~Session() { | |
59 | - | |
60 | -#ifdef HAVE_ICONV | |
61 | - | |
62 | - if(this->converter.local != (iconv_t) (-1)) | |
63 | - iconv_close(this->converter.local); | |
64 | - | |
65 | - if(this->converter.host != (iconv_t) (-1)) | |
66 | - iconv_close(this->converter.host); | |
67 | - | |
68 | -#endif | |
69 | - | |
70 | - } | |
71 | - | |
72 | - /// @brief Setup charsets | |
73 | - void Abstract::Session::setCharSet(const char *remote, const char *local) { | |
74 | - | |
75 | -#ifdef HAVE_ICONV | |
76 | - | |
77 | - if(this->converter.local != (iconv_t) (-1)) | |
78 | - iconv_close(converter.local); | |
79 | - | |
80 | - if(this->converter.host != (iconv_t) (-1)) | |
81 | - iconv_close(converter.host); | |
82 | - | |
83 | - if(strcmp(local,remote)) { | |
84 | - | |
85 | - // Local and remote charsets aren't the same, setup conversion | |
86 | - converter.local = iconv_open(local, remote); | |
87 | - converter.host = iconv_open(remote,local); | |
88 | - | |
89 | - } else { | |
90 | - // Same charset, doesn't convert | |
91 | - converter.local = converter.host = (iconv_t)(-1); | |
92 | - } | |
93 | - | |
94 | -#else | |
95 | - | |
96 | - #error No ICONV Support | |
97 | - | |
98 | -#endif | |
99 | - | |
100 | - | |
101 | - } | |
102 | - | |
103 | - /// @brief Converte charset. | |
104 | - std::string Abstract::Session::convertCharset(iconv_t &converter, const char *str) { | |
105 | - | |
106 | - std::string rc; | |
107 | - | |
108 | -#ifdef HAVE_ICONV | |
109 | - size_t in = strlen(str); | |
110 | - | |
111 | - if(in && converter != (iconv_t)(-1)) { | |
112 | - | |
113 | - size_t out = (in << 1); | |
114 | - char * ptr; | |
115 | - char * outBuffer = (char *) malloc(out); | |
116 | - ICONV_CONST char * inBuffer = (ICONV_CONST char *) str; | |
117 | - | |
118 | - memset(ptr=outBuffer,0,out); | |
119 | - | |
120 | - iconv(converter,NULL,NULL,NULL,NULL); // Reset state | |
121 | - | |
122 | - if(iconv(converter,&inBuffer,&in,&ptr,&out) != ((size_t) -1)) | |
123 | - rc.assign(outBuffer); | |
124 | - | |
125 | - free(outBuffer); | |
126 | - | |
127 | - } | |
128 | - | |
129 | -#else | |
130 | - | |
131 | - rc = str; | |
132 | - | |
133 | -#endif // HAVE_ICONV | |
134 | - | |
135 | - return rc; | |
136 | - } | |
137 | - | |
138 | - /// @brief Converte string recebida do host para o charset atual. | |
139 | - std::string Abstract::Session::convertFromHost(const char *str) const { | |
140 | - return convertCharset(const_cast<Abstract::Session *>(this)->converter.local,str); | |
141 | - } | |
142 | - | |
143 | - /// @brief Converte string do charset atual para o charset do host. | |
144 | - std::string Abstract::Session::convertToHost(const char *str) const { | |
145 | - return convertCharset(const_cast<Abstract::Session *>(this)->converter.host,str); | |
146 | - } | |
147 | - | |
148 | - | |
149 | - } | |
150 | - | |
151 | - | |
152 | - | |
153 | - |
src/lib3270++/events.cc
... | ... | @@ -1,56 +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., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | - * | |
21 | - * Este programa está nomeado como lib3270++.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 | - */ | |
29 | - | |
30 | -/** | |
31 | - * @file src/lib3270++/events.cc | |
32 | - * | |
33 | - * @brief | |
34 | - * | |
35 | - * @author perry.werneck@gmail.com | |
36 | - * | |
37 | - */ | |
38 | - | |
39 | - #include "private.h" | |
40 | - | |
41 | - | |
42 | -/*---[ Implement ]----------------------------------------------------------------------------------*/ | |
43 | - | |
44 | - namespace TN3270 { | |
45 | - | |
46 | - Event::Event(enum Event::Type type) { | |
47 | - this->type = type; | |
48 | - } | |
49 | - | |
50 | - Event::~Event() { | |
51 | - } | |
52 | - | |
53 | - } | |
54 | - | |
55 | - | |
56 | - |
src/lib3270++/host.cc
... | ... | @@ -1,180 +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., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | - * | |
21 | - * Este programa está nomeado como lib3270++.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 | - */ | |
29 | - | |
30 | -/** | |
31 | - * @file src/lib3270++/host.cc | |
32 | - * | |
33 | - * @brief | |
34 | - * | |
35 | - * @author perry.werneck@gmail.com | |
36 | - * | |
37 | - */ | |
38 | - | |
39 | - #include "private.h" | |
40 | - | |
41 | - | |
42 | -/*---[ Implement ]----------------------------------------------------------------------------------*/ | |
43 | - | |
44 | - namespace TN3270 { | |
45 | - | |
46 | - Host::Host(const char *id, const char *url, time_t timeout) { | |
47 | - this->timeout = timeout; | |
48 | - this->session = Session::create(id); | |
49 | - if(url) { | |
50 | - this->connect(url); | |
51 | - } | |
52 | - } | |
53 | - | |
54 | - Host::~Host() { | |
55 | - delete this->session; | |
56 | - this->session = nullptr; | |
57 | - } | |
58 | - | |
59 | - void Host::connect(const char *url, bool sync) { | |
60 | - this->session->connect(url); | |
61 | - if(sync) { | |
62 | - this->sync(); | |
63 | - } | |
64 | - } | |
65 | - | |
66 | - | |
67 | - /// @brief Writes characters to the associated file from the put area | |
68 | - int Host::sync() { | |
69 | - this->session->waitForReady(this->timeout); | |
70 | - return 0; | |
71 | - } | |
72 | - | |
73 | - /// @brief Writes characters to the associated output sequence from the put area. | |
74 | - int Host::overflow(int c) { | |
75 | - | |
76 | - if (c != EOF) { | |
77 | - char str[] = { static_cast<char>(c), 0 }; | |
78 | - this->session->push((const char *) str); | |
79 | - } else { | |
80 | - sync(); | |
81 | - } | |
82 | - | |
83 | - return c; | |
84 | - | |
85 | - } | |
86 | - | |
87 | - Host & Host::push(const Action action) { | |
88 | - session->push(action); | |
89 | - sync(); | |
90 | - return *this; | |
91 | - } | |
92 | - | |
93 | - bool Host::isReady() const { | |
94 | - this->session->waitForReady(this->timeout); | |
95 | - return getProgramMessage() == MESSAGE_NONE; | |
96 | - } | |
97 | - | |
98 | - bool Host::isConnected() const { | |
99 | - this->session->waitForReady(this->timeout); | |
100 | - return getConnectionState() == CONNECTED_TN3270E; | |
101 | - } | |
102 | - | |
103 | - std::string Host::toString() const { | |
104 | - | |
105 | - this->session->waitForReady(this->timeout); | |
106 | - | |
107 | - if(this->session->getConnectionState() == TN3270::DISCONNECTED) { | |
108 | - throw std::system_error(ENOTCONN, std::system_category()); | |
109 | - } | |
110 | - | |
111 | - return this->session->toString(); | |
112 | - } | |
113 | - | |
114 | - std::string Host::toString(int baddr, size_t len, char lf) const { | |
115 | - | |
116 | - this->session->waitForReady(this->timeout); | |
117 | - | |
118 | - if(this->session->getConnectionState() == TN3270::DISCONNECTED) { | |
119 | - throw std::system_error(ENOTCONN, std::system_category()); | |
120 | - } | |
121 | - | |
122 | - return this->session->toString(baddr,len,lf); | |
123 | - | |
124 | - } | |
125 | - | |
126 | - std::string Host::toString(int row, int col, size_t sz, char lf) const { | |
127 | - | |
128 | - this->session->waitForReady(this->timeout); | |
129 | - | |
130 | - if(this->session->getConnectionState() == TN3270::DISCONNECTED) { | |
131 | - throw std::system_error(ENOTCONN, std::system_category()); | |
132 | - } | |
133 | - | |
134 | - return this->session->toString(row,col,sz,lf); | |
135 | - | |
136 | - | |
137 | - } | |
138 | - | |
139 | - Host & Host::pop(int baddr, std::string &text) { | |
140 | - | |
141 | - this->session->waitForReady(this->timeout); | |
142 | - | |
143 | - if(this->session->getConnectionState() == TN3270::DISCONNECTED) { | |
144 | - throw std::system_error(ENOTCONN, std::system_category()); | |
145 | - } | |
146 | - | |
147 | - session->pop(baddr, text); | |
148 | - | |
149 | - return *this; | |
150 | - } | |
151 | - | |
152 | - Host & Host::pop(int row, int col, std::string &text) { | |
153 | - | |
154 | - this->session->waitForReady(this->timeout); | |
155 | - | |
156 | - if(this->session->getConnectionState() == TN3270::DISCONNECTED) { | |
157 | - throw std::system_error(ENOTCONN, std::system_category()); | |
158 | - } | |
159 | - | |
160 | - session->pop(row,col,text); | |
161 | - | |
162 | - return *this; | |
163 | - } | |
164 | - | |
165 | - Host & Host::pop(std::string &text) { | |
166 | - | |
167 | - this->session->waitForReady(this->timeout); | |
168 | - | |
169 | - if(this->session->getConnectionState() == TN3270::DISCONNECTED) { | |
170 | - throw std::system_error(ENOTCONN, std::system_category()); | |
171 | - } | |
172 | - | |
173 | - session->pop(text); | |
174 | - | |
175 | - return *this; | |
176 | - } | |
177 | - | |
178 | - | |
179 | - } | |
180 | - |
src/lib3270++/ipc/session.cc
... | ... | @@ -1,365 +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., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 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 | -/** | |
31 | - * @file src/lib3270++/ipc/session.cc | |
32 | - * | |
33 | - * @brief Implements lib3270 access using IPC calls. | |
34 | - * | |
35 | - * @author perry.werneck@gmail.com | |
36 | - * | |
37 | - */ | |
38 | - | |
39 | - #include "../private.h" | |
40 | - #include <cstring> | |
41 | - | |
42 | - using std::string; | |
43 | - | |
44 | -/*---[ Implement ]----------------------------------------------------------------------------------*/ | |
45 | - | |
46 | - namespace TN3270 { | |
47 | - | |
48 | - void IPC::Session::connect(const char *url) { | |
49 | - Request request(*this,"connect"); | |
50 | - request.push(url).call(); | |
51 | - } | |
52 | - | |
53 | - void IPC::Session::disconnect() { | |
54 | - Request(*this,"disconnect").call(); | |
55 | - } | |
56 | - | |
57 | - // Wait for session state. | |
58 | - void IPC::Session::waitForReady(time_t timeout) { | |
59 | - | |
60 | - int rc; | |
61 | - | |
62 | - time_t end = time(nullptr) + timeout; | |
63 | - | |
64 | - while(time(nullptr) < end) { | |
65 | - | |
66 | - debug("Running waitForReady request..."); | |
67 | - | |
68 | - Request(*this,"waitForReady") | |
69 | - .push((uint32_t) 1) | |
70 | - .call() | |
71 | - .pop(rc); | |
72 | - | |
73 | - debug("Wait for ready returned ",rc); | |
74 | - | |
75 | - if(rc == 0) | |
76 | - return; | |
77 | - | |
78 | - } | |
79 | - | |
80 | - throw std::system_error(ETIMEDOUT, std::system_category()); | |
81 | - } | |
82 | - | |
83 | - std::string IPC::Session::toString(int baddr, size_t len, char lf) const { | |
84 | - | |
85 | - std::string rc; | |
86 | - | |
87 | - Request(*this,"getStringAtAddress") | |
88 | - .push((uint32_t) baddr) | |
89 | - .push((uint32_t) len) | |
90 | - .push((uint8_t) lf) | |
91 | - .call() | |
92 | - .pop(rc); | |
93 | - | |
94 | - return rc; | |
95 | - } | |
96 | - | |
97 | - std::string IPC::Session::toString(int row, int col, size_t sz, char lf) const { | |
98 | - | |
99 | - std::string rc; | |
100 | - | |
101 | - Request(*this,"getStringAt") | |
102 | - .push((uint32_t) row) | |
103 | - .push((uint32_t) col) | |
104 | - .push((uint32_t) sz) | |
105 | - .push((uint8_t) lf) | |
106 | - .call() | |
107 | - .pop(rc); | |
108 | - | |
109 | - return rc; | |
110 | - } | |
111 | - | |
112 | - ProgramMessage IPC::Session::getProgramMessage() const { | |
113 | - | |
114 | - int program_message; | |
115 | - getProperty("program_message",program_message); | |
116 | - return (ProgramMessage) program_message; | |
117 | - | |
118 | - } | |
119 | - | |
120 | - ConnectionState IPC::Session::getConnectionState() const { | |
121 | - | |
122 | - int cstate; | |
123 | - getProperty("cstate",cstate); | |
124 | - return (ConnectionState) cstate; | |
125 | - | |
126 | - } | |
127 | - | |
128 | - /// @brief Set field at current position, jumps to next writable field. | |
129 | - TN3270::Session & IPC::Session::push(const char *text) { | |
130 | - | |
131 | - int rc; | |
132 | - | |
133 | - Request(*this,"setString") | |
134 | - .push(text) | |
135 | - .call() | |
136 | - .pop(rc); | |
137 | - | |
138 | - if(rc) { | |
139 | - throw std::system_error((int) rc, std::system_category()); | |
140 | - } | |
141 | - | |
142 | - return *this; | |
143 | - | |
144 | - } | |
145 | - | |
146 | - TN3270::Session & IPC::Session::push(int baddr, const std::string &text) { | |
147 | - | |
148 | - int rc; | |
149 | - | |
150 | - Request(*this,"setStringAtAddress") | |
151 | - .push((uint32_t) baddr) | |
152 | - .push(text.c_str()) | |
153 | - .call() | |
154 | - .pop(rc); | |
155 | - | |
156 | - if(rc) { | |
157 | - throw std::system_error((int) rc, std::system_category()); | |
158 | - } | |
159 | - | |
160 | - return *this; | |
161 | - | |
162 | - } | |
163 | - | |
164 | - TN3270::Session & IPC::Session::push(int row, int col, const std::string &text) { | |
165 | - | |
166 | - int32_t rc; | |
167 | - | |
168 | - Request(*this,"setStringAt") | |
169 | - .push((uint32_t) row) | |
170 | - .push((uint32_t) col) | |
171 | - .push(text.c_str()) | |
172 | - .call() | |
173 | - .pop(rc); | |
174 | - | |
175 | - if(rc) { | |
176 | - throw std::system_error((int) rc, std::system_category()); | |
177 | - } | |
178 | - | |
179 | - return *this; | |
180 | - | |
181 | - } | |
182 | - | |
183 | - TN3270::Session & IPC::Session::push(const PFKey key) { | |
184 | - | |
185 | - int32_t rc; | |
186 | - | |
187 | - Request(*this,"pfkey") | |
188 | - .push((uint32_t) key) | |
189 | - .call() | |
190 | - .pop(rc); | |
191 | - | |
192 | - if(rc) { | |
193 | - throw std::system_error((int) rc, std::system_category()); | |
194 | - } | |
195 | - | |
196 | - return *this; | |
197 | - | |
198 | - } | |
199 | - | |
200 | - TN3270::Session & IPC::Session::push(const PAKey key) { | |
201 | - | |
202 | - int32_t rc; | |
203 | - | |
204 | - Request(*this,"pakey") | |
205 | - .push((uint32_t) key) | |
206 | - .call() | |
207 | - .pop(rc); | |
208 | - | |
209 | - if(rc) { | |
210 | - throw std::system_error((int) rc, std::system_category()); | |
211 | - } | |
212 | - | |
213 | - return *this; | |
214 | - | |
215 | - } | |
216 | - | |
217 | - TN3270::Session & IPC::Session::push(const Action action) { | |
218 | - | |
219 | - const char * actions[] = { | |
220 | - "enter", | |
221 | - "erase", | |
222 | - "eraseeof", | |
223 | - "eraseeol", | |
224 | - "eraseinput" | |
225 | - }; | |
226 | - | |
227 | - if( ((size_t) action) > (sizeof(actions)/sizeof(actions[0]))) { | |
228 | - throw std::system_error(EINVAL, std::system_category()); | |
229 | - } | |
230 | - | |
231 | - return this->action(actions[action]); | |
232 | - | |
233 | - } | |
234 | - | |
235 | - TN3270::Session & IPC::Session::pop(int baddr, std::string &text) { | |
236 | - | |
237 | - Request(*this,"getFieldAtAddress") | |
238 | - .push((uint32_t) baddr) | |
239 | - .call() | |
240 | - .pop(text); | |
241 | - | |
242 | - return *this; | |
243 | - } | |
244 | - | |
245 | - TN3270::Session & IPC::Session::pop(int row, int col, std::string &text) { | |
246 | - | |
247 | - Request(*this,"getFieldAt") | |
248 | - .push((uint32_t) row) | |
249 | - .push((uint32_t) col) | |
250 | - .call() | |
251 | - .pop(text); | |
252 | - | |
253 | - return *this; | |
254 | - } | |
255 | - | |
256 | - TN3270::Session & IPC::Session::pop(std::string &text) { | |
257 | - | |
258 | - Request(*this,"getFieldAtCursor") | |
259 | - .call() | |
260 | - .pop(text); | |
261 | - | |
262 | - return *this; | |
263 | - | |
264 | - } | |
265 | - | |
266 | - /// @brief Set cursor address. | |
267 | - /// | |
268 | - /// @param addr Cursor address. | |
269 | - TN3270::Session & IPC::Session::setCursorPosition(unsigned short addr) { | |
270 | - | |
271 | - int32_t rc; | |
272 | - | |
273 | - Request(*this,"setCursorAddress") | |
274 | - .push((uint32_t) addr) | |
275 | - .call() | |
276 | - .pop(rc); | |
277 | - | |
278 | - if(rc) { | |
279 | - throw std::system_error((int) rc, std::system_category()); | |
280 | - } | |
281 | - | |
282 | - return *this; | |
283 | - | |
284 | - } | |
285 | - | |
286 | - /// @brief Set cursor position. | |
287 | - /// | |
288 | - /// @param row New cursor row. | |
289 | - /// @param col New cursor column. | |
290 | - TN3270::Session & IPC::Session::setCursorPosition(unsigned short row, unsigned short col) { | |
291 | - | |
292 | - int32_t rc; | |
293 | - | |
294 | - Request(*this,"setCursorPosition") | |
295 | - .push((uint32_t) row) | |
296 | - .push((uint32_t) col) | |
297 | - .call() | |
298 | - .pop(rc); | |
299 | - | |
300 | - if(rc) { | |
301 | - throw std::system_error((int) rc, std::system_category()); | |
302 | - } | |
303 | - | |
304 | - return *this; | |
305 | - | |
306 | - } | |
307 | - | |
308 | - void IPC::Session::getProperty(const char *name, int &value) const { | |
309 | - | |
310 | - Request(*this,false,name) | |
311 | - .call() | |
312 | - .pop(value); | |
313 | - | |
314 | - } | |
315 | - | |
316 | - void IPC::Session::getProperty(const char *name, std::string &value) const { | |
317 | - | |
318 | - Request(*this,false,name) | |
319 | - .call() | |
320 | - .pop(value); | |
321 | - | |
322 | - } | |
323 | - | |
324 | - void IPC::Session::getProperty(const char *name, bool &value) const { | |
325 | - throw std::system_error(ENOENT, std::system_category()); | |
326 | - } | |
327 | - | |
328 | - /// @brief Get lib3270 version. | |
329 | - std::string IPC::Session::getVersion() const { | |
330 | - | |
331 | - string rc; | |
332 | - getProperty("version",rc); | |
333 | - return rc; | |
334 | - | |
335 | - } | |
336 | - | |
337 | - /// @brief Get lib3270 revision. | |
338 | - std::string IPC::Session::getRevision() const { | |
339 | - | |
340 | - string rc; | |
341 | - getProperty("revision",rc); | |
342 | - return rc; | |
343 | - | |
344 | - } | |
345 | - | |
346 | - /// @brief Execute action by name. | |
347 | - TN3270::Session & IPC::Session::action(const char *action_name) { | |
348 | - | |
349 | - int32_t rc; | |
350 | - | |
351 | - Request(*this,"action") | |
352 | - .push(action_name) | |
353 | - .call() | |
354 | - .pop(rc); | |
355 | - | |
356 | - if(rc) { | |
357 | - throw std::system_error((int) rc, std::system_category()); | |
358 | - } | |
359 | - | |
360 | - return *this; | |
361 | - } | |
362 | - | |
363 | - } | |
364 | - | |
365 | - |
src/lib3270++/lib3270++.cbp
... | ... | @@ -1,70 +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="C++ Bindings for lib3270" /> | |
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/lib3270++" 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 | - <Add option="-DDEBUG=1" /> | |
18 | - </Compiler> | |
19 | - </Target> | |
20 | - <Target title="Release"> | |
21 | - <Option output=".bin/Release/C++ Bindings for lib3270" prefix_auto="1" extension_auto="1" /> | |
22 | - <Option object_output=".obj/Release/" /> | |
23 | - <Option type="1" /> | |
24 | - <Option compiler="gcc" /> | |
25 | - <Compiler> | |
26 | - <Add option="-O2" /> | |
27 | - <Add option="-std=c++11" /> | |
28 | - <Add option="-DNDEBUG=1" /> | |
29 | - </Compiler> | |
30 | - <Linker> | |
31 | - <Add option="-s" /> | |
32 | - </Linker> | |
33 | - </Target> | |
34 | - </Build> | |
35 | - <Compiler> | |
36 | - <Add option="-Wall" /> | |
37 | - <Add option="`pkg-config --clags lib3270`" /> | |
38 | - <Add directory="../include" /> | |
39 | - </Compiler> | |
40 | - <Linker> | |
41 | - <Add option="`pkg-config --libs lib3270`" /> | |
42 | - </Linker> | |
43 | - <Unit filename="../include/config.h.in" /> | |
44 | - <Unit filename="../include/lib3270++.h" /> | |
45 | - <Unit filename="../include/lib3270.h" /> | |
46 | - <Unit filename="../include/lib3270/action_table.h" /> | |
47 | - <Unit filename="../include/lib3270/actions.h" /> | |
48 | - <Unit filename="../include/lib3270/popup.h" /> | |
49 | - <Unit filename="../include/lib3270/session.h" /> | |
50 | - <Unit filename="abstract.cc" /> | |
51 | - <Unit filename="events.cc" /> | |
52 | - <Unit filename="host.cc" /> | |
53 | - <Unit filename="ipc/session.cc" /> | |
54 | - <Unit filename="linux/request.cc" /> | |
55 | - <Unit filename="linux/session.cc" /> | |
56 | - <Unit filename="local/events.cc" /> | |
57 | - <Unit filename="local/session.cc" /> | |
58 | - <Unit filename="private.h" /> | |
59 | - <Unit filename="session.cc" /> | |
60 | - <Unit filename="testprogram/testprogram.cc" /> | |
61 | - <Unit filename="windows/request.cc" /> | |
62 | - <Unit filename="windows/session.cc" /> | |
63 | - <Extensions> | |
64 | - <code_completion /> | |
65 | - <envvars /> | |
66 | - <debugger /> | |
67 | - <lib_finder disable_auto="1" /> | |
68 | - </Extensions> | |
69 | - </Project> | |
70 | -</CodeBlocks_project_file> |
src/lib3270++/lib3270++.pc.in
... | ... | @@ -1,16 +0,0 @@ |
1 | -prefix=@prefix@ | |
2 | -exec_prefix=@exec_prefix@ | |
3 | -libdir=@libdir@ | |
4 | -includedir=@includedir@ | |
5 | - | |
6 | -version_major=@PACKAGE_MAJOR_VERSION@ | |
7 | -version_minor=@PACKAGE_MINOR_VERSION@ | |
8 | -sdk_version=@LIB3270_SDK_VERSION@ | |
9 | - | |
10 | -Name: @PACKAGE_NAME@ | |
11 | -Description: @PACKAGE_DESCRIPTION@ | |
12 | -Version: @PACKAGE_VERSION@ | |
13 | -Libs: -L\@libdir@ -l3270++ | |
14 | -Libs.private: @LIBSSL_LIBS@ @LIBICONV@ @INTL_LIBS@ -l@LIB3270_NAME@ | |
15 | -Cflags: -I@includedir@ | |
16 | - |
src/lib3270++/lib3270++static.pc.in
... | ... | @@ -1,15 +0,0 @@ |
1 | -prefix=@prefix@ | |
2 | -exec_prefix=@exec_prefix@ | |
3 | -libdir=@libdir@ | |
4 | -includedir=@includedir@ | |
5 | - | |
6 | -version_major=@PACKAGE_MAJOR_VERSION@ | |
7 | -version_minor=@PACKAGE_MINOR_VERSION@ | |
8 | -sdk_version=@LIB3270_SDK_VERSION@ | |
9 | - | |
10 | -Name: @PACKAGE_NAME@ | |
11 | -Description: @PACKAGE_DESCRIPTION@ | |
12 | -Version: @PACKAGE_VERSION@ | |
13 | -Libs: -L\@libdir@ -l@LIB3270_NAME@++static @LIBSSL_LIBS@ @LIBICONV@ @INTL_LIBS@ | |
14 | -Cflags: -I@includedir@ | |
15 | - |
src/lib3270++/linux/request.cc
... | ... | @@ -1,267 +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., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 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 | -/** | |
31 | - * @file src/lib3270++/linux/request.cc | |
32 | - * | |
33 | - * @brief Implements D-Bus message. | |
34 | - * | |
35 | - * @author perry.werneck@gmail.com | |
36 | - * | |
37 | - */ | |
38 | - | |
39 | - #include "../private.h" | |
40 | - | |
41 | - using std::string; | |
42 | - | |
43 | -/*---[ Implement ]----------------------------------------------------------------------------------*/ | |
44 | - | |
45 | - namespace TN3270 { | |
46 | - | |
47 | - IPC::Request::Request(const Session &session) { | |
48 | - this->conn = session.conn; | |
49 | - this->msg.in = nullptr; | |
50 | - this->msg.out = nullptr; | |
51 | - } | |
52 | - | |
53 | - IPC::Request::Request(const Session &session, const char *method) : Request(session) { | |
54 | - | |
55 | - this->msg.out = dbus_message_new_method_call( | |
56 | - session.name.c_str(), // Destination | |
57 | - session.path.c_str(), // Path | |
58 | - session.interface.c_str(), // Interface | |
59 | - method // Method | |
60 | - ); | |
61 | - | |
62 | - if(!msg.out) { | |
63 | - throw std::runtime_error("Can't create D-Bus Method Call"); | |
64 | - } | |
65 | - | |
66 | - } | |
67 | - | |
68 | - IPC::Request::Request(const Session &session, bool isSet, const char *property) : Request(session) { | |
69 | - | |
70 | -/* | |
71 | - dbus-send \ | |
72 | - --session \ | |
73 | - --dest=br.com.bb.pw3270.a\ | |
74 | - --print-reply \ | |
75 | - "/br/com/bb/tn3270/session" \ | |
76 | - "org.freedesktop.DBus.Properties.Get" \ | |
77 | - string:br.com.bb.tn3270.session \ | |
78 | - string:${1} | |
79 | -*/ | |
80 | - this->msg.out = dbus_message_new_method_call( | |
81 | - session.name.c_str(), // Destination | |
82 | - session.path.c_str(), // Path | |
83 | - "org.freedesktop.DBus.Properties", // Interface | |
84 | - (isSet ? "Set" : "Get") | |
85 | - ); | |
86 | - | |
87 | - if(!msg.out) { | |
88 | - throw std::runtime_error("Can't create D-Bus Property Call"); | |
89 | - } | |
90 | - | |
91 | - // | |
92 | - // https://dbus.freedesktop.org/doc/dbus-specification.html#standard-interfaces-properties | |
93 | - // org.freedesktop.DBus.Properties.Get (in STRING interface_name, | |
94 | - // in STRING property_name, | |
95 | - // out VARIANT value); | |
96 | - // org.freedesktop.DBus.Properties.Set (in STRING interface_name, | |
97 | - // in STRING property_name, | |
98 | - // | |
99 | - const char *interface_name = session.interface.c_str(); | |
100 | - | |
101 | - dbus_message_append_args( | |
102 | - this->msg.out, | |
103 | - DBUS_TYPE_STRING,&interface_name, | |
104 | - DBUS_TYPE_STRING,&property, | |
105 | - DBUS_TYPE_INVALID | |
106 | - ); | |
107 | - | |
108 | - } | |
109 | - | |
110 | - IPC::Request::~Request() { | |
111 | - if(msg.out) { | |
112 | - dbus_message_unref(msg.out); | |
113 | - } | |
114 | - if(msg.in) { | |
115 | - dbus_message_unref(msg.in); | |
116 | - } | |
117 | - } | |
118 | - | |
119 | - IPC::Request & IPC::Request::call() { | |
120 | - | |
121 | - if(msg.in) { | |
122 | - dbus_message_unref(msg.in); | |
123 | - msg.in = nullptr; | |
124 | - } | |
125 | - | |
126 | - DBusError error; | |
127 | - dbus_error_init(&error); | |
128 | - this->msg.in = dbus_connection_send_with_reply_and_block(this->conn,this->msg.out,10000,&error); | |
129 | - | |
130 | - if(!this->msg.in) { | |
131 | - string message = error.message; | |
132 | - dbus_error_free(&error); | |
133 | - throw std::runtime_error(message.c_str()); | |
134 | - } | |
135 | - | |
136 | - dbus_message_iter_init(msg.in, &msg.iter); | |
137 | - | |
138 | - debug(__FUNCTION__," got a valid response"); | |
139 | - | |
140 | - return *this; | |
141 | - | |
142 | - } | |
143 | - | |
144 | - IPC::Request & IPC::Request::push(const char *arg) { | |
145 | - dbus_message_append_args(this->msg.out,DBUS_TYPE_STRING,&arg,DBUS_TYPE_INVALID); | |
146 | - return *this; | |
147 | - } | |
148 | - | |
149 | - IPC::Request & IPC::Request::push(const bool arg) { | |
150 | - dbus_message_append_args(this->msg.out,DBUS_TYPE_BOOLEAN,&arg,DBUS_TYPE_INVALID); | |
151 | - return *this; | |
152 | - } | |
153 | - | |
154 | - IPC::Request & IPC::Request::push(const uint8_t arg) { | |
155 | - dbus_message_append_args(this->msg.out,DBUS_TYPE_BYTE,&arg,DBUS_TYPE_INVALID); | |
156 | - return *this; | |
157 | - } | |
158 | - | |
159 | - IPC::Request & IPC::Request::push(const int32_t arg) { | |
160 | - dbus_message_append_args(this->msg.out,DBUS_TYPE_INT32,&arg,DBUS_TYPE_INVALID); | |
161 | - return *this; | |
162 | - } | |
163 | - | |
164 | - IPC::Request & IPC::Request::push(const uint32_t arg) { | |
165 | - dbus_message_append_args(this->msg.out,DBUS_TYPE_UINT32,&arg,DBUS_TYPE_INVALID); | |
166 | - return *this; | |
167 | - } | |
168 | - | |
169 | - | |
170 | - IPC::Request & IPC::Request::pop(std::string &value) { | |
171 | - | |
172 | - const char * str = ""; | |
173 | - | |
174 | - if(dbus_message_iter_get_arg_type(&msg.iter) == DBUS_TYPE_STRING) { | |
175 | - | |
176 | - dbus_message_iter_get_basic(&msg.iter, &str); | |
177 | - | |
178 | - } else if(dbus_message_iter_get_arg_type(&msg.iter) == DBUS_TYPE_VARIANT) { | |
179 | - | |
180 | - DBusMessageIter sub; | |
181 | - int current_type; | |
182 | - | |
183 | - dbus_message_iter_recurse(&msg.iter, &sub); | |
184 | - | |
185 | - while ((current_type = dbus_message_iter_get_arg_type(&sub)) != DBUS_TYPE_INVALID) { | |
186 | - | |
187 | - if (current_type == DBUS_TYPE_STRING) { | |
188 | - dbus_message_iter_get_basic(&sub, &str); | |
189 | - break; | |
190 | - } | |
191 | - dbus_message_iter_next(&sub); | |
192 | - } | |
193 | - | |
194 | - } else { | |
195 | - | |
196 | - debug("Argument type is ", ((char) dbus_message_iter_get_arg_type(&msg.iter)) ); | |
197 | - throw std::runtime_error("Expected an string data type"); | |
198 | - | |
199 | - } | |
200 | - | |
201 | - dbus_message_iter_next(&msg.iter); | |
202 | - | |
203 | - value.assign(str); | |
204 | - | |
205 | - debug(__FUNCTION__,"= \"",str,"\""); | |
206 | - | |
207 | - return *this; | |
208 | - } | |
209 | - | |
210 | - static int getIntValue(DBusMessageIter &iter) { | |
211 | - | |
212 | - if(dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_INT32) { | |
213 | - | |
214 | - dbus_int32_t rc = 0; | |
215 | - dbus_message_iter_get_basic(&iter, &rc); | |
216 | - return (int) rc; | |
217 | - | |
218 | - } else if(dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_INT16) { | |
219 | - | |
220 | - dbus_int16_t rc = 0; | |
221 | - dbus_message_iter_get_basic(&iter, &rc); | |
222 | - return (int) rc; | |
223 | - | |
224 | - } else if(dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_VARIANT) { | |
225 | - | |
226 | - DBusMessageIter sub; | |
227 | - int current_type; | |
228 | - | |
229 | - dbus_message_iter_recurse(&iter, &sub); | |
230 | - | |
231 | - while ((current_type = dbus_message_iter_get_arg_type(&sub)) != DBUS_TYPE_INVALID) { | |
232 | - | |
233 | - if (current_type == DBUS_TYPE_INT32) { | |
234 | - | |
235 | - dbus_int32_t rc = 0; | |
236 | - dbus_message_iter_get_basic(&sub, &rc); | |
237 | - return (int) rc; | |
238 | - | |
239 | - } else if (current_type == DBUS_TYPE_INT16) { | |
240 | - dbus_int16_t rc = 0; | |
241 | - dbus_message_iter_get_basic(&sub, &rc); | |
242 | - return (int) rc; | |
243 | - | |
244 | - } | |
245 | - dbus_message_iter_next(&sub); | |
246 | - } | |
247 | - | |
248 | - } | |
249 | - | |
250 | - debug("Argument type is ", ((char) dbus_message_iter_get_arg_type(&iter)) ); | |
251 | - throw std::runtime_error("Expected an integer data type"); | |
252 | - | |
253 | - } | |
254 | - | |
255 | - IPC::Request & IPC::Request::Request::pop(int &value) { | |
256 | - | |
257 | - value = getIntValue(msg.iter); | |
258 | - dbus_message_iter_next(&msg.iter); | |
259 | - debug(__FUNCTION__,"= \"",value,"\""); | |
260 | - | |
261 | - return *this; | |
262 | - | |
263 | - } | |
264 | - | |
265 | - } | |
266 | - | |
267 | - |
src/lib3270++/linux/session.cc
... | ... | @@ -1,98 +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., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 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 | -/** | |
31 | - * @file src/lib3270++/ipc/linux/session.cc | |
32 | - * | |
33 | - * @brief Implements Linux session create/destroy session. | |
34 | - * | |
35 | - * @author perry.werneck@gmail.com | |
36 | - * | |
37 | - */ | |
38 | - | |
39 | - #include "../private.h" | |
40 | - #include <cstring> | |
41 | - #include <lib3270/trace.h> | |
42 | - | |
43 | - using std::string; | |
44 | - | |
45 | -/*---[ Implement ]----------------------------------------------------------------------------------*/ | |
46 | - | |
47 | - static void throws_if_error(DBusError &err) { | |
48 | - | |
49 | - if(dbus_error_is_set(&err)) { | |
50 | - string message = err.message; | |
51 | - dbus_error_free(&err); | |
52 | - throw std::runtime_error(message.c_str()); | |
53 | - } | |
54 | - | |
55 | - return; | |
56 | - | |
57 | - } | |
58 | - | |
59 | - namespace TN3270 { | |
60 | - | |
61 | - IPC::Session::Session(const char *id) : Abstract::Session() { | |
62 | - | |
63 | - // Create D-Bus session. | |
64 | - DBusError err; | |
65 | - | |
66 | - dbus_error_init(&err); | |
67 | - this->conn = dbus_bus_get(DBUS_BUS_SESSION, &err); | |
68 | - | |
69 | - debug("dbus_bus_get conn=",conn); | |
70 | - | |
71 | - throws_if_error(err); | |
72 | - | |
73 | - if(!conn) | |
74 | - throw std::runtime_error("DBUS Connection failed"); | |
75 | - | |
76 | - auto sep = strchr(id,':'); | |
77 | - if(!sep) { | |
78 | - throw std::system_error(EINVAL, std::system_category()); | |
79 | - } | |
80 | - | |
81 | - this->name = "br.com.bb."; | |
82 | - this->name += string(id,(sep - id)); | |
83 | - this->name += "."; | |
84 | - this->name += (sep+1); | |
85 | - this->path = "/br/com/bb/tn3270/session"; | |
86 | - this->interface = "br.com.bb.tn3270.session"; | |
87 | - | |
88 | - debug("D-Bus Object name=\"",this->name,"\" D-Bus Object path=\"",this->path,"\""); | |
89 | - | |
90 | - } | |
91 | - | |
92 | - IPC::Session::~Session() { | |
93 | - | |
94 | - } | |
95 | - | |
96 | - } | |
97 | - | |
98 | - |
src/lib3270++/local/events.cc
... | ... | @@ -1,175 +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., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | - * | |
21 | - * Este programa está nomeado como lib3270++.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 | - */ | |
29 | - | |
30 | -/** | |
31 | - * @file src/lib3270++/local/events.cc | |
32 | - * | |
33 | - * @brief Implement lib3270 direct access events. | |
34 | - * | |
35 | - * @author perry.werneck@gmail.com | |
36 | - * | |
37 | - */ | |
38 | - | |
39 | - #include "../private.h" | |
40 | - #include <stdio.h> | |
41 | - | |
42 | - extern "C" { | |
43 | - #include <lib3270/actions.h> | |
44 | - #include <lib3270/session.h> | |
45 | - } | |
46 | - | |
47 | - using std::string; | |
48 | - | |
49 | -/*---[ Implement ]----------------------------------------------------------------------------------*/ | |
50 | - | |
51 | -#ifndef HAVE_VASPRINTF | |
52 | - int vasprintf(char **strp, const char *fmt, va_list ap) { | |
53 | - char buf[1024]; | |
54 | - | |
55 | - int nc = vsnprintf(buf, sizeof(buf), fmt, args); | |
56 | - | |
57 | - if(nc < 0) { | |
58 | - | |
59 | - *strp = strdup(_("Error in vasprintf")); | |
60 | - | |
61 | - } else if (nc < sizeof(buf)) { | |
62 | - | |
63 | - *strp = malloc(nc+1); | |
64 | - strcpy(*strp, buf); | |
65 | - | |
66 | - } else { | |
67 | - | |
68 | - *strp = malloc(nc + 1); | |
69 | - if(vsnprintf(*strp, nc, fmt, args) < 0) { | |
70 | - free(*strp); | |
71 | - *strp = strdup(NULL,_( "Out of memory in vasprintf" ) ); | |
72 | - } | |
73 | - | |
74 | - } | |
75 | - | |
76 | - return nc; | |
77 | - } | |
78 | -#endif // !HAVE_VASPRINTF | |
79 | - | |
80 | - namespace TN3270 { | |
81 | - | |
82 | - /// @brief Popup Handler. | |
83 | - void Local::Session::popupHandler(H3270 *h3270, LIB3270_NOTIFY type, const char *title, const char *msg, const char *fmt, va_list arg) { | |
84 | - | |
85 | - Local::Session * session = (Local::Session *) lib3270_get_user_data(h3270); | |
86 | - | |
87 | - if(!session) { | |
88 | - throw std::runtime_error(_( "Invalid session handler" )); | |
89 | - } | |
90 | - | |
91 | - class PopupEvent : public TN3270::Event { | |
92 | - private: | |
93 | - LIB3270_NOTIFY type; | |
94 | - string title; | |
95 | - string msg; | |
96 | - string description; | |
97 | - | |
98 | - public: | |
99 | - PopupEvent(LIB3270_NOTIFY type, const char *title, const char *msg, const char *fmt, va_list arg) : Event(Event::Popup) { | |
100 | - | |
101 | - this->type = type; | |
102 | - this->title = title; | |
103 | - this->msg = msg; | |
104 | - | |
105 | - char * buffer = NULL; | |
106 | - if(vasprintf(&buffer,fmt,arg) != -1) { | |
107 | - this->description = buffer; | |
108 | - free(buffer); | |
109 | - } | |
110 | - | |
111 | -#ifdef DEBUG | |
112 | - std::cerr << "Popup:" << std::endl | |
113 | - << "\t" << title << std::endl | |
114 | - << "\t" << msg << std::endl | |
115 | - << "\t" << description << std::endl; | |
116 | -#endif // DEBUG | |
117 | - | |
118 | - } | |
119 | - | |
120 | - virtual ~PopupEvent() { | |
121 | - } | |
122 | - | |
123 | - /// @brief Get event description. | |
124 | - std::string toString() const override { | |
125 | - return msg; | |
126 | - } | |
127 | - | |
128 | - | |
129 | - }; | |
130 | - | |
131 | - session->fire(PopupEvent(type,title,msg,fmt,arg)); | |
132 | - | |
133 | - } | |
134 | - | |
135 | - /// @brief Connect Handler. | |
136 | - void Local::Session::connectHandler(H3270 *h3270, unsigned char connected) { | |
137 | - | |
138 | - Local::Session * session = (Local::Session *) lib3270_get_user_data(h3270); | |
139 | - | |
140 | - if(!session) { | |
141 | - throw std::runtime_error(_("Invalid session handler")); | |
142 | - } | |
143 | - | |
144 | - class ConnectionEvent : public TN3270::Event { | |
145 | - private: | |
146 | - bool connected; | |
147 | - | |
148 | - public: | |
149 | - ConnectionEvent(unsigned char connected) : Event(Event::Connection) { | |
150 | - this->connected = (connected != 0); | |
151 | - | |
152 | -#ifdef DEBUG | |
153 | - std::cerr << "Session is " << this->toString().c_str() << std::endl; | |
154 | -#endif // DEBUG | |
155 | - | |
156 | - } | |
157 | - | |
158 | - virtual ~ConnectionEvent() { | |
159 | - } | |
160 | - | |
161 | - /// @brief Get event description. | |
162 | - std::string toString() const override { | |
163 | - return this->connected ? _("connected") : _("disconnected"); | |
164 | - } | |
165 | - | |
166 | - }; | |
167 | - | |
168 | - session->fire(ConnectionEvent(connected)); | |
169 | - | |
170 | - } | |
171 | - | |
172 | - | |
173 | - } | |
174 | - | |
175 | - |
src/lib3270++/local/session.cc
... | ... | @@ -1,389 +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., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | - * | |
21 | - * Este programa está nomeado como lib3270++.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 | - */ | |
29 | - | |
30 | -/** | |
31 | - * @file src/lib3270++/local/session.cc | |
32 | - * | |
33 | - * @brief Implement lib3270 direct access layout (NO IPC). | |
34 | - * | |
35 | - * @author perry.werneck@gmail.com | |
36 | - * | |
37 | - */ | |
38 | - | |
39 | - #include "../private.h" | |
40 | - #include <lib3270/actions.h> | |
41 | - #include <lib3270/properties.h> | |
42 | - #include <cstring> | |
43 | - | |
44 | - extern "C" { | |
45 | - #include <lib3270/session.h> | |
46 | - } | |
47 | - | |
48 | - using std::string; | |
49 | - | |
50 | -/*---[ Implement ]----------------------------------------------------------------------------------*/ | |
51 | - | |
52 | - namespace TN3270 { | |
53 | - | |
54 | - Local::Session::Session() : Abstract::Session() { | |
55 | - | |
56 | - std::lock_guard<std::mutex> lock(sync); | |
57 | - | |
58 | - this->hSession = lib3270_session_new(""); | |
59 | - lib3270_set_user_data(this->hSession,(void *) this); | |
60 | - setCharSet(lib3270_get_display_charset(this->hSession)); | |
61 | - | |
62 | - lib3270_set_popup_handler(this->hSession, popupHandler); | |
63 | - | |
64 | - // Setup callbacks | |
65 | - struct lib3270_session_callbacks *cbk; | |
66 | - | |
67 | - cbk = lib3270_get_session_callbacks(this->hSession,sizeof(struct lib3270_session_callbacks)); | |
68 | - if(!cbk) { | |
69 | - throw std::runtime_error( _("Invalid callback table, possible version mismatch in lib3270") ); | |
70 | - } | |
71 | - | |
72 | - cbk->update_connect = connectHandler; | |
73 | - | |
74 | - | |
75 | - } | |
76 | - | |
77 | - Local::Session::~Session() { | |
78 | - | |
79 | - std::lock_guard<std::mutex> lock(sync); | |
80 | - | |
81 | - lib3270_session_free(this->hSession); | |
82 | - this->hSession = nullptr; | |
83 | - } | |
84 | - | |
85 | - void Local::Session::wait(time_t timeout) { | |
86 | - | |
87 | - std::lock_guard<std::mutex> lock(sync); | |
88 | - | |
89 | - int rc = lib3270_wait_for_ready(this->hSession, timeout); | |
90 | - | |
91 | - if(rc) { | |
92 | - throw std::system_error(rc, std::system_category()); | |
93 | - } | |
94 | - | |
95 | - } | |
96 | - | |
97 | - void Local::Session::connect(const char *url) { | |
98 | - std::lock_guard<std::mutex> lock(sync); | |
99 | - int rc = lib3270_connect_url(hSession,url,0); | |
100 | - | |
101 | - if(rc) { | |
102 | - throw std::system_error(rc, std::system_category()); | |
103 | - } | |
104 | - | |
105 | - } | |
106 | - | |
107 | - void Local::Session::disconnect() { | |
108 | - std::lock_guard<std::mutex> lock(sync); | |
109 | - lib3270_disconnect(hSession); | |
110 | - } | |
111 | - | |
112 | - // Wait for session state. | |
113 | - void Local::Session::waitForReady(time_t timeout) throw() { | |
114 | - this->wait(timeout); | |
115 | - } | |
116 | - | |
117 | - std::string Local::Session::toString(int baddr, size_t len, char lf) const { | |
118 | - | |
119 | - std::lock_guard<std::mutex> lock(const_cast<Local::Session *>(this)->sync); | |
120 | - | |
121 | - char * text = lib3270_get_string_at_address(hSession, baddr, len, lf); | |
122 | - | |
123 | - if(!text) { | |
124 | - throw std::runtime_error( _("Can't get screen contents") ); | |
125 | - } | |
126 | - | |
127 | - string rc = convertFromHost(text); | |
128 | - | |
129 | - lib3270_free(text); | |
130 | - | |
131 | - return rc; | |
132 | - | |
133 | - } | |
134 | - | |
135 | - std::string Local::Session::toString(int row, int col, size_t sz, char lf) const { | |
136 | - | |
137 | - std::lock_guard<std::mutex> lock(const_cast<Local::Session *>(this)->sync); | |
138 | - | |
139 | - char * text = lib3270_get_string_at(hSession, row, col, sz, lf); | |
140 | - | |
141 | - if(!text) { | |
142 | - throw std::runtime_error( _("Can't get screen contents") ); | |
143 | - } | |
144 | - | |
145 | - string rc = convertFromHost(text); | |
146 | - | |
147 | - lib3270_free(text); | |
148 | - | |
149 | - return rc; | |
150 | - } | |
151 | - | |
152 | - void Local::Session::getProperty(const char *name, int &value) const { | |
153 | - | |
154 | - const LIB3270_INT_PROPERTY * intprop = lib3270_get_int_properties_list(); | |
155 | - for(size_t ix = 0; intprop[ix].name; ix++) { | |
156 | - | |
157 | - if(!strcasecmp(name,intprop[ix].name)) { | |
158 | - | |
159 | - std::lock_guard<std::mutex> lock(const_cast<Local::Session *>(this)->sync); | |
160 | - | |
161 | - value = intprop[ix].get(hSession); | |
162 | - | |
163 | - if(value < 0 && errno != 0) { | |
164 | - throw std::system_error(errno, std::system_category()); | |
165 | - } | |
166 | - | |
167 | - | |
168 | - } | |
169 | - | |
170 | - } | |
171 | - | |
172 | - throw std::system_error(ENOENT, std::system_category()); | |
173 | - | |
174 | - } | |
175 | - | |
176 | - void Local::Session::getProperty(const char *name, std::string &value) const { | |
177 | - | |
178 | - const LIB3270_STRING_PROPERTY * strprop = lib3270_get_string_properties_list(); | |
179 | - | |
180 | - for(size_t ix = 0; strprop[ix].name; ix++) { | |
181 | - | |
182 | - if(!strcasecmp(name,strprop[ix].name)) { | |
183 | - | |
184 | - std::lock_guard<std::mutex> lock(const_cast<Local::Session *>(this)->sync); | |
185 | - | |
186 | - // Found it! | |
187 | - const char * str = strprop[ix].get(hSession); | |
188 | - | |
189 | - if(str) { | |
190 | - value.assign(str); | |
191 | - return; | |
192 | - } | |
193 | - | |
194 | - throw std::system_error(errno, std::system_category()); | |
195 | - | |
196 | - } | |
197 | - | |
198 | - } | |
199 | - | |
200 | - throw std::system_error(ENOENT, std::system_category()); | |
201 | - } | |
202 | - | |
203 | - void Local::Session::getProperty(const char *name, bool &value) const { | |
204 | - | |
205 | - LIB3270_TOGGLE toggle = lib3270_get_toggle_id(name); | |
206 | - if(toggle != (LIB3270_TOGGLE) -1) { | |
207 | - | |
208 | - // Is a Tn3270 toggle, get it! | |
209 | - std::lock_guard<std::mutex> lock(const_cast<Local::Session *>(this)->sync); | |
210 | - value = lib3270_get_toggle(hSession,toggle); | |
211 | - | |
212 | - } | |
213 | - | |
214 | - throw std::system_error(ENOENT, std::system_category()); | |
215 | - } | |
216 | - | |
217 | - ProgramMessage Local::Session::getProgramMessage() const { | |
218 | - std::lock_guard<std::mutex> lock(const_cast<Local::Session *>(this)->sync); | |
219 | - return (ProgramMessage) lib3270_get_program_message(this->hSession); | |
220 | - } | |
221 | - | |
222 | - ConnectionState Local::Session::getConnectionState() const { | |
223 | - std::lock_guard<std::mutex> lock(const_cast<Local::Session *>(this)->sync); | |
224 | - return (ConnectionState) lib3270_get_connection_state(this->hSession); | |
225 | - } | |
226 | - | |
227 | - /// @brief Set field at current position, jumps to next writable field. | |
228 | - TN3270::Session & Local::Session::push(const char *text) { | |
229 | - std::lock_guard<std::mutex> lock(sync); | |
230 | - return *this; | |
231 | - } | |
232 | - | |
233 | - TN3270::Session & Local::Session::push(int baddr, const std::string &text) { | |
234 | - std::lock_guard<std::mutex> lock(sync); | |
235 | - return *this; | |
236 | - } | |
237 | - | |
238 | - TN3270::Session & Local::Session::push(int row, int col, const std::string &text) { | |
239 | - std::lock_guard<std::mutex> lock(sync); | |
240 | - return *this; | |
241 | - } | |
242 | - | |
243 | - TN3270::Session & Local::Session::push(const PFKey key) { | |
244 | - std::lock_guard<std::mutex> lock(sync); | |
245 | - lib3270_pfkey(hSession,(int) key); | |
246 | - return *this; | |
247 | - } | |
248 | - | |
249 | - TN3270::Session & Local::Session::push(const PAKey key) { | |
250 | - std::lock_guard<std::mutex> lock(sync); | |
251 | - lib3270_pakey(hSession,(int) key); | |
252 | - return *this; | |
253 | - } | |
254 | - | |
255 | - TN3270::Session & Local::Session::push(const Action action) { | |
256 | - | |
257 | - typedef int (*ActionCallback)(H3270 *); | |
258 | - | |
259 | - static const ActionCallback actions[] = { | |
260 | - lib3270_enter, | |
261 | - lib3270_erase, | |
262 | - lib3270_eraseeof, | |
263 | - lib3270_eraseeol, | |
264 | - lib3270_eraseinput | |
265 | - }; | |
266 | - | |
267 | - if( ((size_t) action) > (sizeof(actions)/sizeof(actions[0]))) { | |
268 | - throw std::system_error(EINVAL, std::system_category()); | |
269 | - } | |
270 | - | |
271 | - std::lock_guard<std::mutex> lock(sync); | |
272 | - | |
273 | - int rc = actions[(size_t) action](hSession); | |
274 | - | |
275 | - if(rc) { | |
276 | - throw std::system_error(errno, std::system_category()); | |
277 | - } | |
278 | - | |
279 | - return *this; | |
280 | - } | |
281 | - | |
282 | - TN3270::Session & Local::Session::pop(int baddr, std::string &text) { | |
283 | - | |
284 | - std::lock_guard<std::mutex> lock(sync); | |
285 | - | |
286 | - if(!lib3270_is_connected(hSession)) { | |
287 | - throw std::system_error(ENOTCONN, std::system_category()); | |
288 | - } | |
289 | - | |
290 | - char *contents = lib3270_get_field_text_at(hSession, baddr); | |
291 | - | |
292 | - if(!contents) { | |
293 | - throw std::system_error(errno, std::system_category()); | |
294 | - } | |
295 | - | |
296 | - text.assign(convertFromHost(contents).c_str()); | |
297 | - | |
298 | - lib3270_free(contents); | |
299 | - | |
300 | - return *this; | |
301 | - } | |
302 | - | |
303 | - TN3270::Session & Local::Session::pop(int row, int col, std::string &text) { | |
304 | - return this->pop(lib3270_translate_to_address(hSession,row,col),text); | |
305 | - } | |
306 | - | |
307 | - TN3270::Session & Local::Session::pop(std::string &text) { | |
308 | - | |
309 | - std::lock_guard<std::mutex> lock(sync); | |
310 | - | |
311 | - if(!lib3270_is_connected(hSession)) { | |
312 | - throw std::system_error(ENOTCONN, std::system_category()); | |
313 | - } | |
314 | - | |
315 | - int baddr = lib3270_get_cursor_address(hSession); | |
316 | - if(baddr < 0) { | |
317 | - throw std::system_error(errno, std::system_category()); | |
318 | - } | |
319 | - | |
320 | - char *contents = lib3270_get_field_text_at(hSession, baddr); | |
321 | - | |
322 | - if(!contents) { | |
323 | - throw std::system_error(errno, std::system_category()); | |
324 | - } | |
325 | - | |
326 | - text.assign(convertFromHost(contents).c_str()); | |
327 | - | |
328 | - lib3270_free(contents); | |
329 | - | |
330 | - baddr = lib3270_get_next_unprotected(hSession,baddr); | |
331 | - if(!baddr) { | |
332 | - baddr = lib3270_get_next_unprotected(hSession,0); | |
333 | - } | |
334 | - | |
335 | - if(lib3270_set_cursor_address(hSession,baddr)) { | |
336 | - throw std::system_error(errno, std::system_category()); | |
337 | - } | |
338 | - | |
339 | - return *this; | |
340 | - } | |
341 | - | |
342 | - /// @brief Set cursor address. | |
343 | - /// | |
344 | - /// @param addr Cursor address. | |
345 | - TN3270::Session & Local::Session::setCursorPosition(unsigned short addr) { | |
346 | - | |
347 | - if(lib3270_set_cursor_address(hSession,addr) < 0) { | |
348 | - throw std::system_error(errno, std::system_category()); | |
349 | - } | |
350 | - | |
351 | - return *this; | |
352 | - } | |
353 | - | |
354 | - /// @brief Set cursor position. | |
355 | - /// | |
356 | - /// @param row New cursor row. | |
357 | - /// @param col New cursor column. | |
358 | - TN3270::Session & Local::Session::setCursorPosition(unsigned short row, unsigned short col) { | |
359 | - | |
360 | - if(lib3270_set_cursor_position(hSession,row,col)) { | |
361 | - throw std::system_error(errno, std::system_category()); | |
362 | - } | |
363 | - | |
364 | - return *this; | |
365 | - | |
366 | - } | |
367 | - | |
368 | - // Get properties. | |
369 | - std::string Local::Session::getVersion() const { | |
370 | - return lib3270_get_version(); | |
371 | - } | |
372 | - | |
373 | - std::string Local::Session::getRevision() const { | |
374 | - return lib3270_get_revision(); | |
375 | - } | |
376 | - | |
377 | - /// @brief Execute action by name. | |
378 | - TN3270::Session & Local::Session::action(const char *action_name) { | |
379 | - | |
380 | - if(lib3270_action(hSession,action_name)) { | |
381 | - throw std::system_error(errno, std::system_category()); | |
382 | - } | |
383 | - | |
384 | - return *this; | |
385 | - } | |
386 | - | |
387 | - } | |
388 | - | |
389 | - |
src/lib3270++/private.h
... | ... | @@ -1,385 +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., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | - * | |
21 | - * Este programa está nomeado como lib3270++.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 | - */ | |
29 | - | |
30 | -/** | |
31 | - * @file src/lib3270++/private.h | |
32 | - * | |
33 | - * @brief | |
34 | - * | |
35 | - * @author perry.werneck@gmail.com | |
36 | - * | |
37 | - */ | |
38 | - | |
39 | -#ifndef PRIVATE_H_INCLUDED | |
40 | - | |
41 | - #define PRIVATE_H_INCLUDED | |
42 | - | |
43 | - #include <config.h> | |
44 | - | |
45 | - #ifdef _WIN32 | |
46 | - #include <winsock2.h> | |
47 | - #include <windows.h> | |
48 | - #include <ws2tcpip.h> | |
49 | - #else | |
50 | - #include <dbus/dbus.h> | |
51 | - #endif // WIN32 | |
52 | - | |
53 | - #include <iostream> | |
54 | - #include <mutex> | |
55 | - #include <lib3270++.h> | |
56 | - #include <lib3270/popup.h> | |
57 | - #include <system_error> | |
58 | - #include <stdexcept> | |
59 | - | |
60 | -#ifdef HAVE_LIBINTL | |
61 | - #include <libintl.h> | |
62 | - #define _( x ) gettext(x) | |
63 | - #define N_( x ) x | |
64 | -#else | |
65 | - #define _( x ) x | |
66 | - #define N_( x ) x | |
67 | -#endif // HAVE_LIBINTL | |
68 | - | |
69 | -#ifdef HAVE_ICONV | |
70 | - #include <iconv.h> | |
71 | -#endif // HAVE_ICONV | |
72 | - | |
73 | -#ifdef WIN32 | |
74 | - #define SYSTEM_CHARSET "CP1252" | |
75 | -#else | |
76 | - #define SYSTEM_CHARSET "UTF-8" | |
77 | -#endif // WIN32 | |
78 | - | |
79 | -#ifdef DEBUG | |
80 | - | |
81 | - inline void console(std::ostream &out) { | |
82 | - out << std::endl; | |
83 | - } | |
84 | - | |
85 | - template<typename T, typename... Targs> | |
86 | - void console(std::ostream &out, T value, Targs... Fargs) { | |
87 | - out << value; | |
88 | - console(out, Fargs...); | |
89 | - } | |
90 | - | |
91 | - template<typename T, typename... Targs> | |
92 | - void log(T value, Targs... Fargs) { | |
93 | - console(std::clog,value,Fargs...); | |
94 | - } | |
95 | - | |
96 | - #define debug(...) log(__FILE__, "(", __LINE__, ") ", __VA_ARGS__); | |
97 | - | |
98 | -#else | |
99 | - | |
100 | - #define debug(...) /* __VA_ARGS__ */ | |
101 | - | |
102 | -#endif | |
103 | - | |
104 | - namespace TN3270 { | |
105 | - | |
106 | - namespace Abstract { | |
107 | - | |
108 | - class TN3270_PRIVATE Session : public TN3270::Session { | |
109 | - private: | |
110 | - | |
111 | -#ifdef HAVE_ICONV | |
112 | - struct { | |
113 | - | |
114 | - /// @brief Convert strings from host codepage to local codepage. | |
115 | - iconv_t local; | |
116 | - | |
117 | - /// @brief Convert string from local codepage to host codepage. | |
118 | - iconv_t host; | |
119 | - | |
120 | - } converter; | |
121 | -#endif | |
122 | - | |
123 | - /// @brief Converte charset. | |
124 | - static std::string convertCharset(iconv_t &converter, const char *str); | |
125 | - | |
126 | - protected: | |
127 | - | |
128 | - /// @brief Current in/out position. | |
129 | - int baddr; | |
130 | - | |
131 | - Session(); | |
132 | - virtual ~Session(); | |
133 | - | |
134 | - /// @brief Setup charsets | |
135 | - void setCharSet(const char *remote, const char *local = SYSTEM_CHARSET); | |
136 | - | |
137 | - /// @brief Converte string recebida do host para o charset atual. | |
138 | - std::string convertFromHost(const char *str) const; | |
139 | - | |
140 | - /// @brief Converte string do charset atual para o charset do host. | |
141 | - std::string convertToHost(const char *str) const; | |
142 | - | |
143 | - }; | |
144 | - | |
145 | - } | |
146 | - | |
147 | - /// @brief lib3270 direct access objects (no IPC); | |
148 | - namespace Local { | |
149 | - | |
150 | - class TN3270_PRIVATE Session : public TN3270::Abstract::Session { | |
151 | - private: | |
152 | - | |
153 | - /// @brief Handle of the related instance of lib3270 | |
154 | - H3270 * hSession; | |
155 | - | |
156 | - /// @brief Mutex to serialize access to lib3270 | |
157 | - std::mutex sync; | |
158 | - | |
159 | - /// @brief Popup Handler. | |
160 | - static void popupHandler(H3270 *session, LIB3270_NOTIFY type, const char *title, const char *msg, const char *fmt, va_list arg); | |
161 | - | |
162 | - /// @brief Connect Handler. | |
163 | - static void connectHandler(H3270 *session, unsigned char connected); | |
164 | - | |
165 | - /// @brief Wait for network events | |
166 | - void wait(time_t timeout = 5); | |
167 | - | |
168 | - public: | |
169 | - Session(); | |
170 | - virtual ~Session(); | |
171 | - | |
172 | - // Connect/disconnect | |
173 | - void connect(const char *url) override; | |
174 | - void disconnect() override; | |
175 | - | |
176 | - // Wait for session state. | |
177 | - void waitForReady(time_t timeout = 5) throw() override; | |
178 | - | |
179 | - // Get properties. | |
180 | - void getProperty(const char *name, int &value) const override; | |
181 | - void getProperty(const char *name, std::string &value) const override; | |
182 | - void getProperty(const char *name, bool &value) const override; | |
183 | - | |
184 | - std::string getVersion() const override; | |
185 | - std::string getRevision() const override; | |
186 | - | |
187 | - // Gets | |
188 | - std::string toString(int baddr, size_t len, char lf) const override; | |
189 | - std::string toString(int row, int col, size_t sz, char lf) const override; | |
190 | - | |
191 | - ProgramMessage getProgramMessage() const override; | |
192 | - | |
193 | - ConnectionState getConnectionState() const override; | |
194 | - | |
195 | - TN3270::Session & setCursorPosition(unsigned short addr) override; | |
196 | - TN3270::Session & setCursorPosition(unsigned short row, unsigned short col) override; | |
197 | - | |
198 | - /// @brief Set field at current posicion, jumps to next writable field. | |
199 | - TN3270::Session & push(const char *text) override; | |
200 | - | |
201 | - TN3270::Session & push(int baddr, const std::string &text) override; | |
202 | - TN3270::Session & push(int row, int col, const std::string &text) override; | |
203 | - TN3270::Session & push(const PFKey key) override; | |
204 | - TN3270::Session & push(const PAKey key) override; | |
205 | - TN3270::Session & push(const Action action) override; | |
206 | - | |
207 | - // Get contents. | |
208 | - TN3270::Session & pop(int baddr, std::string &text) override; | |
209 | - TN3270::Session & pop(int row, int col, std::string &text) override; | |
210 | - TN3270::Session & pop(std::string &text) override; | |
211 | - | |
212 | - /// @brief Execute action by name. | |
213 | - TN3270::Session & action(const char *action_name) override; | |
214 | - | |
215 | - }; | |
216 | - | |
217 | - } | |
218 | - | |
219 | - /// @brief IPC Based acess (Access and active instance of pw3270 or pw3270d) | |
220 | - namespace IPC { | |
221 | - | |
222 | - class Session; | |
223 | - | |
224 | - /// @brief PW3270 IPC Request/Response. | |
225 | - class Request { | |
226 | - private: | |
227 | - | |
228 | -#ifdef _WIN32 | |
229 | - /// @brief Pipe Handle. | |
230 | - HANDLE hPipe; | |
231 | - | |
232 | - /// @brief IPC Data type. | |
233 | - enum Type : uint8_t { | |
234 | - String = 's', | |
235 | - Boolean = 'b', | |
236 | - Uchar = 'y', | |
237 | - Int16 = 'n', | |
238 | - Uint16 = 'q', | |
239 | - Int32 = 'i', | |
240 | - Int32x = 'h', | |
241 | - Uint32 = 'u', | |
242 | - Int64 = 'x', | |
243 | - Uint64 = 't' | |
244 | - }; | |
245 | - | |
246 | - struct { | |
247 | - DWORD length; ///< @brief Length of input buffer. | |
248 | - DWORD used; ///< @brief Length of used block. | |
249 | - DWORD current; ///< @brief Offset of the current argument. | |
250 | - uint8_t * block; | |
251 | - } in; | |
252 | - | |
253 | - struct { | |
254 | - DWORD length; | |
255 | - DWORD used; | |
256 | - uint8_t * block; | |
257 | - } out; | |
258 | - | |
259 | - struct DataBlock { | |
260 | - Type type; | |
261 | - }; | |
262 | - | |
263 | - /// @brief Store value on data block. | |
264 | - DataBlock * pushBlock(const void *ptr, size_t len); | |
265 | - | |
266 | - /// @brief Get next argument. | |
267 | - DataBlock * getNextBlock() const; | |
268 | - | |
269 | -#else | |
270 | - struct { | |
271 | - DBusMessage * in; | |
272 | - DBusMessage * out; | |
273 | - DBusMessageIter iter; | |
274 | - | |
275 | - } msg; | |
276 | - DBusConnection * conn; | |
277 | - | |
278 | -#endif // _WIN32 | |
279 | - | |
280 | - Request(const Session &session); | |
281 | - | |
282 | - public: | |
283 | - | |
284 | - /// @brief Create a method call. | |
285 | - Request(const Session &session, const char *method); | |
286 | - | |
287 | - /// @brief Create a get/set property call. | |
288 | - /// | |
289 | - /// @param session Session object. | |
290 | - /// @param isSet true if this is a setProperty call. | |
291 | - /// @param property Property name. | |
292 | - // | |
293 | - Request(const Session &session, bool isSet, const char *property); | |
294 | - | |
295 | - ~Request(); | |
296 | - | |
297 | - Request & call(); | |
298 | - | |
299 | - // Push values | |
300 | - Request & push(const char *arg); | |
301 | - Request & push(const bool arg); | |
302 | - Request & push(const int32_t arg); | |
303 | - Request & push(const uint32_t arg); | |
304 | - Request & push(const uint8_t arg); | |
305 | - | |
306 | - // Pop values | |
307 | - Request & pop(std::string &value); | |
308 | - Request & pop(int &value); | |
309 | - | |
310 | - }; | |
311 | - | |
312 | - class TN3270_PRIVATE Session : public TN3270::Abstract::Session { | |
313 | - private: | |
314 | - | |
315 | - friend class Request; | |
316 | - | |
317 | -#ifdef _WIN32 | |
318 | - /// @brief Pipe Handle. | |
319 | - HANDLE hPipe; | |
320 | -#else | |
321 | - | |
322 | - DBusConnection * conn; | |
323 | - std::string name; ///< @brief D-Bus Object name. | |
324 | - std::string path; ///< @brief D-Bus Object path. | |
325 | - std::string interface; ///< @brief D-Bus interface. | |
326 | - | |
327 | -#endif // _WIN32 | |
328 | - | |
329 | - void call(Request &request); | |
330 | - | |
331 | - public: | |
332 | - | |
333 | - Session(const char *id); | |
334 | - virtual ~Session(); | |
335 | - | |
336 | - // Connect/disconnect | |
337 | - void connect(const char *url) override; | |
338 | - void disconnect() override; | |
339 | - | |
340 | - // Wait for session state. | |
341 | - void waitForReady(time_t timeout = 5) override; | |
342 | - | |
343 | - // Get properties. | |
344 | - void getProperty(const char *name, int &value) const override; | |
345 | - void getProperty(const char *name, std::string &value) const override; | |
346 | - void getProperty(const char *name, bool &value) const override; | |
347 | - | |
348 | - std::string getVersion() const override; | |
349 | - std::string getRevision() const override; | |
350 | - | |
351 | - // Gets | |
352 | - std::string toString(int baddr, size_t len, char lf) const override; | |
353 | - std::string toString(int row, int col, size_t sz, char lf) const override; | |
354 | - | |
355 | - ProgramMessage getProgramMessage() const override; | |
356 | - | |
357 | - ConnectionState getConnectionState() const override; | |
358 | - | |
359 | - TN3270::Session & setCursorPosition(unsigned short addr) override; | |
360 | - TN3270::Session & setCursorPosition(unsigned short row, unsigned short col) override; | |
361 | - | |
362 | - /// @brief Set field at current posicion, jumps to next writable field. | |
363 | - TN3270::Session & push(const char *text) override; | |
364 | - | |
365 | - TN3270::Session & push(int baddr, const std::string &text) override; | |
366 | - TN3270::Session & push(int row, int col, const std::string &text) override; | |
367 | - TN3270::Session & push(const PFKey key) override; | |
368 | - TN3270::Session & push(const PAKey key) override; | |
369 | - TN3270::Session & push(const Action action) override; | |
370 | - | |
371 | - // Get contents. | |
372 | - TN3270::Session & pop(int baddr, std::string &text) override; | |
373 | - TN3270::Session & pop(int row, int col, std::string &text) override; | |
374 | - TN3270::Session & pop(std::string &text) override; | |
375 | - | |
376 | - /// @brief Execute action by name. | |
377 | - TN3270::Session & action(const char *action_name) override; | |
378 | - | |
379 | - }; | |
380 | - | |
381 | - } | |
382 | - | |
383 | - } | |
384 | - | |
385 | -#endif // PRIVATE_H_INCLUDED |
src/lib3270++/session.cc
... | ... | @@ -1,78 +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., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | - * | |
21 | - * Este programa está nomeado como lib3270++.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 | - */ | |
29 | - | |
30 | -/** | |
31 | - * @file src/lib3270++/session.cc | |
32 | - * | |
33 | - * @brief | |
34 | - * | |
35 | - * @author perry.werneck@gmail.com | |
36 | - * | |
37 | - */ | |
38 | - | |
39 | - #include "private.h" | |
40 | - | |
41 | - | |
42 | -/*---[ Implement ]----------------------------------------------------------------------------------*/ | |
43 | - | |
44 | - namespace TN3270 { | |
45 | - | |
46 | - /// @brief Create a tn3270 session. | |
47 | - Session * Session::create(const char *id) { | |
48 | - | |
49 | - if(!id) { | |
50 | - return new Local::Session(); | |
51 | - } | |
52 | - | |
53 | - return new IPC::Session(id); | |
54 | - | |
55 | - } | |
56 | - | |
57 | - | |
58 | - Session::Session() { | |
59 | - | |
60 | - } | |
61 | - | |
62 | - Session::~Session() { | |
63 | - | |
64 | - } | |
65 | - | |
66 | - void Session::insert(Event::Type type, std::function <void(const Event &event)> listener) { | |
67 | - } | |
68 | - | |
69 | - /// @brief Fire event. | |
70 | - void Session::fire(const Event &event) { | |
71 | - | |
72 | - | |
73 | - } | |
74 | - | |
75 | - } | |
76 | - | |
77 | - | |
78 | - |
src/lib3270++/testprogram/testprogram.cc
... | ... | @@ -1,103 +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., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | - * | |
21 | - * Este programa está nomeado como lib3270++.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 | - */ | |
29 | - | |
30 | -/** | |
31 | - * @file src/lib3270++/testprogram/testprogram.cc | |
32 | - * | |
33 | - * @brief | |
34 | - * | |
35 | - * @author perry.werneck@gmail.com | |
36 | - * | |
37 | - */ | |
38 | - | |
39 | - #include <getopt.h> | |
40 | - #include <cstdlib> | |
41 | - #include <lib3270++.h> | |
42 | - | |
43 | - using namespace std; | |
44 | - | |
45 | -/*---[ Implement ]----------------------------------------------------------------------------------*/ | |
46 | - | |
47 | - int main(int argc, char **argv) { | |
48 | - | |
49 | - const char * session = "pw3270:a"; | |
50 | - | |
51 | - #pragma GCC diagnostic push | |
52 | - #pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant" | |
53 | - static struct option options[] = { | |
54 | - { "session", required_argument, 0, 's' }, | |
55 | - { 0, 0, 0, 0} | |
56 | - | |
57 | - }; | |
58 | - #pragma GCC diagnostic pop | |
59 | - | |
60 | - int long_index =0; | |
61 | - int opt; | |
62 | - while((opt = getopt_long(argc, argv, "s:", options, &long_index )) != -1) { | |
63 | - | |
64 | - switch(opt) { | |
65 | - case 's': | |
66 | - session = optarg; | |
67 | - break; | |
68 | - | |
69 | - } | |
70 | - | |
71 | - } | |
72 | - | |
73 | - TN3270::Host host{session}; | |
74 | - | |
75 | - try { | |
76 | - | |
77 | - cout | |
78 | - << "Version: " << host.getVersion() | |
79 | - << "\tRevision: " << host.getRevision() | |
80 | - << std::endl; | |
81 | - | |
82 | - cout | |
83 | - << "Connection state is " << host.getConnectionState() | |
84 | - << "\tProgram message is " << host.getProgramMessage() | |
85 | - << std::endl; | |
86 | - | |
87 | - // host.connect(getenv("LIB3270_DEFAULT_HOST")); | |
88 | - | |
89 | - if(host) { | |
90 | - cout << host << endl; | |
91 | - } | |
92 | - | |
93 | - } catch(const std::exception &e) { | |
94 | - | |
95 | - cerr << std::endl << e.what() << std::endl << std::endl; | |
96 | - | |
97 | - } | |
98 | - | |
99 | - | |
100 | - return 0; | |
101 | - } | |
102 | - | |
103 | - |
src/lib3270++/valgrind.suppression
src/lib3270++/windows/request.cc
... | ... | @@ -1,191 +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., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 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 | -/** | |
31 | - * @file src/lib3270++/windows/request.cc | |
32 | - * | |
33 | - * @brief Implements WIN32 Pipe Based IPC. | |
34 | - * | |
35 | - * @author perry.werneck@gmail.com | |
36 | - * | |
37 | - */ | |
38 | - | |
39 | - #include "../private.h" | |
40 | - | |
41 | - using std::string; | |
42 | - | |
43 | -/*---[ Implement ]----------------------------------------------------------------------------------*/ | |
44 | - | |
45 | - namespace TN3270 { | |
46 | - | |
47 | - #define PIPE_BUFFER_LENGTH 8192 | |
48 | - | |
49 | - IPC::Request::Request(const Session &session) { | |
50 | - | |
51 | - this->hPipe = session.hPipe; | |
52 | - | |
53 | - in.length = PIPE_BUFFER_LENGTH; | |
54 | - in.used = 0; | |
55 | - in.block = new uint8_t[in.length]; | |
56 | - | |
57 | - out.length = PIPE_BUFFER_LENGTH; | |
58 | - out.used = 0; | |
59 | - out.block = new uint8_t[out.length]; | |
60 | - | |
61 | - } | |
62 | - | |
63 | - IPC::Request::Request(const Session &session, const char *method) : Request(session) { | |
64 | - | |
65 | - // Add name | |
66 | - strcpy((char *) out.block, method); | |
67 | - out.used += strlen((char *) method) + 1; | |
68 | - | |
69 | - // Add ID | |
70 | - *((uint16_t *) (out.block + out.used)) = (uint16_t) 3; | |
71 | - out.used += sizeof(uint16_t); | |
72 | - | |
73 | - } | |
74 | - | |
75 | - IPC::Request::Request(const Session &session, bool isSet, const char *property) : Request(session) { | |
76 | - | |
77 | - // Add name | |
78 | - strcpy((char *) out.block, property); | |
79 | - out.used += strlen((char *) property) + 1; | |
80 | - | |
81 | - // Add ID (SetProperty = 2, getProperty = 1) | |
82 | - *((uint16_t *) (out.block + out.used)) = (uint16_t) (isSet ? 2 : 1); | |
83 | - out.used += sizeof(uint16_t); | |
84 | - | |
85 | - } | |
86 | - | |
87 | - IPC::Request::~Request() { | |
88 | - | |
89 | - delete[] ((uint8_t *) in.block); | |
90 | - delete[] ((uint8_t *) out.block); | |
91 | - | |
92 | - } | |
93 | - | |
94 | - /// @brief Store value on data block. | |
95 | - IPC::Request::DataBlock * IPC::Request::pushBlock(const void *ptr, size_t length) { | |
96 | - | |
97 | - if((out.used + length + sizeof(IPC::Request::DataBlock)) >= out.length) { | |
98 | - throw std::runtime_error("Too big"); | |
99 | - } | |
100 | - | |
101 | - IPC::Request::DataBlock * rc = (IPC::Request::DataBlock *) (out.block + out.used); | |
102 | - memcpy(((uint8_t *) (rc+1)), ((uint8_t *) ptr), length); | |
103 | - | |
104 | - out.used += (sizeof(IPC::Request::DataBlock) + length); | |
105 | - | |
106 | - return rc; | |
107 | - | |
108 | - } | |
109 | - | |
110 | - /// @brief Get next argument. | |
111 | - IPC::Request::DataBlock * IPC::Request::getNextBlock() const { | |
112 | - | |
113 | - if((in.current + sizeof(IPC::Request::DataBlock)) >= in.used) { | |
114 | - throw std::runtime_error("Out of range"); | |
115 | - } | |
116 | - | |
117 | - return (IPC::Request::DataBlock *) (in.block + in.current); | |
118 | - | |
119 | - } | |
120 | - | |
121 | - IPC::Request & IPC::Request::push(const char *arg) { | |
122 | - pushBlock(arg, strlen(arg)+1)->type = IPC::Request::String; | |
123 | - return *this; | |
124 | - } | |
125 | - | |
126 | - IPC::Request & IPC::Request::push(const bool arg) { | |
127 | - uint8_t value = (uint8_t) (arg ? 0xff : 0); | |
128 | - pushBlock(&value, sizeof(value))->type = IPC::Request::Boolean; | |
129 | - return *this; | |
130 | - } | |
131 | - | |
132 | - IPC::Request & IPC::Request::push(const uint8_t arg) { | |
133 | - pushBlock(&arg, sizeof(arg))->type = IPC::Request::Uchar; | |
134 | - return *this; | |
135 | - } | |
136 | - | |
137 | - IPC::Request & IPC::Request::push(const int32_t arg) { | |
138 | - pushBlock(&arg, sizeof(arg))->type = IPC::Request::Int32; | |
139 | - return *this; | |
140 | - } | |
141 | - | |
142 | - IPC::Request & IPC::Request::push(const uint32_t arg) { | |
143 | - pushBlock(&arg, sizeof(arg))->type = IPC::Request::Uint32; | |
144 | - return *this; | |
145 | - } | |
146 | - | |
147 | - IPC::Request & IPC::Request::pop(std::string &value) { | |
148 | - DataBlock * block = getNextBlock(); | |
149 | - | |
150 | - if(block->type != IPC::Request::String) | |
151 | - throw std::runtime_error("Invalid format"); | |
152 | - | |
153 | - const char *ptr = (const char *) (block+1); | |
154 | - | |
155 | - in.current += (strlen(ptr)+1+sizeof(DataBlock)); | |
156 | - | |
157 | - value.assign(ptr); | |
158 | - | |
159 | - return *this; | |
160 | - } | |
161 | - | |
162 | - IPC::Request & IPC::Request::Request::pop(int &value) { | |
163 | - | |
164 | - DataBlock * block = getNextBlock(); | |
165 | - | |
166 | - switch(block->type) { | |
167 | - case IPC::Request::Int16: | |
168 | - value = * ((int16_t *) (block+1)); | |
169 | - in.current += sizeof(int16_t) + sizeof(DataBlock); | |
170 | - break; | |
171 | - | |
172 | - case IPC::Request::Int32: | |
173 | - value = * ((int32_t *) (block+1)); | |
174 | - in.current += sizeof(int32_t) + sizeof(DataBlock); | |
175 | - break; | |
176 | - | |
177 | - case IPC::Request::Int64: | |
178 | - value = * ((int64_t *) (block+1)); | |
179 | - in.current += sizeof(int64_t) + sizeof(DataBlock); | |
180 | - break; | |
181 | - | |
182 | - default: | |
183 | - throw std::runtime_error("Invalid format"); | |
184 | - } | |
185 | - | |
186 | - return *this; | |
187 | - } | |
188 | - | |
189 | - } | |
190 | - | |
191 | - |
src/lib3270++/windows/resources.rc.in
... | ... | @@ -1,29 +0,0 @@ |
1 | -#include <windows.h> | |
2 | - | |
3 | -VS_VERSION_INFO VERSIONINFO | |
4 | -FILEVERSION @PACKAGE_MAJOR_VERSION@,@PACKAGE_MINOR_VERSION@,@PACKAGE_MAJOR_RELEASE@,0 | |
5 | -PRODUCTVERSION @PACKAGE_MAJOR_VERSION@,@PACKAGE_MINOR_VERSION@,@PACKAGE_MAJOR_RELEASE@,0 | |
6 | - | |
7 | -BEGIN | |
8 | - | |
9 | - BLOCK "StringFileInfo" | |
10 | - BEGIN | |
11 | - BLOCK "080904E4" | |
12 | - BEGIN | |
13 | - VALUE "FileDescription", "3270 C++ Access Library\0" | |
14 | - VALUE "CompanyName", "Banco do Brasil S/A.\0" | |
15 | - VALUE "FileVersion", "@WIN32_VERSION@\0" | |
16 | - VALUE "LegalCopyright", "(C) 2017 Banco do Brasil S/A. All Rights Reserved\0" | |
17 | - VALUE "OriginalFilename", "@PACKAGE_TARNAME@@DLLEXT@\0" | |
18 | - VALUE "ProductName", "@PACKAGE_NAME@\0" | |
19 | - VALUE "ProductVersion", "@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@.@PACKAGE_MAJOR_RELEASE@.0\0" | |
20 | - END | |
21 | - END | |
22 | - | |
23 | - BLOCK "VarFileInfo" | |
24 | - BEGIN | |
25 | - VALUE "Translation", 0x809, 0x04E4 | |
26 | - END | |
27 | - | |
28 | -END | |
29 | - |
src/lib3270++/windows/session.cc
... | ... | @@ -1,142 +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., 51 Franklin | |
19 | - * St, Fifth Floor, Boston, MA 02110-1301 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 | -/** | |
31 | - * @file src/lib3270++/ipc/windows/session.cc | |
32 | - * | |
33 | - * @brief Implements Windows session create/destroy session. | |
34 | - * | |
35 | - * @author perry.werneck@gmail.com | |
36 | - * | |
37 | - */ | |
38 | - | |
39 | - #include "../private.h" | |
40 | - #include <cstring> | |
41 | - #include <lib3270/trace.h> | |
42 | - #include <algorithm> | |
43 | - | |
44 | - using std::string; | |
45 | - | |
46 | -/*---[ Implement ]----------------------------------------------------------------------------------*/ | |
47 | - | |
48 | - namespace TN3270 { | |
49 | - | |
50 | - IPC::Session::Session(const char *id) : Abstract::Session() { | |
51 | - | |
52 | - char *ptr = strchr(id,':'); | |
53 | - | |
54 | - if(!ptr) | |
55 | - throw std::system_error(EINVAL, std::system_category()); | |
56 | - | |
57 | - string pipename{"\\\\.\\pipe\\"}; | |
58 | - | |
59 | - pipename += string(id,ptr - id); | |
60 | - pipename += "\\"; | |
61 | - pipename += (ptr+1); | |
62 | - | |
63 | - std::transform(pipename.begin(), pipename.end(), pipename.begin(), ::tolower); | |
64 | - | |
65 | - debug("pipename: \"%s\"",pipename.c_str()); | |
66 | - | |
67 | - this->hPipe = CreateFile( | |
68 | - TEXT(pipename.c_str()), // pipe name | |
69 | - GENERIC_READ | // read and write access | |
70 | - GENERIC_WRITE, | |
71 | - 0, // no sharing | |
72 | - NULL, // default security attributes | |
73 | - OPEN_EXISTING, // opens existing pipe | |
74 | - 0, // default attributes | |
75 | - NULL // no template file | |
76 | - ); | |
77 | - | |
78 | - if (hPipe == INVALID_HANDLE_VALUE) { | |
79 | - throw std::runtime_error("Can't open IPC Channel"); | |
80 | - } | |
81 | - | |
82 | - // The pipe connected; change to message-read mode. | |
83 | - DWORD dwMode = PIPE_READMODE_MESSAGE; | |
84 | - if(!SetNamedPipeHandleState(hPipe,&dwMode,NULL,NULL)) { | |
85 | - throw std::runtime_error("Can't set IPC Channel mode"); | |
86 | - } | |
87 | - | |
88 | - } | |
89 | - | |
90 | - IPC::Session::~Session() { | |
91 | - CloseHandle(this->hPipe); | |
92 | - } | |
93 | - | |
94 | - | |
95 | - IPC::Request & IPC::Request::call() { | |
96 | - | |
97 | -#ifdef DEBUG | |
98 | - // lib3270_trace_data(NULL,"Request block",(const char *) this->out.block, this->out.used); | |
99 | -#endif // DEBUG | |
100 | - | |
101 | - in.current = 0; | |
102 | - | |
103 | - if(!TransactNamedPipe( | |
104 | - this->hPipe, | |
105 | - this->out.block, | |
106 | - this->out.used, | |
107 | - this->in.block, | |
108 | - this->in.length, | |
109 | - &this->in.used, | |
110 | - NULL) | |
111 | - ) { | |
112 | - | |
113 | - throw std::runtime_error("Can't transact on IPC Channel"); | |
114 | - | |
115 | - } | |
116 | - | |
117 | - debug("Received response \"", in.block, "\" with ", in.used, " bytes"); | |
118 | -#ifdef DEBUG | |
119 | - // lib3270_trace_data(NULL,"Response block",(const char *) this->in.block, this->in.used); | |
120 | -#endif // DEBUG | |
121 | - | |
122 | - // Extract response name | |
123 | - in.current = strlen((const char *) in.block)+1; | |
124 | - | |
125 | - // Extract return code | |
126 | - uint16_t rc = *((uint16_t *) (in.block + in.current)); | |
127 | - in.current += sizeof(uint16_t); | |
128 | - | |
129 | - // Extract argc | |
130 | - uint16_t argc = *((uint16_t *) (in.block + in.current)); | |
131 | - in.current += sizeof(uint16_t); | |
132 | - | |
133 | - debug("Received response \"", ((const char *) in.block), "\" with rc=", rc, " and ", argc, " arguments"); | |
134 | - | |
135 | - return *this; | |
136 | - } | |
137 | - | |
138 | - | |
139 | - | |
140 | - } | |
141 | - | |
142 | - |