📄 ecuxfer.c
字号:
{ strncpy(s80,curr_dir,xfrw_cols - 32); s80[xfrw_cols - 32] = 0; waddstr(xfrw,s80); } else waddstr(xfrw,curr_dir); waddch(xfrw,' '); flst[0] = 0;REENTER_INPUT_LOOP: input_done = 0; while(!input_done) { switch(input_state) { case 0: /* filename(s) */ xfrw_bot_msg("enter file(s) to send");CASE_0_AGAIN: if(used_argv || (argc == 1)) { itmp = wingets(xfrw,SNDW_FILE_Y,SNDW_FILE_X,flst, SNDW_FILE_LEN + 1,&delim, (p_filelist[0] != 0),(int *)0); } else { used_argv = 1; flst[0] = 0; for(itmp = 1; itmp < argc; itmp++) { if((strlen(flst) + strlen(argv[itmp]) + 1) > sizeof(flst)) { xfrw_bot_msg("arguments too long ... reenter list"); ring_bell(); goto CASE_0_AGAIN; } strcat(flst,argv[itmp]); if(itmp != (argc - 1)) strcat(flst," "); } delim = NL; } if(delim == ESC) break; if(strlen(flst)) { strcpy(p_filelist,flst); xfrws_display_name(); if(find_shell_chars(p_filelist)) { char *expcmd; if(expand_wildcard_list(p_filelist,&expcmd)) { xfrw_bot_msg(expcmd); ring_bell(); goto CASE_0_AGAIN; } expcmd[SNDW_FILE_LEN - 1] = 0; clear_area(xfrw,SNDW_FILE_Y,SNDW_FILE_X,SNDW_FILE_LEN); waddstr(xfrw,expcmd); free(expcmd); } } break; case 1: /* binary */ xfrw_bot_msg("Y: no conversion, N: NLs converted to CR/LF"); wmove(xfrw,SNDW_BIN_Y,SNDW_BIN_X); wrefresh(xfrw); delim = NL; switch(itmp = xfrw_get_single("ny")) { case 0: case 1: p_binary = itmp; xfrws_display_binary(); break; default: delim = itmp & 0xFF; break; } break; case 2: /* overwrite */ xfrw_bot_msg("Y: overwrite, N: protect destination files"); wmove(xfrw,SNDW_OVERW_Y,SNDW_OVERW_X); wrefresh(xfrw); delim = NL; switch(itmp = xfrw_get_single("ny")) { case 0: case 1: p_overwrite = itmp; break; default: delim = itmp & 0xFF; break; } break; case 3: /* send full pathnames */ xfrw_bot_msg( "Y: full pathnames, N: strip directory portion from names"); wmove(xfrw,SNDW_SENDFULL_Y,SNDW_SENDFULL_X); wrefresh(xfrw); delim = NL; switch(itmp = xfrw_get_single("ny")) { case 0: case 1: p_sendfull = itmp; break; default: delim = itmp & 0xFF; break; } break; case 4: /* src newer than dest */ xfrw_bot_msg( "Y: send only if source newer than destination, N send all"); wmove(xfrw,SNDW_XFERNEW_Y,SNDW_XFERNEW_X); wrefresh(xfrw); delim = NL; switch(itmp = xfrw_get_single("ny")) { case 0: case 1: p_xfernew = itmp; xfrws_display_xfernew(); break; default: delim = itmp & 0xFF; break; } break; case 5: /* resume interrupted transfer */ xfrw_bot_msg( "Y: resume transfer at remote file EOF, N send all"); wmove(xfrw,SNDW_RESUME_Y,SNDW_RESUME_X); wrefresh(xfrw); delim = NL; switch(itmp = xfrw_get_single("ny")) { case 0: case 1: p_resume = itmp; xfrws_display_resume(); break; default: delim = itmp & 0xFF; break; } break; case 6: /* window size */ xfrw_bot_msg( "window size (max bytes sent before ACK required) 0 = stream");CASE_5_AGAIN: sprintf(s80,"%u",zwindw_size); clear_area(xfrw,SNDW_ZWINDW_Y,SNDW_ZWINDW_X, SNDW_ZWINDW_LEN + 10); itmp = wingets(xfrw,SNDW_ZWINDW_Y,SNDW_ZWINDW_X,s80, SNDW_ZWINDW_LEN + 1,&delim,1,(int *)0); if((delim == ESC)) break; if( ((ltmp = atol(s80)) != 0) && ((ltmp < 256) || (ltmp > ZWINDW_LIMIT))) { char xbmsg[80]; ring_bell(); sprintf(xbmsg,"window size must be 0 or 256 <= w <= %u", ZWINDW_LIMIT); xfrw_bot_msg(xbmsg); goto CASE_5_AGAIN; } zwindw_size = (uint)(ltmp / 64L) * 64L; sprintf(s80,"%u%s",zwindw_size, (zwindw_size != (uint)ltmp) ? " adjusted" : "" ); clear_area(xfrw,SNDW_ZWINDW_Y,SNDW_ZWINDW_X, SNDW_ZWINDW_LEN + 10); waddstr(xfrw,s80); break; } switch(delim) { case XFcurup: case CTL_B: input_state = (input_state) ? input_state - 1 : input_state_mod - 1; break; case XFcurdn: case TAB: case NL: input_state++; input_state %= input_state_mod; break; case CTL_L: case CTL_R: tcap_clear_screen(); touchwin(stdscr); wrefresh(stdscr); touchwin(xfrw); wrefresh(xfrw); break; case ESC: xfrw_bot_msg("transfer abandoned"); input_done = 1; break; case XFend: input_done = 1; break; } } if(delim == XFend) { if(!p_filelist[0]) { ring_bell(); xfrw_bot_msg("No filenames entered! Press <ENTER>"); (void)ttygetc(1); input_state = 0; goto REENTER_INPUT_LOOP; } xfrw_bot_msg("starting file transfer"); } wrefresh(xfrw); delwin(xfrw); windows_end(0); tcap_cursor(SNDW_TLY + xfrw_lines + 1,0); if(delim == ESC) { start_rcvr_process(1); return; } bottom_label[0] = 0; if(shm->Llogical[0]) sprintf(bottom_label,"-C \"'Connected to %s'\" ",shm->Llogical);/* we are going to do a transfer! */ switch(xfertype) { case ECUSZ_X: sprintf(execcmd,"%s/ecusz -X -. %d ",eculibdir,shm->Liofd); strcat(execcmd,bottom_label); if(protocol_log_packets) strcat(execcmd,"-, "); if(p_binary) strcat(execcmd,"-b "); else strcat(execcmd,"-a "); strcat(execcmd,p_filelist); break; case ECUSZ_Y: sprintf(execcmd,"%s/ecusz -Y -. %d -k ",eculibdir,shm->Liofd); strcat(execcmd,bottom_label); if(protocol_log_packets) strcat(execcmd,"-, "); if(p_binary) strcat(execcmd,"-b "); else strcat(execcmd,"-a "); strcat(execcmd,p_filelist); break; case ECUSZ_Z: sprintf(execcmd,"%s/ecusz -Z -. %d ",eculibdir,shm->Liofd); strcat(execcmd,bottom_label); if(zwindw_size) sprintf(&execcmd[strlen(execcmd)]," -w %u ",zwindw_size); if(protocol_log_packets) strcat(execcmd,"-, "); if(p_overwrite) strcat(execcmd,"-y "); else strcat(execcmd,"-p "); if(p_binary) strcat(execcmd,"-b "); else strcat(execcmd,"-a "); if(p_xfernew) strcat(execcmd,"-n "); /* overrides -y/-p choice earlier */ if(p_resume) strcat(execcmd,"-r "); if(p_sendfull) strcat(execcmd,"-f "); strcat(execcmd,p_filelist); break; case ECUSEA: sprintf(execcmd,"%s/ecusea -. %d -/ %s -s ", eculibdir,shm->Liofd,curr_dir); if(protocol_log_packets) strcat(execcmd,"-, "); strcat(execcmd,p_filelist); break; case CKERMIT: /* flexible kermit filename */#ifdef WHT if(ckufnm = find_executable("ck5a")) /* private alpha version */ ;#else if(ckufnm = (char *)0) ;#endif else if(ckufnm = find_executable("kermit")) ; else if(ckufnm = find_executable("ckermit")) ; /* our old 286 4E hack (and alternate name used by many) */ else { ff(se,"Cannot find C-Kermit ('kermit' or 'ckermit')\r\n"); last_child_wait_status = -1; goto EXIT; } sprintf(execcmd,"%s -l %d -b %u -p %c%s%s -s %s", ckufnm, /* kermit flexible name */ shm->Liofd, shm->Lbaud, (shm->Lparity) ? shm->Lparity : 'n', (p_binary) ? " -i" : "", (p_overwrite) ? "" : " -w", p_filelist); break; default: pprintf("logic error in send_files_to_remote xfertype=%d\n", xfertype); termecu(TERMECU_LOGIC_ERROR); /*NOTREACHED*/}file_xfer_start();if(!find_shell_chars(execcmd)) exec_cmd(execcmd);else{char *expcmd; if(expand_wildcard_list(execcmd,&expcmd)) { ff(se,"No files match\r\n"); return; } exec_cmd(expcmd); free(expcmd);}EXIT:lreset_ksr(); /* ensure line termio back to our config */ttymode(old_ttymode); /* xfer prog may screw up tty too */switch(xfertype){ case ECUSEA: case ECUSZ_X: case ECUSZ_Y: case ECUSZ_Z: xfertype = 1; /* was ecusz */ break; default: xfertype = 0; break;}if(xfertype) /* ecu knowledgable */ report_send_status();else{ tcap_stand_out(); ff(se," transfer status %04x ",last_child_wait_status); tcap_stand_end(); ff(se,"\r\n");}ff(se,"\r\n");file_xfer_done_bell();start_rcvr_process(1);} /* end of send_files_to_remote *//*+-------------------------------------------------------------------------receive_files_from_remote(argc,argv)also used by "automatic rz"arg[0] = "rk", "rs", "rx", "ry", or "rz"--------------------------------------------------------------------------*/voidreceive_files_from_remote(argc,argv)int argc;char **argv;{ register itmp; uchar delim; char execcmd[256]; char bottom_label[64]; char *ckufnm; int old_ttymode = get_ttymode(); int restart_rcvr = need_rcvr_restart(); if(!argc) /* this should never happen, but ... */ return; sprintf(bottom_label,"-C 'Connected to %s' ", (shm->Llogical[0]) ? shm->Llogical : "?"); switch(to_lower(*(argv[0] + 1))) { case 'k': xfertype = CKERMIT; break; case 's': xfertype = ECUSEA; break; case 'x': xfertype = ECURZ_X; break; case 'y': xfertype = ECURZ_Y; break; case 'z': xfertype = ECURZ_Z; break; default: ff(se,"receive command invalid\n"); return; } if(xfertype == ECURZ_X) { char xfilenam[128]; if(restart_rcvr) kill_rcvr_process(SIGUSR1); sprintf(execcmd,"%s/ecurz -X -. %d -c ",eculibdir,shm->Liofd); strcat(execcmd,bottom_label); if(protocol_log_packets) strcat(execcmd,"-, "); if(argc > 1) { strncpy(xfilenam,argv[1],sizeof(xfilenam) - 1); xfilenam[sizeof(xfilenam) - 1] = 0; } else { ff(se," File name to receive via XMODEM/CRC: "); ttygets(xfilenam,sizeof(xfilenam),TG_CRLF,&delim,(int *)0); if(!xfilenam[0] || (delim == ESC)) { ff(se,"transfer abandoned\r\n"); if(restart_rcvr) start_rcvr_process(1); return; } } /* get xmodem ascii or binary */ ff(se,"Translate CR/LF to NL (y,n)? "); switch(itmp = to_lower(ttygetc(0))) { case 'y': strcat(execcmd,"-a "); break; case 'n': strcat(execcmd,"-b "); break; default: ff(se,"transfer abandoned\r\n"); if(restart_rcvr) start_rcvr_process(1); return; } ff(se,"%s\r\n",(itmp == 'y') ? "yes" : "no"); strcat(execcmd,xfilenam); file_xfer_start(); exec_cmd(execcmd); } else if(xfertype == ECURZ_Y) { ff(se,"\r\n"); if(restart_rcvr) kill_rcvr_process(SIGUSR1); sprintf(execcmd,"%s/ecurz -Y -. %d -y ",eculibdir,shm->Liofd); strcat(execcmd,bottom_label); if(protocol_log_packets) strcat(execcmd,"-, "); file_xfer_start(); exec_cmd(execcmd); } else if(xfertype == ECURZ_Z) { ff(se,"\r\n"); if(restart_rcvr) kill_rcvr_process(SIGUSR1); sprintf(execcmd,"%s/ecurz -Z -. %d ",eculibdir,shm->Liofd); if(protocol_log_packets) strcat(execcmd,"-, "); strcat(execcmd,bottom_label); file_xfer_start(); exec_cmd(execcmd); } else if(xfertype == CKERMIT) { ckufnm = 0;#ifdef WHT if(ckufnm = find_executable("ck5a")) /* private alpha version */ ;#endif /* WHT */ if(!ckufnm && (ckufnm = find_executable("kermit"))) ; else if(ckufnm = find_executable("ckermit")) ; /* our old 286 4E hack (and alternate name used by many) */ else { ff(se,"Cannot find C-Kermit ('kermit' or 'ckermit')\r\n"); last_child_wait_status = 255 << 8; return; /* <<=================================== */ } if(restart_rcvr) kill_rcvr_process(SIGUSR1); sprintf(execcmd,"%s -r -e 512 -l %d -b %d -p %c", ckufnm, shm->Liofd,shm->Lbaud,(shm->Lparity) ? shm->Lparity : 'n'); ff(se," Translate CR/LF to NL (y,n)? "); switch(itmp = to_lower(ttygetc(0))) { case 'y': strcat(execcmd," -i"); break; case 'n': break; default: ff(se,"transfer abandoned\r\n"); if(restart_rcvr) start_rcvr_process(1); return; } ff(se,"%s\r\n",(itmp == 'a') ? "yes" : "no"); file_xfer_start(); exec_cmd(execcmd); } else if(xfertype == ECUSEA) { if(restart_rcvr) kill_rcvr_process(SIGUSR1); sprintf(execcmd,"%s/ecusea -r -. %d -/ %s", eculibdir,shm->Liofd,curr_dir); if(protocol_log_packets) strcat(execcmd," -,"); file_xfer_start(); exec_cmd(execcmd); } lreset_ksr(); /* ensure line termio back to our config */ ttymode(old_ttymode); /* xfer prog may screw up tty too */ file_xfer_done_bell(); Nap(20L); if(restart_rcvr) start_rcvr_process(1);} /* end of receive_files_from_remote *//* end of ecuxfer.c *//* vi: set tabstop=4 shiftwidth=4: */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -