Commit 2b9270e084eff780e2f4bc6046c0480954ed08e5
1 parent
4b3b4481
Exists in
master
and in
5 other branches
Consulta HLLAPI comeca a funcionar
Showing
8 changed files
with
113 additions
and
11 deletions
Show diff stats
pw3270.cbp
@@ -225,6 +225,9 @@ | @@ -225,6 +225,9 @@ | ||
225 | <Option compilerVar="CC" /> | 225 | <Option compilerVar="CC" /> |
226 | </Unit> | 226 | </Unit> |
227 | <Unit filename="src\plugins\remotectl\remotectl.h" /> | 227 | <Unit filename="src\plugins\remotectl\remotectl.h" /> |
228 | + <Unit filename="src\plugins\remotectl\testprogram.c"> | ||
229 | + <Option compilerVar="CC" /> | ||
230 | + </Unit> | ||
228 | <Unit filename="src\pw3270\Makefile.in" /> | 231 | <Unit filename="src\pw3270\Makefile.in" /> |
229 | <Unit filename="src\pw3270\actions.c"> | 232 | <Unit filename="src\pw3270\actions.c"> |
230 | <Option compilerVar="CC" /> | 233 | <Option compilerVar="CC" /> |
src/include/pw3270/hllapi.h
@@ -29,6 +29,11 @@ | @@ -29,6 +29,11 @@ | ||
29 | * | 29 | * |
30 | */ | 30 | */ |
31 | 31 | ||
32 | +#ifndef HLLAPI_H_INCLUDED | ||
33 | + | ||
34 | + #define HLLAPI_H_INCLUDED 1 | ||
35 | + #include <lib3270.h> | ||
36 | + | ||
32 | #ifdef __cplusplus | 37 | #ifdef __cplusplus |
33 | extern "C" { | 38 | extern "C" { |
34 | #endif | 39 | #endif |
@@ -53,9 +58,10 @@ extern "C" { | @@ -53,9 +58,10 @@ extern "C" { | ||
53 | } HLLAPI_DATA; | 58 | } HLLAPI_DATA; |
54 | #pragma pack() | 59 | #pragma pack() |
55 | 60 | ||
56 | - LIB3270_EXPORT int hllapi(unsigned long function, const char *string, unsigned short length, unsigned short *rc); | 61 | + LIB3270_EXPORT int hllapi(unsigned long function, char *string, unsigned short length, unsigned short *rc); |
57 | 62 | ||
58 | #ifdef __cplusplus | 63 | #ifdef __cplusplus |
59 | } /* end of extern "C" */ | 64 | } /* end of extern "C" */ |
60 | #endif | 65 | #endif |
61 | 66 | ||
67 | +#endif // HLLAPI_H_INCLUDED |
src/plugins/remotectl/Makefile.in
@@ -104,7 +104,16 @@ $(BINDBG)/libhllapi.dll: $(foreach SRC, $(basename $(HLLAPI_SRC)), $(OBJDBG)/$(S | @@ -104,7 +104,16 @@ $(BINDBG)/libhllapi.dll: $(foreach SRC, $(basename $(HLLAPI_SRC)), $(OBJDBG)/$(S | ||
104 | 104 | ||
105 | #---[ Misc targets ]----------------------------------------------------------- | 105 | #---[ Misc targets ]----------------------------------------------------------- |
106 | 106 | ||
107 | +testprogram@EXEEXT@: testprogram.c | ||
108 | + @echo " CCLD `basename $@`" | ||
109 | + @$(MKDIR) `dirname $@` | ||
110 | + @$(CC) $(CFLAGS) -I../../../src/include -L../../../$(BINDIR)/Debug $(DEBUG_CFLAGS) -lhllapi -o $@ -c $< | ||
111 | + | ||
112 | +test: testprogram@EXEEXT@ | ||
113 | + @PATH="../../../$(BINDIR)/Debug:$(PATH)" ./testprogram@EXEEXT@ | ||
114 | + | ||
107 | clean: | 115 | clean: |
108 | @rm -fr $(OBJDIR) | 116 | @rm -fr $(OBJDIR) |
109 | @rm -fr $(BINDIR) | 117 | @rm -fr $(BINDIR) |
118 | + @rm -f testprogram@EXEEXT@ | ||
110 | @find . -name "*~" -exec rm -f {} \; | 119 | @find . -name "*~" -exec rm -f {} \; |
src/plugins/remotectl/hllapi.c
@@ -32,10 +32,12 @@ | @@ -32,10 +32,12 @@ | ||
32 | #include <string.h> | 32 | #include <string.h> |
33 | #include <errno.h> | 33 | #include <errno.h> |
34 | #include <pw3270/hllapi.h> | 34 | #include <pw3270/hllapi.h> |
35 | + #include <stdio.h> | ||
36 | + #include <lib3270/log.h> | ||
35 | 37 | ||
36 | /*--[ Implement ]------------------------------------------------------------------------------------*/ | 38 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
37 | 39 | ||
38 | - LIB3270_EXPORT int hllapi(unsigned long func, const char *string, unsigned short length, unsigned short *rc) | 40 | + LIB3270_EXPORT int hllapi(unsigned long func, char *string, unsigned short length, unsigned short *rc) |
39 | { | 41 | { |
40 | int result = -1; | 42 | int result = -1; |
41 | 43 | ||
@@ -69,8 +71,8 @@ | @@ -69,8 +71,8 @@ | ||
69 | else | 71 | else |
70 | { | 72 | { |
71 | HLLAPI_DATA *buffer = malloc(HLLAPI_MAXLENGTH+1); | 73 | HLLAPI_DATA *buffer = malloc(HLLAPI_MAXLENGTH+1); |
72 | - DWORD cbSize = 0; | ||
73 | - HLLAPI_DATA *data = malloc(sizeof(HLLAPI_DATA) + length); | 74 | + DWORD cbSize = sizeof(HLLAPI_DATA) + length; |
75 | + HLLAPI_DATA *data = malloc(cbSize+1); | ||
74 | 76 | ||
75 | data->id = HLLAPI_REQUEST_ID; | 77 | data->id = HLLAPI_REQUEST_ID; |
76 | data->func = func; | 78 | data->func = func; |
@@ -80,7 +82,9 @@ | @@ -80,7 +82,9 @@ | ||
80 | if(string && length > 0) | 82 | if(string && length > 0) |
81 | memcpy(data->string,string,length); | 83 | memcpy(data->string,string,length); |
82 | 84 | ||
83 | - if(!TransactNamedPipe(hPipe,(LPVOID) data,sizeof(HLLAPI_DATA) + length,buffer,HLLAPI_MAXLENGTH,&cbSize,NULL)) | 85 | + trace("Sending %d bytes",(int) cbSize); |
86 | + | ||
87 | + if(!TransactNamedPipe(hPipe,(LPVOID) data,cbSize,buffer,HLLAPI_MAXLENGTH,&cbSize,NULL)) | ||
84 | { | 88 | { |
85 | result = -1; | 89 | result = -1; |
86 | } | 90 | } |
src/plugins/remotectl/pipesource.c
@@ -34,7 +34,6 @@ | @@ -34,7 +34,6 @@ | ||
34 | 34 | ||
35 | #include <windows.h> | 35 | #include <windows.h> |
36 | #include <stdarg.h> | 36 | #include <stdarg.h> |
37 | - #include <lib3270.h> | ||
38 | #include "remotectl.h" | 37 | #include "remotectl.h" |
39 | 38 | ||
40 | /*---[ Defines ]----------------------------------------------------------------------------*/ | 39 | /*---[ Defines ]----------------------------------------------------------------------------*/ |
@@ -134,13 +133,18 @@ static void wait_for_client(pipe_source *source) | @@ -134,13 +133,18 @@ static void wait_for_client(pipe_source *source) | ||
134 | 133 | ||
135 | static void process_input(pipe_source *source, DWORD cbRead) | 134 | static void process_input(pipe_source *source, DWORD cbRead) |
136 | { | 135 | { |
137 | - gint argc = 0; | ||
138 | - gchar **argv; | ||
139 | - GError * error = NULL; | ||
140 | - gchar * cmd; | 136 | + HLLAPI_DATA *data = (HLLAPI_DATA *) source->buffer; |
141 | 137 | ||
142 | source->buffer[cbRead] = 0; | 138 | source->buffer[cbRead] = 0; |
143 | 139 | ||
140 | + if(data->id == 0x01) | ||
141 | + { | ||
142 | + DWORD wrote; | ||
143 | + data->rc = run_hllapi(data->func,data->string,data->len,data->rc); | ||
144 | + wrote = sizeof(HLLAPI_DATA)+data->len; | ||
145 | + WriteFile(source->hPipe,data,wrote,&wrote,NULL); | ||
146 | + } | ||
147 | + | ||
144 | } | 148 | } |
145 | 149 | ||
146 | static void read_input_pipe(pipe_source *source) | 150 | static void read_input_pipe(pipe_source *source) |
@@ -195,7 +199,7 @@ static void wait_for_client(pipe_source *source) | @@ -195,7 +199,7 @@ static void wait_for_client(pipe_source *source) | ||
195 | */ | 199 | */ |
196 | BOOL fSuccess; | 200 | BOOL fSuccess; |
197 | DWORD cbRead = 0; | 201 | DWORD cbRead = 0; |
198 | - DWORD dwErr = 0; | 202 | +// DWORD dwErr = 0; |
199 | 203 | ||
200 | fSuccess = GetOverlappedResult(((pipe_source *) source)->hPipe,&((pipe_source *) source)->overlap,&cbRead,FALSE ); | 204 | fSuccess = GetOverlappedResult(((pipe_source *) source)->hPipe,&((pipe_source *) source)->overlap,&cbRead,FALSE ); |
201 | 205 |
src/plugins/remotectl/remotectl.c
@@ -33,6 +33,8 @@ | @@ -33,6 +33,8 @@ | ||
33 | 33 | ||
34 | #include "remotectl.h" | 34 | #include "remotectl.h" |
35 | #include <pw3270/plugin.h> | 35 | #include <pw3270/plugin.h> |
36 | + #include <errno.h> | ||
37 | + #include <string.h> | ||
36 | 38 | ||
37 | /*--[ Implement ]------------------------------------------------------------------------------------*/ | 39 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
38 | 40 | ||
@@ -121,4 +123,30 @@ | @@ -121,4 +123,30 @@ | ||
121 | return 0; | 123 | return 0; |
122 | } | 124 | } |
123 | 125 | ||
126 | + static int cmd_getrevision(unsigned short rc, char *string, unsigned short length) | ||
127 | + { | ||
128 | + strncpy(string,lib3270_get_revision(),length); | ||
129 | + return 0; | ||
130 | + } | ||
131 | + | ||
132 | + int run_hllapi(unsigned long function, char *string, unsigned short length, unsigned short rc) | ||
133 | + { | ||
134 | + static const struct _cmd | ||
135 | + { | ||
136 | + unsigned long function; | ||
137 | + int (*exec)(unsigned short rc, char *string, unsigned short length); | ||
138 | + } cmd[] = | ||
139 | + { | ||
140 | + { HLLAPI_CMD_GETREVISION, cmd_getrevision } | ||
141 | + }; | ||
142 | + int f; | ||
143 | + | ||
144 | + for(f=0;f<G_N_ELEMENTS(cmd);f++) | ||
145 | + { | ||
146 | + if(cmd[f].function == function) | ||
147 | + return cmd[f].exec(rc,string,length); | ||
148 | + } | ||
149 | + | ||
150 | + return EINVAL; | ||
151 | + } | ||
124 | 152 |
src/plugins/remotectl/remotectl.h
@@ -42,6 +42,8 @@ | @@ -42,6 +42,8 @@ | ||
42 | #include <lib3270/log.h> | 42 | #include <lib3270/log.h> |
43 | #include <pw3270/hllapi.h> | 43 | #include <pw3270/hllapi.h> |
44 | 44 | ||
45 | + int run_hllapi(unsigned long function, char *string, unsigned short length, unsigned short rc); | ||
46 | + | ||
45 | #ifdef WIN32 | 47 | #ifdef WIN32 |
46 | 48 | ||
47 | #define PIPE_BUFFER_LENGTH 4096 | 49 | #define PIPE_BUFFER_LENGTH 4096 |
@@ -0,0 +1,46 @@ | @@ -0,0 +1,46 @@ | ||
1 | +/* | ||
2 | + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | ||
3 | + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | ||
4 | + * aplicativos mainframe. Registro no INPI sob o nome G3270. | ||
5 | + * | ||
6 | + * Copyright (C) <2008> <Banco do Brasil S.A.> | ||
7 | + * | ||
8 | + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | ||
9 | + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | ||
10 | + * Free Software Foundation. | ||
11 | + * | ||
12 | + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | ||
13 | + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | ||
14 | + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | ||
15 | + * obter mais detalhes. | ||
16 | + * | ||
17 | + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | ||
18 | + * programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple | ||
19 | + * Place, Suite 330, Boston, MA, 02111-1307, USA | ||
20 | + * | ||
21 | + * Este programa está nomeado como testprogram.c e possui - linhas de código. | ||
22 | + * | ||
23 | + * Contatos: | ||
24 | + * | ||
25 | + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | ||
26 | + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | ||
27 | + * | ||
28 | + */ | ||
29 | + | ||
30 | + #include <windows.h> | ||
31 | + #include <stdio.h> | ||
32 | + #include <pw3270/hllapi.h> | ||
33 | + | ||
34 | +/*---[ Implement ]--------------------------------------------------------------------------------*/ | ||
35 | + | ||
36 | + int main(int numpar, char *param[]) | ||
37 | + { | ||
38 | + char buffer[1024]; | ||
39 | + unsigned short rc; | ||
40 | + | ||
41 | + // Test for GetRevision call | ||
42 | + *buffer = 0; | ||
43 | + printf("GetRevision exits with %d\n[%s]\n",hllapi(HLLAPI_CMD_GETREVISION,buffer,1024,&rc),buffer); | ||
44 | + | ||
45 | + return 0; | ||
46 | + } |