Commit 07217a0d10aaeda999e2a13cf2b7ee5e07a0cdef

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

Atualizando transferência de arquivos

@@ -223,18 +223,15 @@ @@ -223,18 +223,15 @@
223 #define FT_ALLOCATION_UNITS_AVBLOCK 0x3000 223 #define FT_ALLOCATION_UNITS_AVBLOCK 0x3000
224 #define FT_ALLOCATION_UNITS_MASK FT_ALLOCATION_UNITS_AVBLOCK 224 #define FT_ALLOCATION_UNITS_MASK FT_ALLOCATION_UNITS_AVBLOCK
225 225
226 - enum ft_state  
227 - {  
228 - FT_NONE, /**< No transfer in progress */  
229 - FT_AWAIT_ACK, /**< IND$FILE sent, awaiting acknowledgement message */  
230 - FT_RUNNING, /**< Ack received, data flowing */  
231 - FT_ABORT_WAIT, /**< Awaiting chance to send an abort */  
232 - FT_ABORT_SENT /**< Abort sent; awaiting response */  
233 - }; 226 + #define FT_NONE LIB3270_FT_STATE_NONE
  227 + #define FT_AWAIT_ACK LIB3270_FT_STATE_AWAIT_ACK
  228 + #define FT_RUNNING LIB3270_FT_STATE_RUNNING
  229 + #define FT_ABORT_WAIT LIB3270_FT_STATE_ABORT_WAIT
  230 + #define FT_ABORT_SENT LIB3270_FT_STATE_ABORT_SENT
