rx3270.h
11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
/*
* "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
* (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
* aplicativos mainframe. Registro no INPI sob o nome G3270.
*
* Copyright (C) <2008> <Banco do Brasil S.A.>
*
* Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
* os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
* Free Software Foundation.
*
* Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
* GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
* A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
* obter mais detalhes.
*
* Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
* programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple
* Place, Suite 330, Boston, MA, 02111-1307, USA
*
* Contatos:
*
* perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
* erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
* licinio@bb.com.br (Licínio Luis Branco)
* kraucer@bb.com.br (Kraucer Fernandes Mazuco)
* macmiranda@bb.com.br (Marco Aurélio Caldas Miranda)
*
*/
#ifndef RX3270_H_INCLUDED
#define RX3270_H_INCLUDED 1
#include <lib3270/config.h>
#define ENABLE_NLS
#define GETTEXT_PACKAGE PACKAGE_NAME
#include <libintl.h>
#include <glib/gi18n.h>
#define CHARSET "ISO-8859-1" /* FIXME (perry#8#): Get correct encoding from lib3270. */
#ifdef WIN32
#define REXX_DEFAULT_CHARSET "CP1252"
#else
#define REXX_DEFAULT_CHARSET "UTF-8"
#endif
#define RX3270_DEFAULT_TIMEOUT 60
/* include the REXX stuff */
// #define INCL_REXXSAA /* Complete Rexx support */
// #define INCL_RXSUBCOM /* Rexx subcommand handler support */
// #define INCL_RXSHV /* Rexx shared variable pool support */
#define INCL_RXFUNC /* Rexx external function support */
// #define INCL_RXSYSEXIT /* Rexx system exit support */
#define INCL_RXARI /* Rexx asynchronous Trace/Halt support */
#ifdef linux
#define tid_t pthread_t
#endif
#include <rexx.h>
/* Rexx V3 or V4 ? */
#ifndef REXXENTRY
/* Rexx V3 */
#define REXXV3
#define RexxReturnCode ULONG
#define PCONSTRXSTRING RXSTRING *
typedef void *REXXPFN;
#if defined (HAVE_GNUC_VISIBILITY)
#define REXXENTRY __attribute__((visibility("default"))) APIENTRY
#else
#define REXXENTRY APIENTRY
#endif
#else
/* Rexx V4 */
typedef char *PSZ;
typedef long LONG;
#endif
#ifndef RXFUNC_BADCALL
#define RXFUNC_BADCALL 40
#endif
#ifndef CONSTRXSTRING
#define CONSTRXSTRING RXSTRING
#endif
/* include the "C" stuff */
#include <string.h>
#include <sys/time.h> /* System time-related data types */
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
/* include the lib3270 stuff */
#define LIB3270_MODULE_NAME "rexx"
#include <lib3270.h>
#include <lib3270/plugins.h>
// #include <lib3270/statusc.h>
#include <lib3270/toggle.h>
#define CONFIG_GROUP "Rexx"
/* Script states */
LOCAL_EXTERN SCRIPT_STATE rexx_script_state;
LOCAL_EXTERN RXSYSEXIT rexx_exit_array[2];
LOCAL_EXTERN H3270 * hSession;
LOCAL_EXTERN int unlock_rexx_script_engine(GtkWidget *window, const gchar *name, int rc, int return_code);
LOCAL_EXTERN int lock_rexx_script_engine(GtkWidget *window);
LOCAL_EXTERN int load_rexx_script(const gchar *filename, PRXSTRING str);
/* Tools */
LOCAL_EXTERN int call_rexx(const gchar *prg, const gchar *arg);
LOCAL_EXTERN RexxReturnCode RetString(PRXSTRING Retstr, const char *value);
LOCAL_EXTERN RexxReturnCode RetValue(PRXSTRING Retstr, int value);
LOCAL_EXTERN RexxReturnCode RetPointer(PRXSTRING Retstr, gpointer value);
LOCAL_EXTERN RexxReturnCode RetConvertedString(PRXSTRING Retstr, const char *value);
LOCAL_EXTERN char * GetStringArg(PRXSTRING arg);
LOCAL_EXTERN void ReleaseStringArg(char *str);
#define ReturnValue(x) return RetValue(Retstr,x)
#define ReturnString(x) return RetString(Retstr,x)
#define ReturnPointer(x) return RetPointer(Retstr,x)
#define ReturnOk() strcpy(Retstr->strptr,"0"); Retstr->strlength = 1; return RXFUNC_OK;
#define GET_WIDGET_ARG(w, a) w = getWidget(a,Argv); if(!w) return RXFUNC_BADCALL;
#define CHECK_SINGLE_WIDGET_ARG(w) GtkWidget *w = NULL; \
if(Argc == 1) w = getWidget(0,Argv); \
if(!w) return RXFUNC_BADCALL;
/* Rexx entry points */
RexxReturnCode REXXENTRY rx3270Version(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270LoadFuncs(PSZ Name, LONG Argc, RXSTRING Argv[], PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270Init(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270Actions(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270ToggleON(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270ToggleOFF(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270Toggle(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270Toggled(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270Log(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270QueryCState(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270WaitForEvents(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270Sleep(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270WaitForCtlrDone(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270Quit(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270SetVisible(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270Sleep(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270QueryRunMode(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270SetCharset(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270Dunno(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
// Network
RexxReturnCode REXXENTRY rx3270Connect(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270Disconnect(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
// Screen
RexxReturnCode REXXENTRY rx3270GetCursorPosition(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270SetCursorPosition(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270QueryScreenAttribute(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270FindFieldAttribute(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270FindFieldLength(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270ReadScreen(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270WaitForString(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270WaitForStringAt(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270IsTerminalReady(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270WaitForTerminalReady(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
// Keyboard
RexxReturnCode REXXENTRY rx3270InputString(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270SendPFKey(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270SendENTERKey(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
// GUI
RexxReturnCode REXXENTRY rx3270Popup(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270SetWidgetData(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270GetWidgetData(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270SetWidgetVisibleState(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270runDialog(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270DestroyDialog(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270FileChooserNew(PSZ Name, LONG Argc, RXSTRING [],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270FileChooserGetFilename(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270SetDialogTitle(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270MessageDialogNew(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270ProgressDialogNew(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270ProgressDialogSetCurrent(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270ProgressDialogSetTotal(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270SetWindowSize(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270ProgressDialogSetText(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270ProgressDialogPulse(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
// File transfer
RexxReturnCode REXXENTRY rx3270BeginFileSend(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270BeginFileRecv(PSZ Name, LONG Argc, RXSTRING Argv[],PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270GetFTState(PSZ Name, LONG Argc, RXSTRING Argv[], PSZ Queuename, PRXSTRING Retstr);
RexxReturnCode REXXENTRY rx3270WaitForFTComplete(PSZ Name, LONG Argc, RXSTRING Argv[], PSZ Queuename, PRXSTRING Retstr);
LOCAL_EXTERN GtkWidget * getWidget(LONG Argc, RXSTRING Argv[]);
LOCAL_EXTERN GtkMessageType getMessageDialogType(const char *arg);
LOCAL_EXTERN RexxReturnCode RetGtkResponse(PRXSTRING Retstr, GtkResponseType type);
LOCAL_EXTERN RexxReturnCode RaiseHaltSignal(void);
LOCAL_EXTERN int IsHalted(void);
/* Globals */
LOCAL_EXTERN GtkWidget * program_window;
#endif // RX3270_H_INCLUDED