?? gendial.c
字號:
ff(se,"%s pid %d exit status 0x%04x\n",ungetty,itmp,wait_status); return((wait_status >> 8) & 0xFF);#endif /* HDB_UUCP */} /* end of call_ungetty *//*+----------------------------------------------------------------------- display_termio(ttt) display termio 'ttt' on se------------------------------------------------------------------------*/voiddisplay_termio(ttt,text)struct termio *ttt;char *text;{register flag;register i_cc;register char *cptr;int dbits;char parity; ff(se,"----->> %s\n",text); flag = ttt->c_iflag; ff(se,"iflag: %07o IGNBRK:%d BRKINT:%d IGNPAR:%d PARMRK:%d INPCK:%d ISTRIP:%d\n", flag, (flag & IGNBRK) ? 1 : 0, (flag & BRKINT) ? 1 : 0, (flag & IGNPAR) ? 1 : 0, (flag & PARMRK) ? 1 : 0, (flag & INPCK ) ? 1 : 0, (flag & ISTRIP) ? 1 : 0); ff(se," INLCR:%d IGNCR:%d ICRNL:%d IUCLC:%d IXON:%d IXANY:%d IXOFF:%d\n", (flag & INLCR ) ? 1 : 0, (flag & IGNCR ) ? 1 : 0, (flag & ICRNL ) ? 1 : 0, (flag & IUCLC ) ? 1 : 0, (flag & IXON ) ? 1 : 0, (flag & IXANY ) ? 1 : 0, (flag & IXOFF ) ? 1 : 0); flag = ttt->c_oflag; ff(se,"oflag: %07o OPOST:%d OLCUC:%d ONLCR:%d OCRNL:%d ONOCR:%d ONLRET:%d OFDEL:%d\n", flag, (flag & OPOST ) ? 1 : 0, (flag & OLCUC ) ? 1 : 0, (flag & ONLCR ) ? 1 : 0, (flag & OCRNL ) ? 1 : 0, (flag & ONOCR ) ? 1 : 0, (flag & ONLRET) ? 1 : 0, (flag & OFDEL ) ? 1 : 0); flag = ttt->c_cflag; ff(se,"cflag: %07o ",ttt->c_cflag); switch(flag & CBAUD) { case B0: cptr = "HUP"; break; case B50: cptr = "50"; break; case B75: cptr = "75"; break; case B110: cptr = "110"; break; case B134: cptr = "134.5"; break; case B150: cptr = "150"; break; case B200: cptr = "200"; break; case B300: cptr = "300"; break; case B600: cptr = "600"; break; case B1200: cptr = "1200"; break; case B1800: cptr = "1800"; break; case B2400: cptr = "2400"; break; case B4800: cptr = "4800"; break; case B9600: cptr = "9600"; break; case EXTA: cptr = "EXTA(19200?)"; break; case EXTB: cptr = "EXTB(38400?)"; break; default: cptr = "????"; break; } dbits = 5 + ((flag & CSIZE) >> 4); parity = (flag & PARENB) ? ((flag & PARODD) ? 'O' : 'E') : 'N'; ff(se,"%s-%d-%c-%d ",cptr,dbits,parity,(flag & CSTOPB) ? 2 : 1); switch(flag & CS8) { case CS8: fputs("CS8 ",se); break; case CS7: fputs("CS7 ",se); break; case CS6: fputs("CS6 ",se); break; case CS5: fputs("CS5 ",se); break; } ff(se,"CREAD:%d HUPCL:%d CLOCAL:%d", (flag & CREAD ) ? 1 : 0, (flag & HUPCL ) ? 1 : 0, (flag & CLOCAL) ? 1 : 0);#if defined(RTSFLOW) ff(se," RTSFLOW:%d CTSFLOW:%d", (flag & RTSFLOW ) ? 1 : 0, (flag & CTSFLOW ) ? 1 : 0);#endif ff(se,"\n"); flag = ttt->c_lflag; ff(se,"lflag: %07o ISIG:%d ICANON:%d XCASE:%d ECHO:%d ECHOE:%d\n", flag, (flag & ISIG ) ? 1 : 0, (flag & ICANON) ? 1 : 0, (flag & XCASE ) ? 1 : 0, (flag & ECHO ) ? 1 : 0, (flag & ECHOE ) ? 1 : 0); ff(se," ECHOK:%d ECHONL:%d NOFLSH:%d \n", (flag & ECHOK ) ? 1 : 0, (flag & ECHONL) ? 1 : 0, (flag & NOFLSH) ? 1 : 0); ff(se," INTR QUIT ERAS KILL EOF EOL EOL2 SWTCH VMIN==EOF VTIME==EOL\n"); ff(se,"ctl chars: "); for(i_cc = 0; i_cc < NCC; i_cc++) ff(se,"%02x ",ttt->c_cc[i_cc]); ff(se," (hex)\n");} /* end of display_termio *//*+------------------------------------------------------------------------- open_dce() - open the dce_name (DCE)plugs global 'dce_fd' and returns fd of open DCE line--------------------------------------------------------------------------*/intopen_dce(){int fd1;int fd2; /* open with O_NDELAY set or the open probably will hang */ if((fd1 = open(dce_name,O_RDWR | O_NDELAY)) < 0) { ff(se,"%s: Can't open device: ",*gargv); perror(dce_name); myexit(RC_FAIL | RCE_OPEN | DialerExitCode); } ioctl(fd1,TCGETA,&dce_termio); dce_termio.c_oflag = 0; dce_termio.c_iflag = 0; dce_termio.c_cflag &= ~(CBAUD | HUPCL); dce_termio.c_cflag |= CLOCAL | ((hangup_flag) ? HUPCL : 0) | ((hangup_flag && DCE_hangup_CBAUD) ? DCE_hangup_CBAUD : hiCBAUD); dce_termio.c_cflag |= CS8; dce_termio.c_cc[VMIN] = 1; dce_termio.c_cc[VTIME] = 0; dce_termio.c_cflag &= ~PARENB; dce_termio.c_lflag &= ~(ECHO | ICANON);#ifdef IEXTEN dce_termio.c_lflag &= ~IEXTEN;#endif if (Debug >= 10) display_termio(&dce_termio,"setting line termio"); if(status = ioctl(fd1,TCSETA,&dce_termio)) { DEBUG(1,"%s: ioctl error on %s",dce_name); DEBUG(1,"%s",dce_name); DEBUG(1," errno=%d\n",errno); cleanup(RC_FAIL | RCE_IOCTL | DialerExitCode); } /* reopen line without O_NDELAY */ fd2 = fd1; if((fd1 = open(dce_name,O_RDWR)) < 0) { ff(se,"%s: Can't open device w/o O_NDELAY: %s\n",*gargv,dce_name); myexit(RC_FAIL | RCE_OPEN | DialerExitCode); } close(fd2); ioctl(fd1,TCFLSH,2); /* flush any residue in clists */ dce_fd = fd1; /* save fd in global */ return(fd1);} /* end of open_dce *//*+------------------------------------------------------------------------- main(argc,argv)--------------------------------------------------------------------------*/main(argc,argv)int argc;char **argv;{int itmp;int unrecognized_switches = 0;char *cptr;long startsec;extern int optind;extern int opterr;extern char *optarg; setbuf(stderr,NULL); setbuf(stdout,NULL);/* security considerations */ uid = getuid(); uid_uucp = get_uucp_uid(); secure = 0; if(!strncmp(argv[0],"ECU",3)) ecu_calling = 1; gargv = argv; gargc = argc; signal(SIGILL,dial_abort); signal(SIGIOT,dial_abort); signal(SIGEMT,dial_abort); signal(SIGFPE,dial_abort); signal(SIGBUS,dial_abort); signal(SIGSEGV,dial_abort); signal(SIGSYS,dial_abort); signal(SIGTERM,dial_abort); signal(SIGINT,dial_abort); signal(SIGCLD,SIG_DFL);#if defined(SIGSTOP) /* * call Roto-Rooter on POSIX plots */ signal(SIGSTOP,SIG_IGN); signal(SIGTSTP,SIG_IGN); signal(SIGCONT,SIG_IGN); signal(SIGTTIN,SIG_IGN); signal(SIGTTOU,SIG_IGN);#endif opterr = 0; while((itmp = getopt(argc,argv,"hx:")) != EOF) { switch(itmp) { case 'h': hangup_flag++; break; case 'x': Debug = atoi(optarg); break; case '?': /* dialer-specific code may want to handle these */ unrecognized_switches++; break; } }/* learn tick rate for various timers */ init_Nap();/* announce who we are and our arguments if debugging */ if(Debug > 5) { ff(se,"\ngeneric dialer %s (%s %s)\n",revision, DCE_name,DCE_revision); if(ecu_calling || !uid) { ff(se,"(args "); for(itmp = 0; itmp < argc; itmp++) ff(se,"%s ",argv[itmp]); fputs(")\n",se); } } if(Debug >= 8) ff(se,"uid = %d euid=%d\n",uid,geteuid()); chdir(LOCK_DIR_NAME); /* in case of core dump */ /* give DCE-specific code a chance at the entire command line */ if(status = DCE_argv_hook(argc,argv,optind,unrecognized_switches)) { DEBUG(1,"dialer failed: %s\n",RCE_text(status)); exit(status); }/* check argument count */ if(hangup_flag) { if((argc - optind) != 2) status++; } else if((argc - optind) != 3) status++;/* die with usage if argument error */ if(status) { if(hangup_flag) ff(se,"Usage: %s -h devicename speed\n",argv[0]); else ff(se,"Usage: %s devicename number speed\n",argv[0]); myexit(RC_FAIL | RCE_ARGS); }/* if called with "ttyxx" style ttyname, convert to "/dev/ttyxx" */ cptr = argv[optind++]; if(!strncmp(cptr,"tty",3)) { char s32[32]; strcpy(s32,"/dev/"); strcat(s32,cptr); dce_name = strdup(s32); } else dce_name = cptr;/* save phone number */ if(!hangup_flag) telno = argv[optind++];/* get baud rates (validated by DCE-dependent code) */ loCBAUD = hiCBAUD = DCE_baud_to_CBAUD(atoi(argv[optind])); if(cptr = strchr(argv[optind],'-')) hiCBAUD = DCE_baud_to_CBAUD(atoi(++cptr)); (void)open_dce(); /* open the line *//* H A N G U P R E Q U E S T */ if(hangup_flag) { if(call_ungetty('t') != UG_RESTART) cleanup(SUCCESS); DCE_hangup(); cleanup((call_ungetty('r')) ? RC_FAIL : SUCCESS ); }/* D I A L R E Q U E S T */ switch(call_ungetty('a')) { case UG_NOTENAB: /* line acquired: not enabled */ status = SUCCESS; break; case UG_ENAB: /* line acquired: need ungetty -r when done */ status = RC_ENABLED; break; case UG_FAIL: /* could not acquire line */ myexit(RC_FAIL | RCE_INUSE); case 255: myexit(RC_FAIL | RCE_NULL); } /* * indicate we are dialing * record the time and, oh yeah, dial */ dialing = 1; time(&startsec); status = DCE_dial(telno); /* if dial succeeded ... */ if(Debug >= 2) { ff(se,"connect %s after %ld seconds\n", (status) ? "FAILED" : "succeeded", time((long *)0) - startsec); } /* * success or not */ myexit(((status) ? RC_FAIL : 0) | status);} /* end of main *//*+------------------------------------------------------------------------- rdchk(fd) - for systems without it but with FIONREAD--------------------------------------------------------------------------*/#if defined(sun)intrdchk(fd)int fd;{int chars_waiting; if(ioctl(fd,FIONREAD,&chars_waiting)) { if(Debug > 2) { fprintf(stderr,"!!! fd %d ",fd); perror("rdchk FIONREAD"); } return(0); } else { DEBUG(11,"rdchk-%d\n",chars_waiting); return(!!chars_waiting); }} /* end of rdchk */#endif/* end of gendial.c *//* vi: set tabstop=4 shiftwidth=4: */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -