Commit 0f5a13fcb07e0aab1a7e8902d2abcb9c953b9148

Authored by perry.werneck@gmail.com
1 parent 88832e03

Ajustes para compilar em android

@@ -566,60 +566,6 @@ static int DefaultProcessEvents(int block) @@ -566,60 +566,6 @@ static int DefaultProcessEvents(int block)
566 566
567 /*---[ Implement external calls ]---------------------------------------------------------------------------*/ 567 /*---[ Implement external calls ]---------------------------------------------------------------------------*/
568 568
569 -void * Malloc(size_t len)  
570 -{  
571 - char *r;  
572 -  
573 - r = malloc(len);  
574 - if (r == (char *)NULL)  
575 - Error(NULL,"Out of memory");  
576 - return r;  
577 -}  
578 -  
579 -void * Calloc(size_t nelem, size_t elsize)  
580 -{  
581 - int sz = nelem * elsize;  
582 - char * r = malloc(sz);  
583 -  
584 - if(!r)  
585 - Error(NULL,"Out of memory");  
586 -  
587 - memset(r, 0, sz);  
588 - return r;  
589 -}  
590 -  
591 -void * Realloc(void *p, size_t len)  
592 -{  
593 - p = realloc(p, len);  
594 - if (p == NULL)  
595 - Error(NULL,"Out of memory");  
596 - return p;  
597 -}  
598 -  
599 -void Free(void *p)  
600 -{  
601 - if(p)  
602 - free(p);  
603 -}  
604 -  
605 -void * lib3270_calloc(size_t elsize, size_t nelem, void *ptr)  
606 -{  
607 - size_t sz = nelem * elsize;  
608 -  
609 - if(ptr)  
610 - ptr = realloc(ptr,sz);  
611 - else  
612 - ptr = malloc(sz);  
613 -  
614 - if(ptr)  
615 - memset(ptr,0,sz);  
616 - else  
617 - Error(NULL,"Out of memory");  
618 -  
619 - return ptr;  
620 -}  
621 -  
622 -  
623 static struct { 569 static struct {
624 const char *name; 570 const char *name;
625 KeySym keysym; 571 KeySym keysym;
@@ -159,25 +159,28 @@ restore_charset(void) @@ -159,25 +159,28 @@ restore_charset(void)
159 } 159 }
160 160
161 /* Get a character set definition. */ 161 /* Get a character set definition. */
162 -static const char * get_charset_def(const char *csname) 162 +/*
  163 +static char * get_charset_def(const char *csname)
163 { 164 {
164 - return get_fresource("%s.%s", ResCharset, csname); 165 + return get_fresource("%s.%s", "charset", csname);
165 } 166 }
  167 +*/
166 168
167 -#if defined(X3270_DBCS) /*[*/  
168 /* 169 /*
169 - * Initialize the DBCS conversion functions, based on resource values.  
170 - */ 170 +#if defined(X3270_DBCS)
  171 +//
  172 +// Initialize the DBCS conversion functions, based on resource values.
  173 +//
171 static int 174 static int
172 wide_resource_init(char *csname) 175 wide_resource_init(char *csname)
173 { 176 {
174 char *cn, *en; 177 char *cn, *en;
175 178
176 - cn = get_fresource("%s.%s", ResDbcsConverters, csname); 179 + cn = get_fresource("%s.%s", "dbcsConverters", csname);
177 if (cn == CN) 180 if (cn == CN)
178 return 0; 181 return 0;
179 182
180 - en = get_fresource("%s.%s", ResLocalEncoding, csname); 183 + en = get_fresource("%s.%s", "localEncoding", csname);
181 if (en == CN) 184 if (en == CN)
182 en = appres.local_encoding; 185 en = appres.local_encoding;
183 Replace(converter_names, cn); 186 Replace(converter_names, cn);
@@ -186,78 +189,60 @@ wide_resource_init(char *csname) @@ -186,78 +189,60 @@ wide_resource_init(char *csname)
186 return wide_init(cn, en); 189 return wide_init(cn, en);
187 190
188 } 191 }
189 -#endif /*]*/ 192 +#endif
  193 +*/
