Commit a6f24e750d03f4882d6b9612c50702bef5a281ef

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

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   -
... ...
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 }
... ...
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  
... ...