|
|
1.1 ! root 1: /* ! 2: * mdial.c ! 3: * ! 4: * Implement modem dialing. ! 5: */ ! 6: ! 7: #include <stdio.h> ! 8: #include <signal.h> ! 9: #include "modemcap.h" ! 10: #include "dial.h" ! 11: #include "alarm.h" ! 12: ! 13: char modembuf[BUFSIZ]; ! 14: ! 15: mdial(telno, fd) ! 16: char *telno; ! 17: int fd; ! 18: { ! 19: register char *cp, *mp; ! 20: char ch; ! 21: int len; ! 22: ! 23: if ( !DI || !AS ) ! 24: return(merrno = M_A_PROB); ! 25: ! 26: len = strlen(CS)+strlen(DS)+strlen(telno)+strlen(DE)+strlen(CE); ! 27: if ( len > (BUFSIZ-2) ) { ! 28: merrno = M_DEV_TEL; ! 29: goto exitfn; ! 30: } ! 31: sprintf(modembuf, "%s%s%s%s%s", CS, DS, telno, DE, CE); ! 32: SETALRM(30); ! 33: if ( (write(fd, modembuf, len=strlen(modembuf)) != len) || timedout ) { ! 34: merrno = M_D_HUNG; ! 35: goto exitfn; ! 36: } ! 37: ! 38: if ( CO == NULL ) ! 39: goto exitfn; ! 40: ! 41: SETALRM( TT ? CONNECTTIME: (CONNECTTIME + strlen(telno)/2) ); ! 42: ! 43: mp = modembuf; ! 44: for (cp=CO; *cp; ) { ! 45: if ( (read(fd, &ch, 1) != 1) || timedout || ! 46: (mp >= &modembuf[BUFSIZ-1]) ) { ! 47: *mp = '\0'; ! 48: merrno = (mp!=modembuf) ? M_A_PROB: M_NO_ANS; ! 49: goto exitfn; ! 50: } ! 51: *mp++ = ch; ! 52: cp = (*cp == ch) ? cp+1: CO; ! 53: } ! 54: *mp = '\0'; ! 55: ! 56: exitfn: ! 57: CLRALRM(); ! 58: return( merrno ); ! 59: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.