Annotation of 43BSD/usr.bin/tip/aculib/dn11.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1983 Regents of the University of California.
                      3:  * All rights reserved.  The Berkeley software License Agreement
                      4:  * specifies the terms and conditions for redistribution.
                      5:  */
                      6: 
                      7: #ifndef lint
                      8: static char sccsid[] = "@(#)dn11.c     5.1 (Berkeley) 4/30/85";
                      9: #endif not lint
                     10: 
                     11: /*
                     12:  * Routines for dialing up on DN-11
                     13:  */
                     14: #include "tip.h"
                     15: 
                     16: int dn_abort(), alarmtr();
                     17: static jmp_buf jmpbuf;
                     18: static int child = -1, dn;
                     19: 
                     20: dn_dialer(num, acu)
                     21:        char *num, *acu;
                     22: {
                     23:        extern errno;
                     24:        char *p, *q, phone[40];
                     25:        int lt, nw, connected = 1;
                     26:        register int timelim;
                     27: 
                     28:        if (boolean(value(VERBOSE)))
                     29:                printf("\nstarting call...");
                     30:        if ((dn = open(acu, 1)) < 0) {
                     31:                if (errno == EBUSY)
                     32:                        printf("line busy...");
                     33:                else
                     34:                        printf("acu open error...");
                     35:                return (0);
                     36:        }
                     37:        if (setjmp(jmpbuf)) {
                     38:                kill(child, SIGKILL);
                     39:                close(dn);
                     40:                return (0);
                     41:        }
                     42:        signal(SIGALRM, alarmtr);
                     43:        timelim = 5 * strlen(num);
                     44:        alarm(timelim < 30 ? 30 : timelim);
                     45:        if ((child = fork()) == 0) {
                     46:                /*
                     47:                 * ignore this stuff for aborts
                     48:                 */
                     49:                signal(SIGALRM, SIG_IGN);
                     50:                signal(SIGINT, SIG_IGN);
                     51:                signal(SIGQUIT, SIG_IGN);
                     52:                sleep(2);
                     53:                nw = write(dn, num, lt = strlen(num));
                     54:                exit(nw != lt);
                     55:        }
                     56:        /*
                     57:         * open line - will return on carrier
                     58:         */
                     59:        if ((FD = open(DV, 2)) < 0) {
                     60:                if (errno == EIO)
                     61:                        printf("lost carrier...");
                     62:                else
                     63:                        printf("dialup line open failed...");
                     64:                alarm(0);
                     65:                kill(child, SIGKILL);
                     66:                close(dn);
                     67:                return (0);
                     68:        }
                     69:        alarm(0);
                     70:        ioctl(dn, TIOCHPCL, 0);
                     71:        signal(SIGALRM, SIG_DFL);
                     72:        while ((nw = wait(&lt)) != child && nw != -1)
                     73:                ;
                     74:        fflush(stdout);
                     75:        close(dn);
                     76:        if (lt != 0) {
                     77:                close(FD);
                     78:                return (0);
                     79:        }
                     80:        return (1);
                     81: }
                     82: 
                     83: alarmtr()
                     84: {
                     85: 
                     86:        alarm(0);
                     87:        longjmp(jmpbuf, 1);
                     88: }
                     89: 
                     90: /*
                     91:  * Insurance, for some reason we don't seem to be
                     92:  *  hanging up...
                     93:  */
                     94: dn_disconnect()
                     95: {
                     96: 
                     97:        sleep(2);
                     98:        if (FD > 0)
                     99:                ioctl(FD, TIOCCDTR, 0);
                    100:        close(FD);
                    101: }
                    102: 
                    103: dn_abort()
                    104: {
                    105: 
                    106:        sleep(2);
                    107:        if (child > 0)
                    108:                kill(child, SIGKILL);
                    109:        if (dn > 0)
                    110:                close(dn);
                    111:        if (FD > 0)
                    112:                ioctl(FD, TIOCCDTR, 0);
                    113:        close(FD);
                    114: }

unix.superglobalmegacorp.com

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