Annotation of 43BSDTahoe/usr.bin/uucp/aculib/att2224.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char sccsid[] = "@(#)att2224.c  1.2 (Berkeley) 2/24/88";
                      3: #endif
                      4: 
                      5: #include "../condevs.h"
                      6: 
                      7: attopn(telno, flds, dev)
                      8: char *telno, *flds[];
                      9: struct Devices *dev;
                     10: {
                     11:        char dcname[20], phone[MAXPH+10], c = 0;
                     12:        int dnf, failret = 0, timelim;
                     13: 
                     14:        sprintf(dcname, "/dev/%s", dev->D_line);
                     15: 
                     16:        if (setjmp(Sjbuf)) {
                     17:                delock(dev->D_line);
                     18:                logent("DEVICE", "NO");
                     19:                DEBUG(4, "Open timed out %s", dcname);
                     20:                alarm (0);
                     21:                return CF_NODEV;
                     22:        }
                     23: 
                     24:        signal(SIGALRM, alarmtr);
                     25:        getnextfd();
                     26:        alarm(10);
                     27: 
                     28:        if ((dnf = open(dcname, 2)) <= 0) {
                     29:                delock(dev->D_line);
                     30:                logent("DEVICE", "NO");
                     31:                DEBUG(4, "Can't open %s", dcname);
                     32:                alarm (0);
                     33:                return CF_NODEV;
                     34:        }
                     35: 
                     36:        alarm(0);
                     37:        next_fd = -1;
                     38:        fixline(dnf, dev->D_speed);
                     39:        DEBUG(4, "modem port - %s\n", dcname);
                     40: 
                     41:        if (setjmp(Sjbuf)) {
                     42:                delock(dev->D_line);
                     43:                logent("ACU WRITE", "FAILED");
                     44:                return CF_DIAL;
                     45:        }
                     46:        signal(SIGALRM, alarmtr);
                     47:        alarm(10);
                     48:        do {
                     49:                slowrite(dnf, "\r");            /* wake up modem */
                     50:        } while (expect(":~3", dnf));
                     51:        alarm(0);
                     52: 
                     53:        sprintf (phone, "atzt%s\r", telno);
                     54:        slowrite (dnf, phone);          /* type telno string to modem */
                     55: 
                     56:        if ((expect(phone, dnf)) != SUCCESS) {
                     57:                delock(dev->D_line);
                     58:                logent("ACU READ", "FAILED");
                     59:                return CF_DIAL;
                     60:        }
                     61: 
                     62:        if (setjmp(Sjbuf)) {
                     63:                delock(dev->D_line);
                     64:                logent("NO ANSWER", "FAILED");
                     65:                alarm (0);
                     66:                return CF_DIAL;
                     67:        }
                     68:        timelim = strlen(telno) * 4;
                     69:        signal(SIGALRM, alarmtr);
                     70:        alarm(timelim > 30 ? timelim : 30);
                     71: 
                     72: readchar:
                     73:        if ((read(dnf, &c, 1)) != 1) {
                     74:                delock(dev->D_line);
                     75:                logent("ACU READ", "FAILED");
                     76:                return CF_DIAL;
                     77:        }
                     78: 
                     79:        switch (c) {
                     80:                case 'D':       /* no dial tone */
                     81:                        logent("NO DIAL TONE", "FAILED");
                     82:                        failret++;
                     83:                        break;
                     84:                case 'B':       /* line busy */
                     85:                        logent("LINE BUSY", "FAILED");
                     86:                        failret++;
                     87:                        break;
                     88:                case 'N':       /* no answer */
                     89:                        logent("NO ANSWER", "FAILED");
                     90:                        failret++;
                     91:                        break;
                     92:                case 'H':       /* handshake failed */
                     93:                        logent("MODEM HANDSHAKE", "FAILED");
                     94:                        failret++;
                     95:                        break;
                     96:                case '3':       /* 2400 baud */
                     97:                        DEBUG(4, "Baudrate set to 2400 baud", CNULL);
                     98:                        fixline(dnf, 2400);
                     99:                        break;
                    100:                case '2':       /* 1200 baud */
                    101:                        DEBUG(4, "Baudrate set to 1200 baud", CNULL);
                    102:                        fixline(dnf, 1200);
                    103:                        break;
                    104:                case '1':       /* 300 baud */
                    105:                        DEBUG(4, "Baudrate set to 300 baud", CNULL);
                    106:                        fixline(dnf, 300);
                    107:                        break;
                    108:                default:        /* Not one of the above, so must be garbage */
                    109:                        goto readchar;
                    110:                }
                    111:        if (failret) {
                    112:                alarm (0);
                    113:                delock(dev->D_line);
                    114:                return CF_DIAL;
                    115:        }
                    116:        alarm (0);
                    117:        return dnf;
                    118: }
                    119: 
                    120: attcls(fd)
                    121: int fd;
                    122: {
                    123:        char dcname[20];
                    124: #ifdef USG
                    125:        struct termio hup, sav;
                    126: #else  !USG
                    127:        struct sgttyb hup, sav;
                    128: #endif !USG
                    129: 
                    130:        if (fd > 0) {
                    131:                sprintf(dcname, "/dev/%s", devSel);
                    132:                DEBUG(4, "Hanging up fd = %d\n", fd);
                    133:                /*
                    134:                 * code to drop DTR -- change to 0 baud then back to default.
                    135:                 */
                    136:                gtty(fd, &hup);
                    137:                gtty(fd, &sav);
                    138: #ifdef USG
                    139:                hup.c_cflag = B0;
                    140: #else  !USG
                    141:                hup.sg_ispeed = B0;
                    142:                hup.sg_ospeed = B0;
                    143: #endif !USG
                    144:                stty(fd, &hup);
                    145:                sleep(2);
                    146:                stty(fd, &sav);
                    147:                /*
                    148:                 * now raise DTR -- close the device
                    149:                 */
                    150:                sleep(2);
                    151:                close(fd);
                    152:                delock(devSel);
                    153:        }
                    154: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.