234 231
235 // LOCAL_EXTERN int BeginFileTransfer(unsigned short flags, const char *local, const char *remote, int lrecl, int blksize, int primspace, int secspace, int dft); 232 // LOCAL_EXTERN int BeginFileTransfer(unsigned short flags, const char *local, const char *remote, int lrecl, int blksize, int primspace, int secspace, int dft);
236 LOCAL_EXTERN int CancelFileTransfer(int force); 233 LOCAL_EXTERN int CancelFileTransfer(int force);
237 - LOCAL_EXTERN enum ft_state GetFileTransferState(void); 234 +// LOCAL_EXTERN enum ft_state GetFileTransferState(void);
238 235
239 struct filetransfer_callbacks 236 struct filetransfer_callbacks
240 { 237 {
@@ -264,7 +261,7 @@ @@ -264,7 +261,7 @@
264 261
265 #ifndef LIB3270 262 #ifndef LIB3270
266 263
267 - LOCAL_EXTERN enum ft_state QueryFTstate(void); 264 +// LOCAL_EXTERN enum ft_state QueryFTstate(void);
268 265
269 #endif 266 #endif
270 267
@@ -2284,10 +2284,10 @@ ps_process(void) @@ -2284,10 +2284,10 @@ ps_process(void)
2284 2284
2285 #if defined(X3270_FT) /*[*/ 2285 #if defined(X3270_FT) /*[*/
2286 /* Process file transfers. */ 2286 /* Process file transfers. */
2287 - if (ft_state != FT_NONE && /* transfer in progress */  
2288 - h3270.formatted && /* screen is formatted */  
2289 - !h3270.screen_alt && /* 24x80 screen */  
2290 - !kybdlock && /* keyboard not locked */ 2287 + if (lib3270_get_ft_state(&h3270) != LIB3270_FT_STATE_NONE && /* transfer in progress */
  2288 + h3270.formatted && /* screen is formatted */
  2289 + !h3270.screen_alt && /* 24x80 screen */
  2290 + !kybdlock && /* keyboard not locked */
2291 /* magic field */ 2291 /* magic field */
2292 h3270.ea_buf[1919].fa && FA_IS_SKIP(h3270.ea_buf[1919].fa)) { 2292 h3270.ea_buf[1919].fa && FA_IS_SKIP(h3270.ea_buf[1919].fa)) {
2293 ft_cut_data(); 2293 ft_cut_data();
@@ -74,11 +74,11 @@ static void ft_in3270(H3270 *session, int ignored unused, void *unused); @@ -74,11 +74,11 @@ static void ft_in3270(H3270 *session, int ignored unused, void *unused);
74 #define BN (Boolean *)NULL 74 #define BN (Boolean *)NULL
75 75
76 // Globals. 76 // Globals.
77 -H3270FT *ftsession = NULL; 77 +static H3270FT *ftsession = NULL;
78 78
79 #define CHECK_FT_HANDLE(x) if(!x) x = ftsession; 79 #define CHECK_FT_HANDLE(x) if(!x) x = ftsession;
80 80
81 -enum ft_state ft_state = FT_NONE; // File transfer state 81 +// enum ft_state ft_state = FT_NONE; // File transfer state
82 // char *ft_local_filename; // Local file to transfer to/from 82 // char *ft_local_filename; // Local file to transfer to/from
83 Boolean ft_last_cr = False; // CR was last char in local file 83 Boolean ft_last_cr = False; // CR was last char in local file
84 Boolean ascii_flag = True; // Convert to ascii 84 Boolean ascii_flag = True; // Convert to ascii
@@ -89,29 +89,39 @@ static Boolean ft_is_cut; // File transfer is CUT-style @@ -89,29 +89,39 @@ static Boolean ft_is_cut; // File transfer is CUT-style
89 89
90 static struct timeval starting_time; // Starting time 90 static struct timeval starting_time; // Starting time
91 91
92 -static const struct filetransfer_callbacks *callbacks = NULL; // Callbacks to main application 92 +// static const struct filetransfer_callbacks *callbacks = NULL; // Callbacks to main application
93 93
94 #define snconcat(x,s,fmt,...) snprintf(x+strlen(x),s-strlen(x),fmt,__VA_ARGS__) 94 #define snconcat(x,s,fmt,...) snprintf(x+strlen(x),s-strlen(x),fmt,__VA_ARGS__)
95 95
96 -#define set_ft_state(x) ft_state = x 96 +static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state);
  97 +
97 98
98 /*---[ Implement ]-------------------------------------------------------------------------------------------------------*/ 99 /*---[ Implement ]-------------------------------------------------------------------------------------------------------*/
99 100
100 - void ft_init(H3270FT *h) 101 + static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state)
101 { 102 {
102 - /* Register for state changes. */ 103 + CHECK_FT_HANDLE(session);
103 104
104 - CHECK_FT_HANDLE(h); 105 + if(session->state == state)
  106 + return;
  107 +
  108 + session->state = state;
  109 + session->state_changed(session,state);
105 110
106 - lib3270_register_schange(h->host, ST_CONNECT, ( void (*)(H3270 *, int, void *)) ft_connected, NULL);  
107 - lib3270_register_schange(h->host, ST_3270_MODE, ( void (*)(H3270 *, int, void *)) ft_in3270, NULL);  
108 } 111 }
109 112
110 - enum ft_state QueryFTstate(void) 113 + void ft_init(H3270 *session)
111 { 114 {
112 - return ft_state; 115 + /* Register for state changes. */
  116 + lib3270_register_schange(session, ST_CONNECT, ( void (*)(H3270 *, int, void *)) ft_connected, NULL);
  117 + lib3270_register_schange(session, ST_3270_MODE, ( void (*)(H3270 *, int, void *)) ft_in3270, NULL);
113 } 118 }
114 119
  120 +// enum ft_state QueryFTstate(void)
  121 +// {
  122 +// return ft_state;
  123 +// }
  124 +
115 /* 125 /*
116 int RegisterFTCallbacks(const struct filetransfer_callbacks *cbk) 126 int RegisterFTCallbacks(const struct filetransfer_callbacks *cbk)
117 { 127 {
@@ -124,18 +134,19 @@ static const struct filetransfer_callbacks *callbacks = NULL; // Callbacks to m @@ -124,18 +134,19 @@ static const struct filetransfer_callbacks *callbacks = NULL; // Callbacks to m
124 } 134 }
125 */ 135 */
126 136
  137 +/*
127 enum ft_state GetFileTransferState(void) 138 enum ft_state GetFileTransferState(void)
128 { 139 {
129 return ft_state; 140 return ft_state;
130 } 141 }
  142 +*/
131 143
132 LIB3270_EXPORT int lib3270_ft_cancel(H3270FT *ft, int force) 144 LIB3270_EXPORT int lib3270_ft_cancel(H3270FT *ft, int force)
133 { 145 {
134 - if (ft_state == FT_RUNNING) 146 + if (ft->state == LIB3270_FT_STATE_RUNNING)
135 { 147 {
136 - set_ft_state(FT_ABORT_WAIT);  
137 - if(callbacks && callbacks->aborting)  
138 - callbacks->aborting(); 148 + set_ft_state(ft,LIB3270_FT_STATE_ABORT_WAIT);
  149 + ft->aborting(ft);
139 return 0; 150 return 0;
140 } 151 }
141 152
@@ -143,11 +154,42 @@ static const struct filetransfer_callbacks *callbacks = NULL; // Callbacks to m @@ -143,11 +154,42 @@ static const struct filetransfer_callbacks *callbacks = NULL; // Callbacks to m
143 return EBUSY; 154 return EBUSY;
144 155
145 // Impatient user or hung host -- just clean up. 156 // Impatient user or hung host -- just clean up.
146 - ft_complete(ft, _("Cancelled by user") ); 157 + ft_complete(ft, N_("Cancelled by user") );
  158 +
  159 + return 0;
  160 + }
  161 +
  162 + static void def_complete(H3270FT *ft, const char *errmsg,unsigned long length,double kbytes_sec,const char *mode)
  163 + {
  164 +
  165 + }
  166 +
  167 + static void def_setlength(H3270FT *ft, unsigned long length)
  168 + {
  169 +
  170 + }
  171 +
  172 + static void def_update(H3270FT *ft, unsigned long length,double kbytes_sec)
  173 + {
  174 +
  175 + }
  176 +
  177 + static void def_running(H3270FT *ft, int is_cut)
  178 + {
  179 +
  180 + }
  181 +
  182 + static void def_aborting(H3270FT *ft)
  183 + {
147 184
148 - return ECANCELED;  
149 } 185 }
150 186
  187 + static void def_state_changed(H3270FT *ft, LIB3270_FT_STATE state)
  188 + {
  189 +
  190 + }
  191 +
  192 +
151 LIB3270_EXPORT H3270FT * lib3270_ft_start(H3270 *session, LIB3270_FT_OPTION flags, const char *local, const char *remote, int lrecl, int blksize, int primspace, int secspace, int dft, const char **msg) 193 LIB3270_EXPORT H3270FT * lib3270_ft_start(H3270 *session, LIB3270_FT_OPTION flags, const char *local, const char *remote, int lrecl, int blksize, int primspace, int secspace, int dft, const char **msg)
152 { 194 {
153 H3270FT * ftHandle = NULL; 195 H3270FT * ftHandle = NULL;
@@ -172,6 +214,14 @@ static const struct filetransfer_callbacks *callbacks = NULL; // Callbacks to m @@ -172,6 +214,14 @@ static const struct filetransfer_callbacks *callbacks = NULL; // Callbacks to m
172 errno = EBUSY; 214 errno = EBUSY;
173 return NULL; 215 return NULL;
174 } 216 }
  217 +
  218 + if(session->ft)
  219 + {
  220 + *msg = N_( "File transfer is already active in this session" );
  221 + errno = EBUSY;
  222 + return NULL;
  223 + }
  224 +
175 // Check remote file 225 // Check remote file
176 if(!*remote) 226 if(!*remote)
177 { 227 {
@@ -279,7 +329,6 @@ static const struct filetransfer_callbacks *callbacks = NULL; // Callbacks to m @@ -279,7 +329,6 @@ static const struct filetransfer_callbacks *callbacks = NULL; // Callbacks to m
279 (void) lib3270_emulate_input(NULL, buffer, strlen(buffer), False); 329 (void) lib3270_emulate_input(NULL, buffer, strlen(buffer), False);
280 330
281 // Get this thing started. 331 // Get this thing started.
282 - set_ft_state(FT_AWAIT_ACK);  
283 332
284 ft_last_cr = False; 333 ft_last_cr = False;
285 ft_is_cut = False; 334 ft_is_cut = False;
@@ -290,6 +339,15 @@ static const struct filetransfer_callbacks *callbacks = NULL; // Callbacks to m @@ -290,6 +339,15 @@ static const struct filetransfer_callbacks *callbacks = NULL; // Callbacks to m
290 ftHandle->sz = sizeof(H3270FT); 339 ftHandle->sz = sizeof(H3270FT);
291 ftHandle->host = session; 340 ftHandle->host = session;
292 ftHandle->ft_local_file = ft_local_file; 341 ftHandle->ft_local_file = ft_local_file;
  342 + ftHandle->state = LIB3270_FT_STATE_AWAIT_ACK;
  343 + ftHandle->complete = def_complete;
  344 + ftHandle->setlength = def_setlength;
  345 + ftHandle->update = def_update;
  346 + ftHandle->running = def_running;
  347 + ftHandle->aborting = def_aborting;
  348 + ftHandle->state_changed = def_state_changed;
  349 +
  350 + session->ft = ftHandle;
293 351
294 return ftsession = ftHandle; 352 return ftsession = ftHandle;
295 } 353 }
@@ -322,16 +380,18 @@ void ft_complete(H3270FT *session, const char *errmsg) @@ -322,16 +380,18 @@ void ft_complete(H3270FT *session, const char *errmsg)
322 } 380 }
323 381
324 // Clean up the state. 382 // Clean up the state.
325 - set_ft_state(FT_NONE); 383 + set_ft_state(session,FT_NONE);
326 384
327 ft_update_length(session); 385 ft_update_length(session);
328 386
329 - if(callbacks && callbacks->complete)  
330 - callbacks->complete(errmsg,ft_length,kbytes_sec,ft_is_cut ? "CUT" : "DFT"); 387 + session->complete(session,errmsg,ft_length,kbytes_sec,ft_is_cut ? "CUT" : "DFT");
331 388
332 if(session == ftsession) 389 if(session == ftsession)
333 ftsession = NULL; 390 ftsession = NULL;
334 391
  392 + if(session->host)
  393 + session->host->ft = NULL;
  394 +
335 free(session); 395 free(session);
336 396
337 } 397 }
@@ -355,8 +415,7 @@ void ft_update_length(H3270FT *session) @@ -355,8 +415,7 @@ void ft_update_length(H3270FT *session)
355 415
356 Trace("%s",__FUNCTION__); 416 Trace("%s",__FUNCTION__);
357 417
358 - if(callbacks && callbacks->update)  
359 - callbacks->update(ft_length,kbytes_sec); 418 + session->update(session,ft_length,kbytes_sec);
360 419
361 } 420 }
362 421
@@ -372,11 +431,10 @@ void ft_running(H3270FT *h, Boolean is_cut) @@ -372,11 +431,10 @@ void ft_running(H3270FT *h, Boolean is_cut)
372 431
373 (void) gettimeofday(&starting_time, (struct timezone *)NULL); 432 (void) gettimeofday(&starting_time, (struct timezone *)NULL);
374 433
375 - if (ft_state == FT_AWAIT_ACK)  
376 - set_ft_state(FT_RUNNING); 434 + if (h->state == FT_AWAIT_ACK)
  435 + set_ft_state(h,FT_RUNNING);
377 436
378 - if(callbacks && callbacks->running)  
379 - callbacks->running(is_cut); 437 + h->running(h,is_cut);
380 438
381 ft_update_length(h); 439 ft_update_length(h);
382 440
@@ -385,29 +443,37 @@ void ft_running(H3270FT *h, Boolean is_cut) @@ -385,29 +443,37 @@ void ft_running(H3270FT *h, Boolean is_cut)
385 // Process a protocol-generated abort. 443 // Process a protocol-generated abort.
386 void ft_aborting(H3270FT *h) 444 void ft_aborting(H3270FT *h)
387 { 445 {
388 - Trace("%s",__FUNCTION__); 446 +// Trace("%s",__FUNCTION__);
389 447
390 CHECK_FT_HANDLE(h); 448 CHECK_FT_HANDLE(h);
391 449
392 - if (ft_state == FT_RUNNING || ft_state == FT_ABORT_WAIT)  
393 - set_ft_state(FT_ABORT_SENT); 450 + if (h->state == FT_RUNNING || h->state == FT_ABORT_WAIT)
  451 + set_ft_state(h,FT_ABORT_SENT);
394 452
395 - if(callbacks && callbacks->aborting)  
396 - callbacks->aborting(); 453 + h->aborting(h);
397 454
398 } 455 }
399 456
400 /* Process a disconnect abort. */ 457 /* Process a disconnect abort. */
401 static void ft_connected(H3270 *session, int ignored, void *dunno) 458 static void ft_connected(H3270 *session, int ignored, void *dunno)
402 { 459 {
403 - if (!CONNECTED && ft_state != FT_NONE)  
404 - ft_complete(ftsession,_("Host disconnected, transfer cancelled")); 460 + if (!CONNECTED && lib3270_get_ft_state(session) != LIB3270_FT_STATE_NONE)
  461 + ft_complete(session->ft,_("Host disconnected, transfer cancelled"));
405 } 462 }
406 463
407 /* Process an abort from no longer being in 3270 mode. */ 464 /* Process an abort from no longer being in 3270 mode. */
408 static void ft_in3270(H3270 *session, int ignored, void *dunno) 465 static void ft_in3270(H3270 *session, int ignored, void *dunno)
409 { 466 {
410 - if (!IN_3270 && ft_state != FT_NONE)  
411 - ft_complete(ftsession,_("Not in 3270 mode, transfer cancelled")); 467 + if (!IN_3270 && lib3270_get_ft_state(session) != LIB3270_FT_STATE_NONE)
  468 + ft_complete(session->ft,_("Not in 3270 mode, transfer cancelled"));
412 } 469 }
413 470
  471 +LIB3270_EXPORT LIB3270_FT_STATE lib3270_get_ft_state(H3270 *session)
  472 +{
  473 + CHECK_SESSION_HANDLE(session);
  474 +
  475 + if(!session->ft)
  476 + return LIB3270_FT_STATE_NONE;
  477 +
  478 + return ((H3270FT *) session->ft)->state;
  479 +}
@@ -332,7 +332,7 @@ cut_control_code(void) @@ -332,7 +332,7 @@ cut_control_code(void)
332 cut_xfer_in_progress = False; 332 cut_xfer_in_progress = False;
333 cut_ack(); 333 cut_ack();
334 334
335 - if (ft_state == FT_ABORT_SENT && saved_errmsg != CN) 335 + if (lib3270_get_ft_state(&h3270) == FT_ABORT_SENT && saved_errmsg != CN)
336 { 336 {
337 buf = saved_errmsg; 337 buf = saved_errmsg;
338 saved_errmsg = CN; 338 saved_errmsg = CN;
@@ -383,8 +383,9 @@ cut_data_request(void) @@ -383,8 +383,9 @@ cut_data_request(void)
383 unsigned char attr; 383 unsigned char attr;
384 384
385 trace_ds("< FT DATA_REQUEST %u\n", from6(seq)); 385 trace_ds("< FT DATA_REQUEST %u\n", from6(seq));
386 - if (ft_state == FT_ABORT_WAIT) {  
387 - cut_abort(SC_ABORT_FILE,"%s",_("Transfer cancelled by user")); 386 + if (lib3270_get_ft_state(&h3270) == FT_ABORT_WAIT)
  387 + {
  388 + cut_abort(SC_ABORT_FILE,"%s",N_("Transfer cancelled by user"));
388 return; 389 return;
389 } 390 }
390 391
@@ -396,7 +397,7 @@ cut_data_request(void) @@ -396,7 +397,7 @@ cut_data_request(void)
396 } 397 }
397 398
398 /* Check for errors. */ 399 /* Check for errors. */
399 - if (ferror(ftsession->ft_local_file)) { 400 + if (ferror(((H3270FT *) h3270.ft)->ft_local_file)) {
400 int j; 401 int j;
401 402
402 /* Clean out any data we may have written. */ 403 /* Clean out any data we may have written. */
@@ -409,7 +410,7 @@ cut_data_request(void) @@ -409,7 +410,7 @@ cut_data_request(void)
409 } 410 }
410 411
411 /* Send special data for EOF. */ 412 /* Send special data for EOF. */
412 - if (!count && feof(ftsession->ft_local_file)) { 413 + if (!count && feof(((H3270FT *) h3270.ft)->ft_local_file)) {
413 ctlr_add(O_UP_DATA, EOF_DATA1, 0); 414 ctlr_add(O_UP_DATA, EOF_DATA1, 0);
414 ctlr_add(O_UP_DATA+1, EOF_DATA2, 0); 415 ctlr_add(O_UP_DATA+1, EOF_DATA2, 0);
415 count = 2; 416 count = 2;
@@ -474,7 +475,8 @@ cut_data(void) @@ -474,7 +475,8 @@ cut_data(void)
474 register int i; 475 register int i;
475 476
476 trace_ds("< FT DATA\n"); 477 trace_ds("< FT DATA\n");
477 - if (ft_state == FT_ABORT_WAIT) { 478 + if (((H3270FT *) h3270.ft)->state == LIB3270_FT_STATE_ABORT_WAIT)
  479 + {
478 cut_abort(SC_ABORT_FILE,"%s",_("Transfer cancelled by user")); 480 cut_abort(SC_ABORT_FILE,"%s",_("Transfer cancelled by user"));
479 return; 481 return;
480 } 482 }
@@ -499,7 +501,7 @@ cut_data(void) @@ -499,7 +501,7 @@ cut_data(void)
499 return; 501 return;
500 502
501 /* Write it to the file. */ 503 /* Write it to the file. */
502 - if (fwrite((char *)cvbuf, conv_length, 1, ftsession->ft_local_file) == 0) { 504 + if (fwrite((char *)cvbuf, conv_length, 1, ((H3270FT *) h3270.ft)->ft_local_file) == 0) {
503 cut_abort(SC_ABORT_FILE,_( "Error \"%s\" writing to local file (rc=%d)" ),strerror(errno),errno); 505 cut_abort(SC_ABORT_FILE,_( "Error \"%s\" writing to local file (rc=%d)" ),strerror(errno),errno);
504 } else { 506 } else {
505 ft_length += conv_length; 507 ft_length += conv_length;
@@ -567,7 +569,7 @@ xlate_getc(void) @@ -567,7 +569,7 @@ xlate_getc(void)
567 } 569 }
568 570
569 /* Get the next byte from the file. */ 571 /* Get the next byte from the file. */
570 - c = fgetc(ftsession->ft_local_file); 572 + c = fgetc(((H3270FT *) h3270.ft)->ft_local_file);
571 if (c == EOF) 573 if (c == EOF)
572 return c; 574 return c;
573 ft_length++; 575 ft_length++;
@@ -106,7 +106,8 @@ ft_dft_data(unsigned char *data, int length unused) @@ -106,7 +106,8 @@ ft_dft_data(unsigned char *data, int length unused)
106 unsigned short data_length, data_type; 106 unsigned short data_length, data_type;
107 unsigned char *cp; 107 unsigned char *cp;
108 108
109 - if (ft_state == FT_NONE) { 109 + if (lib3270_get_ft_state(&h3270) == FT_NONE)
  110 + {
110 trace_ds(" (no transfer in progress)\n"); 111 trace_ds(" (no transfer in progress)\n");
111 return; 112 return;
112 } 113 }
@@ -215,7 +216,7 @@ dft_data_insert(struct data_buffer *data_bufr) @@ -215,7 +216,7 @@ dft_data_insert(struct data_buffer *data_bufr)
215 int my_length; 216 int my_length;
216 unsigned char *cp; 217 unsigned char *cp;
217 218
218 - if (!message_flag && ft_state == FT_ABORT_WAIT) 219 + if(!message_flag && lib3270_get_ft_state(&h3270) == FT_ABORT_WAIT)
219 { 220 {
220 dft_abort(TR_DATA_INSERT, "%s", _("Transfer cancelled by user") ); 221 dft_abort(TR_DATA_INSERT, "%s", _("Transfer cancelled by user") );
221 return; 222 return;
@@ -257,7 +258,7 @@ dft_data_insert(struct data_buffer *data_bufr) @@ -257,7 +258,7 @@ dft_data_insert(struct data_buffer *data_bufr)
257 if (memcmp(msgp, END_TRANSFER, strlen(END_TRANSFER)) == 0) { 258 if (memcmp(msgp, END_TRANSFER, strlen(END_TRANSFER)) == 0) {
258 Free(msgp); 259 Free(msgp);
259 ft_complete(NULL,NULL); 260 ft_complete(NULL,NULL);
260 - } else if (ft_state == FT_ABORT_SENT && abort_string != CN) { 261 + } else if (lib3270_get_ft_state(&h3270) == FT_ABORT_SENT && abort_string != CN) {
261 Free(msgp); 262 Free(msgp);
262 ft_complete(NULL,abort_string); 263 ft_complete(NULL,abort_string);
263 Replace(abort_string, CN); 264 Replace(abort_string, CN);
@@ -289,7 +290,7 @@ dft_data_insert(struct data_buffer *data_bufr) @@ -289,7 +290,7 @@ dft_data_insert(struct data_buffer *data_bufr)
289 290
290 if (l) 291 if (l)
291 { 292 {
292 - rv = fwrite(s, l, (size_t)1,ftsession->ft_local_file); 293 + rv = fwrite(s, l, (size_t)1,((H3270FT *) h3270.ft)->ft_local_file);
293 if (rv == 0) 294 if (rv == 0)
294 break; 295 break;
295 ft_length += l; 296 ft_length += l;
@@ -300,7 +301,7 @@ dft_data_insert(struct data_buffer *data_bufr) @@ -300,7 +301,7 @@ dft_data_insert(struct data_buffer *data_bufr)
300 len -= l; 301 len -= l;
301 } 302 }
302 } else { 303 } else {
303 - rv = fwrite((char *)data_bufr->data, my_length,(size_t)1, ftsession->ft_local_file); 304 + rv = fwrite((char *)data_bufr->data, my_length,(size_t)1, ((H3270FT *) h3270.ft)->ft_local_file);
304 ft_length += my_length; 305 ft_length += my_length;
305 } 306 }
306 307
@@ -310,7 +311,7 @@ dft_data_insert(struct data_buffer *data_bufr) @@ -310,7 +311,7 @@ dft_data_insert(struct data_buffer *data_bufr)
310 } 311 }
311 312
312 /* Add up amount transferred. */ 313 /* Add up amount transferred. */
313 - ft_update_length(ftsession); 314 + ft_update_length((H3270FT *) h3270.ft);
314 } 315 }
315 316
316 /* Send an acknowledgement frame back. */ 317 /* Send an acknowledgement frame back. */
@@ -346,7 +347,7 @@ dft_get_request(void) @@ -346,7 +347,7 @@ dft_get_request(void)
346 347
347 trace_ds(" Get\n"); 348 trace_ds(" Get\n");
348 349
349 - if (!message_flag && ft_state == FT_ABORT_WAIT) { 350 + if (!message_flag && lib3270_get_ft_state(&h3270) == FT_ABORT_WAIT) {
350 dft_abort(TR_GET_REQ, _( "Transfer cancelled by user" ) ); 351 dft_abort(TR_GET_REQ, _( "Transfer cancelled by user" ) );
351 return; 352 return;
352 } 353 }
@@ -361,7 +362,7 @@ dft_get_request(void) @@ -361,7 +362,7 @@ dft_get_request(void)
361 int c; 362 int c;
362 363
363 /* Read one byte and do CR/LF translation. */ 364 /* Read one byte and do CR/LF translation. */
364 - c = fgetc(ftsession->ft_local_file); 365 + c = fgetc(((H3270FT *) h3270.ft)->ft_local_file);
365 if (c == EOF) { 366 if (c == EOF) {
366 break; 367 break;
367 } 368 }
@@ -371,7 +372,7 @@ dft_get_request(void) @@ -371,7 +372,7 @@ dft_get_request(void)
371 * Not enough room to expand NL to 372 * Not enough room to expand NL to
372 * CR/LF. 373 * CR/LF.
373 */ 374 */
374 - ungetc(c, ftsession->ft_local_file); 375 + ungetc(c, ((H3270FT *) h3270.ft)->ft_local_file);
375 break; 376 break;
376 } 377 }
377 *bufptr++ = '\r'; 378 *bufptr++ = '\r';
@@ -384,7 +385,7 @@ dft_get_request(void) @@ -384,7 +385,7 @@ dft_get_request(void)
384 total_read++; 385 total_read++;
385 } else { 386 } else {
386 /* Binary read. */ 387 /* Binary read. */
387 - numread = fread(bufptr, 1, numbytes, ftsession->ft_local_file); 388 + numread = fread(bufptr, 1, numbytes, ((H3270FT *) h3270.ft)->ft_local_file);
388 if (numread <= 0) { 389 if (numread <= 0) {
389 break; 390 break;
390 } 391 }
@@ -402,13 +403,13 @@ dft_get_request(void) @@ -402,13 +403,13 @@ dft_get_request(void)
402 numbytes -= numread; 403 numbytes -= numread;
403 total_read += numread; 404 total_read += numread;
404 } 405 }
405 - if (feof(ftsession->ft_local_file) || ferror(ftsession->ft_local_file)) { 406 + if (feof(((H3270FT *) h3270.ft)->ft_local_file) || ferror(((H3270FT *) h3270.ft)->ft_local_file)) {
406 break; 407 break;
407 } 408 }
408 } 409 }
409 410
410 /* Check for read error. */ 411 /* Check for read error. */
411 - if (ferror(ftsession->ft_local_file)) 412 + if (ferror(((H3270FT *) h3270.ft)->ft_local_file))
412 { 413 {
413 dft_abort(TR_GET_REQ, _( "Error \"%s\" reading from local file (rc=%d)" ), strerror(errno), errno); 414 dft_abort(TR_GET_REQ, _( "Error \"%s\" reading from local file (rc=%d)" ), strerror(errno), errno);
414 return; 415 return;
@@ -434,7 +435,7 @@ dft_get_request(void) @@ -434,7 +435,7 @@ dft_get_request(void)
434 435
435 ft_length += total_read; 436 ft_length += total_read;
436 437
437 - if (feof(ftsession->ft_local_file)) 438 + if (feof(((H3270FT *) h3270.ft)->ft_local_file))
438 { 439 {
439 dft_eof = True; 440 dft_eof = True;
440 } 441 }
@@ -464,7 +465,7 @@ dft_get_request(void) @@ -464,7 +465,7 @@ dft_get_request(void)
464 465
465 /* Write the data. */ 466 /* Write the data. */
466 net_output(); 467 net_output();
467 - ft_update_length(ftsession); 468 + ft_update_length((H3270FT *) h3270.ft);
468 } 469 }
469 470
470 /* Process a Close request. */ 471 /* Process a Close request. */
@@ -512,7 +513,7 @@ static void dft_abort(unsigned short code, const char *fmt, ...) @@ -512,7 +513,7 @@ static void dft_abort(unsigned short code, const char *fmt, ...)
512 net_output(); 513 net_output();
513 514
514 /* Update the pop-up and state. */ 515 /* Update the pop-up and state. */
515 - ft_aborting(ftsession); 516 + ft_aborting((H3270FT *) h3270.ft);
516 } 517 }
517 518
518 /* Returns the number of bytes in s, limited by len, that aren't CRs or ^Zs. */ 519 /* Returns the number of bytes in s, limited by len, that aren't CRs or ^Zs. */
@@ -26,7 +26,7 @@ LIB3270_INTERNAL Boolean ascii_flag; @@ -26,7 +26,7 @@ LIB3270_INTERNAL Boolean ascii_flag;
26 LIB3270_INTERNAL Boolean cr_flag; 26 LIB3270_INTERNAL Boolean cr_flag;
27 LIB3270_INTERNAL unsigned long ft_length; 27 LIB3270_INTERNAL unsigned long ft_length;
28 28
29 -LIB3270_INTERNAL H3270FT * ftsession; 29 +// LIB3270_INTERNAL H3270FT * ftsession;
30 30
31 // LIB3270_INTERNAL FILE *ft_local_file; 31 // LIB3270_INTERNAL FILE *ft_local_file;
32 // extern char *ft_local_filename; 32 // extern char *ft_local_filename;
@@ -34,7 +34,8 @@ LIB3270_INTERNAL H3270FT * ftsession; @@ -34,7 +34,8 @@ LIB3270_INTERNAL H3270FT * ftsession;
34 LIB3270_INTERNAL Boolean ft_last_cr; 34 LIB3270_INTERNAL Boolean ft_last_cr;
35 LIB3270_INTERNAL Boolean remap_flag; 35 LIB3270_INTERNAL Boolean remap_flag;
36 36
37 -LIB3270_INTERNAL void ft_init(H3270FT *h); 37 +LIB3270_INTERNAL void ft_init(H3270 *session);
  38 +
38 LIB3270_INTERNAL void ft_aborting(H3270FT *h); 39 LIB3270_INTERNAL void ft_aborting(H3270FT *h);
39 LIB3270_INTERNAL void ft_complete(H3270FT *h, const char *errmsg); 40 LIB3270_INTERNAL void ft_complete(H3270FT *h, const char *errmsg);
40 LIB3270_INTERNAL void ft_running(H3270FT *h, Boolean is_cut); 41 LIB3270_INTERNAL void ft_running(H3270FT *h, Boolean is_cut);
@@ -262,7 +262,7 @@ LIB3270_INTERNAL int *xtra_width; @@ -262,7 +262,7 @@ LIB3270_INTERNAL int *xtra_width;
262 */ 262 */
263 263
264 /* Connection state */ 264 /* Connection state */
265 -LIB3270_INTERNAL enum ft_state ft_state; 265 +// LIB3270_INTERNAL enum ft_state ft_state;
266 266
267 /* 267 /*
268 LIB3270_INTERNAL enum cstate cstate; 268 LIB3270_INTERNAL enum cstate cstate;
@@ -229,7 +229,7 @@ H3270 * lib3270_session_new(const char *model) @@ -229,7 +229,7 @@ H3270 * lib3270_session_new(const char *model)
229 ansi_init(); 229 ansi_init();
230 230
231 #if defined(X3270_FT) 231 #if defined(X3270_FT)
232 - ft_init(); 232 + ft_init(hSession);
233 #endif 233 #endif
234 234
235 /* 235 /*
@@ -1464,7 +1464,7 @@ do_reset(Boolean explicit) @@ -1464,7 +1464,7 @@ do_reset(Boolean explicit)
1464 1464
1465 if (explicit 1465 if (explicit
1466 #if defined(X3270_FT) /*[*/ 1466 #if defined(X3270_FT) /*[*/
1467 - || ft_state != FT_NONE 1467 + || lib3270_get_ft_state(&h3270) != LIB3270_FT_STATE_NONE
1468 #endif /*]*/ 1468 #endif /*]*/
1469 ) { 1469 ) {
1470 Boolean half_reset = False; 1470 Boolean half_reset = False;
@@ -1503,7 +1503,7 @@ do_reset(Boolean explicit) @@ -1503,7 +1503,7 @@ do_reset(Boolean explicit)
1503 */ 1503 */
1504 if (explicit 1504 if (explicit
1505 #if defined(X3270_FT) /*[*/ 1505 #if defined(X3270_FT) /*[*/
1506 - || ft_state != FT_NONE 1506 + || lib3270_get_ft_state(&h3270) != LIB3270_FT_STATE_NONE
1507 #endif /*]*/ 1507 #endif /*]*/
1508 || (!appres.unlock_delay) // && !sms_in_macro()) 1508 || (!appres.unlock_delay) // && !sms_in_macro())
1509 || (unlock_delay_time != 0 && (time(NULL) - unlock_delay_time) > 1)) { 1509 || (unlock_delay_time != 0 && (time(NULL) - unlock_delay_time) > 1)) {