Annotation of 43BSDReno/usr.bin/tip/aculib/biz22.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1983 The Regents of the University of California.
                      3:  * All rights reserved.
                      4:  *
                      5:  * Redistribution and use in source and binary forms are permitted
                      6:  * provided that: (1) source distributions retain this entire copyright
                      7:  * notice and comment, and (2) distributions including binaries display
                      8:  * the following acknowledgement:  ``This product includes software
                      9:  * developed by the University of California, Berkeley and its contributors''
                     10:  * in the documentation or other materials provided with the distribution
                     11:  * and in all advertising materials mentioning features or use of this
                     12:  * software. Neither the name of the University nor the names of its
                     13:  * contributors may be used to endorse or promote products derived
                     14:  * from this software without specific prior written permission.
                     15:  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
                     16:  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
                     17:  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
                     18:  */
                     19: 
                     20: #ifndef lint
                     21: static char sccsid[] = "@(#)biz22.c    5.4 (Berkeley) 6/1/90";
                     22: #endif /* not lint */
                     23: 
                     24: #include "tip.h"
                     25: 
                     26: #define DISCONNECT_CMD "\20\04"        /* disconnection string */
                     27: 
                     28: static void sigALRM();
                     29: static int timeout = 0;
                     30: static jmp_buf timeoutbuf;
                     31: 
                     32: /*
                     33:  * Dial up on a BIZCOMP Model 1022 with either
                     34:  *     tone dialing (mod = "V")
                     35:  *     pulse dialing (mod = "W")
                     36:  */
                     37: static int
                     38: biz_dialer(num, mod)
                     39:        char *num, *mod;
                     40: {
                     41:        register int connected = 0;
                     42:        char cbuf[40];
                     43: 
                     44:        if (boolean(value(VERBOSE)))
                     45:                printf("\nstarting call...");
                     46:        /*
                     47:         * Disable auto-answer and configure for tone/pulse
                     48:         *  dialing
                     49:         */
                     50:        if (cmd("\02K\r")) {
                     51:                printf("can't initialize bizcomp...");
                     52:                return (0);
                     53:        }
                     54:        strcpy(cbuf, "\02.\r");
                     55:        cbuf[1] = *mod;
                     56:        if (cmd(cbuf)) {
                     57:                printf("can't set dialing mode...");
                     58:                return (0);
                     59:        }
                     60:        strcpy(cbuf, "\02D");
                     61:        strcat(cbuf, num);
                     62:        strcat(cbuf, "\r");
                     63:        write(FD, cbuf, strlen(cbuf));
                     64:        if (!detect("7\r")) {
                     65:                printf("can't get dial tone...");
                     66:                return (0);
                     67:        }
                     68:        if (boolean(value(VERBOSE)))
                     69:                printf("ringing...");
                     70:        /*
                     71:         * The reply from the BIZCOMP should be:
                     72:         *      2 \r or 7 \r    failure
                     73:         *      1 \r            success
                     74:         */
                     75:        connected = detect("1\r");
                     76: #ifdef ACULOG
                     77:        if (timeout) {
                     78:                char line[80];
                     79: 
                     80:                sprintf(line, "%d second dial timeout",
                     81:                        number(value(DIALTIMEOUT)));
                     82:                logent(value(HOST), num, "biz1022", line);
                     83:        }
                     84: #endif
                     85:        if (timeout)
                     86:                biz22_disconnect();     /* insurance */
                     87:        return (connected);
                     88: }
                     89: 
                     90: biz22w_dialer(num, acu)
                     91:        char *num, *acu;
                     92: {
                     93: 
                     94:        return (biz_dialer(num, "W"));
                     95: }
                     96: 
                     97: biz22f_dialer(num, acu)
                     98:        char *num, *acu;
                     99: {
                    100: 
                    101:        return (biz_dialer(num, "V"));
                    102: }
                    103: 
                    104: biz22_disconnect()
                    105: {
                    106:        int rw = 2;
                    107: 
                    108:        write(FD, DISCONNECT_CMD, 4);
                    109:        sleep(2);
                    110:        ioctl(FD, TIOCFLUSH, &rw);
                    111: }
                    112: 
                    113: biz22_abort()
                    114: {
                    115: 
                    116:        write(FD, "\02", 1);
                    117: }
                    118: 
                    119: static void
                    120: sigALRM()
                    121: {
                    122: 
                    123:        timeout = 1;
                    124:        longjmp(timeoutbuf, 1);
                    125: }
                    126: 
                    127: static int
                    128: cmd(s)
                    129:        register char *s;
                    130: {
                    131:        sig_t f;
                    132:        char c;
                    133: 
                    134:        write(FD, s, strlen(s));
                    135:        f = signal(SIGALRM, sigALRM);
                    136:        if (setjmp(timeoutbuf)) {
                    137:                biz22_abort();
                    138:                signal(SIGALRM, f);
                    139:                return (1);
                    140:        }
                    141:        alarm(number(value(DIALTIMEOUT)));
                    142:        read(FD, &c, 1);
                    143:        alarm(0);
                    144:        signal(SIGALRM, f);
                    145:        c &= 0177;
                    146:        return (c != '\r');
                    147: }
                    148: 
                    149: static int
                    150: detect(s)
                    151:        register char *s;
                    152: {
                    153:        sig_t f;
                    154:        char c;
                    155: 
                    156:        f = signal(SIGALRM, sigALRM);
                    157:        timeout = 0;
                    158:        while (*s) {
                    159:                if (setjmp(timeoutbuf)) {
                    160:                        biz22_abort();
                    161:                        break;
                    162:                }
                    163:                alarm(number(value(DIALTIMEOUT)));
                    164:                read(FD, &c, 1);
                    165:                alarm(0);
                    166:                c &= 0177;
                    167:                if (c != *s++)
                    168:                        return (0);
                    169:        }
                    170:        signal(SIGALRM, f);
                    171:        return (timeout == 0);
                    172: }

unix.superglobalmegacorp.com

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