Commit b631a1851f09fa1d723667c4fa4f5c3bc3155ddb
1 parent
d3f8fbdd
Exists in
master
and in
5 other branches
Movendo api.h antigo para o diretório da biblioteca
Showing
1 changed file
with
640 additions
and
0 deletions
Show diff stats
| @@ -0,0 +1,640 @@ | @@ -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 |