Commit b631a1851f09fa1d723667c4fa4f5c3bc3155ddb

Authored by perry.werneck@gmail.com
1 parent d3f8fbdd

Movendo api.h antigo para o diretório da biblioteca

Showing 1 changed file with 640 additions and 0 deletions   Show diff stats
src/lib3270/api.h 0 → 100644
... ... @@ -0,0 +1,640 @@
  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 api.h e possui 444 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 de Mendonça)
  27 + * licinio@bb.com.br (Licínio Luis Branco)
  28 + * kraucer@bb.com.br (Kraucer Fernandes Mazuco)
  29 + * macmiranda@bb.com.br (Marco Aurélio Caldas Miranda)
  30 + *
  31 + */
  32 +
  33 +
  34 +#ifndef LIB3270_API_INCLUDED
  35 +
  36 +#ifdef __cplusplus
  37 + extern "C" {
  38 +#endif
  39 +
  40 + #define LIB3270_API_INCLUDED "4.2"
  41 +
  42 + #include <errno.h>
  43 +
  44 + #if defined(_WIN32)
  45 + #include <windows.h>
  46 +
  47 + #define LIB3270_EXPORT __declspec (dllexport)
  48 +
  49 + #if defined (HAVE_GNUC_VISIBILITY)
  50 + #define LOCAL_EXTERN __attribute__((visibility("hidden"))) extern
  51 + #else
  52 + #define LOCAL_EXTERN extern
  53 + #endif
  54 +
  55 + #else
  56 + #include <stdarg.h>
  57 +
  58 + // http://gcc.gnu.org/wiki/Visibility
  59 + #if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
  60 + #define LOCAL_EXTERN __hidden extern
  61 + #define LIB3270_EXPORT
  62 + #elif defined (HAVE_GNUC_VISIBILITY)
  63 + #define LOCAL_EXTERN __attribute__((visibility("hidden"))) extern
  64 + #define LIB3270_EXPORT __attribute__((visibility("default"))) extern
  65 + #else
  66 + #define LOCAL_EXTERN extern
  67 + #define LIB3270_EXPORT
  68 + #endif
  69 +
  70 +
  71 + #endif
  72 +
  73 + #ifndef HCONSOLE
  74 + #define HCONSOLE void *
  75 + #endif
  76 +
  77 + #ifndef ETIMEDOUT
  78 + #define ETIMEDOUT -1238
  79 + #endif
  80 +
  81 + #ifndef ECANCELED
  82 + #ifdef EINTR
  83 + #define ECANCELED EINTR
  84 + #else
  85 + #define ECANCELED -1125
  86 + #endif
  87 + #endif
  88 +
  89 + #ifndef ENOTCONN
  90 + #define ENOTCONN -1107
  91 + #endif
  92 +
  93 + #ifndef CN
  94 + #define CN ((char *) NULL)
  95 + #endif
  96 +
  97 + /* Debug & log */
  98 + #if defined( DEBUG )
  99 + #define Trace( fmt, ... ) fprintf(stderr, "%s(%d) " fmt "\n", __FILE__, __LINE__, __VA_ARGS__ ); fflush(stderr); \
  100 + WriteLog("TRACE", "%s(%d) " fmt , __FILE__, __LINE__, __VA_ARGS__ )
  101 + #else
  102 + #define Trace( fmt, ... ) /* __VA_ARGS__ */
  103 + #endif
  104 +
  105 +
  106 + LIB3270_EXPORT int Set3270Log(const char *filename);
  107 + LIB3270_EXPORT int WriteLog(const char *module, const char *fmt, ...);
  108 + LIB3270_EXPORT int WriteRCLog(const char *module, int rc, const char *fmt, ...);
  109 +
  110 + #ifdef LIB3270_MODULE_NAME
  111 + #define Log(fmt, ...) WriteLog(LIB3270_MODULE_NAME,fmt,__VA_ARGS__)
  112 + #else
  113 + #define Log(fmt, ...) WriteLog("MSG",fmt,__VA_ARGS__)
  114 + #endif
  115 +
  116 + /** 3270 connection handle */
  117 + #define LUNAME_SIZE 16
  118 + #define FULL_MODEL_NAME_SIZE 13
  119 +
  120 +
  121 + /* State change IDs. */
  122 + typedef enum _lib3270_state
  123 + {
  124 + LIB3270_STATE_RESOLVING,
  125 + LIB3270_STATE_HALF_CONNECT,
  126 + LIB3270_STATE_CONNECT,
  127 + LIB3270_STATE_3270_MODE,
  128 + LIB3270_STATE_LINE_MODE,
  129 + LIB3270_STATE_REMODEL,
  130 + LIB3270_STATE_PRINTER,
  131 + LIB3270_STATE_EXITING,
  132 + LIB3270_STATE_CHARSET,
  133 +
  134 + LIB3270_STATE_USER // Always the last one
  135 + } LIB3270_STATE;
  136 +
  137 + #define ST_RESOLVING LIB3270_STATE_RESOLVING
  138 + #define ST_HALF_CONNECT LIB3270_STATE_HALF_CONNECT
  139 + #define ST_CONNECT LIB3270_STATE_CONNECT
  140 + #define ST_3270_MODE LIB3270_STATE_3270_MODE
  141 + #define ST_LINE_MODE LIB3270_STATE_LINE_MODE
  142 + #define ST_REMODEL LIB3270_STATE_REMODEL
  143 + #define ST_PRINTER LIB3270_STATE_PRINTER
  144 + #define ST_EXITING LIB3270_STATE_EXITING
  145 + #define ST_CHARSET LIB3270_STATE_CHARSET
  146 + #define N_ST LIB3270_STATE_USER
  147 + #define LIB3270_STATE_CHANGE LIB3270_STATE
  148 +
  149 + /** connection state */
  150 + #define cstate LIB3270_CSTATE
  151 + #define NOT_CONNECTED LIB3270_NOT_CONNECTED
  152 + #define RESOLVING LIB3270_RESOLVING
  153 + #define PENDING LIB3270_PENDING
  154 + #define CONNECTED_INITIAL LIB3270_CONNECTED_INITIAL
  155 + #define CONNECTED_ANSI LIB3270_CONNECTED_ANSI
  156 + #define CONNECTED_3270 LIB3270_CONNECTED_3270
  157 + #define CONNECTED_INITIAL_E LIB3270_CONNECTED_INITIAL_E
  158 + #define CONNECTED_NVT LIB3270_CONNECTED_NVT
  159 + #define CONNECTED_SSCP LIB3270_CONNECTED_SSCP
  160 + #define CONNECTED_TN3270E LIB3270_CONNECTED_TN3270E
  161 +
  162 + #define LIB3270_STATUS LIB3270_MESSAGE
  163 + #define LIB3270_STATUS_BLANK LIB3270_MESSAGE_NONE
  164 + #define LIB3270_STATUS_SYSWAIT LIB3270_MESSAGE_SYSWAIT
  165 + #define LIB3270_STATUS_TWAIT LIB3270_MESSAGE_TWAIT
  166 + #define LIB3270_STATUS_CONNECTED LIB3270_MESSAGE_CONNECTED
  167 + #define LIB3270_STATUS_DISCONNECTED LIB3270_MESSAGE_DISCONNECTED
  168 + #define LIB3270_STATUS_AWAITING_FIRST LIB3270_MESSAGE_AWAITING_FIRST
  169 + #define LIB3270_STATUS_MINUS LIB3270_MESSAGE_MINUS
  170 + #define LIB3270_STATUS_PROTECTED LIB3270_MESSAGE_PROTECTED
  171 + #define LIB3270_STATUS_NUMERIC LIB3270_MESSAGE_NUMERIC
  172 + #define LIB3270_STATUS_OVERFLOW LIB3270_MESSAGE_OVERFLOW
  173 + #define LIB3270_STATUS_INHIBIT LIB3270_MESSAGE_INHIBIT
  174 + #define LIB3270_STATUS_KYBDLOCK LIB3270_MESSAGE_KYBDLOCK
  175 + #define LIB3270_STATUS_X LIB3270_MESSAGE_X
  176 + #define LIB3270_STATUS_RESOLVING LIB3270_MESSAGE_RESOLVING
  177 + #define LIB3270_STATUS_CONNECTING LIB3270_MESSAGE_CONNECTING
  178 + #define LIB3270_STATUS_USER LIB3270_MESSAGE_USER
  179 +
  180 + #define OIA_FLAG_BOXSOLID LIB3270_FLAG_BOXSOLID
  181 + #define OIA_FLAG_UNDERA LIB3270_FLAG_UNDERA
  182 + #define OIA_FLAG_SECURE LIB3270_FLAG_SECURE
  183 + #define OIA_FLAG_TYPEAHEAD LIB3270_FLAG_TYPEAHEAD
  184 + #define OIA_FLAG_PRINTER LIB3270_FLAG_PRINTER
  185 + #define OIA_FLAG_REVERSE LIB3270_FLAG_REVERSE
  186 + #define OIA_FLAG_USER LIB3270_FLAG_COUNT
  187 + #define OIA_FLAG LIB3270_FLAG
  188 +
  189 + struct lib3270_state_callback;
  190 +
  191 + typedef struct _h3270 H3270;
  192 +
  193 + struct _h3270
  194 + {
  195 + unsigned short sz; /**< Struct size */
  196 +
  197 + // Connection info
  198 + int secure_connection;
  199 + int sock; /**< Network socket */
  200 + int net_sock;
  201 + LIB3270_CSTATE cstate; /**< Connection state */
  202 +
  203 + #if defined(_WIN32) /*[*/
  204 + HANDLE sock_handle;
  205 + #endif /*]*/
  206 +
  207 + char * hostname;
  208 + char * connected_type;
  209 + char * connected_lu;
  210 + char luname[LUNAME_SIZE+1];
  211 +
  212 + char full_model_name[FULL_MODEL_NAME_SIZE+1];
  213 + char * model_name;
  214 + int model_num;
  215 + char * termtype;
  216 +
  217 + char * current_host; /**< the hostname part, stripped of qualifiers, luname and port number */
  218 + char * full_current_host; /**< the entire string, for use in reconnecting */
  219 + char * reconnect_host;
  220 + char * qualified_host;
  221 + char auto_reconnect_inprogress;
  222 +
  223 + LIB3270_MESSAGE oia_status;
  224 +
  225 + unsigned char oia_flag[LIB3270_FLAG_COUNT];
  226 +
  227 + unsigned short current_port;
  228 +
  229 + // screen info
  230 + int ov_rows;
  231 + int ov_cols;
  232 +// int first_changed;
  233 +// int last_changed;
  234 + int maxROWS;
  235 + int maxCOLS;
  236 + unsigned short rows;
  237 + unsigned short cols;
  238 + int cursor_addr;
  239 + char flipped;
  240 + int screen_alt; /**< alternate screen? */
  241 + int is_altbuffer;
  242 +
  243 + int formatted; /**< set in screen_disp */
  244 +
  245 + // host.c
  246 + char std_ds_host;
  247 + char no_login_host;
  248 + char non_tn3270e_host;
  249 + char passthru_host;
  250 + char ssl_host;
  251 + char ever_3270;
  252 +
  253 + // Widget info
  254 + void * widget;
  255 +
  256 + // xio
  257 + unsigned long ns_read_id;
  258 + unsigned long ns_exception_id;
  259 + char reading;
  260 + char excepting;
  261 +
  262 + /* State change callbacks. */
  263 + struct lib3270_state_callback *st_callbacks[N_ST];
  264 + struct lib3270_state_callback *st_last[N_ST];
  265 +
  266 + /* Session based callbacks */
  267 + void (*configure)(H3270 *session, unsigned short rows, unsigned short cols);
  268 + void (*update)(H3270 *session, int baddr, unsigned char c, unsigned short attr, unsigned char cursor);
  269 + void (*changed)(H3270 *session, int bstart, int bend);
  270 +
  271 + void (*update_cursor)(H3270 *session, unsigned short row, unsigned short col, unsigned char c, unsigned short attr);
  272 + void (*update_oia)(H3270 *session, OIA_FLAG id, unsigned char on);
  273 + void (*update_toggle)(H3270 *session, LIB3270_TOGGLE ix, unsigned char value, LIB3270_TOGGLE_TYPE reason, const char *name);
  274 + void (*update_luname)(H3270 *session, const char *name);
  275 + void (*update_status)(H3270 *session, LIB3270_STATUS id);
  276 + void (*update_connect)(H3270 *session, unsigned char connected);
  277 + void (*update_model)(H3270 *session, const char *name, int model, int rows, int cols);
  278 +
  279 + void (*set_timer)(H3270 *session, unsigned char on);
  280 + void (*erase)(H3270 *session);
  281 + void (*cursor)(H3270 *session, LIB3270_CURSOR id);
  282 +
  283 + };
  284 +
  285 + struct lib3270_state_callback
  286 + {
  287 + struct lib3270_state_callback * next; /**< Next callback in chain */
  288 + void * data; /**< User data */
  289 + void (*func)(H3270 *, int, void *); /**< Function to call */
  290 + };
  291 +
  292 +
  293 + /** Type of dialog boxes */
  294 + typedef enum _PW3270_DIALOG
  295 + {
  296 + PW3270_DIALOG_INFO, /**< Simple information dialog */
  297 + PW3270_DIALOG_CRITICAL, /**< Critical error, user can abort application */
  298 +
  299 + PW3270_DIALOG_USER
  300 + } PW3270_DIALOG;
  301 +
  302 + /** input key type */
  303 + enum keytype
  304 + {
  305 + KT_STD,
  306 + KT_GE
  307 + };
  308 +
  309 + /** extended attributes */
  310 + struct ea
  311 + {
  312 + unsigned char cc; /**< EBCDIC or ASCII character code */
  313 + unsigned char fa; /**< field attribute, it nonzero */
  314 + unsigned char fg; /**< foreground color (0x00 or 0xf<n>) */
  315 + unsigned char bg; /**< background color (0x00 or 0xf<n>) */
  316 + unsigned char gr; /**< ANSI graphics rendition bits */
  317 + unsigned char cs; /**< character set (GE flag, or 0..2) */
  318 + unsigned char ic; /**< input control (DBCS) */
  319 + unsigned char db; /**< DBCS state */
  320 +
  321 + /* Updated by addch() */
  322 + unsigned char chr; /**< ASCII character code */
  323 + unsigned short attr; /**< Converted character attribute (color & etc) */
  324 +
  325 + };
  326 + #define GR_BLINK 0x01
  327 + #define GR_REVERSE 0x02
  328 + #define GR_UNDERLINE 0x04
  329 + #define GR_INTENSIFY 0x08
  330 +
  331 + #define CS_MASK 0x03 /**< mask for specific character sets */
  332 + #define CS_BASE 0x00 /**< base character set (X'00') */
  333 + #define CS_APL 0x01 /**< APL character set (X'01' or GE) */
  334 + #define CS_LINEDRAW 0x02 /**< DEC line-drawing character set (ANSI) */
  335 + #define CS_DBCS 0x03 /**< DBCS character set (X'F8') */
  336 + #define CS_GE 0x04 /**< cs flag for Graphic Escape */
  337 +
  338 + /**
  339 + * Return a "malloced" copy of the device buffer, set number of elements
  340 + */
  341 + LIB3270_EXPORT struct ea * copy_device_buffer(int *el);
  342 +
  343 + /**
  344 + * Set the contents of the device buffer for debugging purposes
  345 + */
  346 + LIB3270_EXPORT int set_device_buffer(struct ea *src, int el);
  347 +
  348 + /* File transfer */
  349 + #define FT_FLAG_RECEIVE 0x0001
  350 + #define FT_FLAG_ASCII 0x0002
  351 + #define FT_FLAG_CRLF 0x0004
  352 + #define FT_FLAG_APPEND 0x0008
  353 + #define FT_FLAG_TSO 0x0010
  354 + #define FT_FLAG_REMAP_ASCII 0x0020
  355 +
  356 + #define FT_RECORD_FORMAT_FIXED 0x0100
  357 + #define FT_RECORD_FORMAT_VARIABLE 0x0200
  358 + #define FT_RECORD_FORMAT_UNDEFINED 0x0300
  359 + #define FT_RECORD_FORMAT_MASK FT_RECORD_FORMAT_UNDEFINED
  360 +
  361 + #define FT_ALLOCATION_UNITS_TRACKS 0x1000
  362 + #define FT_ALLOCATION_UNITS_CYLINDERS 0x2000
  363 + #define FT_ALLOCATION_UNITS_AVBLOCK 0x3000
  364 + #define FT_ALLOCATION_UNITS_MASK FT_ALLOCATION_UNITS_AVBLOCK
  365 +
  366 + enum ft_state
  367 + {
  368 + FT_NONE, /**< No transfer in progress */
  369 + FT_AWAIT_ACK, /**< IND$FILE sent, awaiting acknowledgement message */
  370 + FT_RUNNING, /**< Ack received, data flowing */
  371 + FT_ABORT_WAIT, /**< Awaiting chance to send an abort */
  372 + FT_ABORT_SENT /**< Abort sent; awaiting response */
  373 + };
  374 +
  375 + LIB3270_EXPORT int BeginFileTransfer(unsigned short flags, const char *local, const char *remote, int lrecl, int blksize, int primspace, int secspace, int dft);
  376 + LIB3270_EXPORT int CancelFileTransfer(int force);
  377 + LIB3270_EXPORT enum ft_state GetFileTransferState(void);
  378 +
  379 + struct filetransfer_callbacks
  380 + {
  381 + unsigned short sz;
  382 +
  383 + void (*begin)(unsigned short flags, const char *local, const char *remote);
  384 + void (*complete)(const char *errmsg,unsigned long length,double kbytes_sec,const char *mode);
  385 + void (*setlength)(unsigned long length);
  386 + void (*update)(unsigned long length,double kbytes_sec);
  387 + void (*running)(int is_cut);
  388 + void (*aborting)(void);
  389 +
  390 + };
  391 +
  392 + LIB3270_EXPORT int RegisterFTCallbacks(const struct filetransfer_callbacks *cbk);
  393 +
  394 +// #define QueryCstate() lib3270_get_connection_state(NULL)
  395 +
  396 + #define PCONNECTED lib3270_pconnected(NULL)
  397 + #define HALF_CONNECTED lib3270_half_connected(NULL)
  398 + #define CONNECTED lib3270_connected(NULL)
  399 +
  400 + #define IN_NEITHER lib3270_in_neither(NULL)
  401 + #define IN_ANSI lib3270_in_ansi(NULL)
  402 + #define IN_3270 lib3270_in_3270(NULL)
  403 + #define IN_SSCP lib3270_in_sscp(NULL)
  404 + #define IN_TN3270E lib3270_in_tn3270e(NULL)
  405 + #define IN_E lib3270_in_e(NULL)
  406 +
  407 + #ifndef LIB3270
  408 +
  409 +
  410 + LIB3270_EXPORT enum ft_state QueryFTstate(void);
  411 +
  412 +// #define PCONNECTED ((int) QueryCstate() >= (int)RESOLVING)
  413 +// #define HALF_CONNECTED (QueryCstate() == RESOLVING || QueryCstate() == PENDING)
  414 +// #define CONNECTED ((int) QueryCstate() >= (int)CONNECTED_INITIAL)
  415 +// #define IN_NEITHER (QueryCstate() == CONNECTED_INITIAL)
  416 +// #define IN_ANSI (QueryCstate() == CONNECTED_ANSI || QueryCstate() == CONNECTED_NVT)
  417 +// #define IN_3270 (QueryCstate() == CONNECTED_3270 || QueryCstate() == CONNECTED_TN3270E || QueryCstate() == CONNECTED_SSCP)
  418 +// #define IN_SSCP (QueryCstate() == CONNECTED_SSCP)
  419 +// #define IN_TN3270E (QueryCstate() == CONNECTED_TN3270E)
  420 +// #define IN_E (QueryCstate() >= CONNECTED_INITIAL_E)
  421 +
  422 + #endif
  423 +
  424 + /* I/O processing */
  425 + struct lib3270_io_callbacks
  426 + {
  427 + unsigned short sz;
  428 +
  429 + unsigned long (*AddTimeOut)(unsigned long interval_ms, H3270 *session, void (*proc)(H3270 *session));
  430 + void (*RemoveTimeOut)(unsigned long timer);
  431 +
  432 + unsigned long (*AddInput)(int source, H3270 *session, void (*fn)(H3270 *session));
  433 + void (*RemoveInput)(unsigned long id);
  434 +
  435 + unsigned long (*AddExcept)(int source, H3270 *session, void (*fn)(H3270 *session));
  436 +
  437 + #if !defined(_WIN32) /*[*/
  438 + unsigned long (*AddOutput)(int source, H3270 *session, void (*fn)(H3270 *session));
  439 + #endif /*]*/
  440 +
  441 + int (*callthread)(int(*callback)(H3270 *, void *), H3270 *session, void *parm);
  442 +
  443 + int (*Wait)(int seconds);
  444 + int (*RunPendingEvents)(int wait);
  445 +
  446 + };
  447 +
  448 + #define Register3270IOCallbacks(x) lib3270_register_io_handlers(x)
  449 +
  450 +
  451 + /* Screen processing */
  452 +
  453 + #define CURSOR_MODE_NORMAL LIB3270_CURSOR_NORMAL
  454 + #define CURSOR_MODE_WAITING LIB3270_CURSOR_WAITING
  455 + #define CURSOR_MODE_LOCKED LIB3270_CURSOR_LOCKED
  456 +
  457 + typedef enum _SCRIPT_STATE
  458 + {
  459 + SCRIPT_STATE_NONE,
  460 + SCRIPT_STATE_RUNNING,
  461 + SCRIPT_STATE_HALTED,
  462 +
  463 + SCRIPT_STATE_USER
  464 +
  465 + } SCRIPT_STATE;
  466 +
  467 + typedef enum _COUNTER_ID
  468 + {
  469 + COUNTER_ID_CTLR_DONE,
  470 + COUNTER_ID_RESET,
  471 +
  472 + COUNTER_ID_USER
  473 + } COUNTER_ID;
  474 +
  475 + LIB3270_EXPORT int query_counter(COUNTER_ID id);
  476 +
  477 + #define query_screen_change_counter() query_counter(COUNTER_ID_CTLR_DONE)
  478 +
  479 + #define COLOR_ATTR_NONE 0x0000
  480 + #define COLOR_ATTR_FIELD LIB3270_ATTR_FIELD
  481 + #define COLOR_ATTR_BLINK LIB3270_ATTR_BLINK
  482 + #define COLOR_ATTR_UNDERLINE LIB3270_ATTR_UNDERLINE
  483 + #define COLOR_ATTR_INTENSIFY LIB3270_ATTR_INTENSIFY
  484 +
  485 + #define CHAR_ATTR_CG LIB3270_ATTR_CG
  486 + #define CHAR_ATTR_MARKER LIB3270_ATTR_MARKER
  487 +
  488 + #define CHAR_ATTR_UNCONVERTED CHAR_ATTR_CG
  489 +
  490 + struct lib3270_screen_callbacks
  491 + {
  492 + unsigned short sz;
  493 +
  494 + int (*init)(void);
  495 + int (*popup_dialog)(H3270 *session, PW3270_DIALOG type, const char *title, const char *msg, const char *fmt, va_list arg);
  496 + void (*Error)(const char *fmt, va_list arg);
  497 + void (*Warning)(const char *fmt, va_list arg);
  498 + void (*SysError)(const char *title, const char *message, const char *system);
  499 + void (*model_changed)(H3270 *session, const char *name, int model, int rows, int cols);
  500 + int (*addch)(int row, int col, unsigned char c, unsigned short attr);
  501 + void (*charset)(char *dcs);
  502 + void (*title)(char *text);
  503 + void (*ring_bell)(void);
  504 + void (*redraw)(void);
  505 + void (*move_cursor)(H3270 *session, unsigned short row, unsigned short col, unsigned char c, unsigned short attr);
  506 + int (*set_suspended)(int state);
  507 + void (*set_script)(SCRIPT_STATE state);
  508 + void (*reset)(int lock);
  509 + void (*status)(H3270 *session, LIB3270_STATUS id);
  510 + void (*cursor)(H3270 *session, LIB3270_CURSOR mode);
  511 + void (*lu)(H3270 *session, const char *lu);
  512 + void (*set_oia)(H3270 *session, OIA_FLAG id, unsigned char on);
  513 +
  514 + void (*erase)(H3270 *session);
  515 + void (*display)(H3270 *session);
  516 + void (*set_viewsize)(H3270 *session, unsigned short rows, unsigned short cols);
  517 +
  518 +
  519 + void (*toggle_changed)(H3270 *session, LIB3270_TOGGLE ix, unsigned char value, LIB3270_TOGGLE_TYPE reason, const char *name);
  520 + void (*show_timer)(long seconds);
  521 +
  522 + // Console/Trace window
  523 + HCONSOLE (*console_new)(const char *title, const char *label);
  524 + void (*console_delete)(HCONSOLE hwnd);
  525 + int (*console_append)(HCONSOLE hwnd, const char *fmt, va_list args);
  526 + char * (*console_entry)(HCONSOLE hwnd);
  527 +
  528 + };
  529 +
  530 + struct lib3270_option
  531 + {
  532 + const char *name;
  533 + enum
  534 + {
  535 + OPT_BOOLEAN,
  536 + OPT_STRING,
  537 + OPT_INTEGER,
  538 + OPT_XRM,
  539 + OPT_SKIP2,
  540 + OPT_NOP,
  541 + OPT_DONE
  542 + } type;
  543 + unsigned char flag;
  544 + const char *res_name;
  545 + void *aoff;
  546 + const char *description;
  547 + };
  548 +
  549 + LIB3270_EXPORT int Register3270ScreenCallbacks(const struct lib3270_screen_callbacks *cbk);
  550 +
  551 + #define new_3270_session(m) lib3270_session_new(m)
  552 +
  553 + LIB3270_EXPORT const struct lib3270_option * get_3270_option_table(int sz);
  554 +
  555 + /* Popups */
  556 + LIB3270_EXPORT void Error(const char *fmt, ...);
  557 + LIB3270_EXPORT void Warning(const char *fmt, ...);
  558 + LIB3270_EXPORT void show_3270_popup_dialog(H3270 *session, PW3270_DIALOG type, const char *title, const char *msg, const char *fmt, ...);
  559 +
  560 + /* Set/Get screen contents */
  561 + LIB3270_EXPORT int find_field_attribute(H3270 *session, int baddr);
  562 + LIB3270_EXPORT int find_field_length(H3270 *session, int baddr);
  563 + LIB3270_EXPORT unsigned char get_field_attribute(H3270 *session, int baddr);
  564 + LIB3270_EXPORT int screen_read(char *dest, int baddr, int count);
  565 + LIB3270_EXPORT void Input_String(const unsigned char *str);
  566 + LIB3270_EXPORT void screen_size(int *rows, int *cols);
  567 +
  568 + #define query_secure_connection(h) lib3270_get_ssl_state(h)
  569 + #define lib3270_paste_string(str) lib3270_set_string(NULL,str)
  570 + #define get_3270_terminal_size(h,r,c) lib3270_get_screen_size(h,r,c)
  571 +
  572 + /* Keyboard */
  573 + LIB3270_EXPORT int emulate_input(char *s, int len, int pasting);
  574 +
  575 + /* Network related calls */
  576 + LIB3270_EXPORT int Get3270Socket(void);
  577 +
  578 + /* Misc calls */
  579 + LIB3270_EXPORT void popup_an_error(const char *fmt, ...);
  580 + LIB3270_EXPORT void popup_system_error(const char *title, const char *message, const char *system);
  581 + LIB3270_EXPORT void popup_a_sockerr(char *fmt, ...);
  582 +
  583 + #define query_3270_terminal_status(void) lib3270_get_program_message(NULL)
  584 +
  585 + #define set_3270_model(h,m) lib3270_set_model(h,m)
  586 + #define get_3270_model(h) lib3270_get_model(h)
  587 +
  588 + LIB3270_EXPORT int lib3270_set_model(H3270 *session, int model);
  589 + LIB3270_EXPORT int lib3270_get_model(H3270 *session);
  590 +
  591 + /* Get connection info */
  592 + #define get_connected_lu(h) lib3270_get_luname(h)
  593 + #define get_current_host(h) lib3270_get_host(h)
  594 +
  595 + LIB3270_EXPORT SCRIPT_STATE status_script(SCRIPT_STATE state);
  596 +
  597 + #define Toggled(ix) lib3270_get_toggle(NULL,ix)
  598 + #define CallAndWait(c,h,p) lib3270_call_thread(c,h,p)
  599 +
  600 + LIB3270_EXPORT void RunPendingEvents(int wait);
  601 + LIB3270_EXPORT int Wait(int seconds);
  602 +
  603 + LIB3270_EXPORT int ctlr_get_cols(void) __attribute__ ((deprecated));
  604 + LIB3270_EXPORT int ctlr_get_rows(void) __attribute__ ((deprecated));
  605 +
  606 + /* Screen calls */
  607 + LIB3270_EXPORT void screen_resume(H3270 *session);
  608 + LIB3270_EXPORT void screen_suspend(H3270 *session);
  609 + LIB3270_EXPORT void screen_disp(H3270 *session);
  610 +
  611 + /* Console calls */
  612 + LIB3270_EXPORT HCONSOLE console_window_new(const char *title, const char *label);
  613 + LIB3270_EXPORT void console_window_delete(HCONSOLE hwnd);
  614 + LIB3270_EXPORT int console_window_append(HCONSOLE hwnd, const char *fmt, ...);
  615 + LIB3270_EXPORT char * console_window_wait_for_user_entry(HCONSOLE hwnd);
  616 +
  617 + /* Cursor calls */
  618 + #define cursor_get_addr(void) lib3270_get_cursor_address(NULL)
  619 + #define cursor_set_addr(x) lib3270_set_cursor_address(NULL,x)
  620 + #define cursor_move(x) lib3270_set_cursor_address(NULL,x)
  621 +
  622 + #include <lib3270/actions.h>
  623 +
  624 + #define host_connect(n,wait) lib3270_connect(NULL,n,wait)
  625 + #define host_reconnect(w) lib3270_reconnect(NULL,w)
  626 +
  627 + #define register_schange(tx,func) lib3270_register_schange(NULL,tx,func,NULL)
  628 + LIB3270_EXPORT void lib3270_register_schange(H3270 *h,LIB3270_STATE tx, void (*func)(H3270 *, int, void *),void *user_data);
  629 +
  630 + /* Console/Trace window */
  631 + LIB3270_EXPORT HCONSOLE console_window_new(const char *title, const char *label);
  632 + LIB3270_EXPORT void console_window_delete(HCONSOLE hwnd);
  633 + LIB3270_EXPORT int console_window_append(HCONSOLE hwnd, const char *fmt, ...);
  634 + LIB3270_EXPORT char * console_window_wait_for_user_entry(HCONSOLE hwnd);
  635 +
  636 +#ifdef __cplusplus
  637 + }
  638 +#endif
  639 +
  640 +#endif // LIB3270_API_INCLUDED
... ...