190 194
191 /* 195 /*
192 * Change character sets. 196 * Change character sets.
193 */ 197 */
194 enum cs_result charset_init(H3270 *session, char *csname) 198 enum cs_result charset_init(H3270 *session, char *csname)
195 { 199 {
196 - const char *cs; 200 + char *cs;
197 const char *ftcs; 201 const char *ftcs;
198 enum cs_result rc; 202 enum cs_result rc;
199 char *ccs, *cftcs; 203 char *ccs, *cftcs;
200 -/*  
201 -#if defined(X3270_DISPLAY)  
202 - char *xks;  
203 -#endif  
204 -*/  
205 const char *ak; 204 const char *ak;
206 205
207 -/*  
208 -#if !defined(_WIN32)  
209 - char *codeset_name;  
210 -#endif  
211 -  
212 -#if !defined(_WIN32)  
213 - // Get all of the locale stuff right.  
214 -  
215 - // Figure out the locale code set (character set encoding).  
216 - codeset_name = nl_langinfo(CODESET);  
217 - Trace("codeset_name: %s",codeset_name);  
218 - set_codeset(codeset_name);  
219 -#endif  
220 -*/  
221 -  
222 206
223 /* Do nothing, successfully. */ 207 /* Do nothing, successfully. */
224 if (csname == CN || !strcasecmp(csname, "us")) 208 if (csname == CN || !strcasecmp(csname, "us"))
225 { 209 {
226 charset_defaults(); 210 charset_defaults();
227 set_cgcsgids(CN); 211 set_cgcsgids(CN);
228 -// set_charset_name(CN);  
229 set_display_charset(session, "ISO-8859-1"); 212 set_display_charset(session, "ISO-8859-1");
230 return CS_OKAY; 213 return CS_OKAY;
231 } 214 }
232 215
233 /* Figure out if it's already in a resource or in a file. */ 216 /* Figure out if it's already in a resource or in a file. */
234 - cs = get_charset_def(csname);  
235 - if (cs == CN &&  
236 - strlen(csname) > ES_SIZE &&  
237 - !strcasecmp(csname + strlen(csname) - ES_SIZE, EURO_SUFFIX)) {  
238 - char *basename; 217 +#ifdef ANDROID
  218 + ccs = strdup("0xad: [ \n 0xba: Yacute \n0xbd: ] \n 0xbb: diaeresis \n");
  219 +#else
  220 + ccs = lib3270_get_resource_string("charset", csname, NULL);
  221 +#endif
  222 +/*
  223 + if (cs == CN && strlen(csname) > ES_SIZE && !strcasecmp(csname + strlen(csname) - ES_SIZE, EURO_SUFFIX))
  224 + {
  225 + char *basename =
  226 + lib3270_free(cs);
239 227
240 - /* Grab the non-Euro definition. */ 228 + // Grab the non-Euro definition.
241 basename = xs_buffer("%.*s", (int) (strlen(csname) - ES_SIZE), csname); 229 basename = xs_buffer("%.*s", (int) (strlen(csname) - ES_SIZE), csname);
242 cs = get_charset_def(basename); 230 cs = get_charset_def(basename);
243 Free(basename); 231 Free(basename);
244 } 232 }
245 - if (cs == CN) 233 +*/
  234 + if (!ccs)
246 return CS_NOTFOUND; 235 return CS_NOTFOUND;
247 236
248 /* Grab the File Transfer character set. */ 237 /* Grab the File Transfer character set. */
249 - ftcs = get_fresource("%s.%s", ResFtCharset, csname);  
250 -  
251 - /* Copy strings. */  
252 - ccs = NewString(cs);  
253 - cftcs = (ftcs == NULL)? NULL: NewString(ftcs); 238 + cftcs = lib3270_get_resource_string("ftCharset",csname,NULL);
254 239
255 /* Save the current definitions, and start over with the defaults. */ 240 /* Save the current definitions, and start over with the defaults. */
256 save_charset(); 241 save_charset();
257 charset_defaults(); 242 charset_defaults();
258 243
259 /* Check for auto-keymap. */ 244 /* Check for auto-keymap. */
260 - ak = get_fresource("%s.%s", ResAutoKeymap, csname); 245 + ak = lib3270_get_resource_string("autoKeymap", csname, NULL);
261 if (ak != NULL) 246 if (ak != NULL)
262 auto_keymap = !strcasecmp(ak, "true"); 247 auto_keymap = !strcasecmp(ak, "true");
263 else 248 else
@@ -277,12 +262,15 @@ enum cs_result charset_init(H3270 *session, char *csname) @@ -277,12 +262,15 @@ enum cs_result charset_init(H3270 *session, char *csname)
277 262
278 if (rc != CS_OKAY) 263 if (rc != CS_OKAY)
279 restore_charset(); 264 restore_charset();
280 -#if defined(X3270_DBCS) /*[*/ 265 +
  266 +/*
  267 +#if defined(X3270_DBCS)
281 else if (wide_resource_init(csname) < 0) { 268 else if (wide_resource_init(csname) < 0) {
282 restore_charset(); 269 restore_charset();
283 return CS_NOTFOUND; 270 return CS_NOTFOUND;
284 } 271 }
285 -#endif /*]*/ 272 +#endif
  273 +*/
286 274
287 /* 275 /*
288 #if defined(X3270_DISPLAY) 276 #if defined(X3270_DISPLAY)
@@ -384,11 +372,11 @@ set_charset_name(char *csname) @@ -384,11 +372,11 @@ set_charset_name(char *csname)
384 /* Define a charset from resources. */ 372 /* Define a charset from resources. */
385 static enum cs_result resource_charset(char *csname, char *cs, char *ftcs) 373 static enum cs_result resource_charset(char *csname, char *cs, char *ftcs)
386 { 374 {
387 - enum cs_result rc;  
388 - int ne = 0;  
389 - const char *rcs = CN;  
390 - int n_rcs = 0;  
391 - const char *dcs; 375 + enum cs_result rc;
  376 + int ne = 0;
  377 + char * rcs = CN;
  378 + int n_rcs = 0;
  379 + char * dcs;
392 380
393 /* Interpret the spec. */ 381 /* Interpret the spec. */
394 rc = remap_chars(csname, cs, (ftcs == NULL)? BOTH: CS_ONLY, &ne); 382 rc = remap_chars(csname, cs, (ftcs == NULL)? BOTH: CS_ONLY, &ne);
@@ -400,37 +388,44 @@ static enum cs_result resource_charset(char *csname, char *cs, char *ftcs) @@ -400,37 +388,44 @@ static enum cs_result resource_charset(char *csname, char *cs, char *ftcs)
400 return rc; 388 return rc;
401 } 389 }
402 390
403 - rcs = get_fresource("%s.%s", ResDisplayCharset, csname); 391 +// rcs = get_fresource("%s.%s", "displayCharset", csname);
  392 + rcs = lib3270_get_resource_string("displayCharset", csname, NULL);
404 393
405 /* Isolate the pieces. */ 394 /* Isolate the pieces. */
406 - if (rcs != CN) {  
407 - char *rcs_copy, *buf, *token; 395 + if (rcs != CN)
  396 + {
  397 + char *buf, *token;
408 398
409 - buf = rcs_copy = NewString(rcs);  
410 - while ((token = strtok(buf, "+")) != CN) { 399 + buf = rcs;
  400 + while ((token = strtok(buf, "+")) != CN)
  401 + {
411 buf = CN; 402 buf = CN;
412 - switch (n_rcs) { 403 + switch (n_rcs)
  404 + {
413 case 0: 405 case 0:
414 -#if defined(X3270_DBCS) /*[*/ 406 +#if defined(X3270_DBCS)
415 case 1: 407 case 1:
416 -#endif /*]*/ 408 +#endif
417 break; 409 break;
418 default: 410 default:
419 - popup_an_error(NULL,"Extra %s value(s), ignoring",  
420 - ResDisplayCharset); 411 + popup_an_error(NULL,"Extra value(s) in displayCharset.%s, ignoring", csname);
421 break; 412 break;
422 } 413 }
423 n_rcs++; 414 n_rcs++;
424 } 415 }
425 } 416 }
426 417
427 -#if defined(X3270_DBCS) /*[*/  
428 - /* Can't swap DBCS modes while connected. */ 418 + lib3270_free(rcs);
  419 +
  420 +/*
  421 +#if defined(X3270_DBCS)
  422 + // Can't swap DBCS modes while connected.
429 if (IN_3270 && (n_rcs == 2) != dbcs) { 423 if (IN_3270 && (n_rcs == 2) != dbcs) {
430 popup_an_error(NULL,"Can't change DBCS modes while connected"); 424 popup_an_error(NULL,"Can't change DBCS modes while connected");
431 return CS_ILLEGAL; 425 return CS_ILLEGAL;
432 } 426 }
433 -#endif /*]*/ 427 +#endif
  428 +*/
434 429
435 /* 430 /*
436 #if !defined(_WIN32) 431 #if !defined(_WIN32)
@@ -445,15 +440,23 @@ static enum cs_result resource_charset(char *csname, char *cs, char *ftcs) @@ -445,15 +440,23 @@ static enum cs_result resource_charset(char *csname, char *cs, char *ftcs)
445 */ 440 */
446 441
447 /* Set up the cgcsgid. */ 442 /* Set up the cgcsgid. */
448 - set_cgcsgids(get_fresource("%s.%s", ResCodepage, csname)); 443 +// set_cgcsgids(get_fresource("%s.%s", "codepage", csname));
  444 + {
  445 + char *ptr = lib3270_get_resource_string("codepage", csname, NULL);
  446 + set_cgcsgids(ptr);
  447 + lib3270_free(ptr);
  448 + }
449 449
450 - dcs = get_fresource("%s.%s", ResDisplayCharset, csname); 450 +// dcs = get_fresource("%s.%s", "displayCharset", csname);
  451 + dcs = lib3270_get_resource_string("displayCharset", csname, NULL);
451 452
452 if (dcs != NULL) 453 if (dcs != NULL)
453 set_display_charset(&h3270,dcs); 454 set_display_charset(&h3270,dcs);
454 else 455 else
455 set_display_charset(&h3270,"ISO-8859-1"); 456 set_display_charset(&h3270,"ISO-8859-1");
456 457
  458 + lib3270_free(dcs);
  459 +
457 /* Set up the character set name. */ 460 /* Set up the character set name. */
458 // set_charset_name(csname); 461 // set_charset_name(csname);
459 462
@@ -56,7 +56,7 @@ @@ -56,7 +56,7 @@
56 #include "screenc.h" 56 #include "screenc.h"
57 #include "scrollc.h" 57 #include "scrollc.h"
58 #include "seec.h" 58 #include "seec.h"
59 -#include "sfc.h" 59 +#include "sf.h"
60 #include "statusc.h" 60 #include "statusc.h"
61 #include "tablesc.h" 61 #include "tablesc.h"
62 #include "telnetc.h" 62 #include "telnetc.h"
@@ -167,8 +167,7 @@ void ctlr_reinit(H3270 *session, unsigned cmask) @@ -167,8 +167,7 @@ void ctlr_reinit(H3270 *session, unsigned cmask)
167 struct ea *tmp; 167 struct ea *tmp;
168 size_t sz = (session->maxROWS * session->maxCOLS); 168 size_t sz = (session->maxROWS * session->maxCOLS);
169 169
170 -  
171 - session->buffer[0] = tmp = lib3270_calloc(sizeof(struct ea),sz+1, session->buffer[0]); 170 + session->buffer[0] = tmp = lib3270_calloc(sizeof(struct ea), sz+1, session->buffer[0]);
172 session->ea_buf = tmp + 1; 171 session->ea_buf = tmp + 1;
173 172
174 session->buffer[1] = tmp = lib3270_calloc(sizeof(struct ea),sz+1,session->buffer[1]); 173 session->buffer[1] = tmp = lib3270_calloc(sizeof(struct ea),sz+1,session->buffer[1]);
@@ -3461,7 +3461,7 @@ add_xk(KeySym key, KeySym assoc) @@ -3461,7 +3461,7 @@ add_xk(KeySym key, KeySym assoc)
3461 xk[i].assoc = assoc; 3461 xk[i].assoc = assoc;
3462 return; 3462 return;
3463 } 3463 }
3464 - xk = (struct xks *)Realloc(xk, (nxk + 1) * sizeof(struct xks)); 3464 + xk = (struct xks *) Realloc(xk, (nxk + 1) * sizeof(struct xks));
3465 xk[nxk].key = key; 3465 xk[nxk].key = key;
3466 xk[nxk].assoc = assoc; 3466 xk[nxk].assoc = assoc;
3467 nxk++; 3467 nxk++;
@@ -63,24 +63,15 @@ typedef struct _XtActionsRec{ @@ -63,24 +63,15 @@ typedef struct _XtActionsRec{
63 63
64 /* These are local functions with similar semantics to X functions. */ 64 /* These are local functions with similar semantics to X functions. */
65 65
66 -void * Malloc(size_t);  
67 -void Free(void *);  
68 -void * Calloc(size_t, size_t);  
69 -void * Realloc(void *, size_t); 66 +// void * Malloc(size_t);
  67 +// void Free(void *);
  68 +// void * Calloc(size_t, size_t);
  69 +// void * Realloc(void *, size_t);
70 70
71 -/**  
72 - * Alloc/Realloc memory buffer.  
73 - *  
74 - * Allocate/reallocate an array.  
75 - *  
76 - * @param elsize Element size.  
77 - * @param nelem Number of elements in the array.  
78 - * @param ptr Pointer to the actual array.  
79 - *  
80 - * @return ptr allocated with the new array size.  
81 - *  
82 - */  
83 -void * lib3270_calloc(size_t elsize, size_t nelem, void *ptr); 71 +#define Malloc(x) lib3270_malloc(x)
  72 +#define Free(x) lib3270_free(x)
  73 +#define Calloc(e,n) lib3270_calloc(e,n,NULL)
  74 +#define Realloc(x,n) lib3270_realloc(x,n)
84 75
85 #define NewString(x) strdup(x) 76 #define NewString(x) strdup(x)
86 //extern char *NewString(const char *); 77 //extern char *NewString(const char *);
@@ -64,6 +64,7 @@ @@ -64,6 +64,7 @@
64 #include "telnetc.h" 64 #include "telnetc.h"
65 #include "trace_dsc.h" 65 #include "trace_dsc.h"
66 #include "utilc.h" 66 #include "utilc.h"
  67 +#include "sf.h"
67 68
68 /* Statics */ 69 /* Statics */
69 static Boolean select_rpq_terms(void); 70 static Boolean select_rpq_terms(void);
@@ -121,8 +122,7 @@ static char *x3270rpq; @@ -121,8 +122,7 @@ static char *x3270rpq;
121 /* 122 /*
122 * RPQNAMES query reply. 123 * RPQNAMES query reply.
123 */ 124 */
124 -void  
125 -do_qr_rpqnames(void) 125 +void do_qr_rpqnames(void)
126 { 126 {
127 #define TERM_PREFIX_SIZE 2 /* Each term has 1 byte length and 1 127 #define TERM_PREFIX_SIZE 2 /* Each term has 1 byte length and 1
128 byte id */ 128 byte id */
@@ -56,7 +56,7 @@ @@ -56,7 +56,7 @@
56 #include "kybdc.h" 56 #include "kybdc.h"
57 #include "screenc.h" 57 #include "screenc.h"
58 #include "seec.h" 58 #include "seec.h"
59 -#include "sfc.h" 59 +#include "sf.h"
60 #include "tablesc.h" 60 #include "tablesc.h"
61 #include "telnetc.h" 61 #include "telnetc.h"
62 #include "trace_dsc.h" 62 #include "trace_dsc.h"
@@ -92,13 +92,13 @@ static void query_reply_start(void); @@ -92,13 +92,13 @@ static void query_reply_start(void);
92 static void do_query_reply(unsigned char code); 92 static void do_query_reply(unsigned char code);
93 static void query_reply_end(void); 93 static void query_reply_end(void);
94 94
95 -typedef void qr_single_fn_t(void);  
96 typedef Boolean qr_multi_fn_t(unsigned *subindex, Boolean *more); 95 typedef Boolean qr_multi_fn_t(unsigned *subindex, Boolean *more);
97 96
98 static qr_single_fn_t do_qr_summary, do_qr_usable_area, do_qr_alpha_part, 97 static qr_single_fn_t do_qr_summary, do_qr_usable_area, do_qr_alpha_part,
99 do_qr_charsets, do_qr_color, do_qr_highlighting, do_qr_reply_modes, 98 do_qr_charsets, do_qr_color, do_qr_highlighting, do_qr_reply_modes,
100 do_qr_imp_part, do_qr_null; 99 do_qr_imp_part, do_qr_null;
101 -extern qr_single_fn_t do_qr_rpqnames; 100 +
  101 +
102 #if defined(X3270_DBCS) /*[*/ 102 #if defined(X3270_DBCS) /*[*/
103 static qr_single_fn_t do_qr_dbcs_asia; 103 static qr_single_fn_t do_qr_dbcs_asia;
104 #endif /*]*/ 104 #endif /*]*/
@@ -121,10 +121,15 @@ static struct reply { @@ -121,10 +121,15 @@ static struct reply {
121 #if defined(X3270_DBCS) /*[*/ 121 #if defined(X3270_DBCS) /*[*/
122 { QR_DBCS_ASIA, do_qr_dbcs_asia, NULL }, /* 0x91 */ 122 { QR_DBCS_ASIA, do_qr_dbcs_asia, NULL }, /* 0x91 */
123 #endif /*]*/ 123 #endif /*]*/
  124 +
124 #if defined(X3270_FT) /*[*/ 125 #if defined(X3270_FT) /*[*/
125 { QR_DDM, do_qr_ddm, NULL }, /* 0x95 */ 126 { QR_DDM, do_qr_ddm, NULL }, /* 0x95 */
126 #endif /*]*/ 127 #endif /*]*/
  128 +
  129 +#ifndef ANDROID
127 { QR_RPQNAMES, do_qr_rpqnames, NULL }, /* 0xa1 */ 130 { QR_RPQNAMES, do_qr_rpqnames, NULL }, /* 0xa1 */
  131 +#endif // !ANDROID
  132 +
128 { QR_IMP_PART, do_qr_imp_part, NULL }, /* 0xa6 */ 133 { QR_IMP_PART, do_qr_imp_part, NULL }, /* 0xa6 */
129 134
130 /* QR_NULL must be last in the table */ 135 /* QR_NULL must be last in the table */
sf.h 0 → 100644
@@ -0,0 +1,19 @@ @@ -0,0 +1,19 @@
  1 +/*
  2 + * Copyright 1995, 1999, 2000 by Paul Mattes.
  3 + * Permission to use, copy, modify, and distribute this software and its
  4 + * documentation for any purpose and without fee is hereby granted,
  5 + * provided that the above copyright notice appear in all copies and that
  6 + * both that copyright notice and this permission notice appear in
  7 + * supporting documentation.
  8 + *
  9 + * x3270, c3270, s3270, tcl3270 and pr3287 are distributed in the hope that
  10 + * they will be useful, but WITHOUT ANY WARRANTY; without even the implied
  11 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12 + * file LICENSE for more details.
  13 + */
  14 +
  15 +typedef void qr_single_fn_t(void);
  16 +
  17 +LIB3270_INTERNAL qr_single_fn_t do_qr_rpqnames;
  18 +
  19 +LIB3270_INTERNAL enum pds write_structured_field(unsigned char buf[], int buflen);
@@ -1,20 +0,0 @@ @@ -1,20 +0,0 @@
1 -/*  
2 - * Copyright 1995, 1999, 2000 by Paul Mattes.  
3 - * Permission to use, copy, modify, and distribute this software and its  
4 - * documentation for any purpose and without fee is hereby granted,  
5 - * provided that the above copyright notice appear in all copies and that  
6 - * both that copyright notice and this permission notice appear in  
7 - * supporting documentation.  
8 - *  
9 - * x3270, c3270, s3270, tcl3270 and pr3287 are distributed in the hope that  
10 - * they will be useful, but WITHOUT ANY WARRANTY; without even the implied  
11 - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the  
12 - * file LICENSE for more details.  
13 - */  
14 -  
15 -/*  
16 - * sfc.h  
17 - * Global declarations for sf.c.  
18 - */  
19 -  
20 -LIB3270_INTERNAL enum pds write_structured_field(unsigned char buf[], int buflen);  
@@ -1087,3 +1087,100 @@ StringToKeysym(char *s) @@ -1087,3 +1087,100 @@ StringToKeysym(char *s)
1087 } 1087 }
1088 #endif 1088 #endif
1089 */ 1089 */
  1090 +
  1091 +LIB3270_EXPORT void lib3270_free(void *p)
  1092 +{
  1093 + if(p)
  1094 + free(p);
  1095 +}
  1096 +
  1097 +LIB3270_EXPORT void * lib3270_realloc(void *p, int len)
  1098 +{
  1099 + p = realloc(p, len);
  1100 + if(!p)
  1101 + Error(NULL,"Out of memory");
  1102 + return p;
  1103 +}
  1104 +
  1105 +LIB3270_EXPORT void * lib3270_calloc(int elsize, int nelem, void *ptr)
  1106 +{
  1107 + size_t sz = nelem * elsize;
  1108 +
  1109 + if(ptr)
  1110 + ptr = realloc(ptr,sz);
  1111 + else
  1112 + ptr = malloc(sz);
  1113 +
  1114 + if(ptr)
  1115 + memset(ptr,0,sz);
  1116 + else
  1117 + Error(NULL,"Out of memory");
  1118 +
  1119 + return ptr;
  1120 +}
  1121 +
  1122 +
  1123 +LIB3270_EXPORT void * lib3270_malloc(int len)
  1124 +{
  1125 + char *r;
  1126 +
  1127 + r = malloc(len);
  1128 + if (r == (char *)NULL)
  1129 + {
  1130 + Error(NULL,"Out of memory");
  1131 + return 0;
  1132 + }
  1133 +
  1134 + memset(r,0,len);
  1135 + return r;
  1136 +}
  1137 +
  1138 +/*
  1139 +void * Calloc(size_t nelem, size_t elsize)
  1140 +{
  1141 + int sz = nelem * elsize;
  1142 + char * r = malloc(sz);
  1143 +
  1144 + if(!r)
  1145 + Error(NULL,"Out of memory");
  1146 +
  1147 + memset(r, 0, sz);
  1148 + return r;
  1149 +}
  1150 +*/
  1151 +
  1152 +LIB3270_EXPORT char * lib3270_get_resource_string(const char *first_element, ...)
  1153 +{
  1154 +#ifndef ANDROID
  1155 +
  1156 + #warning Work in progress
  1157 +
  1158 + char buffer[4096];
  1159 + char * ptr = buffer;
  1160 + const char * element;
  1161 + va_list args;
  1162 + const char * res;
  1163 +
  1164 + va_start(args, first_element);
  1165 +
  1166 + for(element = first_element;element;element = va_arg(args, const char *))
  1167 + {
  1168 + if(ptr != buffer)
  1169 + *(ptr++) = '.';
  1170 +
  1171 + strncpy(ptr,element,4096-strlen(buffer));
  1172 + ptr += strlen(ptr);
  1173 + }
  1174 +
  1175 + va_end(args);
  1176 +
  1177 + *ptr = 0;
  1178 +
  1179 + trace("%s: %s",__FUNCTION__,buffer);
  1180 +
  1181 + res = get_resource(buffer);
  1182 + if(res)
  1183 + return strdup(res);
  1184 +#endif
  1185 + return NULL;
  1186 +}