Commit bb0cb9d34893298b587d88d9b03524c25160acb8

Authored by perry.werneck@gmail.com
1 parent 59cc5797

Implementando indicador de insert, otimizando toggles

appres.h
... ... @@ -30,13 +30,12 @@ struct toggle {
30 30 // Widget w[2]; /* the menu item widgets */
31 31 // const char *label[2]; /* labels */
32 32 void (*upcall)(H3270 *, struct toggle *, LIB3270_TOGGLE_TYPE); /* change value */
33   - void (*callback)(H3270 *, int, LIB3270_TOGGLE_TYPE);
  33 +// void (*callback)(H3270 *, int, LIB3270_TOGGLE_TYPE);
34 34  
35 35 };
36 36  
37 37 #define toggled(ix) (appres.toggle[ix].value)
38   -#define toggle_toggle(t) \
39   - { (t)->value = !(t)->value; }
  38 +// #define toggle_toggle(t) { (t)->value = !(t)->value; }
40 39  
41 40 /* Application resources */
42 41  
... ...
kybd.c
... ... @@ -18,7 +18,7 @@
18 18 * programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple
19 19 * Place, Suite 330, Boston, MA, 02111-1307, USA
20 20 *
21   - * Este programa está nomeado como kybd.c e possui 4414 linhas de código.
  21 + * Este programa está nomeado como kybd.c e possui - linhas de código.
