Commit 5fa8530ba3c1999ec7daf3c4ca68ea97162eeccc
1 parent
911faecc
Exists in
master
and in
5 other branches
Mais métodos passam a utilizar a estrutura de sessão
Showing
4 changed files
with
110 additions
and
816 deletions
Show diff stats
src/include/lib3270/session.h
| ... | ... | @@ -262,6 +262,15 @@ |
| 262 | 262 | // ft_dft.c |
| 263 | 263 | int dft_buffersize; /**< Buffer size (LIMIN, LIMOUT) */ |
| 264 | 264 | |
| 265 | + // rpq.c | |
| 266 | + int rpq_complained : 1; | |
| 267 | +#if !defined(_WIN32) | |
| 268 | + int omit_due_space_limit : 1; | |
| 269 | +#endif | |
| 270 | + | |
| 271 | + char * rpq_warnbuf; | |
| 272 | + int rpq_wbcnt; | |
| 273 | + | |
| 265 | 274 | // Widget info |
| 266 | 275 | void * widget; |
| 267 | 276 | ... | ... |
src/lib3270/glue.c
| ... | ... | @@ -18,7 +18,7 @@ |
| 18 | 18 | * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin |
| 19 | 19 | * St, Fifth Floor, Boston, MA 02110-1301 USA |
| 20 | 20 | * |
| 21 | - * Este programa está nomeado como glue.c e possui 1103 linhas de código. | |
| 21 | + * Este programa está nomeado como glue.c e possui - linhas de código. | |
| 22 | 22 | * |
| 23 | 23 | * Contatos: |
| 24 | 24 | * |
| ... | ... | @@ -26,7 +26,6 @@ |
| 26 | 26 | * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) |
| 27 | 27 | * licinio@bb.com.br (Licínio Luis Branco) |
| 28 | 28 | * kraucer@bb.com.br (Kraucer Fernandes Mazuco) |
| 29 | - * macmiranda@bb.com.br (Marco Aurélio Caldas Miranda) | |
| 30 | 29 | * |
| 31 | 30 | */ |
| 32 | 31 | |
| ... | ... | @@ -91,175 +90,9 @@ |
| 91 | 90 | int lib3270_unloaded(void) __attribute__((destructor)); |
| 92 | 91 | #endif |
| 93 | 92 | |
| 94 | -#ifdef DEBUG | |
| 95 | - static int init_calls = 0; | |
| 96 | -#endif | |
| 97 | - | |
| 98 | -// static void lib3270_session_init(H3270 *hSession, const char *model); | |
| 99 | - | |
| 100 | 93 | #define LAST_ARG "--" |
| 101 | 94 | |
| 102 | 95 | /*---[ Globals ]--------------------------------------------------------------------------------------------------------------*/ |
| 103 | -// const char * programname; | |
| 104 | -// AppRes appres; | |
| 105 | -// int children = 0; | |
| 106 | -// Boolean exiting = False; | |
| 107 | -// char * command_string = CN; | |
| 108 | - | |
| 109 | -// #if defined(WC3270) || defined(LIB3270) | |
| 110 | -// char *profile_name = CN; | |
| 111 | -// #endif | |
| 112 | - | |
| 113 | -/* | |
| 114 | - * Set default options | |
| 115 | - */ | |
| 116 | -static void initialize(void) | |
| 117 | -{ | |
| 118 | -// memset(&appres,0,sizeof(appres)); | |
| 119 | - | |
| 120 | -#ifdef DEBUG | |
| 121 | - init_calls++; | |
| 122 | - trace("Initializing library (calls: %d)",init_calls); | |
| 123 | -#endif | |
| 124 | - | |
| 125 | -// h3270.selected = 0; | |
| 126 | -// h3270.select.start = h3270.select.end = 0; | |
| 127 | -// initialize_toggles(&h3270); | |
| 128 | - | |
| 129 | -#if defined(_WIN32) | |
| 130 | - (void) get_version_info(); | |
| 131 | -#endif | |
| 132 | - | |
| 133 | - trace("%s (init_calls: %d)",__FUNCTION__,init_calls); | |
| 134 | - | |
| 135 | - /* Set the defaults. */ | |
| 136 | -// appres.mono = False; | |
| 137 | -// appres.extended = True; | |
| 138 | - | |
| 139 | -//#if defined(C3270) /*[*/ | |
| 140 | -// h3270.m3279 = True; | |
| 141 | -//#endif /*]*/ | |
| 142 | - | |
| 143 | -// appres.modified_sel = False; | |
| 144 | -// appres.apl_mode = False; | |
| 145 | - | |
| 146 | -/* | |
| 147 | -#if defined(C3270) || defined(TCL3270) | |
| 148 | - appres.scripted = False; | |
| 149 | -#else | |
| 150 | - appres.scripted = True; | |
| 151 | -#endif | |
| 152 | -*/ | |
| 153 | - | |
| 154 | -// appres.numeric_lock = False; | |
| 155 | -// appres.secure = False; | |
| 156 | - | |
| 157 | -#if defined(C3270) /*[*/ | |
| 158 | -// appres.oerr_lock = True; | |
| 159 | -#else /*][*/ | |
| 160 | -// appres.oerr_lock = False; | |
| 161 | -#endif /*]*/ | |
| 162 | - | |
| 163 | -// appres.typeahead = True; | |
| 164 | -// appres.debug_tracing = True; | |
| 165 | - | |
| 166 | -//#if defined(C3270) | |
| 167 | -// appres.compose_map = "latin1"; | |
| 168 | -//#endif | |
| 169 | - | |
| 170 | -// appres.model = ""; | |
| 171 | -// appres.hostsfile = CN; | |
| 172 | -// appres.port = "telnet"; | |
| 173 | - | |
| 174 | -// #if !defined(_WIN32) /*[*/ | |
| 175 | -// appres.charset = "bracket"; | |
| 176 | -// #else /*][*/ | |
| 177 | -// | |
| 178 | -// if (is_nt) | |
| 179 | -// appres.charset = "bracket"; | |
| 180 | -// else | |
| 181 | -// appres.charset = "bracket437"; | |
| 182 | -//#endif /*]*/ | |
| 183 | - | |
| 184 | -// appres.termname = CN; | |
| 185 | -// appres.macros = CN; | |
| 186 | - | |
| 187 | -#if defined(X3270_TRACE) /*[*/ | |
| 188 | - | |
| 189 | -/* | |
| 190 | -#if !defined(_WIN32) | |
| 191 | - appres.trace_dir = "/tmp"; | |
| 192 | -#endif | |
| 193 | -*/ | |
| 194 | - | |
| 195 | -/* | |
| 196 | -#if defined(X3270_DISPLAY) || defined(WC3270) | |
| 197 | - appres.trace_monitor = True; | |
| 198 | -#endif | |
| 199 | -*/ | |
| 200 | - | |
| 201 | -#endif /*]*/ | |
| 202 | - | |
| 203 | -// appres.oversize = CN; | |
| 204 | - | |
| 205 | -#if defined(C3270) /*[*/ | |
| 206 | -// appres.meta_escape = "auto"; | |
| 207 | -// appres.curses_keypad = True; | |
| 208 | -// appres.cbreak_mode = False; | |
| 209 | -#endif /*]*/ | |
| 210 | - | |
| 211 | -#if defined(X3270_ANSI) | |
| 212 | -// appres.icrnl = True; | |
| 213 | -// appres.inlcr = False; | |
| 214 | -// appres.onlcr = True; | |
| 215 | -// appres.erase = "^H"; | |
| 216 | -// appres.kill = "^U"; | |
| 217 | -// appres.werase = "^W"; | |
| 218 | -// appres.rprnt = "^R"; | |
| 219 | -// appres.lnext = "^V"; | |
| 220 | -// appres.intr = "^C"; | |
| 221 | -// appres.quit = "^\\"; | |
| 222 | -// appres.eof = "^D"; | |
| 223 | -#endif /*]*/ | |
| 224 | - | |
| 225 | -// appres.unlock_delay = True; | |
| 226 | - | |
| 227 | -//#if defined(X3270_FT) /*[*/ | |
| 228 | -// appres.dft_buffer_size = DFT_BUF; | |
| 229 | -//#endif /*]*/ | |
| 230 | - | |
| 231 | -/* | |
| 232 | -#if defined(C3270) && !defined(LIB3270) | |
| 233 | - appres.toggle[CURSOR_POS].value = True; | |
| 234 | -#endif | |
| 235 | -*/ | |
| 236 | - | |
| 237 | -/* | |
| 238 | -#if defined(X3270_SCRIPT) || defined(TCL3270) | |
| 239 | - appres.toggle[AID_WAIT].value = True; | |
| 240 | -#endif | |
| 241 | -*/ | |
| 242 | - | |
| 243 | -/* | |
| 244 | -#if defined(C3270) && defined(X3270_SCRIPT) | |
| 245 | - appres.plugin_command = "x3270hist.pl"; | |
| 246 | -#endif | |
| 247 | -*/ | |
| 248 | - | |
| 249 | -/* | |
| 250 | -#if defined(C3270) && defined(_WIN32) | |
| 251 | - appres.highlight_underline = True; | |
| 252 | -#endif | |
| 253 | -*/ | |
| 254 | - | |
| 255 | -/* | |
| 256 | -#if defined(C3270) && !defined(_WIN32) && !defined(LIB3270) | |
| 257 | - // Merge in the profile. | |
| 258 | - merge_profile(); | |
| 259 | -#endif | |
| 260 | -*/ | |
| 261 | - | |
| 262 | -} | |
| 263 | 96 | |
| 264 | 97 | #if defined WIN32 |
| 265 | 98 | |
| ... | ... | @@ -268,7 +101,7 @@ BOOL WINAPI DllMain(HANDLE hinst, DWORD dwcallpurpose, LPVOID lpvResvd) |
| 268 | 101 | // Trace("%s - Library %s",__FUNCTION__,(dwcallpurpose == DLL_PROCESS_ATTACH) ? "Loaded" : "Unloaded"); |
| 269 | 102 | |
| 270 | 103 | if(dwcallpurpose == DLL_PROCESS_ATTACH) |
| 271 | - initialize(); | |
| 104 | + get_version_info(); | |
| 272 | 105 | |
| 273 | 106 | return TRUE; |
| 274 | 107 | } |
| ... | ... | @@ -277,8 +110,6 @@ BOOL WINAPI DllMain(HANDLE hinst, DWORD dwcallpurpose, LPVOID lpvResvd) |
| 277 | 110 | |
| 278 | 111 | int lib3270_loaded(void) |
| 279 | 112 | { |
| 280 | -// Trace("%s - Library loaded",__FUNCTION__); | |
| 281 | - initialize(); | |
| 282 | 113 | return 0; |
| 283 | 114 | } |
| 284 | 115 | |
| ... | ... | @@ -290,555 +121,10 @@ int lib3270_unloaded(void) |
| 290 | 121 | #endif |
| 291 | 122 | |
| 292 | 123 | |
| 293 | -#define offset(n) (void *) &appres.n | |
| 294 | -#define toggle_offset(index) offset(toggle[index].value) | |
| 295 | - | |
| 296 | -/* | |
| 297 | - | |
| 298 | -static const struct lib3270_option options[] = | |
| 299 | -{ | |
| 300 | - // TODO (perry#5#): Add option descriptions. | |
| 301 | -//#if defined(C3270) | |
| 302 | -// { OptAllBold, OPT_BOOLEAN, True, ResAllBold, offset(all_bold_on), NULL }, | |
| 303 | -// { OptAltScreen,OPT_STRING, False, ResAltScreen, offset(altscreen), NULL }, | |
| 304 | -//#endif | |
| 305 | -// { OptAplMode, OPT_BOOLEAN, True, ResAplMode, offset(apl_mode), NULL }, | |
| 306 | -#if defined(C3270) | |
| 307 | -// { OptCbreak, OPT_BOOLEAN, True, ResCbreak, offset(cbreak_mode), NULL }, | |
| 308 | -#endif | |
| 309 | -#if defined(HAVE_LIBSSL) | |
| 310 | - { OptCertFile, OPT_STRING, False, ResCertFile, offset(cert_file), NULL }, | |
| 311 | -#endif | |
| 312 | -// { OptCharset, OPT_STRING, False, ResCharset, offset(charset), NULL }, | |
| 313 | - { OptClear, OPT_SKIP2, False, NULL, NULL, NULL }, | |
| 314 | -// { OptDefScreen,OPT_STRING, False, ResDefScreen, offset(defscreen), NULL }, | |
| 315 | -//#if defined(X3270_TRACE) | |
| 316 | -// { OptDsTrace, OPT_BOOLEAN, True, ResDsTrace, toggle_offset(DS_TRACE), NULL }, | |
| 317 | -//#endif | |
| 318 | -// { OptHostsFile,OPT_STRING, False, ResHostsFile, offset(hostsfile), NULL }, | |
| 319 | -//#if defined(C3270) | |
| 320 | -// { OptKeymap, OPT_STRING, False, ResKeymap, offset(key_map), N_( "Specifies a keymap name and optional modifiers." ) }, | |
| 321 | -// #endif | |
| 322 | - | |
| 323 | -// #if defined(X3270_DBCS) | |
| 324 | -// { OptLocalEncoding,OPT_STRING,False,ResLocalEncoding,offset(local_encoding), NULL }, | |
| 325 | -//#endif | |
| 326 | -// { OptModel, OPT_STRING, False, ResKeymap, offset(model), N_( "Set terminal model (screen size)" ) }, | |
| 327 | -// #if !defined(_WIN32) | |
| 328 | -// { OptMono, OPT_BOOLEAN, True, ResMono, offset(mono), N_( "Forces monochrome display" ) }, | |
| 329 | -// #endif | |
| 330 | -// { OptOnce, OPT_BOOLEAN, True, ResOnce, offset(once), NULL }, | |
| 331 | -// { OptOversize, OPT_STRING, False, ResOversize, offset(oversize), N_( "Sets the screen dimensions to be larger than the default for the chosen model (COLSxROWS)." ) }, | |
| 332 | -// { OptPort, OPT_STRING, False, ResPort, offset(port), N_( "The name of the default TCP port to connect" ) }, | |
| 333 | -#if defined(C3270) && !defined(LIB3270) | |
| 334 | -// { OptPrinterLu,OPT_STRING, False, ResPrinterLu, offset(printer_lu), NULL }, | |
| 335 | -#endif | |
| 336 | -// { OptProxy, OPT_STRING, False, ResProxy, offset(proxy), N_( "Proxy server (type:host[:port])" ) }, | |
| 337 | -#if defined(S3270) | |
| 338 | - { OptScripted, OPT_NOP, False, ResScripted, NULL, NULL }, | |
| 339 | -#endif | |
| 340 | -//#if defined(C3270) | |
| 341 | -// { OptSecure, OPT_BOOLEAN, True, ResSecure, offset(secure), NULL }, | |
| 342 | -//#endif | |
| 343 | -// { OptSet, OPT_SKIP2, False, NULL, NULL, NULL }, | |
| 344 | -#if defined(X3270_SCRIPT) | |
| 345 | -// { OptSocket, OPT_BOOLEAN, True, ResSocket, offset(socket), NULL }, | |
| 346 | -#endif | |
| 347 | - | |
| 348 | -// { OptTermName, OPT_STRING, False, ResTermName, offset(termname), N_( "Specifies the terminal name to be transmitted over the telnet connection." ) }, | |
| 349 | - | |
| 350 | -#if defined(WC3270) | |
| 351 | -// { OptTitle, OPT_STRING, False, ResTitle, offset(title), NULL }, | |
| 352 | -#endif | |
| 353 | -#if defined(X3270_TRACE) | |
| 354 | -// { OptTraceFile,OPT_STRING, False, ResTraceFile, offset(trace_file), NULL }, | |
| 355 | -// { OptTraceFileSize,OPT_STRING,False,ResTraceFileSize,offset(trace_file_size), NULL }, | |
| 356 | -#endif | |
| 357 | - { "-xrm", OPT_XRM, False, NULL, NULL, NULL }, | |
| 358 | - { LAST_ARG, OPT_DONE, False, NULL, NULL, NULL }, | |
| 359 | - { CN, OPT_SKIP2, False, NULL, NULL, NULL } | |
| 360 | -}; | |
| 361 | -*/ | |
| 362 | - | |
| 363 | -/* | |
| 364 | - * Get library option table | |
| 365 | - */ | |
| 366 | - /* | |
| 367 | -const struct lib3270_option * get_3270_option_table(int sz) | |
| 368 | -{ | |
| 369 | - if(sz == sizeof(struct lib3270_option)) | |
| 370 | - return options; | |
| 371 | - return NULL; | |
| 372 | -} | |
| 373 | -*/ | |
| 374 | - | |
| 375 | -/* | |
| 376 | - * Parse '-xrm' options. | |
| 377 | - * Understands only: | |
| 378 | - * {c,s,tcl}3270.<resourcename>: value | |
| 379 | - * Asterisks and class names need not apply. | |
| 380 | - */ | |
| 381 | -/* | |
| 382 | -static struct { | |
| 383 | - const char *name; | |
| 384 | - void *address; | |
| 385 | - enum resource_type { XRM_STRING, XRM_BOOLEAN, XRM_INT } type; | |
| 386 | -} resources[] = { | |
| 387 | -// { ResAllBold, offset(all_bold), XRM_STRING }, | |
| 388 | -// { ResAltScreen, offset(altscreen), XRM_STRING }, | |
| 389 | -// { ResBsdTm, offset(bsd_tm), XRM_BOOLEAN }, | |
| 390 | -#if defined(HAVE_LIBSSL) | |
| 391 | - { ResCertFile, offset(cert_file), XRM_STRING }, | |
| 392 | -#endif | |
| 393 | -// { ResCharset, offset(charset), XRM_STRING }, | |
| 394 | -// { ResColor8, offset(color8), XRM_BOOLEAN }, | |
| 395 | -// { ResConfDir, offset(conf_dir), XRM_STRING }, | |
| 396 | -// { ResDefScreen, offset(defscreen), XRM_STRING }, | |
| 397 | -#if defined(X3270_ANSI) | |
| 398 | -// { ResEof, offset(eof), XRM_STRING }, | |
| 399 | -// { ResErase, offset(erase), XRM_STRING }, | |
| 400 | -#endif | |
| 401 | -// { ResExtended, offset(extended), XRM_BOOLEAN }, | |
| 402 | -#if defined(X3270_FT) | |
| 403 | -// { ResFtCommand, offset(ft_command), XRM_STRING }, | |
| 404 | - { ResDftBufferSize,offset(dft_buffer_size),XRM_INT }, | |
| 405 | -#endif | |
| 406 | -//#if defined(WC3270) | |
| 407 | -// { "hostname", offset(hostname), XRM_STRING }, | |
| 408 | -//#endif | |
| 409 | -// { ResHostsFile, offset(hostsfile), XRM_STRING }, | |
| 410 | -#if defined(X3270_ANSI) | |
| 411 | -// { ResIcrnl, offset(icrnl), XRM_BOOLEAN }, | |
| 412 | -// { ResInlcr, offset(inlcr), XRM_BOOLEAN }, | |
| 413 | -// { ResOnlcr, offset(onlcr), XRM_BOOLEAN }, | |
| 414 | -// { ResIntr, offset(intr), XRM_STRING }, | |
| 415 | -#endif | |
| 416 | -//#if defined(X3270_SCRIPT) | |
| 417 | -// { ResPluginCommand, offset(plugin_command), XRM_STRING }, | |
| 418 | -//#endif | |
| 419 | -//#if defined(C3270) && defined(_WIN32) | |
| 420 | -// { ResHighlightUnderline, offset(highlight_underline), XRM_BOOLEAN }, | |
| 421 | -//#endif | |
| 422 | -#if defined(C3270) && defined(X3270_SCRIPT) | |
| 423 | - { ResIdleCommand,offset(idle_command), XRM_STRING }, | |
| 424 | - { ResIdleCommandEnabled,offset(idle_command_enabled), XRM_BOOLEAN }, | |
| 425 | - { ResIdleTimeout,offset(idle_timeout), XRM_STRING }, | |
| 426 | -#endif | |
| 427 | -#if defined(C3270) | |
| 428 | -// { ResKeymap, offset(key_map), XRM_STRING }, | |
| 429 | -// { ResMetaEscape,offset(meta_escape), XRM_STRING }, | |
| 430 | -// { ResCursesKeypad,offset(curses_keypad),XRM_BOOLEAN }, | |
| 431 | -// { ResCbreak, offset(cbreak_mode), XRM_BOOLEAN }, | |
| 432 | -#endif | |
| 433 | -#if defined(X3270_ANSI) | |
| 434 | -// { ResKill, offset(kill), XRM_STRING }, | |
| 435 | -// { ResLnext, offset(lnext), XRM_STRING }, | |
| 436 | -#endif | |
| 437 | -// { ResLoginMacro,offset(login_macro), XRM_STRING }, | |
| 438 | -// { ResM3279, offset(m3279), XRM_BOOLEAN }, | |
| 439 | -// { ResModel, offset(model), XRM_STRING }, | |
| 440 | -// { ResModifiedSel, offset(modified_sel), XRM_BOOLEAN }, | |
| 441 | -//#if defined(C3270) && !defined(_WIN32) | |
| 442 | -// { ResMono, offset(mono), XRM_BOOLEAN }, | |
| 443 | -//#endif | |
| 444 | -// { ResNumericLock, offset(numeric_lock), XRM_BOOLEAN }, | |
| 445 | -// { ResOerrLock, offset(oerr_lock), XRM_BOOLEAN }, | |
| 446 | -// { ResOversize, offset(oversize), XRM_STRING }, | |
| 447 | -// { ResPort, offset(port), XRM_STRING }, | |
| 448 | -#if defined(C3270) | |
| 449 | -// { ResPrinterLu, offset(printer_lu), XRM_STRING }, | |
| 450 | - { ResPrintTextCommand, NULL, XRM_STRING }, | |
| 451 | -#endif | |
| 452 | -// { ResProxy, offset(proxy), XRM_STRING }, | |
| 453 | -#if defined(X3270_ANSI) | |
| 454 | -// { ResQuit, offset(quit), XRM_STRING }, | |
| 455 | -// { ResRprnt, offset(rprnt), XRM_STRING }, | |
| 456 | -#endif | |
| 457 | -// { ResSecure, offset(secure), XRM_BOOLEAN }, | |
| 458 | -// { ResTermName, offset(termname), XRM_STRING }, | |
| 459 | -#if defined(WC3270) | |
| 460 | - { ResTitle, offset(title), XRM_STRING }, | |
| 461 | -#endif | |
| 462 | -#if defined(X3270_TRACE) | |
| 463 | -//#if !defined(_WIN32) | |
| 464 | -// { ResTraceDir, offset(trace_dir), XRM_STRING }, | |
| 465 | -//#endif | |
| 466 | -// { ResTraceFile, offset(trace_file), XRM_STRING }, | |
| 467 | -// { ResTraceFileSize,offset(trace_file_size),XRM_STRING }, | |
| 468 | -#if defined(WC3270) | |
| 469 | - { ResTraceMonitor,offset(trace_monitor),XRM_BOOLEAN }, | |
| 470 | -#endif | |
| 471 | -#endif | |
| 472 | -// { ResTypeahead, offset(typeahead), XRM_BOOLEAN }, | |
| 473 | -// { ResUnlockDelay,offset(unlock_delay), XRM_BOOLEAN }, | |
| 474 | -#if defined(X3270_ANSI) | |
| 475 | -// { ResWerase, offset(werase), XRM_STRING }, | |
| 476 | -#endif | |
| 477 | - | |
| 478 | - { CN, 0, XRM_STRING } | |
| 479 | -}; | |
| 480 | -*/ | |
| 481 | - | |
| 482 | -/* | |
| 483 | - * Compare two strings, allowing the second to differ by uppercasing the | |
| 484 | - * first character of the second. | |
| 485 | - */ /* | |
| 486 | -static int | |
| 487 | -strncapcmp(const char *known, const char *unknown, unsigned unk_len) | |
| 488 | -{ | |
| 489 | - if (unk_len != strlen(known)) | |
| 490 | - return -1; | |
| 491 | - if (!strncmp(known, unknown, unk_len)) | |
| 492 | - return 0; | |
| 493 | - if (unk_len > 1 && | |
| 494 | - unknown[0] == toupper(known[0]) && | |
| 495 | - !strncmp(known + 1, unknown + 1, unk_len - 1)) | |
| 496 | - return 0; | |
| 497 | - return -1; | |
| 498 | -} | |
| 499 | -*/ | |
| 500 | - | |
| 501 | -#if !defined(ME) /*[*/ | |
| 502 | -#if defined(C3270) /*[*/ | |
| 503 | -#if defined(WC3270) /*[*/ | |
| 504 | -#define ME "wc3270" | |
| 505 | -#else /*][*/ | |
| 506 | -#define ME "c3270" | |
| 507 | -#endif /*]*/ | |
| 508 | -#elif defined(TCL3270) /*][*/ | |
| 509 | -#define ME "tcl3270" | |
| 510 | -#else /*][*/ | |
| 511 | -#define ME "s3270" | |
| 512 | -#endif /*]*/ | |
| 513 | -#endif /*]*/ | |
| 514 | - | |
| 515 | -/* | |
| 516 | -void | |
| 517 | -parse_xrm(const char *arg, const char *where) | |
| 518 | -{ | |
| 519 | - static char me_dot[] = ME "."; | |
| 520 | - static char me_star[] = ME "*"; | |
| 521 | - unsigned match_len; | |
| 522 | - const char *s; | |
| 523 | - unsigned rnlen; | |
| 524 | - int i; | |
| 525 | - char *t; | |
| 526 | - void *address = NULL; | |
| 527 | - enum resource_type type = XRM_STRING; | |
| 528 | -#if defined(C3270) | |
| 529 | - char *add_buf = CN; | |
| 530 | - char *hide; | |
| 531 | - Boolean arbitrary = False; | |
| 532 | -#endif | |
| 533 | - | |
| 534 | - // Enforce "-3270." or "-3270*" or "*". | |
| 535 | - if (!strncmp(arg, me_dot, sizeof(me_dot)-1)) | |
| 536 | - match_len = sizeof(me_dot)-1; | |
| 537 | - else if (!strncmp(arg, me_star, sizeof(me_star)-1)) | |
| 538 | - match_len = sizeof(me_star)-1; | |
| 539 | - else if (arg[0] == '*') | |
| 540 | - match_len = 1; | |
| 541 | - else { | |
| 542 | - xs_warning("%s: Invalid resource syntax '%.*s', name must " | |
| 543 | - "begin with '%s'", | |
| 544 | - where, (int) sizeof(me_dot)-1, arg, me_dot); | |
| 545 | - return; | |
| 546 | - } | |
| 547 | - | |
| 548 | - // Separate the parts. | |
| 549 | - s = arg + match_len; | |
| 550 | - while (*s && *s != ':' && !isspace(*s)) | |
| 551 | - s++; | |
| 552 | - rnlen = s - (arg + match_len); | |
| 553 | - if (!rnlen) { | |
| 554 | - xs_warning("%s: Invalid resource syntax, missing resource " | |
| 555 | - "name", where); | |
| 556 | - return; | |
| 557 | - } | |
| 558 | - while (isspace(*s)) | |
| 559 | - s++; | |
| 560 | - if (*s != ':') { | |
| 561 | - xs_warning("%s: Invalid resource syntax, missing ':'", where); | |
| 562 | - return; | |
| 563 | - } | |
| 564 | - s++; | |
| 565 | - while (isspace(*s)) | |
| 566 | - s++; | |
| 567 | - | |
| 568 | - // Look up the name. | |
| 569 | - for (i = 0; resources[i].name != CN; i++) { | |
| 570 | - if (!strncapcmp(resources[i].name, arg + match_len, rnlen)) { | |
| 571 | - address = resources[i].address; | |
| 572 | - type = resources[i].type; | |
| 573 | -#if defined(C3270) | |
| 574 | - if (address == NULL) { | |
| 575 | - add_buf = lib3270_malloc(strlen(s) + 1); | |
| 576 | - address = add_buf; | |
| 577 | - } | |
| 578 | -#endif | |
| 579 | - break; | |
| 580 | - } | |
| 581 | - } | |
| 582 | - | |
| 583 | -#if defined(C3270) | |
| 584 | - if (address == NULL) { | |
| 585 | - if (!strncasecmp(ResKeymap ".", arg + match_len, | |
| 586 | - strlen(ResKeymap ".")) || | |
| 587 | - !strncasecmp(ResCharset ".", arg + match_len, | |
| 588 | - strlen(ResCharset ".")) || | |
| 589 | - !strncasecmp(ResDisplayCharset ".", arg + match_len, | |
| 590 | - strlen(ResDisplayCharset ".")) || | |
| 591 | - !strncasecmp(ResCodepage ".", arg + match_len, | |
| 592 | - strlen(ResCodepage ".")) || | |
| 593 | - !strncasecmp("host.", arg + match_len, 5) || | |
| 594 | - !strncasecmp("printer.", arg + match_len, 8) || | |
| 595 | -#if defined(_WIN32) | |
| 596 | - !strncasecmp(ResHostColorFor, arg + match_len, | |
| 597 | - strlen(ResHostColorFor)) || | |
| 598 | - !strncasecmp(ResConsoleColorForHostColor, arg + match_len, | |
| 599 | - strlen(ResConsoleColorForHostColor)) | |
| 600 | -#else | |
| 601 | - !strncasecmp(ResCursesColorFor, arg + match_len, | |
| 602 | - strlen(ResCursesColorFor)) | |
| 603 | -#endif | |
| 604 | - ) { | |
| 605 | - address = &hide; | |
| 606 | - type = XRM_STRING; | |
| 607 | - arbitrary = True; | |
| 608 | - } | |
| 609 | - } | |
| 610 | -#endif | |
| 611 | - if (address == NULL) { | |
| 612 | - xs_warning("%s: Unknown resource name: %.*s", | |
| 613 | - where, (int)rnlen, arg + match_len); | |
| 614 | - return; | |
| 615 | - } | |
| 616 | - switch (type) { | |
| 617 | - case XRM_BOOLEAN: | |
| 618 | - if (!strcasecmp(s, "true") || | |
| 619 | - !strcasecmp(s, "t") || | |
| 620 | - !strcmp(s, "1")) { | |
| 621 | - *(Boolean *)address = True; | |
| 622 | - } else if (!strcasecmp(s, "false") || | |
| 623 | - !strcasecmp(s, "f") || | |
| 624 | - !strcmp(s, "0")) { | |
| 625 | - *(Boolean *)address = False; | |
| 626 | - } else { | |
| 627 | - xs_warning("%s: Invalid Boolean value: %s", where, s); | |
| 628 | - } | |
| 629 | - break; | |
| 630 | - case XRM_STRING: | |
| 631 | - t = lib3270_malloc(strlen(s) + 1); | |
| 632 | - *(char **)address = t; | |
| 633 | - if (*s == '"') { | |
| 634 | - Boolean quoted = False; | |
| 635 | - char c; | |
| 636 | - | |
| 637 | - s++; | |
| 638 | - while ((c = *s++) != '\0') { | |
| 639 | - if (quoted) { | |
| 640 | - switch (c) { | |
| 641 | - case 'n': | |
| 642 | - *t++ = '\n'; | |
| 643 | - break; | |
| 644 | - case 'r': | |
| 645 | - *t++ = '\r'; | |
| 646 | - break; | |
| 647 | - case 'b': | |
| 648 | - *t++ = '\b'; | |
| 649 | - break; | |
| 650 | - default: | |
| 651 | - *t++ = c; | |
| 652 | - break; | |
| 653 | - } | |
| 654 | - quoted = False; | |
| 655 | - } else if (c == '\\') { | |
| 656 | - quoted = True; | |
| 657 | - } else if (c == '"') { | |
| 658 | - break; | |
| 659 | - } else { | |
| 660 | - *t++ = c; | |
| 661 | - } | |
| 662 | - } | |
| 663 | - *t = '\0'; | |
| 664 | - } else { | |
| 665 | - (void) strcpy(t, s); | |
| 666 | - } | |
| 667 | - break; | |
| 668 | - case XRM_INT: { | |
| 669 | - long n; | |
| 670 | - char *ptr; | |
| 671 | - | |
| 672 | - n = strtol(s, &ptr, 0); | |
| 673 | - if (*ptr != '\0') { | |
| 674 | - xs_warning("%s: Invalid Integer value: %s", where, s); | |
| 675 | - } else { | |
| 676 | - *(int *)address = (int)n; | |
| 677 | - } | |
| 678 | - break; | |
| 679 | - } | |
| 680 | - } | |
| 681 | - | |
| 682 | -#if defined(C3270) | |
| 683 | - // Add a new, arbitrarily-named resource. | |
| 684 | - if (arbitrary) { | |
| 685 | - char *rsname; | |
| 686 | - | |
| 687 | - rsname = lib3270_malloc(rnlen + 1); | |
| 688 | - (void) strncpy(rsname, arg + match_len, rnlen); | |
| 689 | - rsname[rnlen] = '\0'; | |
| 690 | - add_resource(rsname, hide); | |
| 691 | - } | |
| 692 | -#endif | |
| 693 | -} | |
| 694 | -*/ | |
| 695 | - | |
| 696 | -/* Read resources from a file. */ /* | |
| 697 | -int | |
| 698 | -read_resource_file(const char *filename, Boolean fatal) | |
| 699 | -{ | |
| 700 | - FILE *f; | |
| 701 | - int ilen; | |
| 702 | - char buf[4096]; | |
| 703 | - char *where; | |
| 704 | - int lno = 0; | |
| 705 | - | |
| 706 | - f = fopen(filename, "r"); | |
| 707 | - if (f == NULL) { | |
| 708 | - if (fatal) | |
| 709 | - xs_warning("Cannot open '%s': %s", filename, | |
| 710 | - strerror(errno)); | |
| 711 | - return -1; | |
| 712 | - } | |
| 713 | - | |
| 714 | - // Merge in what's in the file into the resource database. | |
| 715 | - where = lib3270_malloc(strlen(filename) + 64); | |
| 716 | - | |
| 717 | - ilen = 0; | |
| 718 | - while (fgets(buf + ilen, sizeof(buf) - ilen, f) != CN || ilen) { | |
| 719 | - char *s, *t; | |
| 720 | - unsigned sl; | |
| 721 | - Boolean bsl; | |
| 722 | - | |
| 723 | - lno++; | |
| 724 | - | |
| 725 | - // Stip any trailing newline. | |
| 726 | - sl = strlen(buf + ilen); | |
| 727 | - if (sl && (buf + ilen)[sl-1] == '\n') | |
| 728 | - (buf + ilen)[--sl] = '\0'; | |
| 729 | - | |
| 730 | - // | |
| 731 | - //Translate backslash-n to real newline characters, and | |
| 732 | - // remember if the last character is a backslash. | |
| 733 | - // | |
| 734 | - for (bsl = False, s = buf + ilen, t = s; *s; s++) { | |
| 735 | - if (bsl) { | |
| 736 | - if (*s == 'n') | |
| 737 | - *t++ = '\n'; | |
| 738 | - else | |
| 739 | - *t++ = *s; | |
| 740 | - bsl = False; | |
| 741 | - } else if (*s == '\\') | |
| 742 | - bsl = True; | |
| 743 | - else { | |
| 744 | - *t++ = *s; | |
| 745 | - bsl = False; | |
| 746 | - } | |
| 747 | - } | |
| 748 | - *t = '\0'; | |
| 749 | - | |
| 750 | - // Skip leading whitespace. | |
| 751 | - s = buf; | |
| 752 | - while (isspace(*s)) | |
| 753 | - s++; | |
| 754 | - | |
| 755 | - // Skip comments _before_ checking for line continuation. | |
| 756 | - if (*s == '!') { | |
| 757 | - ilen = 0; | |
| 758 | - continue; | |
| 759 | - } | |
| 760 | - if (*s == '#') { | |
| 761 | - (void) sprintf(where, "%s:%d: Invalid profile " | |
| 762 | - "syntax ('#' ignored)", filename, lno); | |
| 763 | - Warning(NULL,where); | |
| 764 | - ilen = 0; | |
| 765 | - continue; | |
| 766 | - } | |
| 767 | - | |
| 768 | - // If this line is a continuation, try again. | |
| 769 | - if (bsl) { | |
| 770 | - ilen += strlen(buf + ilen); | |
| 771 | - if (ilen >= sizeof(buf) - 1) { | |
| 772 | - (void) sprintf(where, "%s:%d: Line too long\n", | |
| 773 | - filename, lno); | |
| 774 | - Warning(NULL,where); | |
| 775 | - break; | |
| 776 | - } | |
| 777 | - continue; | |
| 778 | - } | |
| 779 | - | |
| 780 | - // Strip trailing whitespace and check for empty lines. | |
| 781 | - sl = strlen(s); | |
| 782 | - while (sl && isspace(s[sl-1])) | |
| 783 | - s[--sl] = '\0'; | |
| 784 | - if (!sl) { | |
| 785 | - ilen = 0; | |
| 786 | - continue; | |
| 787 | - } | |
| 788 | - | |
| 789 | - // Digest it. | |
| 790 | - (void) sprintf(where, "%s:%d", filename, lno); | |
| 791 | - parse_xrm(s, where); | |
| 792 | - | |
| 793 | - // Get ready for the next iteration. | |
| 794 | - ilen = 0; | |
| 795 | - } | |
| 796 | - lib3270_free(where); | |
| 797 | - return 0; | |
| 798 | -} | |
| 799 | - | |
| 800 | -// Boolean flipped = False; | |
| 801 | -*/ | |
| 802 | - | |
| 803 | -/* Replacements for functions in popups.c. */ | |
| 804 | - | |
| 805 | -// Boolean error_popup_visible = False; | |
| 806 | - | |
| 807 | - | |
| 808 | 124 | #ifdef DEBUG |
| 809 | 125 | extern void lib3270_initialize(void) |
| 810 | 126 | { |
| 811 | - initialize(); | |
| 812 | 127 | } |
| 813 | 128 | #endif |
| 814 | 129 | |
| 815 | 130 | |
| 816 | -/* | |
| 817 | -void | |
| 818 | -action_output(const char *fmt, ...) | |
| 819 | -{ | |
| 820 | -// TODO (perry#1#): Implement a callback to browse the text string. | |
| 821 | - va_list args; | |
| 822 | - | |
| 823 | - va_start(args, fmt); | |
| 824 | - (void) vsprintf(vmsgbuf, fmt, args); | |
| 825 | - va_end(args); | |
| 826 | - if (sms_redirect()) { | |
| 827 | - sms_info("%s", vmsgbuf); | |
| 828 | - return; | |
| 829 | - } else { | |
| 830 | - FILE *aout; | |
| 831 | - | |
| 832 | -#if defined(C3270) || defined(WC3270) | |
| 833 | - screen_suspend(); | |
| 834 | -// aout = start_pager(); | |
| 835 | -// any_error_output = True; | |
| 836 | -#else | |
| 837 | - aout = stdout; | |
| 838 | -#endif | |
| 839 | - (void) fprintf(aout, "%s\n", vmsgbuf); | |
| 840 | - macro_output = True; | |
| 841 | - } | |
| 842 | -} | |
| 843 | -*/ | |
| 844 | - | ... | ... |
src/lib3270/rpq.c
| ... | ... | @@ -66,19 +66,21 @@ |
| 66 | 66 | #include "sf.h" |
| 67 | 67 | |
| 68 | 68 | /* Statics */ |
| 69 | -static Boolean select_rpq_terms(void); | |
| 70 | -static int get_rpq_timezone(void); | |
| 71 | -static int get_rpq_user(unsigned char buf[], const int buflen); | |
| 69 | +static Boolean select_rpq_terms(H3270 *hSession); | |
| 70 | +static int get_rpq_timezone(H3270 *hSession); | |
| 71 | +static int get_rpq_user(H3270 *hSession, unsigned char buf[], const int buflen); | |
| 72 | 72 | #if !defined(_WIN32) /*[*/ |
| 73 | -static int get_rpq_address(unsigned char buf[], const int buflen); | |
| 73 | +static int get_rpq_address(H3270 *hSession, unsigned char buf[], const int buflen); | |
| 74 | 74 | #endif /*]*/ |
| 75 | -static void rpq_warning(const char *fmt, ...); | |
| 76 | -static void rpq_dump_warnings(void); | |
| 77 | -static Boolean rpq_complained = False; | |
| 75 | +static void rpq_warning(H3270 *hSession, const char *fmt, ...) printflike(2,3); | |
| 76 | +static void rpq_dump_warnings(H3270 *hSession); | |
| 78 | 77 | |
| 79 | -#if !defined(_WIN32) /*[*/ | |
| 80 | -static Boolean omit_due_space_limit = False; | |
| 81 | -#endif /*]*/ | |
| 78 | + | |
| 79 | +// static Boolean rpq_complained = 0; | |
| 80 | +// | |
| 81 | +// #if !defined(_WIN32) | |
| 82 | +//static Boolean omit_due_space_limit = 0; | |
| 83 | +//#endif | |
| 82 | 84 | |
| 83 | 85 | /* |
| 84 | 86 | * Define symbolic names for RPQ self-defining terms. |
| ... | ... | @@ -101,9 +103,10 @@ static Boolean omit_due_space_limit = False; |
| 101 | 103 | * specifies abbreviations, they work in a predictable manner. E.g., "TIME" |
| 102 | 104 | * should match TIMESTAMP instead of TIMEZONE. |
| 103 | 105 | */ |
| 104 | -static struct rpq_keyword { | |
| 105 | - Boolean omit; /* set from X3270RPQ="kw1:kw2..." environment var */ | |
| 106 | - int oride; /* displacement */ | |
| 106 | +static struct rpq_keyword | |
| 107 | +{ | |
| 108 | + Boolean omit; /**< set from X3270RPQ="kw1:kw2..." environment var */ | |
| 109 | + int oride; /**< displacement */ | |
| 107 | 110 | const Boolean allow_oride; |
| 108 | 111 | const unsigned char id; |
| 109 | 112 | const char *text; |
| ... | ... | @@ -112,7 +115,7 @@ static struct rpq_keyword { |
| 112 | 115 | {True, 0, True, RPQ_ADDRESS, "ADDRESS"}, |
| 113 | 116 | {True, 0, False, RPQ_TIMESTAMP, "TIMESTAMP"}, |
| 114 | 117 | {True, 0, True, RPQ_TIMEZONE, "TIMEZONE"}, |
| 115 | - {True, 0, True, RPQ_USER, "USER"}, | |
| 118 | + {True, 0, True, RPQ_USER, "USER"}, | |
| 116 | 119 | {True, 0, False, RPQ_VERSION, "VERSION"}, |
| 117 | 120 | }; |
| 118 | 121 | #define NS_RPQ (sizeof(rpq_keywords)/sizeof(rpq_keywords[0])) |
| ... | ... | @@ -141,31 +144,31 @@ void do_qr_rpqnames(H3270 *hSession) |
| 141 | 144 | */ |
| 142 | 145 | space3270out(hSession,4+4+1+remaining); /* Maximum space for an RPQNAME item */ |
| 143 | 146 | |
| 144 | - SET32(h3270.obptr, 0); /* Device number, 0 = All */ | |
| 145 | - SET32(h3270.obptr, 0); /* Model number, 0 = All */ | |
| 147 | + SET32(hSession->obptr, 0); /* Device number, 0 = All */ | |
| 148 | + SET32(hSession->obptr, 0); /* Model number, 0 = All */ | |
| 146 | 149 | |
| 147 | - rpql = h3270.obptr++; /* Save address to place data length. */ | |
| 150 | + rpql = hSession->obptr++; /* Save address to place data length. */ | |
| 148 | 151 | |
| 149 | 152 | /* Create fixed length portion - program id: x3270 */ |
| 150 | 153 | for (j = 0; j < 5; j++) { |
| 151 | - *h3270.obptr++ = asc2ebc[(int)"x3270"[j]]; | |
| 154 | + *hSession->obptr++ = asc2ebc[(int)"x3270"[j]]; | |
| 152 | 155 | remaining--; |
| 153 | 156 | } |
| 154 | 157 | |
| 155 | 158 | /* Create user selected variable-length self-defining terms. */ |
| 156 | - select_rpq_terms(); | |
| 159 | + select_rpq_terms(hSession); | |
| 157 | 160 | |
| 158 | 161 | for (j=0; j<NS_RPQ; j++) { |
| 159 | 162 | if (rpq_keywords[j].omit) |
| 160 | 163 | continue; |
| 161 | 164 | |
| 162 | - omit_due_space_limit = False; | |
| 165 | + omit_due_space_limit = 0; | |
| 163 | 166 | |
| 164 | 167 | term_id = rpq_keywords[j].id; |
| 165 | 168 | |
| 166 | - p_term = h3270.obptr; /* save starting address (to insert length later) */ | |
| 167 | - h3270.obptr++; /* skip length of term, fill in later */ | |
| 168 | - *h3270.obptr++ = term_id; /* identify this term */ | |
| 169 | + p_term = hSession->obptr; /* save starting address (to insert length later) */ | |
| 170 | + hSession->obptr++; /* skip length of term, fill in later */ | |
| 171 | + *hSession->obptr++ = term_id; /* identify this term */ | |
| 169 | 172 | |
| 170 | 173 | /* |
| 171 | 174 | * Adjust remaining space by the term prefix size so each case |
| ... | ... | @@ -177,18 +180,18 @@ void do_qr_rpqnames(H3270 *hSession) |
| 177 | 180 | |
| 178 | 181 | switch (term_id) { /* build the term based on id */ |
| 179 | 182 | case RPQ_USER: /* User text from env. vars */ |
| 180 | - h3270.obptr += get_rpq_user(h3270.obptr, remaining); | |
| 183 | + hSession->obptr += get_rpq_user(hSession,hSession->obptr, remaining); | |
| 181 | 184 | break; |
| 182 | 185 | |
| 183 | 186 | case RPQ_TIMEZONE: /* UTC time offset */ |
| 184 | 187 | omit_due_space_limit = (remaining < 2); |
| 185 | 188 | if (!omit_due_space_limit) |
| 186 | - SET16(h3270.obptr, get_rpq_timezone()); | |
| 189 | + SET16(hSession->obptr, get_rpq_timezone(hSession)); | |
| 187 | 190 | break; |
| 188 | 191 | |
| 189 | 192 | case RPQ_ADDRESS: /* Workstation address */ |
| 190 | 193 | #if !defined(_WIN32) /*[*/ |
| 191 | - hSession->obptr += get_rpq_address(hSession->obptr, remaining); | |
| 194 | + hSession->obptr += get_rpq_address(hSession, hSession->obptr, remaining); | |
| 192 | 195 | #endif /*]*/ |
| 193 | 196 | break; |
| 194 | 197 | |
| ... | ... | @@ -204,7 +207,7 @@ void do_qr_rpqnames(H3270 *hSession) |
| 204 | 207 | |
| 205 | 208 | case RPQ_TIMESTAMP: /* program build time (yyyymmddhhmmss bcd) */ |
| 206 | 209 | x = strlen(build_rpq_timestamp); |
| 207 | - omit_due_space_limit = ((x+1)/2 > remaining); | |
| 210 | + omit_due_space_limit = ((x+1)/2 > remaining) ? 1 : 0; | |
| 208 | 211 | if (!omit_due_space_limit) { |
| 209 | 212 | for (i=0; i < x; i+=2) { |
| 210 | 213 | *hSession->obptr++ = ((*(build_rpq_timestamp+i) - '0') << 4) |
| ... | ... | @@ -214,12 +217,12 @@ void do_qr_rpqnames(H3270 *hSession) |
| 214 | 217 | break; |
| 215 | 218 | |
| 216 | 219 | default: /* unsupported ID, (can't happen) */ |
| 217 | - Error(NULL,"Unsupported RPQ term"); | |
| 220 | + Error(hSession,_( "Unsupported RPQ term" )); | |
| 218 | 221 | break; |
| 219 | 222 | } |
| 220 | 223 | |
| 221 | 224 | if (omit_due_space_limit) |
| 222 | - rpq_warning("RPQ %s term omitted due to insufficient space", rpq_keywords[j].text); | |
| 225 | + rpq_warning(hSession, _( "RPQ %s term omitted due to insufficient space" ), rpq_keywords[j].text); | |
| 223 | 226 | /* |
| 224 | 227 | * The item is built, insert item length as needed and |
| 225 | 228 | * adjust space remaining. |
| ... | ... | @@ -256,12 +259,11 @@ void do_qr_rpqnames(H3270 *hSession) |
| 256 | 259 | /* Fill in overall length of RPQNAME info */ |
| 257 | 260 | *rpql = (hSession->obptr - rpql); |
| 258 | 261 | |
| 259 | - rpq_dump_warnings(); | |
| 262 | + rpq_dump_warnings(hSession); | |
| 260 | 263 | } |
| 261 | 264 | |
| 262 | 265 | /* Utility function used by the RPQNAMES query reply. */ |
| 263 | -static Boolean | |
| 264 | -select_rpq_terms(void) | |
| 266 | +static Boolean select_rpq_terms(H3270 *hSession) | |
| 265 | 267 | { |
| 266 | 268 | int i,j,k,len; |
| 267 | 269 | char *uplist; |
| ... | ... | @@ -330,9 +332,7 @@ select_rpq_terms(void) |
| 330 | 332 | if (rpq_keywords[j].allow_oride) { |
| 331 | 333 | rpq_keywords[j].oride = p1-uplist+1; |
| 332 | 334 | } else { |
| 333 | - rpq_warning("RPQ %s term " | |
| 334 | - "override " | |
| 335 | - "ignored", p1); | |
| 335 | + rpq_warning(hSession, _("RPQ %s term override ignored"), p1); | |
| 336 | 336 | } |
| 337 | 337 | } |
| 338 | 338 | break; |
| ... | ... | @@ -344,8 +344,7 @@ select_rpq_terms(void) |
| 344 | 344 | for (k=0; k < NS_RPQ; k++) |
| 345 | 345 | rpq_keywords[k].omit = is_no_form; |
| 346 | 346 | } else { |
| 347 | - rpq_warning("RPQ term \"%s\" is unrecognized", | |
| 348 | - kw); | |
| 347 | + rpq_warning(hSession,_( "RPQ term \"%s\" is unrecognized" ),kw); | |
| 349 | 348 | } |
| 350 | 349 | } |
| 351 | 350 | } |
| ... | ... | @@ -364,8 +363,10 @@ select_rpq_terms(void) |
| 364 | 363 | return False; |
| 365 | 364 | } |
| 366 | 365 | |
| 367 | -/* Utility function used by the RPQNAMES query reply. */ | |
| 368 | -static int get_rpq_timezone(void) | |
| 366 | +/** | |
| 367 | + * Utility function used by the RPQNAMES query reply. | |
| 368 | + */ | |
| 369 | +static int get_rpq_timezone(H3270 *hSession) | |
| 369 | 370 | { |
| 370 | 371 | /* |
| 371 | 372 | * Return the signed number of minutes we're offset from UTC. |
| ... | ... | @@ -399,7 +400,7 @@ static int get_rpq_timezone(void) |
| 399 | 400 | |
| 400 | 401 | x = strtol(p1, &p2, 10); |
| 401 | 402 | if (errno != 0) { |
| 402 | - rpq_warning("RPQ TIMEZONE term is invalid - use +/-hhmm"); | |
| 403 | + rpq_warning(hSession, _( "RPQ TIMEZONE term is invalid - use +/-hhmm" )); | |
| 403 | 404 | return 4; |
| 404 | 405 | } |
| 405 | 406 | if ((*p2 != '\0') && (*p2 != ':') && (!isspace(*p2))) |
| ... | ... | @@ -408,7 +409,7 @@ static int get_rpq_timezone(void) |
| 408 | 409 | hhmm = ldiv(x, 100L); |
| 409 | 410 | |
| 410 | 411 | if (hhmm.rem > 59L) { |
| 411 | - rpq_warning("RPQ TIMEZONE term is invalid - use +/-hhmm"); | |
| 412 | + rpq_warning(hSession, _("RPQ TIMEZONE term is invalid - use +/-hhmm")); | |
| 412 | 413 | return 4; |
| 413 | 414 | } |
| 414 | 415 | |
| ... | ... | @@ -421,14 +422,14 @@ static int get_rpq_timezone(void) |
| 421 | 422 | */ |
| 422 | 423 | if ((here = time(NULL)) == (time_t)(-1)) |
| 423 | 424 | { |
| 424 | - rpq_warning("RPQ: Unable to determine workstation local time"); | |
| 425 | + rpq_warning(hSession, _("RPQ: Unable to determine workstation local time")); | |
| 425 | 426 | return 1; |
| 426 | 427 | } |
| 427 | 428 | memcpy(&here_tm, localtime(&here), sizeof(struct tm)); |
| 428 | 429 | |
| 429 | 430 | if ((utc_tm = gmtime(&here)) == NULL) |
| 430 | 431 | { |
| 431 | - rpq_warning("RPQ: Unable to determine workstation UTC time"); | |
| 432 | + rpq_warning(hSession, _("RPQ: Unable to determine workstation UTC time")); | |
| 432 | 433 | return 2; |
| 433 | 434 | } |
| 434 | 435 | |
| ... | ... | @@ -443,14 +444,13 @@ static int get_rpq_timezone(void) |
| 443 | 444 | |
| 444 | 445 | /* sanity check: difference cannot exceed +/- 12 hours */ |
| 445 | 446 | if (labs(delta) > 720L) |
| 446 | - rpq_warning("RPQ timezone exceeds 12 hour UTC offset"); | |
| 447 | + rpq_warning(hSession, _("RPQ timezone exceeds 12 hour UTC offset")); | |
| 447 | 448 | return (labs(delta) > 720L)? 3 : (int) delta; |
| 448 | 449 | } |
| 449 | 450 | |
| 450 | 451 | |
| 451 | 452 | /* Utility function used by the RPQNAMES query reply. */ |
| 452 | -static int | |
| 453 | -get_rpq_user(unsigned char buf[], const int buflen) | |
| 453 | +static int get_rpq_user(H3270 *hSession, unsigned char buf[], const int buflen) | |
| 454 | 454 | { |
| 455 | 455 | /* |
| 456 | 456 | * Text may be specified in one of two ways, but not both. |
| ... | ... | @@ -498,13 +498,13 @@ get_rpq_user(unsigned char buf[], const int buflen) |
| 498 | 498 | if (isspace(c)) |
| 499 | 499 | continue; /* skip white space */ |
| 500 | 500 | if (!isxdigit(c)) { |
| 501 | - rpq_warning("RPQ USER term has non-hex character"); | |
| 501 | + rpq_warning(hSession, _("RPQ USER term has non-hex character")); | |
| 502 | 502 | break; |
| 503 | 503 | } |
| 504 | 504 | x = (p_h - hexstr)/2; |
| 505 | 505 | if (x >= buflen) { |
| 506 | 506 | x = buflen; |
| 507 | - rpq_warning("RPQ USER term truncated after %d bytes", x); | |
| 507 | + rpq_warning(hSession, _("RPQ USER term truncated after %d bytes"), x); | |
| 508 | 508 | break; /* too long, truncate */ |
| 509 | 509 | } |
| 510 | 510 | |
| ... | ... | @@ -523,7 +523,7 @@ get_rpq_user(unsigned char buf[], const int buflen) |
| 523 | 523 | */ |
| 524 | 524 | is_first_hex_digit = ((strlen(hexstr) % 2) == 0); |
| 525 | 525 | if (!is_first_hex_digit) |
| 526 | - rpq_warning("RPQ USER term has odd number of hex digits"); | |
| 526 | + rpq_warning(hSession, _("RPQ USER term has odd number of hex digits")); | |
| 527 | 527 | *buf = 0; /* initialize first byte for possible implied |
| 528 | 528 | leading zero */ |
| 529 | 529 | for (p_h = &hexstr[0]; *p_h; p_h++) { |
| ... | ... | @@ -548,7 +548,7 @@ get_rpq_user(unsigned char buf[], const int buflen) |
| 548 | 548 | |
| 549 | 549 | if ( x >= buflen) { |
| 550 | 550 | x = buflen; |
| 551 | - rpq_warning("RPQ USER term truncated after %d characters", x); | |
| 551 | + rpq_warning(hSession, _("RPQ USER term truncated after %d characters"), x); | |
| 552 | 552 | break; |
| 553 | 553 | } |
| 554 | 554 | |
| ... | ... | @@ -566,14 +566,13 @@ get_rpq_user(unsigned char buf[], const int buflen) |
| 566 | 566 | } |
| 567 | 567 | |
| 568 | 568 | #if !defined(_WIN32) /*[*/ |
| 569 | -static int | |
| 570 | -get_rpq_address(unsigned char *buf, const int maxlen) | |
| 569 | +static int get_rpq_address(H3270 *hSession, unsigned char *buf, const int maxlen) | |
| 571 | 570 | { |
| 572 | 571 | struct rpq_keyword *kw; |
| 573 | 572 | int x = 0; |
| 574 | 573 | |
| 575 | 574 | if (maxlen < 2) { |
| 576 | - omit_due_space_limit = True; | |
| 575 | + hSession->omit_due_space_limit = 1; | |
| 577 | 576 | return 0; |
| 578 | 577 | } |
| 579 | 578 | |
| ... | ... | @@ -622,7 +621,7 @@ get_rpq_address(unsigned char *buf, const int maxlen) |
| 622 | 621 | len = sizeof(struct in6_addr); |
| 623 | 622 | break; |
| 624 | 623 | default: |
| 625 | - rpq_warning("RPQ ADDRESS term has unrecognized family %u",res->ai_family); | |
| 624 | + rpq_warning(hSession, _("RPQ ADDRESS term has unrecognized family %u"),res->ai_family); | |
| 626 | 625 | break; |
| 627 | 626 | } |
| 628 | 627 | |
| ... | ... | @@ -630,12 +629,12 @@ get_rpq_address(unsigned char *buf, const int maxlen) |
| 630 | 629 | x += len; |
| 631 | 630 | (void) memcpy(buf, src, len); |
| 632 | 631 | } else { |
| 633 | - rpq_warning("RPQ ADDRESS term incomplete due to space limit"); | |
| 632 | + rpq_warning(hSession, _("RPQ ADDRESS term incomplete due to space limit")); | |
| 634 | 633 | } |
| 635 | 634 | /* Give back storage obtained by getaddrinfo */ |
| 636 | 635 | freeaddrinfo(res); |
| 637 | 636 | } else { |
| 638 | - rpq_warning("RPQ: can't resolve '%s': %s",rpqtext, gai_strerror(ga_err)); | |
| 637 | + rpq_warning(hSession, _("RPQ: can't resolve '%s': %s"),rpqtext, gai_strerror(ga_err)); | |
| 639 | 638 | } |
| 640 | 639 | #else /*][*/ |
| 641 | 640 | /* |
| ... | ... | @@ -648,7 +647,7 @@ get_rpq_address(unsigned char *buf, const int maxlen) |
| 648 | 647 | |
| 649 | 648 | h = gethostbyname(rpqtext); |
| 650 | 649 | if (h == NULL || h->h_addrtype != AF_INET) { |
| 651 | - rpq_warning("RPQ: gethostbyname error"); | |
| 650 | + rpq_warning(hSession, _("RPQ: gethostbyname error")); | |
| 652 | 651 | return 0; |
| 653 | 652 | } |
| 654 | 653 | (void) memcpy(&ia, h->h_addr_list[0], h->h_length); |
| ... | ... | @@ -659,7 +658,7 @@ get_rpq_address(unsigned char *buf, const int maxlen) |
| 659 | 658 | (void) memcpy(buf, &ia, sizeof(in_addr_t)); |
| 660 | 659 | x += sizeof(in_addr_t); |
| 661 | 660 | } else { |
| 662 | - rpq_warning("RPQ ADDRESS term incomplete due to space limit"); | |
| 661 | + rpq_warning(hSession, _("RPQ ADDRESS term incomplete due to space limit")); | |
| 663 | 662 | } |
| 664 | 663 | #endif // HAVE_GETADDRINFO |
| 665 | 664 | free(rpqtext); |
| ... | ... | @@ -676,7 +675,7 @@ get_rpq_address(unsigned char *buf, const int maxlen) |
| 676 | 675 | void *src = NULL; |
| 677 | 676 | int len = 0; |
| 678 | 677 | |
| 679 | - if(net_getsockname(&h3270, &u, &addrlen) < 0) | |
| 678 | + if(net_getsockname(hSession, &u, &addrlen) < 0) | |
| 680 | 679 | return 0; |
| 681 | 680 | SET16(buf, u.sa.sa_family); |
| 682 | 681 | x += 2; |
| ... | ... | @@ -692,14 +691,14 @@ get_rpq_address(unsigned char *buf, const int maxlen) |
| 692 | 691 | break; |
| 693 | 692 | #endif // HAVE_GETADDRINFO |
| 694 | 693 | default: |
| 695 | - rpq_warning("RPQ ADDRESS term has unrecognized family %u", u.sa.sa_family); | |
| 694 | + rpq_warning(hSession, _("RPQ ADDRESS term has unrecognized family %u"), u.sa.sa_family); | |
| 696 | 695 | break; |
| 697 | 696 | } |
| 698 | 697 | if (x + len <= maxlen) { |
| 699 | 698 | (void) memcpy(buf, src, len); |
| 700 | 699 | x += len; |
| 701 | 700 | } else { |
| 702 | - rpq_warning("RPQ ADDRESS term incomplete due to space limit"); | |
| 701 | + rpq_warning(hSession, _("RPQ ADDRESS term incomplete due to space limit")); | |
| 703 | 702 | } |
| 704 | 703 | } |
| 705 | 704 | return x; |
| ... | ... | @@ -707,51 +706,51 @@ get_rpq_address(unsigned char *buf, const int maxlen) |
| 707 | 706 | #endif /*]*/ |
| 708 | 707 | |
| 709 | 708 | #define RPQ_WARNBUF_SIZE 1024 |
| 710 | -static char * rpq_warnbuf = CN; | |
| 711 | -static int rpq_wbcnt = 0; | |
| 709 | +//static char * rpq_warnbuf = CN; | |
| 710 | +//static int rpq_wbcnt = 0; | |
| 712 | 711 | |
| 713 | -static void rpq_warning(const char *fmt, ...) | |
| 712 | +static void rpq_warning(H3270 *hSession, const char *fmt, ...) | |
| 714 | 713 | { |
| 715 | 714 | va_list a; |
| 716 | 715 | |
| 717 | 716 | va_start(a, fmt); |
| 718 | - lib3270_write_va_log(&h3270,"RPQ",fmt,a); | |
| 717 | + lib3270_write_va_log(hSession,"RPQ",fmt,a); | |
| 719 | 718 | va_end(a); |
| 720 | 719 | |
| 721 | 720 | /* |
| 722 | 721 | * Only accumulate RPQ warnings if they |
| 723 | 722 | * have not been displayed already. |
| 724 | 723 | */ |
| 725 | - if (!rpq_complained) | |
| 724 | + if (!hSession->rpq_complained) | |
| 726 | 725 | { |
| 727 | 726 | va_start(a, fmt); |
| 728 | - if (rpq_warnbuf == CN) | |
| 729 | - rpq_warnbuf = lib3270_malloc(RPQ_WARNBUF_SIZE); | |
| 727 | + if (hSession->rpq_warnbuf == CN) | |
| 728 | + hSession->rpq_warnbuf = lib3270_malloc(RPQ_WARNBUF_SIZE); | |
| 730 | 729 | |
| 731 | - if (rpq_wbcnt < RPQ_WARNBUF_SIZE) | |
| 730 | + if (hSession->rpq_wbcnt < RPQ_WARNBUF_SIZE) | |
| 732 | 731 | { |
| 733 | - *(rpq_warnbuf + rpq_wbcnt++) = '\n'; | |
| 734 | - *(rpq_warnbuf + rpq_wbcnt) = '\0'; | |
| 732 | + *(hSession->rpq_warnbuf + hSession->rpq_wbcnt++) = '\n'; | |
| 733 | + *(hSession->rpq_warnbuf + hSession->rpq_wbcnt) = '\0'; | |
| 735 | 734 | } |
| 736 | 735 | |
| 737 | - if (rpq_wbcnt < RPQ_WARNBUF_SIZE) | |
| 736 | + if (hSession->rpq_wbcnt < RPQ_WARNBUF_SIZE) | |
| 738 | 737 | { |
| 739 | - rpq_wbcnt += vsnprintf(rpq_warnbuf + rpq_wbcnt,RPQ_WARNBUF_SIZE - rpq_wbcnt, fmt, a); | |
| 738 | + hSession->rpq_wbcnt += vsnprintf(hSession->rpq_warnbuf + hSession->rpq_wbcnt,RPQ_WARNBUF_SIZE - hSession->rpq_wbcnt, fmt, a); | |
| 740 | 739 | } |
| 741 | 740 | va_end(a); |
| 742 | 741 | } |
| 743 | 742 | } |
| 744 | 743 | |
| 745 | -static void rpq_dump_warnings(void) | |
| 744 | +static void rpq_dump_warnings(H3270 *hSession) | |
| 746 | 745 | { |
| 747 | 746 | /* If there's something to complain about, only complain once. */ |
| 748 | - if (!rpq_complained && rpq_wbcnt) | |
| 747 | + if (!hSession->rpq_complained && hSession->rpq_wbcnt) | |
| 749 | 748 | { |
| 750 | - popup_an_error(NULL,rpq_warnbuf); | |
| 751 | - rpq_wbcnt = 0; | |
| 752 | - rpq_complained = True; | |
| 749 | + popup_an_error(hSession,hSession->rpq_warnbuf); | |
| 750 | + hSession->rpq_wbcnt = 0; | |
| 751 | + hSession->rpq_complained = 1; | |
| 753 | 752 | |
| 754 | - free(rpq_warnbuf); | |
| 755 | - rpq_warnbuf = CN; | |
| 753 | + lib3270_free(hSession->rpq_warnbuf); | |
| 754 | + hSession->rpq_warnbuf = CN; | |
| 756 | 755 | } |
| 757 | 756 | } | ... | ... |
src/lib3270/telnet.c
| ... | ... | @@ -2230,11 +2230,10 @@ static void cooked_init(H3270 *hSession) |
| 2230 | 2230 | hSession->backslashed = 0; |
| 2231 | 2231 | } |
| 2232 | 2232 | |
| 2233 | -static void | |
| 2234 | -ansi_process_s(const char *data) | |
| 2233 | +static void ansi_process_s(H3270 *hSession, const char *data) | |
| 2235 | 2234 | { |
| 2236 | 2235 | while (*data) |
| 2237 | - ansi_process(&h3270,(unsigned int) *data++); | |
| 2236 | + ansi_process(hSession,(unsigned int) *data++); | |
| 2238 | 2237 | } |
| 2239 | 2238 | |
| 2240 | 2239 | static void forward_data(H3270 *hSession) |
| ... | ... | @@ -2253,10 +2252,10 @@ static void do_data(H3270 *hSession, char c) |
| 2253 | 2252 | if (c == '\t') |
| 2254 | 2253 | ansi_process(hSession,(unsigned int) c); |
| 2255 | 2254 | else |
| 2256 | - ansi_process_s(ctl_see((int) c)); | |
| 2255 | + ansi_process_s(hSession,ctl_see((int) c)); | |
| 2257 | 2256 | } |
| 2258 | 2257 | else |
| 2259 | - ansi_process_s(""\007");07"); | |
| 2258 | + ansi_process_s(hSession,""\007");07"); | |
| 2260 | 2259 | |
| 2261 | 2260 | hSession->lnext = 0; |
| 2262 | 2261 | hSession->backslashed = 0; |
| ... | ... | @@ -2269,7 +2268,7 @@ static void do_intr(H3270 *hSession, char c) |
| 2269 | 2268 | do_data(hSession,c); |
| 2270 | 2269 | return; |
| 2271 | 2270 | } |
| 2272 | - ansi_process_s(ctl_see((int) c)); | |
| 2271 | + ansi_process_s(hSession,ctl_see((int) c)); | |
| 2273 | 2272 | cooked_init(hSession); |
| 2274 | 2273 | net_interrupt(hSession); |
| 2275 | 2274 | } |
| ... | ... | @@ -2281,7 +2280,7 @@ static void do_quit(H3270 *hSession, char c) |
| 2281 | 2280 | do_data(hSession,c); |
| 2282 | 2281 | return; |
| 2283 | 2282 | } |
| 2284 | - ansi_process_s(ctl_see((int) c)); | |
| 2283 | + ansi_process_s(hSession,ctl_see((int) c)); | |
| 2285 | 2284 | cooked_init(hSession); |
| 2286 | 2285 | net_break(hSession); |
| 2287 | 2286 | } |
| ... | ... | @@ -2293,7 +2292,7 @@ static void do_cerase(H3270 *hSession, char c) |
| 2293 | 2292 | if (hSession->backslashed) |
| 2294 | 2293 | { |
| 2295 | 2294 | hSession->lbptr--; |
| 2296 | - ansi_process_s("\b"); | |
| 2295 | + ansi_process_s(hSession,"\b"); | |
| 2297 | 2296 | do_data(hSession,c); |
| 2298 | 2297 | return; |
| 2299 | 2298 | } |
| ... | ... | @@ -2309,7 +2308,7 @@ static void do_cerase(H3270 *hSession, char c) |
| 2309 | 2308 | len = strlen(ctl_see((int) *--hSession->lbptr)); |
| 2310 | 2309 | |
| 2311 | 2310 | while (len--) |
| 2312 | - ansi_process_s("\b \b"); | |
| 2311 | + ansi_process_s(hSession,"\b \b"); | |
| 2313 | 2312 | } |
| 2314 | 2313 | } |
| 2315 | 2314 | |
| ... | ... | @@ -2339,7 +2338,7 @@ static void do_werase(H3270 *hSession, char c) |
| 2339 | 2338 | len = strlen(ctl_see((int) ch)); |
| 2340 | 2339 | |
| 2341 | 2340 | while (len--) |
| 2342 | - ansi_process_s("\b \b"); | |
| 2341 | + ansi_process_s(hSession,"\b \b"); | |
| 2343 | 2342 | } |
| 2344 | 2343 | } |
| 2345 | 2344 | |
| ... | ... | @@ -2347,9 +2346,10 @@ static void do_kill(H3270 *hSession, char c) |
| 2347 | 2346 | { |
| 2348 | 2347 | int i, len; |
| 2349 | 2348 | |
| 2350 | - if (hSession->backslashed) { | |
| 2349 | + if (hSession->backslashed) | |
| 2350 | + { | |
| 2351 | 2351 | hSession->lbptr--; |
| 2352 | - ansi_process_s("\b"); | |
| 2352 | + ansi_process_s(hSession,"\b"); | |
| 2353 | 2353 | do_data(hSession,c); |
| 2354 | 2354 | return; |
| 2355 | 2355 | } |
| ... | ... | @@ -2365,7 +2365,7 @@ static void do_kill(H3270 *hSession, char c) |
| 2365 | 2365 | len = strlen(ctl_see((int) *--hSession->lbptr)); |
| 2366 | 2366 | |
| 2367 | 2367 | for (i = 0; i < len; i++) |
| 2368 | - ansi_process_s("\b \b"); | |
| 2368 | + ansi_process_s(hSession,"\b \b"); | |
| 2369 | 2369 | } |
| 2370 | 2370 | } |
| 2371 | 2371 | |
| ... | ... | @@ -2379,10 +2379,10 @@ static void do_rprnt(H3270 *hSession, char c) |
| 2379 | 2379 | return; |
| 2380 | 2380 | } |
| 2381 | 2381 | |
| 2382 | - ansi_process_s(ctl_see((int) c)); | |
| 2383 | - ansi_process_s("\r\n"); | |
| 2382 | + ansi_process_s(hSession,ctl_see((int) c)); | |
| 2383 | + ansi_process_s(hSession,"\r\n"); | |
| 2384 | 2384 | for (p = hSession->lbuf; p < hSession->lbptr; p++) |
| 2385 | - ansi_process_s(ctl_see((int) *p)); | |
| 2385 | + ansi_process_s(hSession,ctl_see((int) *p)); | |
| 2386 | 2386 | } |
| 2387 | 2387 | |
| 2388 | 2388 | static void do_eof(H3270 *hSession, char c) |
| ... | ... | @@ -2390,7 +2390,7 @@ static void do_eof(H3270 *hSession, char c) |
| 2390 | 2390 | if (hSession->backslashed) |
| 2391 | 2391 | { |
| 2392 | 2392 | hSession->lbptr--; |
| 2393 | - ansi_process_s("\b"); | |
| 2393 | + ansi_process_s(hSession,"\b"); | |
| 2394 | 2394 | do_data(hSession,c); |
| 2395 | 2395 | return; |
| 2396 | 2396 | } |
| ... | ... | @@ -2415,13 +2415,13 @@ static void do_eol(H3270 *hSession, char c) |
| 2415 | 2415 | |
| 2416 | 2416 | if (hSession->lbptr+2 >= hSession->lbuf + BUFSZ) |
| 2417 | 2417 | { |
| 2418 | - ansi_process_s(""\007");07"); | |
| 2418 | + ansi_process_s(hSession,""\007");07"); | |
| 2419 | 2419 | return; |
| 2420 | 2420 | } |
| 2421 | 2421 | |
| 2422 | 2422 | *hSession->lbptr++ = '\r'; |
| 2423 | 2423 | *hSession->lbptr++ = '\n'; |
| 2424 | - ansi_process_s("\r\n"); | |
| 2424 | + ansi_process_s(hSession,"\r\n"); | |
| 2425 | 2425 | forward_data(hSession); |
| 2426 | 2426 | } |
| 2427 | 2427 | |
| ... | ... | @@ -2433,7 +2433,7 @@ static void do_lnext(H3270 *hSession, char c) |
| 2433 | 2433 | return; |
| 2434 | 2434 | } |
| 2435 | 2435 | hSession->lnext = 1; |
| 2436 | - ansi_process_s("^\b"); | |
| 2436 | + ansi_process_s(hSession,"^\b"); | |
| 2437 | 2437 | } |
| 2438 | 2438 | #endif /*]*/ |
| 2439 | 2439 | ... | ... |