Commit 8ffe1bd5202384dcb1a1178eb56f47c07a2f32f0

Authored by Perry Werneck
1 parent 378afd68

Fixing win32 warnings.

Showing 1 changed file with 98 additions and 70 deletions   Show diff stats
src/lib3270/kybd.c
... ... @@ -131,6 +131,7 @@ struct akeysym
131 131 #define ak_eq(k1, k2) (((k1).keysym == (k2).keysym) && \
132 132 ((k1).keytype == (k2).keytype))
133 133  
  134 +
134 135 struct ta
135 136 {
136 137 struct ta *next;
... ... @@ -139,25 +140,29 @@ struct ta
139 140 {
140 141 TA_TYPE_DEFAULT,
141 142 TA_TYPE_KEY_AID,
  143 + TA_TYPE_ACTION,
142 144 TA_TYPE_USER
143 145 } type;
144 146  
145   - void (*fn)(H3270 *, const char *, const char *);
146   - char *parm[2];
147   - unsigned char aid_code;
148   -};
  147 + union
  148 + {
  149 + unsigned char aid_code;
  150 + struct
  151 + {
  152 + void (*fn)(H3270 *, const char *, const char *);
  153 + char *parm[2];
  154 + } def;
  155 +
  156 + int (*action)(H3270 *);
  157 +
  158 + } args;
149 159  
150   -#if defined(DEBUG)
151   - #define ENQUEUE_ACTION(x) enq_ta(hSession, (void (*)(H3270 *, const char *, const char *)) x, NULL, NULL, #x)
152   -#else
153   - #define ENQUEUE_ACTION(x) enq_ta(hSession, (void (*)(H3270 *, const char *, const char *)) x, NULL, NULL)
154   -#endif // DEBUG
  160 +};
