Commit a6f24e750d03f4882d6b9612c50702bef5a281ef
1 parent
c9335c4e
Exists in
master
and in
3 other branches
Mais métodos passam a utilizar a estrutura de sessão
Showing
3 changed files
with
101 additions
and
816 deletions
Show diff stats
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 | - | ... | ... |
... | ... | @@ -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 | } | ... | ... |
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 | ... | ... |