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

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

unix.superglobalmegacorp.com

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