155 161  
156 162 static const char dxl[] = "0123456789abcdef";
157 163 #define FROM_HEX(c) (strchr(dxl, tolower(c)) - dxl)
158 164 #define KYBDLOCK_IS_OERR(hSession) (hSession->kybdlock && !(hSession->kybdlock & ~KL_OERR_MASK))
159 165  
160   -
161 166 /*
162 167 * Check if the typeahead queue is available
163 168 */
... ... @@ -196,8 +201,8 @@ static int enq_chk(H3270 *hSession)
196 201 return 0;
197 202 }
198 203  
199   -/*
200   - * Put a "Key-aid" on the typeahead queue
  204 +/**
  205 + * @brief Put a "Key-aid" on the typeahead queue
201 206 */
202 207 static void enq_key(H3270 *session, unsigned char aid_code)
203 208 {
... ... @@ -207,9 +212,9 @@ static int enq_chk(H3270 *hSession)
207 212 return;
208 213  
209 214 ta = (struct ta *) lib3270_malloc(sizeof(*ta));
210   - ta->next = (struct ta *) NULL;
211   - ta->type = TA_TYPE_KEY_AID;
212   - ta->aid_code = aid_code;
  215 + ta->next = (struct ta *) NULL;
  216 + ta->type = TA_TYPE_KEY_AID;
  217 + ta->args.aid_code = aid_code;
213 218  
214 219 trace("Adding key %02x on queue",(int) aid_code);
215 220  
... ... @@ -227,34 +232,28 @@ static int enq_chk(H3270 *hSession)
227 232 lib3270_trace_event(session," Key-aid queued (kybdlock 0x%x)\n", session->kybdlock);
228 233 }
229 234  
230   -/*
231   - * Put an action on the typeahead queue.
  235 +
  236 +
  237 +/**
  238 + * @brief Put an action on the typeahead queue.
232 239 */
233   -#if defined(DEBUG)
234   -static void enq_ta(H3270 *hSession, void (*fn)(H3270 *, const char *, const char *), const char *parm1, const char *parm2, const char *name)
235   -#else
236 240 static void enq_ta(H3270 *hSession, void (*fn)(H3270 *, const char *, const char *), const char *parm1, const char *parm2)
237   -#endif // DEBUG
238 241 {
239 242 struct ta *ta;
240 243  
241   - CHECK_SESSION_HANDLE(hSession);
242   -
243   - trace("%s: %s",__FUNCTION__,name);
244   -
245 244 if(enq_chk(hSession))
246 245 return;
247 246  
248 247 ta = (struct ta *) lib3270_malloc(sizeof(*ta));
249   - ta->next = (struct ta *) NULL;
250   - ta->type = TA_TYPE_DEFAULT;
251   - ta->fn = fn;
  248 + ta->next = (struct ta *) NULL;
  249 + ta->type = TA_TYPE_DEFAULT;
  250 + ta->args.def.fn = fn;
252 251  
253 252 if (parm1)
254   - ta->parm[0] = NewString(parm1);
  253 + ta->args.def.parm[0] = NewString(parm1);
255 254  
256 255 if (parm2)
257   - ta->parm[1] = NewString(parm2);
  256 + ta->args.def.parm[1] = NewString(parm2);
258 257  
259 258 if(hSession->ta_head)
260 259 {
... ... @@ -270,8 +269,35 @@ static void enq_ta(H3270 *hSession, void (*fn)(H3270 *, const char *, const char
270 269 lib3270_trace_event(hSession," action queued (kybdlock 0x%x)\n", hSession->kybdlock);
271 270 }
272 271  
273   -/*
274   - * Execute an action from the typeahead queue.
  272 +static void enq_action(H3270 *hSession, int (*fn)(H3270 *))
  273 +{
  274 + struct ta *ta;
  275 +
  276 + if(enq_chk(hSession))
  277 + return;
  278 +
  279 + ta = (struct ta *) lib3270_malloc(sizeof(*ta));
  280 + ta->next = (struct ta *) NULL;
  281 + ta->type = TA_TYPE_ACTION;
  282 + ta->args.action = fn;
  283 +
  284 + if(hSession->ta_head)
  285 + {
  286 + hSession->ta_tail->next = ta;
  287 + }
  288 + else
  289 + {
  290 + hSession->ta_head = ta;
  291 + status_typeahead(hSession,True);
  292 + }
  293 + hSession->ta_tail = ta;
  294 +
  295 + lib3270_trace_event(hSession," action queued (kybdlock 0x%x)\n", hSession->kybdlock);
  296 +}
  297 +
  298 +
  299 +/**
  300 + * @brief Execute an action from the typeahead queue.
275 301 */
276 302 int run_ta(H3270 *hSession)
277 303 {
... ... @@ -289,14 +315,17 @@ int run_ta(H3270 *hSession)
289 315 switch(ta->type)
290 316 {
291 317 case TA_TYPE_DEFAULT:
292   - ta->fn(hSession,ta->parm[0],ta->parm[1]);
293   - lib3270_free(ta->parm[0]);
294   - lib3270_free(ta->parm[1]);
  318 + ta->args.def.fn(hSession,ta->args.def.parm[0],ta->args.def.parm[1]);
  319 + lib3270_free(ta->args.def.parm[0]);
  320 + lib3270_free(ta->args.def.parm[1]);
  321 + break;
  322 +
  323 + case TA_TYPE_ACTION:
  324 + ta->args.action(hSession);
295 325 break;
296 326  
297 327 case TA_TYPE_KEY_AID:
298   -// trace("Sending enqueued key %02x",ta->aid_code);
299   - key_AID(hSession,ta->aid_code);
  328 + key_AID(hSession,ta->args.aid_code);
300 329 break;
301 330  
302 331 default:
... ... @@ -309,9 +338,9 @@ int run_ta(H3270 *hSession)
309 338 return 1;
310 339 }
311 340  
312   -/*
313   - * Flush the typeahead queue.
314   - * Returns whether or not anything was flushed.
  341 +/**
  342 + * @brief Flush the typeahead queue.
  343 + * @return whether or not anything was flushed.
315 344 */
316 345 static int flush_ta(H3270 *hSession)
317 346 {
... ... @@ -320,8 +349,11 @@ static int flush_ta(H3270 *hSession)
320 349  
321 350 for (ta = hSession->ta_head; ta != (struct ta *) NULL; ta = next)
322 351 {
323   - lib3270_free(ta->parm[0]);
324   - lib3270_free(ta->parm[1]);
  352 + if(ta->type == TA_TYPE_DEFAULT)
  353 + {
  354 + lib3270_free(ta->args.def.parm[0]);
  355 + lib3270_free(ta->args.def.parm[1]);
  356 + }
325 357 next = ta->next;
326 358 lib3270_free(ta);
327 359 any++;
... ... @@ -740,11 +772,7 @@ static Boolean key_Character(H3270 *hSession, int code, Boolean with_ge, Boolean
740 772  
741 773 (void) sprintf(codename, "%d", code |(with_ge ? GE_WFLAG : 0) | (pasting ? PASTE_WFLAG : 0));
742 774  
743   -#if defined(DEBUG)
744   - enq_ta(hSession,key_Character_wrapper, codename, CN, "key_Character_wrapper");
745   -#else
746 775 enq_ta(hSession,key_Character_wrapper, codename, CN);
747   -#endif // DEBUG
748 776  
749 777 return False;
750 778 }
... ... @@ -1031,7 +1059,7 @@ LIB3270_EXPORT int lib3270_nextfield(H3270 *hSession)
1031 1059 status_reset(hSession);
1032 1060 } else
1033 1061 {
1034   - ENQUEUE_ACTION(lib3270_nextfield);
  1062 + enq_action(hSession, lib3270_nextfield);
1035 1063 return 0;
1036 1064 }
1037 1065 }
... ... @@ -1079,7 +1107,7 @@ LIB3270_EXPORT int lib3270_previousfield(H3270 *hSession)
1079 1107 }
1080 1108 else
1081 1109 {
1082   - ENQUEUE_ACTION(lib3270_previousfield);
  1110 + enq_action(hSession, lib3270_previousfield);
1083 1111 return 0;
1084 1112 }
1085 1113 }
... ... @@ -1202,7 +1230,7 @@ LIB3270_EXPORT int lib3270_firstfield(H3270 *hSession)
1202 1230  
1203 1231 if (hSession->kybdlock)
1204 1232 {
1205   - ENQUEUE_ACTION(lib3270_firstfield);
  1233 + enq_action(hSession, lib3270_firstfield);
1206 1234 return 0;
1207 1235 }
1208 1236 #if defined(X3270_ANSI) /*[*/
... ... @@ -1250,7 +1278,7 @@ LIB3270_EXPORT int lib3270_cursor_left(H3270 *hSession)
1250 1278 }
1251 1279 else
1252 1280 {
1253   - ENQUEUE_ACTION(lib3270_cursor_left);
  1281 + enq_action(hSession, lib3270_cursor_left);
1254 1282 return 0;
1255 1283 }
1256 1284 }
... ... @@ -1380,7 +1408,7 @@ LIB3270_EXPORT int lib3270_delete(H3270 *hSession)
1380 1408  
1381 1409 if (hSession->kybdlock)
1382 1410 {
1383   - ENQUEUE_ACTION(lib3270_delete);
  1411 + enq_action(hSession, lib3270_delete);
1384 1412 return 0;
1385 1413 }
1386 1414 #if defined(X3270_ANSI) /*[*/
... ... @@ -1413,7 +1441,7 @@ LIB3270_EXPORT int lib3270_backspace(H3270 *hSession)
1413 1441  
1414 1442 if (hSession->kybdlock)
1415 1443 {
1416   - ENQUEUE_ACTION( lib3270_backspace );
  1444 + enq_action(hSession, lib3270_backspace );
1417 1445 return 0;
1418 1446 }
1419 1447 #if defined(X3270_ANSI) /*[*/
... ... @@ -1508,7 +1536,7 @@ int lib3270_erase(H3270 *hSession)
1508 1536  
1509 1537 if (hSession->kybdlock)
1510 1538 {
1511   - ENQUEUE_ACTION(lib3270_erase);
  1539 + enq_action(hSession, lib3270_erase);
1512 1540 return 0;
1513 1541 }
1514 1542 #if defined(X3270_ANSI) /*[*/
... ... @@ -1541,7 +1569,7 @@ LIB3270_EXPORT int lib3270_cursor_right(H3270 *hSession)
1541 1569 }
1542 1570 else
1543 1571 {
1544   - ENQUEUE_ACTION(lib3270_cursor_right);
  1572 + enq_action(hSession, lib3270_cursor_right);
1545 1573 return 0;
1546 1574 }
1547 1575 }
... ... @@ -1580,7 +1608,7 @@ LIB3270_EXPORT int lib3270_previousword(H3270 *hSession)
1580 1608 FAIL_IF_NOT_ONLINE(hSession);
1581 1609  
1582 1610 if (hSession->kybdlock) {
1583   - ENQUEUE_ACTION(lib3270_previousword);
  1611 + enq_action(hSession, lib3270_previousword);
1584 1612 // enq_ta(PreviousWord_action, CN, CN);
1585 1613 return 0;
1586 1614 }
... ... @@ -1703,7 +1731,7 @@ LIB3270_EXPORT int lib3270_nextword(H3270 *hSession)
1703 1731 FAIL_IF_NOT_ONLINE(hSession);
1704 1732  
1705 1733 if (hSession->kybdlock) {
1706   - ENQUEUE_ACTION( lib3270_nextword );
  1734 + enq_action(hSession, lib3270_nextword );
1707 1735 // enq_ta(NextWord_action, CN, CN);
1708 1736 return 0;
1709 1737 }
... ... @@ -1868,7 +1896,7 @@ LIB3270_EXPORT int lib3270_cursor_up(H3270 *hSession)
1868 1896 }
1869 1897 else
1870 1898 {
1871   - ENQUEUE_ACTION(lib3270_cursor_up);
  1899 + enq_action(hSession, lib3270_cursor_up);
1872 1900 return 0;
1873 1901 }
1874 1902 }
... ... @@ -1905,7 +1933,7 @@ LIB3270_EXPORT int lib3270_cursor_down(H3270 *hSession)
1905 1933 status_reset(hSession);
1906 1934 } else
1907 1935 {
1908   - ENQUEUE_ACTION(lib3270_cursor_down);
  1936 + enq_action(hSession, lib3270_cursor_down);
1909 1937 // enq_ta(Down_action, CN, CN);
1910 1938 return 0;
1911 1939 }
... ... @@ -1934,7 +1962,7 @@ LIB3270_EXPORT int lib3270_newline(H3270 *hSession)
1934 1962  
1935 1963 if (hSession->kybdlock)
1936 1964 {
1937   - ENQUEUE_ACTION(lib3270_newline);
  1965 + enq_action(hSession, lib3270_newline);
1938 1966 return 0;
1939 1967 }
1940 1968 #if defined(X3270_ANSI) /*[*/
... ... @@ -1965,7 +1993,7 @@ LIB3270_EXPORT int lib3270_dup(H3270 *hSession)
1965 1993  
1966 1994 if (hSession->kybdlock)
1967 1995 {
1968   - ENQUEUE_ACTION(lib3270_dup);
  1996 + enq_action(hSession, lib3270_dup);
1969 1997 return 0;
1970 1998 }
1971 1999 #if defined(X3270_ANSI)
... ... @@ -1990,7 +2018,7 @@ LIB3270_EXPORT int lib3270_fieldmark(H3270 *hSession)
1990 2018  
1991 2019 if (hSession->kybdlock)
1992 2020 {
1993   - ENQUEUE_ACTION(lib3270_fieldmark);
  2021 + enq_action(hSession, lib3270_fieldmark);
1994 2022 return 0;
1995 2023 }
1996 2024 #if defined(X3270_ANSI)
... ... @@ -2021,7 +2049,7 @@ LIB3270_EXPORT int lib3270_enter(H3270 *hSession)
2021 2049 }
2022 2050 else if (hSession->kybdlock)
2023 2051 {
2024   - ENQUEUE_ACTION(lib3270_enter);
  2052 + enq_action(hSession, lib3270_enter);
2025 2053 }
2026 2054 else
2027 2055 {
... ... @@ -2052,7 +2080,7 @@ LIB3270_EXPORT int lib3270_sysreq(H3270 *hSession)
2052 2080 if (hSession->kybdlock & KL_OIA_MINUS)
2053 2081 return 0;
2054 2082 else if (hSession->kybdlock)
2055   - ENQUEUE_ACTION(lib3270_sysreq);
  2083 + enq_action(hSession, lib3270_sysreq);
2056 2084 else
2057 2085 key_AID(hSession,AID_SYSREQ);
2058 2086 }
... ... @@ -2069,7 +2097,7 @@ LIB3270_EXPORT int lib3270_clear(H3270 *hSession)
2069 2097 if (hSession->kybdlock & KL_OIA_MINUS)
2070 2098 return 0;
2071 2099 if (hSession->kybdlock && CONNECTED) {
2072   - ENQUEUE_ACTION(lib3270_clear);
  2100 + enq_action(hSession, lib3270_clear);
2073 2101 return 0;
2074 2102 }
2075 2103 #if defined(X3270_ANSI) /*[*/
... ... @@ -2100,7 +2128,7 @@ LIB3270_EXPORT int lib3270_eraseeol(H3270 *hSession)
2100 2128 // reset_idle_timer();
2101 2129 if (hSession->kybdlock)
2102 2130 {
2103   - ENQUEUE_ACTION(lib3270_eraseeol);
  2131 + enq_action(hSession, lib3270_eraseeol);
2104 2132 return 0;
2105 2133 }
2106 2134 #if defined(X3270_ANSI) /*[*/
... ... @@ -2168,7 +2196,7 @@ LIB3270_EXPORT int lib3270_eraseeof(H3270 *hSession)
2168 2196 // reset_idle_timer();
2169 2197 if (hSession->kybdlock)
2170 2198 {
2171   - ENQUEUE_ACTION(lib3270_eraseeof);
  2199 + enq_action(hSession, lib3270_eraseeof);
2172 2200 return 0;
2173 2201 }
2174 2202 #if defined(X3270_ANSI) /*[*/
... ... @@ -2219,7 +2247,7 @@ LIB3270_EXPORT int lib3270_eraseinput(H3270 *hSession)
2219 2247  
2220 2248 // reset_idle_timer();
2221 2249 if (hSession->kybdlock) {
2222   - ENQUEUE_ACTION( lib3270_eraseinput );
  2250 + enq_action(hSession, lib3270_eraseinput );
2223 2251 return 0;
2224 2252 }
2225 2253 #if defined(X3270_ANSI) /*[*/
... ... @@ -2284,7 +2312,7 @@ LIB3270_EXPORT int lib3270_deleteword(H3270 *hSession)
2284 2312  
2285 2313 // reset_idle_timer();
2286 2314 if (hSession->kybdlock) {
2287   - ENQUEUE_ACTION(lib3270_deleteword);
  2315 + enq_action(hSession, lib3270_deleteword);
2288 2316 // enq_ta(DeleteWord_action, CN, CN);
2289 2317 return 0;
2290 2318 }
... ... @@ -2353,7 +2381,7 @@ LIB3270_EXPORT int lib3270_deletefield(H3270 *hSession)
2353 2381  
2354 2382 // reset_idle_timer();
2355 2383 if (hSession->kybdlock) {
2356   - ENQUEUE_ACTION(lib3270_deletefield);
  2384 + enq_action(hSession, lib3270_deletefield);
2357 2385 // enq_ta(DeleteField_action, CN, CN);
2358 2386 return 0;
2359 2387 }
... ... @@ -2399,7 +2427,7 @@ LIB3270_EXPORT int lib3270_fieldend(H3270 *hSession)
2399 2427  
2400 2428 if (hSession->kybdlock)
2401 2429 {
2402   - ENQUEUE_ACTION( lib3270_fieldend );
  2430 + enq_action(hSession, lib3270_fieldend );
2403 2431 return 0;
2404 2432 }
2405 2433  
... ...