22 22 *
23 23 * Contatos:
24 24 *
... ... @@ -98,8 +98,7 @@ static unsigned char pa_xlate[] = {
98 98 static unsigned long unlock_id;
99 99 static time_t unlock_delay_time;
100 100 #define UNLOCK_MS 350 /* 0.35s after last unlock */
101   -static Boolean key_Character(int code, Boolean with_ge, Boolean pasting,
102   - Boolean *skipped);
  101 +static Boolean key_Character(int code, Boolean with_ge, Boolean pasting,Boolean *skipped);
103 102 static Boolean flush_ta(void);
104 103 static void key_AID(unsigned char aid_code);
105 104 static void kybdlock_set(unsigned int bits, const char *cause);
... ... @@ -527,10 +526,11 @@ key_AID(unsigned char aid_code)
527 526 /* Act as if the host had written our input. */
528 527 h3270.buffer_addr = h3270.cursor_addr;
529 528 }
530   - if (!IN_SSCP || aid_code != AID_CLEAR) {
  529 + if (!IN_SSCP || aid_code != AID_CLEAR)
  530 + {
531 531 status_twait(&h3270);
532 532 mcursor_waiting(&h3270);
533   - set_toggle(INSERT,0);
  533 + lib3270_set_toggle(&h3270,LIB3270_TOGGLE_INSERT,0);
534 534 kybdlock_set(KL_OIA_TWAIT | KL_OIA_LOCKED, "key_AID");
535 535 }
536 536 aid = aid_code;
... ... @@ -745,15 +745,12 @@ key_Character_wrapper(Widget w unused, XEvent *event unused, String *params,
745 745 * Handle an ordinary displayable character key. Lots of stuff to handle
746 746 * insert-mode, protected fields and etc.
747 747 */
748   -static Boolean
749   -key_Character(int code, Boolean with_ge, Boolean pasting, Boolean *skipped)
  748 +static Boolean key_Character(int code, Boolean with_ge, Boolean pasting, Boolean *skipped)
750 749 {
751 750 register int baddr, faddr, xaddr;
752 751 register unsigned char fa;
753 752 enum dbcs_why why;
754 753  
755   -// reset_idle_timer();
756   -
757 754 if (skipped != NULL)
758 755 *skipped = False;
759 756  
... ... @@ -798,7 +795,7 @@ key_Character(int code, Boolean with_ge, Boolean pasting, Boolean *skipped)
798 795 /* Add the character. */
799 796 if (h3270.ea_buf[baddr].cc == EBC_so) {
800 797  
801   - if (toggled(INSERT)) {
  798 + if (toggled(LIB3270_TOGGLE_INSERT)) {
802 799 if (!ins_prep(faddr, baddr, 1))
803 800 return False;
804 801 } else {
... ... @@ -835,7 +832,7 @@ key_Character(int code, Boolean with_ge, Boolean pasting, Boolean *skipped)
835 832 /* fall through... */
836 833 case DBCS_LEFT:
837 834 if (why == DBCS_ATTRIBUTE) {
838   - if (toggled(INSERT)) {
  835 + if (toggled(LIB3270_TOGGLE_INSERT)) {
839 836 if (!ins_prep(faddr, baddr, 1))
840 837 return False;
841 838 } else {
... ... @@ -852,7 +849,7 @@ key_Character(int code, Boolean with_ge, Boolean pasting, Boolean *skipped)
852 849 } else {
853 850 Boolean was_si;
854 851  
855   - if (toggled(INSERT)) {
  852 + if (toggled(LIB3270_TOGGLE_INSERT)) {
856 853 /*
857 854 * Inserting SBCS into a DBCS subfield.
858 855 * If this is the first position, we
... ... @@ -909,7 +906,7 @@ key_Character(int code, Boolean with_ge, Boolean pasting, Boolean *skipped)
909 906 break;
910 907 default:
911 908 case DBCS_NONE:
912   - if (toggled(INSERT) && !ins_prep(faddr, baddr, 1))
  909 + if (toggled(LIB3270_TOGGLE_INSERT) && !ins_prep(faddr, baddr, 1))
913 910 return False;
914 911 break;
915 912 }
... ... @@ -1292,73 +1289,28 @@ retry:
1292 1289 */
1293 1290 void key_ACharacter(unsigned char c, enum keytype keytype, enum iaction cause,Boolean *skipped)
1294 1291 {
1295   -// register int i;
1296   -// struct akeysym ak;
1297   -
1298   -// reset_idle_timer();
1299   -
1300 1292 if (skipped != NULL)
1301 1293 *skipped = False;
1302 1294  
1303   -// ak.keysym = c;
1304   -// ak.keytype = keytype;
  1295 + trace_event(" %s -> Key(\"%s\")\n",ia_name[(int) cause], ctl_see((int) c));
1305 1296  
1306   -/*
1307   - switch (composing) {
1308   - case NONE:
1309   - break;
1310   - case COMPOSE:
1311   - for (i = 0; i < n_composites; i++)
1312   - if (ak_eq(composites[i].k1, ak) ||
1313   - ak_eq(composites[i].k2, ak))
1314   - break;
1315   - if (i < n_composites) {
1316   - cc_first.keysym = c;
1317   - cc_first.keytype = keytype;
1318   - composing = FIRST;
1319   - status_compose(True, c, keytype);
1320   - } else {
1321   - lib3270_ring_bell();
1322   - composing = NONE;
1323   - status_compose(False, 0, KT_STD);
1324   - }
1325   - return;
1326   - case FIRST:
1327   - composing = NONE;
1328   - status_compose(False, 0, KT_STD);
1329   - for (i = 0; i < n_composites; i++)
1330   - if ((ak_eq(composites[i].k1, cc_first) &&
1331   - ak_eq(composites[i].k2, ak)) ||
1332   - (ak_eq(composites[i].k1, ak) &&
1333   - ak_eq(composites[i].k2, cc_first)))
1334   - break;
1335   - if (i < n_composites) {
1336   - c = composites[i].translation.keysym;
1337   - keytype = composites[i].translation.keytype;
1338   - } else {
1339   - lib3270_ring_bell();
1340   - return;
1341   - }
1342   - break;
1343   - }
1344   -*/
1345   -
1346   - trace_event(" %s -> Key(\"%s\")\n",
1347   - ia_name[(int) cause], ctl_see((int) c));
1348   - if (IN_3270) {
1349   - if (c < ' ') {
  1297 + if (IN_3270)
  1298 + {
  1299 + if (c < ' ')
  1300 + {
1350 1301 trace_event(" dropped (control char)\n");
1351 1302 return;
1352 1303 }
1353   - (void) key_Character((int) asc2ebc[c], keytype == KT_GE, False,
1354   - skipped);
  1304 + (void) key_Character((int) asc2ebc[c], keytype == KT_GE, False, skipped);
1355 1305 }
1356 1306 #if defined(X3270_ANSI) /*[*/
1357   - else if (IN_ANSI) {
  1307 + else if (IN_ANSI)
  1308 + {
1358 1309 net_sendc((char) c);
1359 1310 }
1360 1311 #endif /*]*/
1361   - else {
  1312 + else
  1313 + {
1362 1314 trace_event(" dropped (not connected)\n");
1363 1315 }
1364 1316 }
... ... @@ -1533,7 +1485,7 @@ do_reset(Boolean explicit)
1533 1485 }
1534 1486  
1535 1487 /* Always clear insert mode. */
1536   - set_toggle(INSERT,0);
  1488 + lib3270_set_toggle(&h3270,LIB3270_TOGGLE_INSERT,0);
1537 1489  
1538 1490 /* Otherwise, if not connect, reset is a no-op. */
1539 1491 if (!CONNECTED)
... ...
paste.c
... ... @@ -133,14 +133,14 @@
133 133 return -1;
134 134 }
135 135  
136   - static int paste_char(PASTE_DATA *data, unsigned char c)
  136 + static int paste_char(H3270 *session, PASTE_DATA *data, unsigned char c)
137 137 {
138 138  
139 139 if(toggled(SMART_PASTE))
140 140 {
141   - int faddr = find_field_attribute(&h3270,h3270.cursor_addr);
142   - if(FA_IS_PROTECTED(h3270.ea_buf[faddr].fa))
143   - h3270.cursor_addr++;
  141 + int faddr = find_field_attribute(session,session->cursor_addr);
  142 + if(FA_IS_PROTECTED(session->ea_buf[faddr].fa))
  143 + session->cursor_addr++;
144 144 else
145 145 key_ACharacter(c, KT_STD, IA_PASTE, NULL);
146 146 }
... ... @@ -197,7 +197,7 @@ LIB3270_EXPORT int lib3270_set_string(H3270 *h, const unsigned char *str)
197 197 switch(*str)
198 198 {
199 199 case '\t':
200   - last = paste_char(&data, ' ');
  200 + last = paste_char(h,&data, ' ');
201 201 break;
202 202  
203 203 case '\n':
... ... @@ -218,7 +218,7 @@ LIB3270_EXPORT int lib3270_set_string(H3270 *h, const unsigned char *str)
218 218 break;
219 219  
220 220 default:
221   - last = paste_char(&data, *str);
  221 + last = paste_char(h,&data, *str);
222 222  
223 223 }
224 224 str++;
... ...
toggle.h
... ... @@ -59,14 +59,14 @@
59 59 #define AID_WAIT LIB3270_TOGGLE_AID_WAIT
60 60 #define FULL_SCREEN LIB3270_TOGGLE_FULL_SCREEN
61 61 #define RECONNECT LIB3270_TOGGLE_RECONNECT
62   - #define INSERT LIB3270_TOGGLE_INSERT
  62 +// #define INSERT LIB3270_TOGGLE_INSERT
63 63 #define KEYPAD LIB3270_TOGGLE_KEYPAD
64 64 #define SMART_PASTE LIB3270_TOGGLE_SMART_PASTE
65 65 #define N_TOGGLES LIB3270_TOGGLE_COUNT
66 66  
67 67 #define LIB3270_TOGGLE_ID LIB3270_TOGGLE
68 68  
69   - #define register_3270_toggle_monitor(ix,callback) lib3270_register_tchange(NULL,ix,callback)
  69 +// #define register_3270_toggle_monitor(ix,callback) lib3270_register_tchange(NULL,ix,callback)
70 70 #define get_3270_toggle_by_name(x) lib3270_get_toggle_id(x)
71 71  
72 72 // Compatibility macros
... ... @@ -75,7 +75,7 @@
75 75  
76 76 #define get_3270_toggle_name(ix) lib3270_get_toggle_name(ix)
77 77 #define get_toggle_name(ix) lib3270_get_toggle_name(ix)
78   - #define set_toggle(ix,value) lib3270_set_toggle(NULL,ix,value)
  78 +// #define set_toggle(ix,value) lib3270_set_toggle(NULL,ix,value)
79 79 #define get_toggle_by_name(name) lib3270_get_toggle_id(name)
80 80  
81 81 #endif /* TOGGLE3270_H_INCLUDED */
... ...
toggles.c
... ... @@ -79,6 +79,7 @@ static const char *toggle_names[LIB3270_TOGGLE_COUNT] =
79 79 };
80 80  
81 81  
  82 +/*
82 83 static void no_callback(H3270 *h, int value, LIB3270_TOGGLE_TYPE reason)
83 84 {
84 85 }
... ... @@ -106,6 +107,7 @@ LIB3270_EXPORT int lib3270_register_tchange(H3270 *h, LIB3270_TOGGLE_ID ix, void
106 107  
107 108 return 0;
108 109 }
  110 +*/
109 111  
110 112 LIB3270_EXPORT unsigned char lib3270_get_toggle(H3270 *session, LIB3270_TOGGLE ix)
111 113 {
... ... @@ -117,54 +119,46 @@ LIB3270_EXPORT unsigned char lib3270_get_toggle(H3270 *session, LIB3270_TOGGLE i
117 119 }
118 120  
119 121 /*
120   - * Generic toggle stuff
  122 + * Call the internal update routine
121 123 */
122   -static void do_toggle_reason(H3270 *session, LIB3270_TOGGLE ix, LIB3270_TOGGLE_TYPE reason)
  124 +static void toggle_notify(H3270 *session, struct toggle *t, LIB3270_TOGGLE ix)
123 125 {
124   - struct toggle *t = &appres.toggle[ix];
125   -
126   - /*
127   - * Change the value, call the internal update routine, and reset the
128   - * menu label(s).
129   - */
130   - toggle_toggle(t);
131   - t->upcall(session, t, reason);
132   - t->callback(session,t->value, (int) reason);
  126 + t->upcall(session, t, TT_INTERACTIVE);
  127 +// t->callback(session,t->value, (int) TT_INTERACTIVE);
133 128  
134 129 if(session->update_toggle)
135   - session->update_toggle(session,ix,t->value,reason,toggle_names[ix]);
  130 + session->update_toggle(session,ix,t->value,TT_INTERACTIVE,toggle_names[ix]);
136 131  
137 132 }
138 133  
139   -LIB3270_EXPORT int lib3270_set_toggle(H3270 *session, LIB3270_TOGGLE ix, int value)
  134 +LIB3270_EXPORT void lib3270_set_toggle(H3270 *session, LIB3270_TOGGLE ix, int value)
140 135 {
141   - Boolean v = ((Boolean) (value != 0)); // Convert int in Boolean
142   -
143 136 struct toggle *t;
144 137  
145 138 CHECK_SESSION_HANDLE(session);
146 139  
147 140 if(ix < 0 || ix >= LIB3270_TOGGLE_COUNT)
148   - return 0;
  141 + return;
149 142  
150 143 t = &appres.toggle[ix];
  144 + t->value = (value != 0);
151 145  
152   - if(t->value == v)
153   - return 0;
154   -
155   - do_toggle_reason(session, ix, TT_INTERACTIVE);
156   -
157   - return -1;
  146 + toggle_notify(session,t,ix);
158 147 }
159 148  
160 149 LIB3270_EXPORT int lib3270_toggle(H3270 *session, LIB3270_TOGGLE ix)
161 150 {
  151 + struct toggle *t;
  152 +
162 153 CHECK_SESSION_HANDLE(session);
163 154  
164 155 if(ix < 0 || ix >= LIB3270_TOGGLE_COUNT)
165   - return EINVAL;
  156 + return;
  157 +
  158 + t = &appres.toggle[ix];
166 159  
167   - do_toggle_reason(session, ix, TT_INTERACTIVE);
  160 + t->value = !t->value;
  161 + toggle_notify(session,t,ix);
168 162  
169 163 return 0;
170 164 }
... ... @@ -183,7 +177,7 @@ void initialize_toggles(H3270 *session, struct toggle *toggle)
183 177  
184 178 for(f=0;f<LIB3270_TOGGLE_COUNT;f++)
185 179 {
186   - toggle[f].callback = no_callback;
  180 +// toggle[f].callback = no_callback;
187 181 toggle[f].upcall = toggle_nop;
188 182 }
189 183  
... ...