Commit 233914019c9cbc7beb30cd12eea2e3993510f2e7
1 parent
988584bf
Exists in
master
and in
5 other branches
Incluindo funcoes extras do hllapi na classe base
Showing
7 changed files
with
376 additions
and
634 deletions
Show diff stats
src/plugins/hllapi/Makefile.in
@@ -31,7 +31,9 @@ | @@ -31,7 +31,9 @@ | ||
31 | MODULE_NAME=hllapi | 31 | MODULE_NAME=hllapi |
32 | DEPENDS=*.h ../../include/*.h ../../include/lib3270/*.h Makefile | 32 | DEPENDS=*.h ../../include/*.h ../../include/lib3270/*.h Makefile |
33 | PLUGIN_SRC=pluginmain.c | 33 | PLUGIN_SRC=pluginmain.c |
34 | -HLLAPI_SRC=hllapi.c calls.c remote.c | 34 | +HLLAPI_SRC=hllapi.c calls.c |
35 | + | ||
36 | +CLASSLIBDIR=../../classlib | ||
35 | 37 | ||
36 | #---[ Paths ]------------------------------------------------------------------ | 38 | #---[ Paths ]------------------------------------------------------------------ |
37 | 39 | ||
@@ -48,8 +50,8 @@ OBJEXT = o | @@ -48,8 +50,8 @@ OBJEXT = o | ||
48 | #---[ Tools ]------------------------------------------------------------------ | 50 | #---[ Tools ]------------------------------------------------------------------ |
49 | 51 | ||
50 | MKDIR=@MKDIR_P@ | 52 | MKDIR=@MKDIR_P@ |
51 | -CC=@CC@ | ||
52 | -LD=@CC@ | 53 | +CC=@CXX@ |
54 | +LD=@CXX@ | ||
53 | MSGCAT=@MSGCAT@ | 55 | MSGCAT=@MSGCAT@ |
54 | XGETTEXT=@XGETTEXT@ | 56 | XGETTEXT=@XGETTEXT@ |
55 | 57 | ||
@@ -81,15 +83,26 @@ ifeq ($(LIB3270_MODE),Default) | @@ -81,15 +83,26 @@ ifeq ($(LIB3270_MODE),Default) | ||
81 | PW3270_CFLAGS ?= `pkg-config --cflags pw3270 lib3270` | 83 | PW3270_CFLAGS ?= `pkg-config --cflags pw3270 lib3270` |
82 | endif | 84 | endif |
83 | 85 | ||
84 | - | ||
85 | GTK_CFLAGS ?= @GTK_CFLAGS@ @GTKMAC_CFLAGS@ | 86 | GTK_CFLAGS ?= @GTK_CFLAGS@ @GTKMAC_CFLAGS@ |
86 | GTK_LIBS ?= @GTK_LIBS@ @GTKMAC_LIBS@ | 87 | GTK_LIBS ?= @GTK_LIBS@ @GTKMAC_LIBS@ |
87 | 88 | ||
89 | +include $(CLASSLIBDIR)/class.mak | ||
90 | + | ||
91 | +$(OBJDBG)/%.o: %.cc $(DEPENDS) | ||
92 | + @echo " CC `basename $@`" | ||
93 | + @$(MKDIR) `dirname $@` | ||
94 | + @$(CXX) $(CFLAGS) $(DEBUG_CFLAGS) $(LIB3270_CFLAGS) $(GTK_CFLAGS) -o $@ -c $< | ||
95 | + | ||
88 | $(OBJDBG)/%.o: %.c $(DEPENDS) | 96 | $(OBJDBG)/%.o: %.c $(DEPENDS) |
89 | @echo " CC `basename $@`" | 97 | @echo " CC `basename $@`" |
90 | @$(MKDIR) `dirname $@` | 98 | @$(MKDIR) `dirname $@` |
91 | @$(CC) $(CFLAGS) $(DEBUG_CFLAGS) $(LIB3270_CFLAGS) $(GTK_CFLAGS) -o $@ -c $< | 99 | @$(CC) $(CFLAGS) $(DEBUG_CFLAGS) $(LIB3270_CFLAGS) $(GTK_CFLAGS) -o $@ -c $< |
92 | 100 | ||
101 | +$(OBJRLS)/%.o: %.cc $(DEPENDS) | ||
102 | + @echo " CC `basename $@`" | ||
103 | + @$(MKDIR) `dirname $@` | ||
104 | + @$(CXX) $(CFLAGS) $(LIB3270_CFLAGS) $(GTK_CFLAGS) -o $@ -c $< | ||
105 | + | ||
93 | $(OBJRLS)/%.o: %.c $(DEPENDS) | 106 | $(OBJRLS)/%.o: %.c $(DEPENDS) |
94 | @echo " CC `basename $@`" | 107 | @echo " CC `basename $@`" |
95 | @$(MKDIR) `dirname $@` | 108 | @$(MKDIR) `dirname $@` |
@@ -119,24 +132,24 @@ $(BINDBG)/plugins/$(MODULE_NAME)@DLLEXT@: $(foreach SRC, $(basename $(PLUGIN_SRC | @@ -119,24 +132,24 @@ $(BINDBG)/plugins/$(MODULE_NAME)@DLLEXT@: $(foreach SRC, $(basename $(PLUGIN_SRC | ||
119 | @$(MKDIR) `dirname $@` | 132 | @$(MKDIR) `dirname $@` |
120 | @$(LD) $(DLL_FLAGS) @LDSOFLAGS@ $(LDFLAGS) -o $@ $^ $(LIBS) $(PW3270_LIBS) $(GTK_LIBS) | 133 | @$(LD) $(DLL_FLAGS) @LDSOFLAGS@ $(LDFLAGS) -o $@ $^ $(LIBS) $(PW3270_LIBS) $(GTK_LIBS) |
121 | 134 | ||
122 | -$(BINDBG)/libhllapi@DLLEXT@: $(foreach SRC, $(basename $(HLLAPI_SRC)), $(OBJDBG)/$(SRC).o) | 135 | +$(BINDBG)/libhllapi@DLLEXT@: $(foreach SRC, $(basename $(HLLAPI_SRC)), $(OBJDBG)/$(SRC).o) $(CLASS_DEBUG_OBJECTS) |
123 | @echo " CCLD `basename $@`" | 136 | @echo " CCLD `basename $@`" |
124 | @$(MKDIR) `dirname $@` | 137 | @$(MKDIR) `dirname $@` |
125 | - @$(LD) $(DLL_FLAGS) @LDSOFLAGS@ $(LDFLAGS) @LDLIBFLAGS@ -o $@ $^ $(LIBS) | 138 | + @$(LD) $(DLL_FLAGS) @LDSOFLAGS@ $(LDFLAGS) @LDLIBFLAGS@ -o $@ $^ $(LIBS) $(CLASS_LIBS) |
126 | 139 | ||
127 | #---[ Misc targets ]----------------------------------------------------------- | 140 | #---[ Misc targets ]----------------------------------------------------------- |
128 | 141 | ||
129 | -$(BINDBG)/testprogram@EXEEXT@: testprogram.c $(BINDBG)/libhllapi@DLLEXT@ | 142 | +$(BINDBG)/testprogram@EXEEXT@: $(OBJDBG)/testprogram.o $(BINDBG)/libhllapi@DLLEXT@ |
130 | @echo " CCLD `basename $@`" | 143 | @echo " CCLD `basename $@`" |
131 | @$(MKDIR) `dirname $@` | 144 | @$(MKDIR) `dirname $@` |
132 | - @$(CC) $(CFLAGS) $(PW3270_CFLAGS) -L$(BINDBG) $(DEBUG_CFLAGS) -lhllapi -o $@ testprogram.c | 145 | + @$(CXX) $(CFLAGS) $(PW3270_CFLAGS) -L$(BINDBG) $(DEBUG_CFLAGS) -lhllapi -o $@ $(OBJDBG)/testprogram.o |
133 | 146 | ||
134 | test: $(BINDBG)/testprogram@EXEEXT@ | 147 | test: $(BINDBG)/testprogram@EXEEXT@ |
135 | - | ||
136 | -run: $(BINDBG)/testprogram@EXEEXT@ | 148 | + |
149 | +run: $(BINDBG)/testprogram@EXEEXT@ | ||
137 | @cd $(BINDBG) ; ./testprogram@EXEEXT@ | 150 | @cd $(BINDBG) ; ./testprogram@EXEEXT@ |
138 | - | ||
139 | -install: $(BINRLS)/plugins/$(MODULE_NAME)@DLLEXT@ | 151 | + |
152 | +install: $(BINRLS)/plugins/$(MODULE_NAME)@DLLEXT@ | ||
140 | @$(MKDIR) $(DESTDIR)$(libdir)/$(PACKAGE_NAME)-plugins | 153 | @$(MKDIR) $(DESTDIR)$(libdir)/$(PACKAGE_NAME)-plugins |
141 | @$(INSTALL_PROGRAM) $(BINRLS)/plugins/$(MODULE_NAME)@DLLEXT@ $(DESTDIR)$(libdir)/$(PACKAGE_NAME)-plugins | 154 | @$(INSTALL_PROGRAM) $(BINRLS)/plugins/$(MODULE_NAME)@DLLEXT@ $(DESTDIR)$(libdir)/$(PACKAGE_NAME)-plugins |
142 | 155 |
src/plugins/hllapi/calls.c
@@ -1,599 +0,0 @@ | @@ -1,599 +0,0 @@ | ||
1 | -/* | ||
2 | - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | ||
3 | - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | ||
4 | - * aplicativos mainframe. Registro no INPI sob o nome G3270. | ||
5 | - * | ||
6 | - * Copyright (C) <2008> <Banco do Brasil S.A.> | ||
7 | - * | ||
8 | - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | ||
9 | - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | ||
10 | - * Free Software Foundation. | ||
11 | - * | ||
12 | - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | ||
13 | - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | ||
14 | - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | ||
15 | - * obter mais detalhes. | ||
16 | - * | ||
17 | - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | ||
18 | - * programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple | ||
19 | - * Place, Suite 330, Boston, MA, 02111-1307, USA | ||
20 | - * | ||
21 | - * Este programa está nomeado como calls.c e possui - linhas de código. | ||
22 | - * | ||
23 | - * Contatos: | ||
24 | - * | ||
25 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | ||
26 | - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | ||
27 | - * | ||
28 | - */ | ||
29 | - | ||
30 | - #include <windows.h> | ||
31 | - #include <lib3270.h> | ||
32 | - #include <malloc.h> | ||
33 | - #include <string.h> | ||
34 | - #include <errno.h> | ||
35 | - #include <pw3270/hllapi.h> | ||
36 | - #include <stdio.h> | ||
37 | - #include <lib3270/log.h> | ||
38 | - #include <process.h> | ||
39 | - #include <time.h> | ||
40 | - #include "client.h" | ||
41 | - | ||
42 | - #undef trace | ||
43 | - #define trace( fmt, ... ) { FILE *out = fopen("c:\\Users\\Perry\\hllapi.log","a"); if(out) { fprintf(out, "%s(%d) " fmt "\n", __FILE__, __LINE__, __VA_ARGS__ ); fclose(out); } } | ||
44 | - | ||
45 | -/*--[ Globals ]--------------------------------------------------------------------------------------*/ | ||
46 | - | ||
47 | - HMODULE hModule = NULL; | ||
48 | - void * hSession = NULL; | ||
49 | - | ||
50 | - | ||
51 | - static void * (*session_new)(const char *model) = NULL; | ||
52 | - static void (*session_free)(void *h) = NULL; | ||
53 | - static const char * (*get_revision)(void) = NULL; | ||
54 | - static int (*host_connect)(void *h,const char *n, int wait) = NULL; | ||
55 | - static int (*host_is_connected)(void *h) = NULL; | ||
56 | - static int (*wait_for_ready)(void *h, int seconds) = NULL; | ||
57 | - static void (*host_disconnect)(void *h) = NULL; | ||
58 | - static int (*script_sleep)(void *h, int seconds) = NULL; | ||
59 | - static LIB3270_MESSAGE (*get_message)(void *h) = NULL; | ||
60 | - static char * (*get_text)(void *h, int row, int col, int len) = NULL; | ||
61 | - static char * (*get_text_at_offset)(void *h, int offset, int len) = NULL; | ||
62 | - | ||
63 | - static void * (*release_memory)(void *p) = NULL; | ||
64 | - static int (*action_enter)(void *h) = NULL; | ||
65 | - static int (*set_text_at)(void *h, int row, int col, const unsigned char *str) = NULL; | ||
66 | - static int (*cmp_text_at)(void *h, int row, int col, const char *text) = NULL; | ||
67 | - static int (*pfkey)(void *hSession, int key) = NULL; | ||
68 | - static int (*pakey)(void *hSession, int key) = NULL; | ||
69 | - static int (*getcursor)(void *hSession) = NULL; | ||
70 | - static int (*setcursor)(void *hSession, int baddr) = NULL; | ||
71 | - static int (*emulate_input)(void *hSession, const char *s, int len, int pasting) = NULL; | ||
72 | - static int (*erase_eof)(void *hSession) = NULL; | ||
73 | - static int (*do_print)(void *h) = NULL; | ||
74 | - | ||
75 | - static const struct _entry_point | ||
76 | - { | ||
77 | - void **call; | ||
78 | - void * pipe; | ||
79 | - const char * name; | ||
80 | - } entry_point[] = | ||
81 | - { | ||
82 | - { (void **) &session_new, (void *) hllapi_pipe_init, "lib3270_session_new" }, | ||
83 | - { (void **) &session_free, (void *) hllapi_pipe_deinit, "lib3270_session_free" }, | ||
84 | - { (void **) &get_revision, (void *) hllapi_pipe_get_revision, "lib3270_get_revision" }, | ||
85 | - { (void **) &host_connect, (void *) hllapi_pipe_connect, "lib3270_connect" }, | ||
86 | - { (void **) &host_disconnect, (void *) hllapi_pipe_disconnect, "lib3270_disconnect" }, | ||
87 | - { (void **) &host_is_connected, (void *) hllapi_pipe_is_connected, "lib3270_in_tn3270e" }, | ||
88 | - { (void **) &wait_for_ready, (void *) hllapi_pipe_wait_for_ready, "lib3270_wait_for_ready" }, | ||
89 | - { (void **) &script_sleep, (void *) hllapi_pipe_sleep, "lib3270_wait" }, | ||
90 | - { (void **) &get_message, (void *) hllapi_pipe_get_message, "lib3270_get_program_message" }, | ||
91 | - { (void **) &get_text, (void *) hllapi_pipe_get_text_at, "lib3270_get_text_at" }, | ||
92 | - { (void **) &release_memory, (void *) hllapi_pipe_release_memory, "lib3270_free" }, | ||
93 | - { (void **) &action_enter, (void *) hllapi_pipe_enter, "lib3270_enter" }, | ||
94 | - { (void **) &set_text_at, (void *) hllapi_pipe_set_text_at, "lib3270_set_string_at" }, | ||
95 | - { (void **) &cmp_text_at, (void *) hllapi_pipe_cmp_text_at, "lib3270_cmp_text_at" }, | ||
96 | - { (void **) &pfkey, (void *) hllapi_pipe_pfkey, "lib3270_pfkey" }, | ||
97 | - { (void **) &pakey, (void *) hllapi_pipe_pakey, "lib3270_pakey" }, | ||
98 | - { (void **) &setcursor, (void *) hllapi_pipe_setcursor, "lib3270_set_cursor_address" }, | ||
99 | - { (void **) &getcursor, (void *) hllapi_pipe_getcursor, "lib3270_get_cursor_address" }, | ||
100 | - { (void **) &get_text_at_offset, (void *) hllapi_pipe_get_text, "lib3270_get_text" }, | ||
101 | - { (void **) &emulate_input, (void *) hllapi_pipe_emulate_input, "lib3270_emulate_input" }, | ||
102 | - { (void **) &erase_eof, (void *) hllapi_pipe_erase_eof, "lib3270_eraseeof" }, | ||
103 | - { (void **) &do_print, (void *) hllapi_pipe_print, "lib3270_print" }, | ||
104 | - | ||
105 | - { NULL, NULL, NULL } | ||
106 | - }; | ||
107 | - | ||
108 | -// http://msdn.microsoft.com/en-us/library/windows/desktop/ms684179(v=vs.85).aspx | ||
109 | -#ifndef LOAD_LIBRARY_SEARCH_DEFAULT_DIRS | ||
110 | - #define LOAD_LIBRARY_SEARCH_DEFAULT_DIRS 0x00001000 | ||
111 | -#endif // LOAD_LIBRARY_SEARCH_DEFAULT_DIRS | ||
112 | - | ||
113 | -#ifndef LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR | ||
114 | - #define LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR 0x00000100 | ||
115 | -#endif // LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR | ||
116 | - | ||
117 | -/*--[ Implement ]------------------------------------------------------------------------------------*/ | ||
118 | - | ||
119 | - static DWORD load_remote(void) | ||
120 | - { | ||
121 | - // Get pointers to the pipe based calls | ||
122 | - int f; | ||
123 | - | ||
124 | - trace("%s: Loading pipe based calls",__FUNCTION__); | ||
125 | - for(f=0;entry_point[f].name;f++) | ||
126 | - *entry_point[f].call = entry_point[f].pipe; | ||
127 | - | ||
128 | - return HLLAPI_STATUS_SUCCESS; | ||
129 | - } | ||
130 | - | ||
131 | - static DWORD start_session(void) | ||
132 | - { | ||
133 | - char buffer[80]; | ||
134 | - char appName[4096]; | ||
135 | - HKEY hKey = 0; | ||
136 | - unsigned long datalen = 4096; | ||
137 | - DWORD ret; | ||
138 | - STARTUPINFO si; | ||
139 | - PROCESS_INFORMATION pi; | ||
140 | - | ||
141 | - // Get application path | ||
142 | - *appName = 0; | ||
143 | - if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\pw3270",0,KEY_QUERY_VALUE,&hKey) == ERROR_SUCCESS) | ||
144 | - { | ||
145 | - unsigned long datatype; // #defined in winnt.h (predefined types 0-11) | ||
146 | - if(RegQueryValueExA(hKey,"appName",NULL,&datatype,(LPBYTE) appName,&datalen) != ERROR_SUCCESS) | ||
147 | - *appName = 0; | ||
148 | - RegCloseKey(hKey); | ||
149 | - } | ||
150 | - | ||
151 | - trace("%s appname=%s\n",__FUNCTION__,appName); | ||
152 | - | ||
153 | - snprintf(buffer,79,"%s --session=\"H%06d\"",appName,getpid()); | ||
154 | - | ||
155 | - ZeroMemory( &si, sizeof(si) ); | ||
156 | - si.cb = sizeof(si); | ||
157 | - ZeroMemory( &pi, sizeof(pi) ); | ||
158 | - | ||
159 | - // si.dwFlags = STARTF_PREVENTPINNING; | ||
160 | - trace("App: %s",appName); | ||
161 | - trace("CmdLine: %s",buffer); | ||
162 | - | ||
163 | - if(!CreateProcess(NULL,buffer,NULL,NULL,0,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi)) | ||
164 | - return GetLastError(); | ||
165 | - | ||
166 | - CloseHandle( pi.hProcess ); | ||
167 | - CloseHandle( pi.hThread ); | ||
168 | - | ||
169 | - // Wait for pipe to be available | ||
170 | - time_t timer = time(0)+5; | ||
171 | - HANDLE hPipe = INVALID_HANDLE_VALUE; | ||
172 | - WIN32_FIND_DATA FindFileData; | ||
173 | - | ||
174 | - snprintf(buffer,4095,"\\\\.\\pipe\\H%06d_a",getpid()); | ||
175 | - | ||
176 | - while(hPipe == INVALID_HANDLE_VALUE && time(0) < timer) | ||
177 | - { | ||
178 | - Sleep(10); | ||
179 | - hPipe = FindFirstFile(buffer, &FindFileData); | ||
180 | - } | ||
181 | - | ||
182 | - if(hPipe == INVALID_HANDLE_VALUE) | ||
183 | - return - ETIMEDOUT; | ||
184 | - | ||
185 | - CloseHandle(hPipe); | ||
186 | - | ||
187 | - // Load PIPE calls for the created session | ||
188 | - snprintf(buffer,79,"H%06d:a",getpid()); | ||
189 | - ret = load_remote(); | ||
190 | - if(ret) | ||
191 | - return ret; | ||
192 | - | ||
193 | - snprintf(buffer,79,"H%06d:A",getpid()); | ||
194 | - hSession = session_new((const char *) buffer); | ||
195 | - trace("%s ok hSession=%p\n",__FUNCTION__,hSession); | ||
196 | - | ||
197 | - return hSession ? HLLAPI_STATUS_SUCCESS : HLLAPI_STATUS_SYSTEM_ERROR; | ||
198 | - } | ||
199 | - | ||
200 | - static DWORD load_dll(void) | ||
201 | - { | ||
202 | - // Direct mode, load lib3270.dll, get pointers to the calls | ||
203 | - static const char *dllname = "lib3270.dll." PACKAGE_VERSION; | ||
204 | - | ||
205 | - int f; | ||
206 | - HMODULE kernel; | ||
207 | - HANDLE cookie = NULL; | ||
208 | - DWORD rc; | ||
209 | - HANDLE (*AddDllDirectory)(PCWSTR NewDirectory); | ||
210 | - BOOL (*RemoveDllDirectory)(HANDLE Cookie); | ||
211 | - UINT errorMode; | ||
212 | - char datadir[4096]; | ||
213 | - | ||
214 | - trace("hModule=%p",hModule); | ||
215 | - if(hModule) | ||
216 | - return -EBUSY; | ||
217 | - | ||
218 | - kernel = LoadLibrary("kernel32.dll"); | ||
219 | - AddDllDirectory = (HANDLE (*)(PCWSTR)) GetProcAddress(kernel,"AddDllDirectory"); | ||
220 | - RemoveDllDirectory = (BOOL (*)(HANDLE)) GetProcAddress(kernel,"RemoveDllDirectory"); | ||
221 | - | ||
222 | - // Notify user in case of error loading protocol DLL | ||
223 | - // http://msdn.microsoft.com/en-us/library/windows/desktop/ms680621(v=vs.85).aspx | ||
224 | - errorMode = SetErrorMode(1); | ||
225 | - | ||
226 | - memset(datadir,' ',4095); | ||
227 | - datadir[4095] = 0; | ||
228 | - | ||
229 | - if(hllapi_get_datadir(datadir)) | ||
230 | - { | ||
231 | - char buffer[4096]; | ||
232 | - wchar_t path[4096]; | ||
233 | - | ||
234 | - mbstowcs(path, datadir, 4095); | ||
235 | - trace("Datadir=[%s] AddDllDirectory=%p RemoveDllDirectory=%p\n",datadir,AddDllDirectory,RemoveDllDirectory); | ||
236 | - if(AddDllDirectory) | ||
237 | - cookie = AddDllDirectory(path); | ||
238 | - | ||
239 | -#ifdef DEBUG | ||
240 | - snprintf(buffer,4096,"%s\\.bin\\Debug\\%s",datadir,dllname); | ||
241 | -#else | ||
242 | - snprintf(buffer,4096,"%s\\%s",datadir,dllname); | ||
243 | -#endif // DEBUG | ||
244 | - | ||
245 | - hModule = LoadLibrary(buffer); | ||
246 | - | ||
247 | - trace("%s hModule=%p rc=%d",buffer,hModule,(int) GetLastError()); | ||
248 | - | ||
249 | - if(hModule == NULL) | ||
250 | - { | ||
251 | - // Enable DLL error popup and try again with full path | ||
252 | - SetErrorMode(0); | ||
253 | - hModule = LoadLibraryEx(buffer,NULL,LOAD_LIBRARY_SEARCH_DEFAULT_DIRS|LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR); | ||
254 | - } | ||
255 | - | ||
256 | - rc = GetLastError(); | ||
257 | - | ||
258 | - trace("%s hModule=%p rc=%d",buffer,hModule,(int) rc); | ||
259 | - } | ||
260 | - else | ||
261 | - { | ||
262 | - hModule = LoadLibrary(dllname); | ||
263 | - rc = GetLastError(); | ||
264 | - } | ||
265 | - | ||
266 | - SetErrorMode(errorMode); | ||
267 | - | ||
268 | - trace("%s hModule=%p rc=%d",dllname,hModule,(int) rc); | ||
269 | - | ||
270 | - if(cookie && RemoveDllDirectory) | ||
271 | - RemoveDllDirectory(cookie); | ||
272 | - | ||
273 | - if(kernel) | ||
274 | - FreeLibrary(kernel); | ||
275 | - | ||
276 | - if(!hModule) | ||
277 | - return rc; | ||
278 | - | ||
279 | - // Get library entry pointers | ||
280 | - for(f=0;entry_point[f].name;f++) | ||
281 | - { | ||
282 | - void *ptr = (void *) GetProcAddress(hModule,entry_point[f].name); | ||
283 | - | ||
284 | - trace("%d %s=%p\n",f,entry_point[f].name,ptr); | ||
285 | - | ||
286 | - if(!ptr) | ||
287 | - { | ||
288 | - trace("Can´t load \"%s\"\n",entry_point[f].name); | ||
289 | - hllapi_deinit(); | ||
290 | - return -ENOENT; | ||
291 | - } | ||
292 | - *entry_point[f].call = ptr; | ||
293 | - } | ||
294 | - | ||
295 | - return HLLAPI_STATUS_SUCCESS; | ||
296 | - } | ||
297 | - | ||
298 | - __declspec (dllexport) DWORD __stdcall hllapi_init(LPSTR mode) | ||
299 | - { | ||
300 | - if(!mode) | ||
301 | - return HLLAPI_STATUS_SYSTEM_ERROR; | ||
302 | - | ||
303 | - trace("%s(%s)",__FUNCTION__,(char *) mode); | ||
304 | - | ||
305 | - if(mode && *mode) | ||
306 | - { | ||
307 | - if(strcasecmp(mode,"start") == 0 || strcasecmp(mode,"new") == 0) | ||
308 | - return start_session(); | ||
309 | - | ||
310 | - load_remote(); | ||
311 | - } | ||
312 | - else | ||
313 | - { | ||
314 | - load_dll(); | ||
315 | - } | ||
316 | - | ||
317 | - // Get session handle | ||
318 | - hSession = session_new((const char *) mode); | ||
319 | - trace("%s ok hSession=%p\n",__FUNCTION__,hSession); | ||
320 | - | ||
321 | - return hSession ? HLLAPI_STATUS_SUCCESS : HLLAPI_STATUS_SYSTEM_ERROR; | ||
322 | - } | ||
323 | - | ||
324 | - __declspec (dllexport) DWORD __stdcall hllapi_deinit(void) | ||
325 | - { | ||
326 | - int f; | ||
327 | - | ||
328 | - // Release session | ||
329 | - if(hSession && session_free) | ||
330 | - session_free(hSession); | ||
331 | - | ||
332 | - for(f=0;entry_point[f].name;f++) | ||
333 | - *entry_point[f].call = NULL; | ||
334 | - | ||
335 | - if(hModule != NULL) | ||
336 | - { | ||
337 | - FreeLibrary(hModule); | ||
338 | - hModule = NULL; | ||
339 | - } | ||
340 | - | ||
341 | - return 0; | ||
342 | - } | ||
343 | - | ||
344 | - __declspec (dllexport) DWORD __stdcall hllapi_get_revision(void) | ||
345 | - { | ||
346 | - if(!get_revision) | ||
347 | - return 0; | ||
348 | - return (DWORD) atoi(get_revision()); | ||
349 | - } | ||
350 | - | ||
351 | - __declspec (dllexport) DWORD __stdcall hllapi_connect(LPSTR uri, WORD wait) | ||
352 | - { | ||
353 | - if(!(host_connect && hSession && uri)) | ||
354 | - return HLLAPI_STATUS_SYSTEM_ERROR; | ||
355 | - | ||
356 | - return host_connect(hSession,uri,wait); | ||
357 | - } | ||
358 | - | ||
359 | - __declspec (dllexport) DWORD __stdcall hllapi_is_connected(void) | ||
360 | - { | ||
361 | - if(!(host_is_connected && hSession)) | ||
362 | - return HLLAPI_STATUS_SYSTEM_ERROR; | ||
363 | - | ||
364 | - return host_is_connected(hSession); | ||
365 | - } | ||
366 | - | ||
367 | - __declspec (dllexport) DWORD __stdcall hllapi_get_state(void) | ||
368 | - { | ||
369 | - switch(hllapi_get_message_id()) | ||
370 | - { | ||
371 | - case LIB3270_MESSAGE_NONE: /* 0 - No message */ | ||
372 | - return HLLAPI_STATUS_SUCCESS; | ||
373 | - | ||
374 | - case LIB3270_MESSAGE_DISCONNECTED: /* 4 - Disconnected from host */ | ||
375 | - return HLLAPI_STATUS_DISCONNECTED; | ||
376 | - | ||
377 | - case LIB3270_MESSAGE_MINUS: | ||
378 | - case LIB3270_MESSAGE_PROTECTED: | ||
379 | - case LIB3270_MESSAGE_NUMERIC: | ||
380 | - case LIB3270_MESSAGE_OVERFLOW: | ||
381 | - case LIB3270_MESSAGE_INHIBIT: | ||
382 | - case LIB3270_MESSAGE_KYBDLOCK: | ||
383 | - return HLLAPI_STATUS_KEYBOARD_LOCKED; | ||
384 | - | ||
385 | - case LIB3270_MESSAGE_SYSWAIT: | ||
386 | - case LIB3270_MESSAGE_TWAIT: | ||
387 | - case LIB3270_MESSAGE_AWAITING_FIRST: | ||
388 | - case LIB3270_MESSAGE_X: | ||
389 | - case LIB3270_MESSAGE_RESOLVING: | ||
390 | - case LIB3270_MESSAGE_CONNECTING: | ||
391 | - return HLLAPI_STATUS_WAITING; | ||
392 | - } | ||
393 | - | ||
394 | - return HLLAPI_STATUS_SYSTEM_ERROR; | ||
395 | - } | ||
396 | - | ||
397 | - __declspec (dllexport) DWORD __stdcall hllapi_disconnect(void) | ||
398 | - { | ||
399 | - if(!(host_disconnect && hSession)) | ||
400 | - return HLLAPI_STATUS_SYSTEM_ERROR; | ||
401 | - | ||
402 | - host_disconnect(hSession); | ||
403 | - | ||
404 | - return 0; | ||
405 | - } | ||
406 | - | ||
407 | - __declspec (dllexport) DWORD __stdcall hllapi_wait_for_ready(WORD seconds) | ||
408 | - { | ||
409 | - if(!(wait_for_ready && hSession)) | ||
410 | - return HLLAPI_STATUS_SYSTEM_ERROR; | ||
411 | - | ||
412 | - trace("%s seconds=%d\n", __FUNCTION__, (int) seconds); | ||
413 | - | ||
414 | - return (DWORD) wait_for_ready(hSession,(int) seconds); | ||
415 | - } | ||
416 | - | ||
417 | - __declspec (dllexport) DWORD __stdcall hllapi_wait(WORD seconds) | ||
418 | - { | ||
419 | - if(!(script_sleep && hSession)) | ||
420 | - return HLLAPI_STATUS_SYSTEM_ERROR; | ||
421 | - | ||
422 | - return (DWORD) script_sleep(hSession,(int) seconds); | ||
423 | - } | ||
424 | - | ||
425 | - __declspec (dllexport) DWORD __stdcall hllapi_get_message_id(void) | ||
426 | - { | ||
427 | - if(!(get_message && hSession)) | ||
428 | - return HLLAPI_STATUS_SYSTEM_ERROR; | ||
429 | - return (DWORD) get_message(hSession); | ||
430 | - } | ||
431 | - | ||
432 | - __declspec (dllexport) DWORD __stdcall hllapi_get_screen_at(WORD row, WORD col, LPSTR buffer) | ||
433 | - { | ||
434 | - char * text; | ||
435 | - int len; | ||
436 | - | ||
437 | - if(!(get_text && release_memory && hSession)) | ||
438 | - return HLLAPI_STATUS_SYSTEM_ERROR; | ||
439 | - | ||
440 | - trace("%s row=%d col=%d buffer=%p",__FUNCTION__,row,col,buffer); | ||
441 | - len = strlen(buffer); | ||
442 | - | ||
443 | - trace(" len=%d",len); | ||
444 | - | ||
445 | - text = get_text(hSession,row,col,len); | ||
446 | - | ||
447 | - trace(" text=%p errno=%d %s\n",text,errno,strerror(errno)); | ||
448 | - | ||
449 | - if(!text) | ||
450 | - { | ||
451 | - int rc = hllapi_get_state(); | ||
452 | - return rc == HLLAPI_STATUS_SUCCESS ? -1 : rc; | ||
453 | - } | ||
454 | - | ||
455 | - strncpy(buffer,text,len); | ||
456 | - release_memory(text); | ||
457 | - | ||
458 | - trace("text:\n%s\n",buffer); | ||
459 | - | ||
460 | - return HLLAPI_STATUS_SUCCESS; | ||
461 | - } | ||
462 | - | ||
463 | - __declspec (dllexport) DWORD __stdcall hllapi_enter(void) | ||
464 | - { | ||
465 | - if(!(action_enter && hSession)) | ||
466 | - return HLLAPI_STATUS_SYSTEM_ERROR; | ||
467 | - | ||
468 | - return (DWORD) action_enter(hSession); | ||
469 | - } | ||
470 | - | ||
471 | - __declspec (dllexport) DWORD __stdcall hllapi_set_text_at(WORD row, WORD col, LPSTR text) | ||
472 | - { | ||
473 | - if(!(set_text_at && hSession)) | ||
474 | - return HLLAPI_STATUS_SYSTEM_ERROR; | ||
475 | - | ||
476 | - return (DWORD) set_text_at(hSession,row,col,(const unsigned char *) text); | ||
477 | - } | ||
478 | - | ||
479 | - __declspec (dllexport) DWORD __stdcall hllapi_cmp_text_at(WORD row, WORD col, LPSTR text) | ||
480 | - { | ||
481 | - if(!(cmp_text_at && hSession)) | ||
482 | - return HLLAPI_STATUS_SYSTEM_ERROR; | ||
483 | - | ||
484 | - return (DWORD) cmp_text_at(hSession,row,col,(const char *) text); | ||
485 | - } | ||
486 | - | ||
487 | - __declspec (dllexport) DWORD __stdcall hllapi_pfkey(WORD key) | ||
488 | - { | ||
489 | - if(!(pfkey && hSession)) | ||
490 | - return HLLAPI_STATUS_SYSTEM_ERROR; | ||
491 | - | ||
492 | - return (DWORD) pfkey(hSession,key); | ||
493 | - } | ||
494 | - | ||
495 | - __declspec (dllexport) DWORD __stdcall hllapi_pakey(WORD key) | ||
496 | - { | ||
497 | - if(!(pfkey && hSession)) | ||
498 | - return HLLAPI_STATUS_SYSTEM_ERROR; | ||
499 | - | ||
500 | - return (DWORD) pakey(hSession,key); | ||
501 | - } | ||
502 | - | ||
503 | - __declspec (dllexport) DWORD __stdcall hllapi_get_datadir(LPSTR datadir) | ||
504 | - { | ||
505 | - HKEY hKey = 0; | ||
506 | - unsigned long datalen = strlen(datadir); | ||
507 | - | ||
508 | - *datadir = 0; | ||
509 | - | ||
510 | - if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\pw3270",0,KEY_QUERY_VALUE,&hKey) == ERROR_SUCCESS) | ||
511 | - { | ||
512 | - unsigned long datatype; // #defined in winnt.h (predefined types 0-11) | ||
513 | - if(RegQueryValueExA(hKey,"datadir",NULL,&datatype,(LPBYTE) datadir,&datalen) != ERROR_SUCCESS) | ||
514 | - *datadir = 0; | ||
515 | - RegCloseKey(hKey); | ||
516 | - } | ||
517 | - | ||
518 | - return *datadir; | ||
519 | - } | ||
520 | - | ||
521 | - __declspec (dllexport) DWORD __stdcall hllapi_setcursor(WORD pos) | ||
522 | - { | ||
523 | - if(!(setcursor && hSession)) | ||
524 | - return HLLAPI_STATUS_SYSTEM_ERROR; | ||
525 | - trace("%s(%d)",__FUNCTION__,pos); | ||
526 | - return setcursor(hSession,pos-1); | ||
527 | - } | ||
528 | - | ||
529 | - __declspec (dllexport) DWORD __stdcall hllapi_getcursor() | ||
530 | - { | ||
531 | - if(!(getcursor && hSession)) | ||
532 | - return HLLAPI_STATUS_SYSTEM_ERROR; | ||
533 | - return getcursor(hSession)+1; | ||
534 | - } | ||
535 | - | ||
536 | - __declspec (dllexport) DWORD __stdcall hllapi_get_screen(WORD offset, LPSTR buffer, WORD len) | ||
537 | - { | ||
538 | - size_t szBuffer = strlen(buffer); | ||
539 | - char * text; | ||
540 | - | ||
541 | - if(len < szBuffer && len > 0) | ||
542 | - szBuffer = len; | ||
543 | - | ||
544 | - text = hllapi_get_string(offset, szBuffer); | ||
545 | - if(!text) | ||
546 | - { | ||
547 | - int rc = hllapi_get_state(); | ||
548 | - return rc == HLLAPI_STATUS_SUCCESS ? -1 : rc; | ||
549 | - } | ||
550 | - | ||
551 | - memcpy(buffer,text,len); | ||
552 | - | ||
553 | - hllapi_free(text); | ||
554 | - | ||
555 | - return HLLAPI_STATUS_SUCCESS; | ||
556 | - } | ||
557 | - | ||
558 | - __declspec (dllexport) DWORD __stdcall hllapi_emulate_input(LPSTR buffer, WORD len, WORD pasting) | ||
559 | - { | ||
560 | - | ||
561 | - if(!(emulate_input && hSession)) | ||
562 | - return HLLAPI_STATUS_DISCONNECTED; | ||
563 | - trace("%s(%s)",__FUNCTION__,(char *) buffer); | ||
564 | - | ||
565 | - if(buffer && *buffer) | ||
566 | - emulate_input(hSession, buffer, len, pasting); | ||
567 | - | ||
568 | - return HLLAPI_STATUS_SUCCESS; | ||
569 | - } | ||
570 | - | ||
571 | - __declspec (dllexport) DWORD __stdcall hllapi_erase_eof(void) | ||
572 | - { | ||
573 | - if(!erase_eof && hSession) | ||
574 | - return HLLAPI_STATUS_SYSTEM_ERROR; | ||
575 | - trace("%s",__FUNCTION__); | ||
576 | - return erase_eof(hSession); | ||
577 | - } | ||
578 | - | ||
579 | - __declspec (dllexport) DWORD __stdcall hllapi_print(void) | ||
580 | - { | ||
581 | - if(!(do_print && hSession)) | ||
582 | - return HLLAPI_STATUS_SYSTEM_ERROR; | ||
583 | - | ||
584 | - return do_print(hSession); | ||
585 | - } | ||
586 | - | ||
587 | - char * hllapi_get_string(int offset, size_t len) | ||
588 | - { | ||
589 | - if(!(get_text_at_offset && hSession)) | ||
590 | - return NULL; | ||
591 | - | ||
592 | - return get_text_at_offset(hSession,offset-1,len); | ||
593 | - } | ||
594 | - | ||
595 | - void hllapi_free(void *p) | ||
596 | - { | ||
597 | - if(release_memory) | ||
598 | - release_memory(p); | ||
599 | - } |
@@ -0,0 +1,329 @@ | @@ -0,0 +1,329 @@ | ||
1 | +/* | ||
2 | + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | ||
3 | + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | ||
4 | + * aplicativos mainframe. Registro no INPI sob o nome G3270. | ||
5 | + * | ||
6 | + * Copyright (C) <2008> <Banco do Brasil S.A.> | ||
7 | + * | ||
8 | + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | ||
9 | + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | ||
10 | + * Free Software Foundation. | ||
11 | + * | ||
12 | + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | ||
13 | + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | ||
14 | + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | ||
15 | + * obter mais detalhes. | ||
16 | + * | ||
17 | + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | ||
18 | + * programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple | ||
19 | + * Place, Suite 330, Boston, MA, 02111-1307, USA | ||
20 | + * | ||
21 | + * Este programa está nomeado como calls.cc e possui - linhas de código. | ||
22 | + * | ||
23 | + * Contatos: | ||
24 | + * | ||
25 | + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | ||
26 | + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | ||
27 | + * | ||
28 | + */ | ||
29 | + | ||
30 | + #include <exception> | ||
31 | + #include <pw3270/class.h> | ||
32 | + #include <pw3270/hllapi.h> | ||
33 | + | ||
34 | + #undef trace | ||
35 | + #define trace( fmt, ... ) { FILE *out = fopen("c:\\Users\\Perry\\hllapi.log","a"); if(out) { fprintf(out, "%s(%d) " fmt "\n", __FILE__, __LINE__, __VA_ARGS__ ); fclose(out); } } | ||
36 | + | ||
37 | + using namespace std; | ||
38 | + using namespace PW3270_NAMESPACE; | ||
39 | + | ||
40 | +/*--[ Globals ]--------------------------------------------------------------------------------------*/ | ||
41 | + | ||
42 | + static session * hSession = NULL; | ||
43 | + | ||
44 | +/*--[ Implement ]------------------------------------------------------------------------------------*/ | ||
45 | + | ||
46 | + __declspec (dllexport) DWORD __stdcall hllapi_init(LPSTR mode) | ||
47 | + { | ||
48 | + try | ||
49 | + { | ||
50 | + if(hSession) | ||
51 | + delete hSession; | ||
52 | + hSession = session::create(mode); | ||
53 | + } | ||
54 | + catch(std::exception &e) | ||
55 | + { | ||
56 | + return HLLAPI_STATUS_SYSTEM_ERROR; | ||
57 | + } | ||
58 | + | ||
59 | + return hSession ? HLLAPI_STATUS_SUCCESS : HLLAPI_STATUS_SYSTEM_ERROR; | ||
60 | + } | ||
61 | + | ||
62 | + __declspec (dllexport) DWORD __stdcall hllapi_deinit(void) | ||
63 | + { | ||
64 | + try | ||
65 | + { | ||
66 | + if(hSession) | ||
67 | + { | ||
68 | + delete hSession; | ||
69 | + hSession = NULL; | ||
70 | + } | ||
71 | + } | ||
72 | + catch(std::exception &e) | ||
73 | + { | ||
74 | + return HLLAPI_STATUS_SYSTEM_ERROR; | ||
75 | + } | ||
76 | + | ||
77 | + return HLLAPI_STATUS_SUCCESS; | ||
78 | + } | ||
79 | + | ||
80 | + __declspec (dllexport) DWORD __stdcall hllapi_get_revision(void) | ||
81 | + { | ||
82 | + try | ||
83 | + { | ||
84 | + return atoi(session::get_default()->get_revision().c_str()); | ||
85 | + } | ||
86 | + catch(std::exception &e) | ||
87 | + { | ||
88 | + return -1; | ||
89 | + } | ||
90 | + return (DWORD) -1; | ||
91 | + } | ||
92 | + | ||
93 | + __declspec (dllexport) DWORD __stdcall hllapi_connect(LPSTR uri, WORD wait) | ||
94 | + { | ||
95 | + int rc = HLLAPI_STATUS_SUCCESS; | ||
96 | + | ||
97 | + try | ||
98 | + { | ||
99 | + rc = session::get_default()->connect(uri,wait); | ||
100 | + } | ||
101 | + catch(std::exception &e) | ||
102 | + { | ||
103 | + return HLLAPI_STATUS_SYSTEM_ERROR; | ||
104 | + } | ||
105 | + | ||
106 | + return rc; | ||
107 | + } | ||
108 | + | ||
109 | + __declspec (dllexport) DWORD __stdcall hllapi_is_connected(void) | ||
110 | + { | ||
111 | + return session::get_default()->is_connected(); | ||
112 | + } | ||
113 | + | ||
114 | + __declspec (dllexport) DWORD __stdcall hllapi_get_state(void) | ||
115 | + { | ||
116 | + switch(hllapi_get_message_id()) | ||
117 | + { | ||
118 | + case LIB3270_MESSAGE_NONE: /* 0 - No message */ | ||
119 | + return HLLAPI_STATUS_SUCCESS; | ||
120 | + | ||
121 | + case LIB3270_MESSAGE_DISCONNECTED: /* 4 - Disconnected from host */ | ||
122 | + return HLLAPI_STATUS_DISCONNECTED; | ||
123 | + | ||
124 | + case LIB3270_MESSAGE_MINUS: | ||
125 | + case LIB3270_MESSAGE_PROTECTED: | ||
126 | + case LIB3270_MESSAGE_NUMERIC: | ||
127 | + case LIB3270_MESSAGE_OVERFLOW: | ||
128 | + case LIB3270_MESSAGE_INHIBIT: | ||
129 | + case LIB3270_MESSAGE_KYBDLOCK: | ||
130 | + return HLLAPI_STATUS_KEYBOARD_LOCKED; | ||
131 | + | ||
132 | + case LIB3270_MESSAGE_SYSWAIT: | ||
133 | + case LIB3270_MESSAGE_TWAIT: | ||
134 | + case LIB3270_MESSAGE_AWAITING_FIRST: | ||
135 | + case LIB3270_MESSAGE_X: | ||
136 | + case LIB3270_MESSAGE_RESOLVING: | ||
137 | + case LIB3270_MESSAGE_CONNECTING: | ||
138 | + return HLLAPI_STATUS_WAITING; | ||
139 | + } | ||
140 | + | ||
141 | + return HLLAPI_STATUS_SYSTEM_ERROR; | ||
142 | + } | ||
143 | + | ||
144 | + __declspec (dllexport) DWORD __stdcall hllapi_disconnect(void) | ||
145 | + { | ||
146 | + session::get_default()->disconnect(); | ||
147 | + return HLLAPI_STATUS_SUCCESS; | ||
148 | + } | ||
149 | + | ||
150 | + __declspec (dllexport) DWORD __stdcall hllapi_wait_for_ready(WORD seconds) | ||
151 | + { | ||
152 | + return session::get_default()->wait_for_ready(seconds); | ||
153 | + } | ||
154 | + | ||
155 | + __declspec (dllexport) DWORD __stdcall hllapi_wait(WORD seconds) | ||
156 | + { | ||
157 | + return session::get_default()->wait(seconds); | ||
158 | + } | ||
159 | + | ||
160 | + __declspec (dllexport) DWORD __stdcall hllapi_get_message_id(void) | ||
161 | + { | ||
162 | + return session::get_default()->get_cstate(); | ||
163 | + } | ||
164 | + | ||
165 | + __declspec (dllexport) DWORD __stdcall hllapi_get_screen_at(WORD row, WORD col, LPSTR buffer) | ||
166 | + { | ||
167 | + if(!(buffer && *buffer)) | ||
168 | + return HLLAPI_STATUS_SYSTEM_ERROR; | ||
169 | + | ||
170 | + try | ||
171 | + { | ||
172 | + size_t sz = strlen(buffer); | ||
173 | + string * str = session::get_default()->get_string_at(row,col,sz); | ||
174 | + if(str) | ||
175 | + { | ||
176 | + strncpy(buffer,str->c_str(),sz); | ||
177 | + delete str; | ||
178 | + } | ||
179 | + } | ||
180 | + catch(std::exception &e) | ||
181 | + { | ||
182 | + return HLLAPI_STATUS_SYSTEM_ERROR; | ||
183 | + } | ||
184 | + | ||
185 | + return HLLAPI_STATUS_SUCCESS; | ||
186 | + } | ||
187 | + | ||
188 | + __declspec (dllexport) DWORD __stdcall hllapi_enter(void) | ||
189 | + { | ||
190 | + return session::get_default()->enter(); | ||
191 | + } | ||
192 | + | ||
193 | + __declspec (dllexport) DWORD __stdcall hllapi_set_text_at(WORD row, WORD col, LPSTR text) | ||
194 | + { | ||
195 | + try | ||
196 | + { | ||
197 | + session::get_default()->set_string_at(row,col,text); | ||
198 | + } | ||
199 | + catch(std::exception &e) | ||
200 | + { | ||
201 | + return HLLAPI_STATUS_SYSTEM_ERROR; | ||
202 | + } | ||
203 | + | ||
204 | + return HLLAPI_STATUS_SUCCESS; | ||
205 | + } | ||
206 | + | ||
207 | + __declspec (dllexport) DWORD __stdcall hllapi_cmp_text_at(WORD row, WORD col, LPSTR text) | ||
208 | + { | ||
209 | + int rc = HLLAPI_STATUS_SYSTEM_ERROR; | ||
210 | + try | ||
211 | + { | ||
212 | + rc = session::get_default()->cmp_string_at(row,col,text); | ||
213 | + } | ||
214 | + catch(std::exception &e) | ||
215 | + { | ||
216 | + return HLLAPI_STATUS_SYSTEM_ERROR; | ||
217 | + } | ||
218 | + | ||
219 | + return rc; | ||
220 | + } | ||
221 | + | ||
222 | + __declspec (dllexport) DWORD __stdcall hllapi_pfkey(WORD key) | ||
223 | + { | ||
224 | + return session::get_default()->pfkey(key); | ||
225 | + } | ||
226 | + | ||
227 | + __declspec (dllexport) DWORD __stdcall hllapi_pakey(WORD key) | ||
228 | + { | ||
229 | + return session::get_default()->pakey(key); | ||
230 | + } | ||
231 | + | ||
232 | + __declspec (dllexport) DWORD __stdcall hllapi_get_datadir(LPSTR datadir) | ||
233 | + { | ||
234 | + HKEY hKey = 0; | ||
235 | + unsigned long datalen = strlen(datadir); | ||
236 | + | ||
237 | + *datadir = 0; | ||
238 | + | ||
239 | + if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\pw3270",0,KEY_QUERY_VALUE,&hKey) == ERROR_SUCCESS) | ||
240 | + { | ||
241 | + unsigned long datatype; // #defined in winnt.h (predefined types 0-11) | ||
242 | + if(RegQueryValueExA(hKey,"datadir",NULL,&datatype,(LPBYTE) datadir,&datalen) != ERROR_SUCCESS) | ||
243 | + *datadir = 0; | ||
244 | + RegCloseKey(hKey); | ||
245 | + } | ||
246 | + | ||
247 | + return *datadir; | ||
248 | + } | ||
249 | + | ||
250 | + __declspec (dllexport) DWORD __stdcall hllapi_setcursor(WORD pos) | ||
251 | + { | ||
252 | + return session::get_default()->set_cursor_addr(pos-1); | ||
253 | + } | ||
254 | + | ||
255 | + __declspec (dllexport) DWORD __stdcall hllapi_getcursor() | ||
256 | + { | ||
257 | + return session::get_default()->get_cursor_addr()+1; | ||
258 | + } | ||
259 | + | ||
260 | + __declspec (dllexport) DWORD __stdcall hllapi_get_screen(WORD offset, LPSTR buffer, WORD len) | ||
261 | + { | ||
262 | + int rc = HLLAPI_STATUS_SYSTEM_ERROR; | ||
263 | + | ||
264 | + if(!(buffer && *buffer)) | ||
265 | + return rc; | ||
266 | + | ||
267 | + try | ||
268 | + { | ||
269 | + size_t szBuffer = strlen(buffer); | ||
270 | + | ||
271 | + if(len < szBuffer && len > 0) | ||
272 | + szBuffer = len; | ||
273 | + | ||
274 | + string *str = session::get_default()->get_string(offset,szBuffer); | ||
275 | + if(str) | ||
276 | + { | ||
277 | + strncpy(buffer,str->c_str(),szBuffer); | ||
278 | + delete str; | ||
279 | + rc = HLLAPI_STATUS_SUCCESS; | ||
280 | + } | ||
281 | + } | ||
282 | + catch(std::exception &e) | ||
283 | + { | ||
284 | + rc = HLLAPI_STATUS_SYSTEM_ERROR; | ||
285 | + } | ||
286 | + | ||
287 | + return rc; | ||
288 | + } | ||
289 | + | ||
290 | + __declspec (dllexport) DWORD __stdcall hllapi_emulate_input(LPSTR buffer, WORD len, WORD pasting) | ||
291 | + { | ||
292 | + session::get_default()->emulate_input(buffer); | ||
293 | + return HLLAPI_STATUS_SUCCESS; | ||
294 | + } | ||
295 | + | ||
296 | + __declspec (dllexport) DWORD __stdcall hllapi_erase_eof(void) | ||
297 | + { | ||
298 | + session::get_default()->erase_eof(); | ||
299 | + return HLLAPI_STATUS_SUCCESS; | ||
300 | + } | ||
301 | + | ||
302 | + __declspec (dllexport) DWORD __stdcall hllapi_print(void) | ||
303 | + { | ||
304 | + return session::get_default()->print(); | ||
305 | + } | ||
306 | + | ||
307 | + char * hllapi_get_string(int offset, size_t len) | ||
308 | + { | ||
309 | + try | ||
310 | + { | ||
311 | + string *str = session::get_default()->get_string(offset-1,len); | ||
312 | + if(str) | ||
313 | + { | ||
314 | + char * ret = strdup(str->c_str()); | ||
315 | + delete str; | ||
316 | + return ret; | ||
317 | + } | ||
318 | + } | ||
319 | + catch(std::exception &e) | ||
320 | + { | ||
321 | + } | ||
322 | + | ||
323 | + return NULL; | ||
324 | + } | ||
325 | + | ||
326 | + void hllapi_free(void *p) | ||
327 | + { | ||
328 | + free(p); | ||
329 | + } |
src/plugins/hllapi/hllapi.c
@@ -91,7 +91,7 @@ | @@ -91,7 +91,7 @@ | ||
91 | LIB3270_EXPORT int hllapi(const unsigned long *func, char *buffer, unsigned short *length, unsigned short *rc) | 91 | LIB3270_EXPORT int hllapi(const unsigned long *func, char *buffer, unsigned short *length, unsigned short *rc) |
92 | #endif // _WIN32 | 92 | #endif // _WIN32 |
93 | { | 93 | { |
94 | - int f; | 94 | + unsigned int f; |
95 | 95 | ||
96 | trace("%s(%d)",__FUNCTION__,*func); | 96 | trace("%s(%d)",__FUNCTION__,*func); |
97 | 97 | ||
@@ -123,7 +123,7 @@ static int connect_ps(char *buffer, unsigned short *length, unsigned short *rc) | @@ -123,7 +123,7 @@ static int connect_ps(char *buffer, unsigned short *length, unsigned short *rc) | ||
123 | { | 123 | { |
124 | int sz = strlen(buffer); | 124 | int sz = strlen(buffer); |
125 | 125 | ||
126 | - tempbuffer = malloc(sz+2); | 126 | + tempbuffer = (char *) malloc(sz+2); |
127 | strcpy(tempbuffer,buffer); | 127 | strcpy(tempbuffer,buffer); |
128 | tempbuffer[sz-1] = ':'; | 128 | tempbuffer[sz-1] = ':'; |
129 | tempbuffer[sz] = buffer[sz-1]; | 129 | tempbuffer[sz] = buffer[sz-1]; |
@@ -197,7 +197,7 @@ static int input_string(char *input, unsigned short *length, unsigned short *rc) | @@ -197,7 +197,7 @@ static int input_string(char *input, unsigned short *length, unsigned short *rc) | ||
197 | if(*length > 0 && *length < szText) | 197 | if(*length > 0 && *length < szText) |
198 | szText = *length; | 198 | szText = *length; |
199 | 199 | ||
200 | - text = malloc(szText+2); | 200 | + text = (char *) malloc(szText+2); |
201 | memcpy(text,input,szText); | 201 | memcpy(text,input,szText); |
202 | text[szText] = 0; | 202 | text[szText] = 0; |
203 | 203 |
src/plugins/hllapi/hllapi.cbp
@@ -37,9 +37,9 @@ | @@ -37,9 +37,9 @@ | ||
37 | <Add option="-g" /> | 37 | <Add option="-g" /> |
38 | </Compiler> | 38 | </Compiler> |
39 | <Environment> | 39 | <Environment> |
40 | - <Variable name="LIB3270_CFLAGS" value='"-I../../../src/include"' /> | ||
41 | - <Variable name="LIB3270_LIBS" value='"-L../../../.bin/Debug -l3270"' /> | ||
42 | - <Variable name="PW3270_LIBS" value='"-L../../../.bin/Debug -lpw3270 -l3270"' /> | 40 | + <Variable name="LIB3270_CFLAGS" value='"-I..\..\..\src\include"' /> |
41 | + <Variable name="LIB3270_LIBS" value='"-L..\..\..\.bin\Debug -l3270"' /> | ||
42 | + <Variable name="PW3270_LIBS" value='"-L..\..\..\.bin\Debug -lpw3270 -l3270"' /> | ||
43 | </Environment> | 43 | </Environment> |
44 | <MakeCommands> | 44 | <MakeCommands> |
45 | <Build command="$make LIB3270_MODE=Debug -f $makefile $target" /> | 45 | <Build command="$make LIB3270_MODE=Debug -f $makefile $target" /> |
@@ -55,14 +55,11 @@ | @@ -55,14 +55,11 @@ | ||
55 | <Add option="-Wall" /> | 55 | <Add option="-Wall" /> |
56 | </Compiler> | 56 | </Compiler> |
57 | <Unit filename="Makefile.in" /> | 57 | <Unit filename="Makefile.in" /> |
58 | - <Unit filename="calls.c"> | ||
59 | - <Option compilerVar="CC" /> | ||
60 | - </Unit> | 58 | + <Unit filename="calls.cc" /> |
61 | <Unit filename="client.h" /> | 59 | <Unit filename="client.h" /> |
62 | <Unit filename="hllapi.c"> | 60 | <Unit filename="hllapi.c"> |
63 | <Option compilerVar="CC" /> | 61 | <Option compilerVar="CC" /> |
64 | </Unit> | 62 | </Unit> |
65 | - <Unit filename="packets.h" /> | ||
66 | <Unit filename="pluginmain.c"> | 63 | <Unit filename="pluginmain.c"> |
67 | <Option compilerVar="CC" /> | 64 | <Option compilerVar="CC" /> |
68 | </Unit> | 65 | </Unit> |
src/plugins/hllapi/pluginmain.c
@@ -32,6 +32,7 @@ | @@ -32,6 +32,7 @@ | ||
32 | */ | 32 | */ |
33 | 33 | ||
34 | #include "server.h" | 34 | #include "server.h" |
35 | + #include <windows.h> | ||
35 | #include <pw3270/plugin.h> | 36 | #include <pw3270/plugin.h> |
36 | #include <pw3270/v3270.h> | 37 | #include <pw3270/v3270.h> |
37 | #include <pw3270/ipcpackets.h> | 38 | #include <pw3270/ipcpackets.h> |
@@ -42,18 +43,20 @@ | @@ -42,18 +43,20 @@ | ||
42 | 43 | ||
43 | #pragma pack(1) | 44 | #pragma pack(1) |
44 | 45 | ||
46 | + enum PIPE_STATE | ||
47 | + { | ||
48 | + PIPE_STATE_WAITING, | ||
49 | + PIPE_STATE_READ, | ||
50 | + PIPE_STATE_PENDING_READ, | ||
51 | + PIPE_STATE_UNDEFINED | ||
52 | + }; | ||
53 | + | ||
45 | typedef struct _pipe_source | 54 | typedef struct _pipe_source |
46 | { | 55 | { |
47 | GSource gsrc; | 56 | GSource gsrc; |
48 | HANDLE hPipe; | 57 | HANDLE hPipe; |
49 | 58 | ||
50 | - enum _PIPE_STATE | ||
51 | - { | ||
52 | - PIPE_STATE_WAITING, | ||
53 | - PIPE_STATE_READ, | ||
54 | - PIPE_STATE_PENDING_READ, | ||
55 | - PIPE_STATE_UNDEFINED, | ||
56 | - } state; | 59 | + enum PIPE_STATE state; |
57 | 60 | ||
58 | OVERLAPPED overlap; | 61 | OVERLAPPED overlap; |
59 | unsigned char buffer[PIPE_BUFFER_LENGTH+1]; | 62 | unsigned char buffer[PIPE_BUFFER_LENGTH+1]; |
@@ -145,7 +148,7 @@ | @@ -145,7 +148,7 @@ | ||
145 | if(text) | 148 | if(text) |
146 | { | 149 | { |
147 | szBlock = sizeof(struct hllapi_packet_text)+strlen(text); | 150 | szBlock = sizeof(struct hllapi_packet_text)+strlen(text); |
148 | - pkt = g_malloc0(szBlock); | 151 | + pkt = (struct hllapi_packet_text *) g_malloc0(szBlock); |
149 | pkt->packet_id = 0; | 152 | pkt->packet_id = 0; |
150 | strcpy(pkt->text,text); | 153 | strcpy(pkt->text,text); |
151 | lib3270_free(text); | 154 | lib3270_free(text); |
@@ -153,7 +156,7 @@ | @@ -153,7 +156,7 @@ | ||
153 | else | 156 | else |
154 | { | 157 | { |
155 | szBlock = sizeof(struct hllapi_packet_text); | 158 | szBlock = sizeof(struct hllapi_packet_text); |
156 | - pkt = g_malloc0(szBlock); | 159 | + pkt = (struct hllapi_packet_text *) g_malloc0(szBlock); |
157 | pkt->packet_id = errno ? errno : -1; | 160 | pkt->packet_id = errno ? errno : -1; |
158 | } | 161 | } |
159 | 162 | ||
@@ -280,7 +283,7 @@ | @@ -280,7 +283,7 @@ | ||
280 | 283 | ||
281 | case HLLAPI_PACKET_SET_TOGGLE: | 284 | case HLLAPI_PACKET_SET_TOGGLE: |
282 | send_result(source,lib3270_set_toggle(lib3270_get_default_session_handle(), | 285 | send_result(source,lib3270_set_toggle(lib3270_get_default_session_handle(), |
283 | - ((struct hllapi_packet_set *) source->buffer)->id, | 286 | + (LIB3270_TOGGLE) ((struct hllapi_packet_set *) source->buffer)->id, |
284 | ((struct hllapi_packet_set *) source->buffer)->value)); | 287 | ((struct hllapi_packet_set *) source->buffer)->value)); |
285 | break; | 288 | break; |
286 | 289 | ||
@@ -456,7 +459,7 @@ | @@ -456,7 +459,7 @@ | ||
456 | 459 | ||
457 | FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_IGNORE_INSERTS, NULL, errcode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL); | 460 | FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_IGNORE_INSERTS, NULL, errcode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL); |
458 | 461 | ||
459 | - for(ptr=lpMsgBuf;*ptr && *ptr != '\n';ptr++); | 462 | + for(ptr= (char *) lpMsgBuf;*ptr && *ptr != '\n';ptr++); |
460 | *ptr = 0; | 463 | *ptr = 0; |
461 | 464 | ||
462 | va_start(arg_ptr, fmt); | 465 | va_start(arg_ptr, fmt); |
src/plugins/hllapi/testprogram.c
@@ -27,7 +27,6 @@ | @@ -27,7 +27,6 @@ | ||
27 | * | 27 | * |
28 | */ | 28 | */ |
29 | 29 | ||
30 | - #include <windows.h> | ||
31 | #include <stdio.h> | 30 | #include <stdio.h> |
32 | #include <time.h> | 31 | #include <time.h> |
33 | #include <pw3270/hllapi.h> | 32 | #include <pw3270/hllapi.h> |
@@ -42,7 +41,7 @@ | @@ -42,7 +41,7 @@ | ||
42 | 41 | ||
43 | printf("init(%s)=%d\n",session,(int) hllapi_init((LPSTR) session)); | 42 | printf("init(%s)=%d\n",session,(int) hllapi_init((LPSTR) session)); |
44 | printf("revision=%d\n",(int) hllapi_get_revision()); | 43 | printf("revision=%d\n",(int) hllapi_get_revision()); |
45 | - printf("connect=%d\n",(int) hllapi_connect("fandezhi.efglobe.com:23",0)); | 44 | + printf("connect=%d\n",(int) hllapi_connect((char *) "fandezhi.efglobe.com:23",0)); |
46 | printf("wait=%d\n",(int) hllapi_wait(3)); | 45 | printf("wait=%d\n",(int) hllapi_wait(3)); |
47 | printf("connected=%s\n",(int) hllapi_is_connected() ? "Yes" : "No"); | 46 | printf("connected=%s\n",(int) hllapi_is_connected() ? "Yes" : "No"); |
48 | 47 |