📄 ecuphdir.c
字号:
voidphdir_cmd_remove_oops(){ if(!remove_pde) { dirw_bot_msg("no removed entry to restore"); return; } phdir_cmd_add(remove_pde); phdir_list_set_dirty(remove_dirty_flag); remove_pde = (PDE *)0;} /* end of phdir_cmd_remove_oops *//*+------------------------------------------------------------------------- phdir_cmd_remove()--------------------------------------------------------------------------*/voidphdir_cmd_remove(){ char s80[80]; if(!check_curr_pde()) return; remove_pde = curr_pde; remove_dirty_flag = phdir_list_dirty; phdir_list_remove(curr_pde); phdir_list_set_dirty(1); if(phdir_list_quan) scrw_fill_at(scrw_curr_pde_line + 1,curr_pde,&scrw_curr_pde_line); else scrw_fill((PDE *)0,&scrw_curr_pde_line); ring_bell(); sprintf(s80,"if you did not mean to to remove '%s', press 'o' (oops) NOW!", remove_pde->logical); dirw_bot_msg(s80);} /* end of phdir_cmd_remove *//*+------------------------------------------------------------------------- phdir_cmd_find()--------------------------------------------------------------------------*/voidphdir_cmd_find(){ register PDE *tpde; char findname[12]; uchar delim = 0; int y,x; int wgedit = 0; int wgpos = -1; dirw_bot_msg("ESC: abort ^U: erase input"); dirw_cmd_line_setup("","Directory entry name to find: "); getyx(dirw,y,x); wstandout(dirw); while((delim != ESC) && (delim != NL)) { (void)wingets(dirw,y,x,findname,DESTREF_LEN+1,&delim, wgedit,&wgpos); wgedit = 1; } wstandend(dirw); dirw_bot_msg(""); if((!strlen(findname)) || (delim == ESC)) return; if(! (tpde = phdir_list_search(findname,0))) { dirw_bot_msg(errmsg); return; } curr_pde = tpde; scrw_fill_at(SCRW_LINES / 2,tpde,&scrw_curr_pde_line);} /* end of phdir_cmd_find *//*+------------------------------------------------------------------------- phdir_cmd_change_dir()--------------------------------------------------------------------------*/voidphdir_cmd_change_dir(){ int itmp; char newdirname[256]; char buf[256]; uchar delim = 0; int y,x; int wgedit = 0; int wgpos = -1; char *expcmd; extern char errmsg[]; phdir_list_save_if_dirty(); dirw_bot_msg("ESC: abort ^U: erase input"); dirw_cmd_line_setup(" Enter new directory name:",""); getyx(dirw,y,x); wstandout(dirw); while((delim != ESC) && (delim != NL)) { (void)wingets(dirw,y,x,buf,70+1,&delim, wgedit,&wgpos); wgedit = 1; } wstandend(dirw); dirw_bot_msg(""); if((!strlen(buf)) || (delim == ESC)) return; if((buf[0] == '~') || (buf[0] == '.') || (buf[0] == '/')) strcpy(newdirname,buf); else { get_curr_dir(newdirname,sizeof(newdirname)); strcat(newdirname,"/"); strcat(newdirname,buf); } if(find_shell_chars(newdirname)) { if(expand_wildcard_list(newdirname,&expcmd)) { dirw_bot_msg(expcmd); ring_bell(); return; } strncpy(newdirname,expcmd,sizeof(newdirname) - 1); newdirname[sizeof(newdirname) - 1] = 0; free(expcmd); } if(access(newdirname,4)) { if(errno == ENOENT) { if(!want_pd_create(newdirname)) { dirw_bot_msg("non-existent file not created"); return; } if((itmp = open(newdirname,O_RDWR | O_CREAT | O_TRUNC,0600)) >= 0) { write(itmp,phonedir_trigger,strlen(phonedir_trigger)); close(itmp); dirw_bot_msg("created new (empty) directory file"); ring_bell(); Nap(1000L); goto READ_LIST; } if(errno == ENOENT) { dirw_bot_msg("directory does not exist"); ring_bell(); return; } } dirw_bot_msg(errno_text(errno)); ring_bell(); return; }READ_LIST: strcpy(phonedir_name,newdirname); if(phdir_list_read()) { dirw_bot_msg(errmsg); return; } curr_pde = phdir_list_head; scrw_fill(curr_pde,&scrw_curr_pde_line); if(!phdir_list_quan) { dirw_bot_msg("directory empty"); return; }} /* end of phdir_cmd_change_dir *//*+------------------------------------------------------------------------- phdir_dial_cycle() - dial single destination or cycle through listreturn 1 if connect occurs, 0 if cycle expires or interrupted--------------------------------------------------------------------------*/intphdir_dial_cycle(){ register PDE *tpde = phdir_list_head; uint ans; int nap_decisec; int rtn = 0; int restart_rcvr = need_rcvr_restart(); if(!tpde || !phdir_list_quan) { ring_bell(); return(0); } if(!pde_marked_for_redial_count) { pde_dial(curr_pde); return(!(int)iv[0]); } kill_rcvr_process(SIGUSR1); ff(se,"\r\nbeginning cycle through %d marked redial entr%s\r\n", pde_marked_for_redial_count, (pde_marked_for_redial_count > 1) ? "ies" : "y"); while(1) /* forever until a connect or interrupt */ { if(tpde->redial) { pde_dial(tpde); switch((int)iv[0]) { case 0: /* CONNECTED */ tpde->redial = 0; pde_marked_for_redial_count--; bell_notify(XBELL_C); rtn = 1; goto RETURN; case 2: /* INTERRUPTED */ ff(se,"\r\ndial interrupted: abort cycle (y,n)? "); sigint = 0; ans = 0; while(ans == 0) { switch(ans = to_lower(ttygetc(1))) { case 'y': ff(se,"YES\r\n"); goto ABORT_CYCLE; case 'n': ff(se,"NO\r\n"); break; default: ring_bell(); ans = 0; } } break; case 1: /* FAILED TO CONNECT */ case 3: /* MODEM ERROR */ default: if(pde_marked_for_redial_count == 1) nap_decisec = nap_decisec_single; else nap_decisec = nap_decisec_multiple; ff(se, "waiting %d seconds ... 'c' to cycle, %s to abort\r\n", nap_decisec/10, (kbdintr == DEL) ?"DEL":make_char_graphic(kbdintr,0)); while(nap_decisec--) { Nap(100L); if(ttyrdchk()) { ans = to_lower(ttygetc(1)); ttyflush(0); if(ans == 'c') goto CONTINUE_CYCLE; else if(ans == kbdintr) goto ABORT_CYCLE; else ring_bell(); } if(sigint) goto ABORT_CYCLE; } break; } }CONTINUE_CYCLE: tpde = tpde->next; if(!tpde) tpde = phdir_list_head; }ABORT_CYCLE: sigint = 0; ff(se,"redial cycle ABORTED\r\n");RETURN: if(restart_rcvr) start_rcvr_process(1); return(rtn);} /* end of phdir_dial_cycle *//*+------------------------------------------------------------------------- phdir_cmd_set_wait()--------------------------------------------------------------------------*/voidphdir_cmd_set_wait(){ char buf[64]; uchar delim = 0; int y,x; int wgpos = -1; dirw_bot_msg("ESC: abort ^U: erase input"); sprintf(buf,"(Must be greater than or equal to %d seconds)", NAP_DECISEC_SINGLE_MIN / 10); dirw_cmd_line_setup(buf,"Wait between dials when one entry marked:"); getyx(dirw,y,x); sprintf(buf,"%d",nap_decisec_single / 10); wstandout(dirw); wgpos = strlen(buf); while((delim != ESC) && (delim != NL)) (void)wingets(dirw,y,x,buf,3+1,&delim,1,&wgpos); wstandend(dirw); if((!strlen(buf)) || (delim == ESC)) { dirw_bot_msg(""); return; } nap_decisec_single = 0; sscanf(buf,"%d",&nap_decisec_single); nap_decisec_single *= 10; if(nap_decisec_single < NAP_DECISEC_SINGLE_MIN) nap_decisec_single = NAP_DECISEC_SINGLE_MIN; dirw_display_config(); sprintf(buf,"(Must be greater than or equal to %d seconds)", NAP_DECISEC_MULTIPLE_MIN / 10); dirw_cmd_line_setup(buf,"Wait between dials when multiple entries marked:"); getyx(dirw,y,x); sprintf(buf,"%d",nap_decisec_multiple / 10); wstandout(dirw); wgpos = strlen(buf); delim = 0; while((delim != ESC) && (delim != NL)) (void)wingets(dirw,y,x,buf,3+1,&delim,1,&wgpos); wstandend(dirw); if((!strlen(buf)) || (delim == ESC)) { dirw_bot_msg(""); return; } nap_decisec_multiple = 0; sscanf(buf,"%d",&nap_decisec_multiple); nap_decisec_multiple *= 10; if(nap_decisec_multiple < NAP_DECISEC_MULTIPLE_MIN) nap_decisec_multiple = NAP_DECISEC_MULTIPLE_MIN; dirw_display_config(); dirw_bot_msg("");} /* end of phdir_cmd_set_wait *//*+------------------------------------------------------------------------- phdir_manager()--------------------------------------------------------------------------*/voidphdir_manager(){ register uchar cmd = 0; int done; char s80[80]; int restart_rcvr = need_rcvr_restart(); kill_rcvr_process(SIGUSR1); windows_start(); dirw = window_create("dialing directory",3,0,0,DIRW_LINES,DIRW_COLS); phonedir_name_x = 26; /* must be set before calling dirw_display */ dirw_display(); scrw = subwin(dirw,SCRW_LINES,SCRW_COLS,SCRW_TLY,SCRW_TLX); scrollok(scrw,0); if(!phdir_list_quan) { if(phdir_list_read()) dirw_bot_msg(errmsg); else if(!phdir_list_quan) dirw_bot_msg("directory empty"); } if(phdir_list_quan) { if(curr_pde) scrw_fill_at(scrw_curr_pde_line,curr_pde,&scrw_curr_pde_line); else { curr_pde = phdir_list_head; scrw_fill(curr_pde,&scrw_curr_pde_line); } } phdir_list_set_dirty(-1); done = 0; while(!done) { cmd = dirw_get_cmd(); if((cmd != 'o') && (remove_pde)) { free((char *)remove_pde); remove_pde = (PDE *)0; } switch(cmd) { case XFcurdn: case 'd': case 'j': phdir_cmd_down(); break; case XFcurup: case 'u': case 'k': phdir_cmd_up(); break; case 's': phdir_cmd_save(); break; case 'm': phdir_cmd_mark(curr_pde); break; case 'M': phdir_cmd_unmark(curr_pde); break; case 'U': phdir_cmd_unmark_all(); break; case 'c': phdir_cmd_change_dir(); break; case 'w': phdir_cmd_set_wait(); break; case CRET: case NL: case XFend: cmd = NL; if(!check_curr_pde()) break; phdir_list_save_if_dirty(); wrefresh(dirw); delwin(scrw); delwin(dirw); windows_end(1); dirw = (WINDOW *)0; scrw = (WINDOW *)0; phdir_dial_cycle(); done = 1; if(restart_rcvr) start_rcvr_process(1); break; case ESC: case CTL_C: cmd = 'q'; case 'q': done = 1; continue; case '/': case 'f': phdir_cmd_find(); break; case 'r': phdir_cmd_remove(); break; case 'o': phdir_cmd_remove_oops(); break; case 'a': phdir_cmd_add((PDE *)0); break; case 'e': phdir_add_or_edit(curr_pde,1); break; case CTL_L: case CTL_R: touchwin(stdscr); wrefresh(stdscr); touchwin(dirw); wrefresh(dirw); touchwin(scrw); wrefresh(scrw); break; default: sprintf(s80,"invalid command: %s", (cmd < 0x80) ? make_char_graphic(cmd,0) : "?"); ring_bell(); dirw_bot_msg(s80); break; } } sigint = 0; if(cmd == NL) return; phdir_list_save_if_dirty(); wrefresh(dirw); delwin(scrw); delwin(dirw); windows_end(0); dirw = (WINDOW *)0; scrw = (WINDOW *)0; redisplay_rcvr_screen(); if(restart_rcvr) start_rcvr_process(0);} /* end of phdir_manager *//* end of ecuphone.c *//* vi: set tabstop=4 shiftwidth=4: */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -