|
|
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.