Commit 2f31b6cee0fc316300faa9a82d95fd668f0de7c2

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

Incluindo opcao para preservar o numero de linhas da tela definido pelo usuario …

…quando o host muda para 80x25
src/include/lib3270.h
@@ -110,6 +110,7 @@ @@ -110,6 +110,7 @@
110 LIB3270_TOGGLE_KP_ALTERNATIVE, /**< Keypad +/- move to next/previous field */ 110 LIB3270_TOGGLE_KP_ALTERNATIVE, /**< Keypad +/- move to next/previous field */
111 LIB3270_TOGGLE_BEEP, /**< Beep on errors */ 111 LIB3270_TOGGLE_BEEP, /**< Beep on errors */
112 LIB3270_TOGGLE_VIEW_FIELD, /**< View Field attribute */ 112 LIB3270_TOGGLE_VIEW_FIELD, /**< View Field attribute */
  113 + LIB3270_TOGGLE_ALTSCREEN, /**< auto resize on altscreen */
113 114
114 // LIB3270_TOGGLE_ALT_CURSOR, 115 // LIB3270_TOGGLE_ALT_CURSOR,
115 // LIB3270_TOGGLE_AID_WAIT, 116 // LIB3270_TOGGLE_AID_WAIT,
src/lib3270/ctlr.c
@@ -129,9 +129,6 @@ void ctlr_init(H3270 *session, unsigned cmask unused) @@ -129,9 +129,6 @@ void ctlr_init(H3270 *session, unsigned cmask unused)
129 */ 129 */
130 void ctlr_reinit(H3270 *session, unsigned cmask) 130 void ctlr_reinit(H3270 *session, unsigned cmask)
131 { 131 {
132 -// static struct ea *real_ea_buf = NULL;  
133 -// static struct ea *real_aea_buf = NULL;  
134 -  
135 if (cmask & MODEL_CHANGE) 132 if (cmask & MODEL_CHANGE)
136 { 133 {
137 /* Allocate buffers */ 134 /* Allocate buffers */
@@ -177,7 +174,7 @@ int lib3270_set_model(H3270 *hSession, int model) @@ -177,7 +174,7 @@ int lib3270_set_model(H3270 *hSession, int model)
177 174
178 ctlr_set_rows_cols(hSession,model,hSession->ov_cols,hSession->ov_rows); 175 ctlr_set_rows_cols(hSession,model,hSession->ov_cols,hSession->ov_rows);
179 ctlr_reinit(hSession,MODEL_CHANGE); 176 ctlr_reinit(hSession,MODEL_CHANGE);
180 - 177 + screen_update(hSession,0,hSession->rows*hSession->cols);
181 return 0; 178 return 0;
182 } 179 }
183 180
@@ -402,9 +399,9 @@ LIB3270_EXPORT int lib3270_get_next_unprotected(H3270 *hSession, int baddr0) @@ -402,9 +399,9 @@ LIB3270_EXPORT int lib3270_get_next_unprotected(H3270 *hSession, int baddr0)
402 return 0; 399 return 0;
403 } 400 }
404 401
405 -/*  
406 - * Perform an erase command, which may include changing the (virtual) screen  
407 - * size. 402 +/**
  403 + * Perform an erase command, which may include changing the (virtual) screen size.
  404 + *
408 */ 405 */
409 void ctlr_erase(H3270 *session, int alt) 406 void ctlr_erase(H3270 *session, int alt)
410 { 407 {
@@ -421,6 +418,7 @@ void ctlr_erase(H3270 *session, int alt) @@ -421,6 +418,7 @@ void ctlr_erase(H3270 *session, int alt)
421 { 418 {
422 /* Going from 24x80 to maximum. */ 419 /* Going from 24x80 to maximum. */
423 session->display(session); 420 session->display(session);
  421 +
424 set_viewsize(session,session->maxROWS,session->maxCOLS); 422 set_viewsize(session,session->maxROWS,session->maxCOLS);
425 } 423 }
426 else 424 else
@@ -433,7 +431,11 @@ void ctlr_erase(H3270 *session, int alt) @@ -433,7 +431,11 @@ void ctlr_erase(H3270 *session, int alt)
433 ctlr_blanks(session); 431 ctlr_blanks(session);
434 session->display(session); 432 session->display(session);
435 } 433 }
436 - set_viewsize(session,24,80); 434 +
  435 + if(lib3270_get_toggle(session,LIB3270_TOGGLE_ALTSCREEN))
  436 + set_viewsize(session,24,80);
  437 + else
  438 + set_viewsize(session,session->maxROWS,80);
