api.h
18.9 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
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
/*
* "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
*
* Este programa está nomeado como api.h e possui 444 linhas de código.
*
* Contatos:
*
* perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
* erico.mendonca@gmail.com (Erico Mascarenhas de 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 LIB3270_API_INCLUDED
#ifdef __cplusplus
extern "C" {
#endif
#define LIB3270_API_INCLUDED "4.2"
#include <errno.h>
#if defined(_WIN32)
#include <windows.h>
#define LIB3270_EXPORT __declspec (dllexport)
#if defined (HAVE_GNUC_VISIBILITY)
#define LOCAL_EXTERN __attribute__((visibility("hidden"))) extern
#else
#define LOCAL_EXTERN extern
#endif
#else
#include <stdarg.h>
// http://gcc.gnu.org/wiki/Visibility
#if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
#define LOCAL_EXTERN __hidden extern
#define LIB3270_EXPORT
#elif defined (HAVE_GNUC_VISIBILITY)
#define LOCAL_EXTERN __attribute__((visibility("hidden"))) extern
#define LIB3270_EXPORT __attribute__((visibility("default"))) extern
#else
#define LOCAL_EXTERN extern
#define LIB3270_EXPORT
#endif
#endif
#ifndef HCONSOLE
#define HCONSOLE void *
#endif
#ifndef ETIMEDOUT
#define ETIMEDOUT -1238
#endif
#ifndef ECANCELED
#ifdef EINTR
#define ECANCELED EINTR
#else
#define ECANCELED -1125
#endif
#endif
#ifndef ENOTCONN
#define ENOTCONN -1107
#endif
#ifndef CN
#define CN ((char *) NULL)
#endif
/* Debug & log */
#if defined( DEBUG )
#define Trace( fmt, ... ) fprintf(stderr, "%s(%d) " fmt "\n", __FILE__, __LINE__, __VA_ARGS__ ); fflush(stderr); \
WriteLog("TRACE", "%s(%d) " fmt , __FILE__, __LINE__, __VA_ARGS__ )
#else
#define Trace( fmt, ... ) /* __VA_ARGS__ */
#endif
LIB3270_EXPORT int Set3270Log(const char *filename);
LIB3270_EXPORT int WriteLog(const char *module, const char *fmt, ...);
LIB3270_EXPORT int WriteRCLog(const char *module, int rc, const char *fmt, ...);
#ifdef LIB3270_MODULE_NAME
#define Log(fmt, ...) WriteLog(LIB3270_MODULE_NAME,fmt,__VA_ARGS__)
#else
#define Log(fmt, ...) WriteLog("MSG",fmt,__VA_ARGS__)
#endif
/** 3270 connection handle */
#define LUNAME_SIZE 16
#define FULL_MODEL_NAME_SIZE 13
#define ST_RESOLVING LIB3270_STATE_RESOLVING
#define ST_HALF_CONNECT LIB3270_STATE_HALF_CONNECT
#define ST_CONNECT LIB3270_STATE_CONNECT
#define ST_3270_MODE LIB3270_STATE_3270_MODE
#define ST_LINE_MODE LIB3270_STATE_LINE_MODE
#define ST_REMODEL LIB3270_STATE_REMODEL
#define ST_PRINTER LIB3270_STATE_PRINTER
#define ST_EXITING LIB3270_STATE_EXITING
#define ST_CHARSET LIB3270_STATE_CHARSET
#define N_ST LIB3270_STATE_USER
#define LIB3270_STATE_CHANGE LIB3270_STATE
/** connection state */
#define cstate LIB3270_CSTATE
#define NOT_CONNECTED LIB3270_NOT_CONNECTED
#define RESOLVING LIB3270_RESOLVING
#define PENDING LIB3270_PENDING
#define CONNECTED_INITIAL LIB3270_CONNECTED_INITIAL
#define CONNECTED_ANSI LIB3270_CONNECTED_ANSI
#define CONNECTED_3270 LIB3270_CONNECTED_3270
#define CONNECTED_INITIAL_E LIB3270_CONNECTED_INITIAL_E
#define CONNECTED_NVT LIB3270_CONNECTED_NVT
#define CONNECTED_SSCP LIB3270_CONNECTED_SSCP
#define CONNECTED_TN3270E LIB3270_CONNECTED_TN3270E
#define LIB3270_STATUS LIB3270_MESSAGE
#define LIB3270_STATUS_BLANK LIB3270_MESSAGE_NONE
#define LIB3270_STATUS_SYSWAIT LIB3270_MESSAGE_SYSWAIT
#define LIB3270_STATUS_TWAIT LIB3270_MESSAGE_TWAIT
#define LIB3270_STATUS_CONNECTED LIB3270_MESSAGE_CONNECTED
#define LIB3270_STATUS_DISCONNECTED LIB3270_MESSAGE_DISCONNECTED
#define LIB3270_STATUS_AWAITING_FIRST LIB3270_MESSAGE_AWAITING_FIRST
#define LIB3270_STATUS_MINUS LIB3270_MESSAGE_MINUS
#define LIB3270_STATUS_PROTECTED LIB3270_MESSAGE_PROTECTED
#define LIB3270_STATUS_NUMERIC LIB3270_MESSAGE_NUMERIC
#define LIB3270_STATUS_OVERFLOW LIB3270_MESSAGE_OVERFLOW
#define LIB3270_STATUS_INHIBIT LIB3270_MESSAGE_INHIBIT
#define LIB3270_STATUS_KYBDLOCK LIB3270_MESSAGE_KYBDLOCK
#define LIB3270_STATUS_X LIB3270_MESSAGE_X
#define LIB3270_STATUS_RESOLVING LIB3270_MESSAGE_RESOLVING
#define LIB3270_STATUS_CONNECTING LIB3270_MESSAGE_CONNECTING
#define LIB3270_STATUS_USER LIB3270_MESSAGE_USER
#define OIA_FLAG_BOXSOLID LIB3270_FLAG_BOXSOLID
#define OIA_FLAG_UNDERA LIB3270_FLAG_UNDERA
#define OIA_FLAG_SECURE LIB3270_FLAG_SECURE
#define OIA_FLAG_TYPEAHEAD LIB3270_FLAG_TYPEAHEAD
#define OIA_FLAG_PRINTER LIB3270_FLAG_PRINTER
#define OIA_FLAG_REVERSE LIB3270_FLAG_REVERSE
#define OIA_FLAG_USER LIB3270_FLAG_COUNT
#define OIA_FLAG LIB3270_FLAG
struct lib3270_state_callback;
typedef struct _h3270 H3270;
struct _h3270
{
unsigned short sz; /**< Struct size */
// Connection info
int secure_connection;
int sock; /**< Network socket */
int net_sock;
LIB3270_CSTATE cstate; /**< Connection state */
#if defined(_WIN32) /*[*/
HANDLE sock_handle;
#endif /*]*/
char * hostname;
char * connected_type;
char * connected_lu;
char luname[LUNAME_SIZE+1];
char full_model_name[FULL_MODEL_NAME_SIZE+1];
char * model_name;
int model_num;
char * termtype;
char * current_host; /**< the hostname part, stripped of qualifiers, luname and port number */
char * full_current_host; /**< the entire string, for use in reconnecting */
char * reconnect_host;
char * qualified_host;
char auto_reconnect_inprogress;
LIB3270_MESSAGE oia_status;
unsigned char oia_flag[LIB3270_FLAG_COUNT];
unsigned short current_port;
// screen info
int ov_rows;
int ov_cols;
// int first_changed;
// int last_changed;
int maxROWS;
int maxCOLS;
unsigned short rows;
unsigned short cols;
int cursor_addr;
char flipped;
int screen_alt; /**< alternate screen? */
int is_altbuffer;
int formatted; /**< set in screen_disp */
// host.c
char std_ds_host;
char no_login_host;
char non_tn3270e_host;
char passthru_host;
char ssl_host;
char ever_3270;
// Widget info
void * widget;
// xio
unsigned long ns_read_id;
unsigned long ns_exception_id;
char reading;
char excepting;
/* State change callbacks. */
struct lib3270_state_callback *st_callbacks[N_ST];
struct lib3270_state_callback *st_last[N_ST];
/* Session based callbacks */
void (*configure)(H3270 *session, unsigned short rows, unsigned short cols);
void (*update)(H3270 *session, int baddr, unsigned char c, unsigned short attr, unsigned char cursor);
void (*changed)(H3270 *session, int bstart, int bend);
void (*update_cursor)(H3270 *session, unsigned short row, unsigned short col, unsigned char c, unsigned short attr);
void (*update_oia)(H3270 *session, OIA_FLAG id, unsigned char on);
void (*update_toggle)(H3270 *session, LIB3270_TOGGLE ix, unsigned char value, LIB3270_TOGGLE_TYPE reason, const char *name);
void (*update_luname)(H3270 *session, const char *name);
void (*update_status)(H3270 *session, LIB3270_STATUS id);
void (*update_connect)(H3270 *session, unsigned char connected);
void (*update_model)(H3270 *session, const char *name, int model, int rows, int cols);
void (*set_timer)(H3270 *session, unsigned char on);
void (*erase)(H3270 *session);
void (*cursor)(H3270 *session, LIB3270_CURSOR id);
};
struct lib3270_state_callback
{
struct lib3270_state_callback * next; /**< Next callback in chain */
void * data; /**< User data */
void (*func)(H3270 *, int, void *); /**< Function to call */
};
/** Type of dialog boxes */
typedef enum _PW3270_DIALOG
{
PW3270_DIALOG_INFO, /**< Simple information dialog */
PW3270_DIALOG_CRITICAL, /**< Critical error, user can abort application */
PW3270_DIALOG_USER
} PW3270_DIALOG;
/** extended attributes */
struct ea
{
unsigned char cc; /**< EBCDIC or ASCII character code */
unsigned char fa; /**< field attribute, it nonzero */
unsigned char fg; /**< foreground color (0x00 or 0xf<n>) */
unsigned char bg; /**< background color (0x00 or 0xf<n>) */
unsigned char gr; /**< ANSI graphics rendition bits */
unsigned char cs; /**< character set (GE flag, or 0..2) */
unsigned char ic; /**< input control (DBCS) */
unsigned char db; /**< DBCS state */
/* Updated by addch() */
unsigned char chr; /**< ASCII character code */
unsigned short attr; /**< Converted character attribute (color & etc) */
};
#define GR_BLINK 0x01
#define GR_REVERSE 0x02
#define GR_UNDERLINE 0x04
#define GR_INTENSIFY 0x08
#define CS_MASK 0x03 /**< mask for specific character sets */
#define CS_BASE 0x00 /**< base character set (X'00') */
#define CS_APL 0x01 /**< APL character set (X'01' or GE) */
#define CS_LINEDRAW 0x02 /**< DEC line-drawing character set (ANSI) */
#define CS_DBCS 0x03 /**< DBCS character set (X'F8') */
#define CS_GE 0x04 /**< cs flag for Graphic Escape */
/**
* Return a "malloced" copy of the device buffer, set number of elements
*/
LIB3270_EXPORT struct ea * copy_device_buffer(int *el);
/**
* Set the contents of the device buffer for debugging purposes
*/
LIB3270_EXPORT int set_device_buffer(struct ea *src, int el);
/* File transfer */
#define FT_FLAG_RECEIVE 0x0001
#define FT_FLAG_ASCII 0x0002
#define FT_FLAG_CRLF 0x0004
#define FT_FLAG_APPEND 0x0008
#define FT_FLAG_TSO 0x0010
#define FT_FLAG_REMAP_ASCII 0x0020
#define FT_RECORD_FORMAT_FIXED 0x0100
#define FT_RECORD_FORMAT_VARIABLE 0x0200
#define FT_RECORD_FORMAT_UNDEFINED 0x0300
#define FT_RECORD_FORMAT_MASK FT_RECORD_FORMAT_UNDEFINED
#define FT_ALLOCATION_UNITS_TRACKS 0x1000
#define FT_ALLOCATION_UNITS_CYLINDERS 0x2000
#define FT_ALLOCATION_UNITS_AVBLOCK 0x3000
#define FT_ALLOCATION_UNITS_MASK FT_ALLOCATION_UNITS_AVBLOCK
enum ft_state
{
FT_NONE, /**< No transfer in progress */
FT_AWAIT_ACK, /**< IND$FILE sent, awaiting acknowledgement message */
FT_RUNNING, /**< Ack received, data flowing */
FT_ABORT_WAIT, /**< Awaiting chance to send an abort */
FT_ABORT_SENT /**< Abort sent; awaiting response */
};
LIB3270_EXPORT int BeginFileTransfer(unsigned short flags, const char *local, const char *remote, int lrecl, int blksize, int primspace, int secspace, int dft);
LIB3270_EXPORT int CancelFileTransfer(int force);
LIB3270_EXPORT enum ft_state GetFileTransferState(void);
struct filetransfer_callbacks
{
unsigned short sz;
void (*begin)(unsigned short flags, const char *local, const char *remote);
void (*complete)(const char *errmsg,unsigned long length,double kbytes_sec,const char *mode);
void (*setlength)(unsigned long length);
void (*update)(unsigned long length,double kbytes_sec);
void (*running)(int is_cut);
void (*aborting)(void);
};
LIB3270_EXPORT int RegisterFTCallbacks(const struct filetransfer_callbacks *cbk);
#define PCONNECTED lib3270_pconnected(NULL)
#define HALF_CONNECTED lib3270_half_connected(NULL)
#define CONNECTED lib3270_connected(NULL)
#define IN_NEITHER lib3270_in_neither(NULL)
#define IN_ANSI lib3270_in_ansi(NULL)
#define IN_3270 lib3270_in_3270(NULL)
#define IN_SSCP lib3270_in_sscp(NULL)
#define IN_TN3270E lib3270_in_tn3270e(NULL)
#define IN_E lib3270_in_e(NULL)
#ifndef LIB3270
LIB3270_EXPORT enum ft_state QueryFTstate(void);
#endif
#define Register3270IOCallbacks(x) lib3270_register_io_handlers(x)
/* Screen processing */
#define CURSOR_MODE_NORMAL LIB3270_CURSOR_NORMAL
#define CURSOR_MODE_WAITING LIB3270_CURSOR_WAITING
#define CURSOR_MODE_LOCKED LIB3270_CURSOR_LOCKED
typedef enum _SCRIPT_STATE
{
SCRIPT_STATE_NONE,
SCRIPT_STATE_RUNNING,
SCRIPT_STATE_HALTED,
SCRIPT_STATE_USER
} SCRIPT_STATE;
typedef enum _COUNTER_ID
{
COUNTER_ID_CTLR_DONE,
COUNTER_ID_RESET,
COUNTER_ID_USER
} COUNTER_ID;
LIB3270_EXPORT int query_counter(COUNTER_ID id);
#define query_screen_change_counter() query_counter(COUNTER_ID_CTLR_DONE)
#define COLOR_ATTR_NONE 0x0000
#define COLOR_ATTR_FIELD LIB3270_ATTR_FIELD
#define COLOR_ATTR_BLINK LIB3270_ATTR_BLINK
#define COLOR_ATTR_UNDERLINE LIB3270_ATTR_UNDERLINE
#define COLOR_ATTR_INTENSIFY LIB3270_ATTR_INTENSIFY
#define CHAR_ATTR_CG LIB3270_ATTR_CG
#define CHAR_ATTR_MARKER LIB3270_ATTR_MARKER
#define CHAR_ATTR_UNCONVERTED CHAR_ATTR_CG
struct lib3270_screen_callbacks
{
unsigned short sz;
int (*init)(void);
int (*popup_dialog)(H3270 *session, PW3270_DIALOG type, const char *title, const char *msg, const char *fmt, va_list arg);
void (*Error)(const char *fmt, va_list arg);
void (*Warning)(const char *fmt, va_list arg);
void (*SysError)(const char *title, const char *message, const char *system);
void (*model_changed)(H3270 *session, const char *name, int model, int rows, int cols);
int (*addch)(int row, int col, unsigned char c, unsigned short attr);
void (*charset)(char *dcs);
void (*title)(char *text);
void (*ring_bell)(void);
void (*redraw)(void);
void (*move_cursor)(H3270 *session, unsigned short row, unsigned short col, unsigned char c, unsigned short attr);
int (*set_suspended)(int state);
void (*set_script)(SCRIPT_STATE state);
void (*reset)(int lock);
void (*status)(H3270 *session, LIB3270_STATUS id);
void (*cursor)(H3270 *session, LIB3270_CURSOR mode);
void (*lu)(H3270 *session, const char *lu);
void (*set_oia)(H3270 *session, OIA_FLAG id, unsigned char on);
void (*erase)(H3270 *session);
void (*display)(H3270 *session);
void (*set_viewsize)(H3270 *session, unsigned short rows, unsigned short cols);
void (*toggle_changed)(H3270 *session, LIB3270_TOGGLE ix, unsigned char value, LIB3270_TOGGLE_TYPE reason, const char *name);
void (*show_timer)(long seconds);
// Console/Trace window
HCONSOLE (*console_new)(const char *title, const char *label);
void (*console_delete)(HCONSOLE hwnd);
int (*console_append)(HCONSOLE hwnd, const char *fmt, va_list args);
char * (*console_entry)(HCONSOLE hwnd);
};
struct lib3270_option
{
const char *name;
enum
{
OPT_BOOLEAN,
OPT_STRING,
OPT_INTEGER,
OPT_XRM,
OPT_SKIP2,
OPT_NOP,
OPT_DONE
} type;
unsigned char flag;
const char *res_name;
void *aoff;
const char *description;
};
LIB3270_EXPORT int Register3270ScreenCallbacks(const struct lib3270_screen_callbacks *cbk);
#define new_3270_session(m) lib3270_session_new(m)
LIB3270_EXPORT const struct lib3270_option * get_3270_option_table(int sz);
/* Popups */
LIB3270_EXPORT void Error(const char *fmt, ...);
LIB3270_EXPORT void Warning(const char *fmt, ...);
LIB3270_EXPORT void show_3270_popup_dialog(H3270 *session, PW3270_DIALOG type, const char *title, const char *msg, const char *fmt, ...);
/* Set/Get screen contents */
LIB3270_EXPORT int find_field_attribute(H3270 *session, int baddr);
LIB3270_EXPORT int find_field_length(H3270 *session, int baddr);
LIB3270_EXPORT unsigned char get_field_attribute(H3270 *session, int baddr);
LIB3270_EXPORT int screen_read(char *dest, int baddr, int count);
LIB3270_EXPORT void Input_String(const unsigned char *str);
LIB3270_EXPORT void screen_size(int *rows, int *cols);
#define query_secure_connection(h) lib3270_get_ssl_state(h)
#define lib3270_paste_string(str) lib3270_set_string(NULL,str)
#define get_3270_terminal_size(h,r,c) lib3270_get_screen_size(h,r,c)
/* Keyboard */
LIB3270_EXPORT int emulate_input(char *s, int len, int pasting);
/* Network related calls */
LIB3270_EXPORT int Get3270Socket(void);
/* Misc calls */
LIB3270_EXPORT void popup_an_error(const char *fmt, ...);
LIB3270_EXPORT void popup_system_error(const char *title, const char *message, const char *system);
LIB3270_EXPORT void popup_a_sockerr(char *fmt, ...);
#define query_3270_terminal_status(void) lib3270_get_program_message(NULL)
#define set_3270_model(h,m) lib3270_set_model(h,m)
#define get_3270_model(h) lib3270_get_model(h)
LIB3270_EXPORT int lib3270_set_model(H3270 *session, int model);
LIB3270_EXPORT int lib3270_get_model(H3270 *session);
/* Get connection info */
#define get_connected_lu(h) lib3270_get_luname(h)
#define get_current_host(h) lib3270_get_host(h)
LIB3270_EXPORT SCRIPT_STATE status_script(SCRIPT_STATE state);
#define Toggled(ix) lib3270_get_toggle(NULL,ix)
#define CallAndWait(c,h,p) lib3270_call_thread(c,h,p)
LIB3270_EXPORT void RunPendingEvents(int wait);
LIB3270_EXPORT int Wait(int seconds);
LIB3270_EXPORT int ctlr_get_cols(void) __attribute__ ((deprecated));
LIB3270_EXPORT int ctlr_get_rows(void) __attribute__ ((deprecated));
/* Screen calls */
LIB3270_EXPORT void screen_resume(H3270 *session);
LIB3270_EXPORT void screen_suspend(H3270 *session);
LIB3270_EXPORT void screen_disp(H3270 *session);
/* Cursor calls */
#define cursor_get_addr(void) lib3270_get_cursor_address(NULL)
#define cursor_set_addr(x) lib3270_set_cursor_address(NULL,x)
#define cursor_move(x) lib3270_set_cursor_address(NULL,x)
#include <lib3270/actions.h>
#define host_connect(n,wait) lib3270_connect(NULL,n,wait)
#define host_reconnect(w) lib3270_reconnect(NULL,w)
#define register_schange(tx,func) lib3270_register_schange(NULL,tx,func,NULL)
/* Console/Trace window */
LIB3270_EXPORT HCONSOLE console_window_new(const char *title, const char *label);
LIB3270_EXPORT void console_window_delete(HCONSOLE hwnd);
LIB3270_EXPORT int console_window_append(HCONSOLE hwnd, const char *fmt, ...);
LIB3270_EXPORT char * console_window_wait_for_user_entry(HCONSOLE hwnd);
#ifdef __cplusplus
}
#endif
#endif // LIB3270_API_INCLUDED