437 } 439 }
438 } 440 }
439 441
@@ -441,7 +443,6 @@ void ctlr_erase(H3270 *session, int alt) @@ -441,7 +443,6 @@ void ctlr_erase(H3270 *session, int alt)
441 443
442 } 444 }
443 445
444 -  
445 /* 446 /*
446 * Interpret an incoming 3270 command. 447 * Interpret an incoming 3270 command.
447 */ 448 */
@@ -466,7 +467,7 @@ enum pds process_ds(H3270 *hSession, unsigned char *buf, int buflen) @@ -466,7 +467,7 @@ enum pds process_ds(H3270 *hSession, unsigned char *buf, int buflen)
466 case CMD_EWA: /* erase/write alternate */ 467 case CMD_EWA: /* erase/write alternate */
467 case SNA_CMD_EWA: 468 case SNA_CMD_EWA:
468 trace_ds(hSession,"EraseWriteAlternate"); 469 trace_ds(hSession,"EraseWriteAlternate");
469 - ctlr_erase(hSession,True); 470 + ctlr_erase(hSession,1);
470 if ((rv = ctlr_write(hSession,buf, buflen, True)) < 0) 471 if ((rv = ctlr_write(hSession,buf, buflen, True)) < 0)
471 return rv; 472 return rv;
472 return PDS_OKAY_NO_OUTPUT; 473 return PDS_OKAY_NO_OUTPUT;
@@ -475,7 +476,7 @@ enum pds process_ds(H3270 *hSession, unsigned char *buf, int buflen) @@ -475,7 +476,7 @@ enum pds process_ds(H3270 *hSession, unsigned char *buf, int buflen)
475 case CMD_EW: /* erase/write */ 476 case CMD_EW: /* erase/write */
476 case SNA_CMD_EW: 477 case SNA_CMD_EW:
477 trace_ds(hSession,"EraseWrite"); 478 trace_ds(hSession,"EraseWrite");
478 - ctlr_erase(hSession,False); 479 + ctlr_erase(hSession,0);
479 if ((rv = ctlr_write(hSession,buf, buflen, True)) < 0) 480 if ((rv = ctlr_write(hSession,buf, buflen, True)) < 0)
480 return rv; 481 return rv;
481 return PDS_OKAY_NO_OUTPUT; 482 return PDS_OKAY_NO_OUTPUT;
src/lib3270/sf.c
@@ -403,12 +403,12 @@ static enum pds sf_erase_reset(H3270 *hSession, unsigned char buf[], int buflen) @@ -403,12 +403,12 @@ static enum pds sf_erase_reset(H3270 *hSession, unsigned char buf[], int buflen)
403 { 403 {
404 case SF_ER_DEFAULT: 404 case SF_ER_DEFAULT:
405 trace_ds(hSession," Default\n"); 405 trace_ds(hSession," Default\n");
406 - ctlr_erase(hSession,False); 406 + ctlr_erase(hSession,0);
407 break; 407 break;
408 408
409 case SF_ER_ALT: 409 case SF_ER_ALT:
410 trace_ds(hSession," Alternate\n"); 410 trace_ds(hSession," Alternate\n");
411 - ctlr_erase(hSession,True); 411 + ctlr_erase(hSession,1);
412 break; 412 break;
413 413
414 default: 414 default:
src/lib3270/toggles.c
@@ -78,6 +78,8 @@ static const char *toggle_names[LIB3270_TOGGLE_COUNT] = @@ -78,6 +78,8 @@ static const char *toggle_names[LIB3270_TOGGLE_COUNT] =
78 "kpalternative", /**< Keypad +/- move to next/previous field */ 78 "kpalternative", /**< Keypad +/- move to next/previous field */
79 "beep", /**< Beep on errors */ 79 "beep", /**< Beep on errors */
80 "fieldattr", /**< View Field attribute */ 80 "fieldattr", /**< View Field attribute */
  81 + "altscreen", /**< auto resize on altscreen */
  82 +
81 83
82 }; 84 };
83 85
@@ -141,6 +143,12 @@ LIB3270_EXPORT int lib3270_toggle(H3270 *session, LIB3270_TOGGLE ix) @@ -141,6 +143,12 @@ LIB3270_EXPORT int lib3270_toggle(H3270 *session, LIB3270_TOGGLE ix)
141 return (int) t->value; 143 return (int) t->value;
142 } 144 }
143 145
  146 +static void toggle_altscreen(H3270 *session, struct lib3270_toggle *t, LIB3270_TOGGLE_TYPE tt)
  147 +{
  148 + if(!session->screen_alt)
  149 + set_viewsize(session,t->value ? 24 : session->maxROWS,80);
  150 +}
  151 +
144 static void toggle_monocase(H3270 *session, struct lib3270_toggle *t, LIB3270_TOGGLE_TYPE tt) 152 static void toggle_monocase(H3270 *session, struct lib3270_toggle *t, LIB3270_TOGGLE_TYPE tt)
145 { 153 {
146 session->display(session); 154 session->display(session);
@@ -165,6 +173,7 @@ void initialize_toggles(H3270 *session) @@ -165,6 +173,7 @@ void initialize_toggles(H3270 *session)
165 173
166 session->toggle[LIB3270_TOGGLE_RECTANGLE_SELECT].upcall = toggle_rectselect; 174 session->toggle[LIB3270_TOGGLE_RECTANGLE_SELECT].upcall = toggle_rectselect;
167 session->toggle[LIB3270_TOGGLE_MONOCASE].upcall = toggle_monocase; 175 session->toggle[LIB3270_TOGGLE_MONOCASE].upcall = toggle_monocase;
  176 + session->toggle[LIB3270_TOGGLE_ALTSCREEN].upcall = toggle_altscreen;
168 177
169 /* 178 /*
170 #if defined(X3270_TRACE) 179 #if defined(X3270_TRACE)
@@ -183,13 +192,11 @@ void initialize_toggles(H3270 *session) @@ -183,13 +192,11 @@ void initialize_toggles(H3270 *session)
183 LIB3270_TOGGLE_CURSOR_BLINK, 192 LIB3270_TOGGLE_CURSOR_BLINK,
184 LIB3270_TOGGLE_CURSOR_POS, 193 LIB3270_TOGGLE_CURSOR_POS,
185 LIB3270_TOGGLE_BEEP, 194 LIB3270_TOGGLE_BEEP,
  195 + LIB3270_TOGGLE_ALTSCREEN,
186 }; 196 };
187 197
188 for(f=0;f< (sizeof(active_by_default)/sizeof(active_by_default[0])); f++) 198 for(f=0;f< (sizeof(active_by_default)/sizeof(active_by_default[0])); f++)
189 - {  
190 session->toggle[active_by_default[f]].value = True; 199 session->toggle[active_by_default[f]].value = True;
191 - }  
192 -  
193 200
194 for(f=0;f<LIB3270_TOGGLE_COUNT;f++) 201 for(f=0;f<LIB3270_TOGGLE_COUNT;f++)
195 { 202 {
ui/00default.xml
@@ -120,6 +120,7 @@ @@ -120,6 +120,7 @@
120 <menuitem action='toggle' id='Monocase' label='Monocase' /> 120 <menuitem action='toggle' id='Monocase' label='Monocase' />
121 <menuitem action='toggle' id='CursorPos' label='Track Cursor' /> 121 <menuitem action='toggle' id='CursorPos' label='Track Cursor' />
122 <menuitem action='toggle' id='FullScreen' key='<alt>Home' label='Full Screen' /> 122 <menuitem action='toggle' id='FullScreen' key='<alt>Home' label='Full Screen' />
  123 + <menuitem action='toggle' id='AltScreen' label='Resize on alternate screen' />
123 <menuitem action='toggle' id='MarginedPaste' label='Paste with left margin' /> 124 <menuitem action='toggle' id='MarginedPaste' label='Paste with left margin' />
124 <menuitem action='toggle' id='CrossHair' key='<alt>x' label='Cross Hair Cursor' /> 125 <menuitem action='toggle' id='CrossHair' key='<alt>x' label='Cross Hair Cursor' />
125 <menuitem action='toggle' id='BlankFill' label='Blank Fill' /> 126 <menuitem action='toggle' id='BlankFill' label='Blank Fill' />