date and time created 83/02/24 12:55:54 by mckusick
[unix-history] / usr / src / usr.bin / tip / aculib / dn11.c
index 7562e3b..8f7dcc7 100644 (file)
@@ -1,4 +1,4 @@
-/*     dn11.c  4.3     81/06/16        */
+/*     dn11.c  4.11    81/11/29        */
 
 #if DN11
 /*
 
 #if DN11
 /*
@@ -13,44 +13,48 @@ int dn_abort();
 int alarmtr();
 
 static jmp_buf jmpbuf;
 int alarmtr();
 
 static jmp_buf jmpbuf;
+static int child = -1, dn;
 
 dn_dialer(num, acu)
 
 dn_dialer(num, acu)
-char *num, *acu;
+       char *num, *acu;
 {
        extern errno;
        char *p, *q, phone[40];
 {
        extern errno;
        char *p, *q, phone[40];
-       int child = -1, dn, lt, nw, connected = 1;
+       int lt, nw, connected = 1;
        register int timelim;
 
        register int timelim;
 
+       if (boolean(value(VERBOSE)))
+               printf("\nstarting call...");
        if ((dn = open(acu, 1)) < 0) {
        if ((dn = open(acu, 1)) < 0) {
-               if (errno == ENXIO)
-                       printf("line busy\n");
+               if (errno == EBUSY)
+                       printf("line busy...");
                else
                else
-                       printf("acu open error\n");
-               return(0);
+                       printf("acu open error...");
+               return (0);
        }
        if (setjmp(jmpbuf)) {
        }
        if (setjmp(jmpbuf)) {
-               printf("dn11 write error...");
                kill(child, SIGKILL);
                close(dn);
                kill(child, SIGKILL);
                close(dn);
-               return(0);
+               return (0);
        }
        signal(SIGALRM, alarmtr);
        timelim = 5 * strlen(num);
        alarm(timelim < 30 ? 30 : timelim);
        if ((child = fork()) == 0) {
        }
        signal(SIGALRM, alarmtr);
        timelim = 5 * strlen(num);
        alarm(timelim < 30 ? 30 : timelim);
        if ((child = fork()) == 0) {
+               /*
+                * ignore this stuff for aborts
+                */
                signal(SIGALRM, SIG_IGN);
                signal(SIGALRM, SIG_IGN);
+               signal(SIGINT, SIG_IGN);
+               signal(SIGQUIT, SIG_IGN);
                sleep(2);
                nw = write(dn, num, lt = strlen(num));
                sleep(2);
                nw = write(dn, num, lt = strlen(num));
-               if (nw != lt) {
-                       printf("dn11 write failed...");
-                       exit(1);
-               }
-               exit(0);
+               exit(nw != lt);
        }
        }
-       /*  open line - will return on carrier */
-       FD = open(DV, 2);
-       if (FD < 0) {
+       /*
+        * open line - will return on carrier
+        */
+       if ((FD = open(DV, 2)) < 0) {
                if (errno == EIO)
                        printf("lost carrier...");
                else
                if (errno == EIO)
                        printf("lost carrier...");
                else
@@ -58,27 +62,25 @@ char *num, *acu;
                alarm(0);
                kill(child, SIGKILL);
                close(dn);
                alarm(0);
                kill(child, SIGKILL);
                close(dn);
-               return(0);
+               return (0);
        }
        }
+       alarm(0);
        ioctl(dn, TIOCHPCL, 0);
        signal(SIGALRM, SIG_DFL);
        while ((nw = wait(&lt)) != child && nw != -1)
                ;
        ioctl(dn, TIOCHPCL, 0);
        signal(SIGALRM, SIG_DFL);
        while ((nw = wait(&lt)) != child && nw != -1)
                ;
-       alarm(0);
        fflush(stdout);
        fflush(stdout);
+       close(dn);
        if (lt != 0) {
                close(FD);
        if (lt != 0) {
                close(FD);
-               close(dn);
-               return(0);
+               return (0);
        }
        }
-       return(1);
+       return (1);
 }
 
 alarmtr()
 {
        alarm(0);
 }
 
 alarmtr()
 {
        alarm(0);
-       signal(SIGINT, SIG_IGN);
-       signal(SIGQUIT, SIG_IGN);
        longjmp(jmpbuf, 1);
 }
 
        longjmp(jmpbuf, 1);
 }
 
@@ -88,6 +90,7 @@ alarmtr()
  */
 dn_disconnect()
 {
  */
 dn_disconnect()
 {
+       sleep(2);
 #ifdef VMUNIX
        if (FD > 0)
                ioctl(FD, TIOCCDTR, 0);
 #ifdef VMUNIX
        if (FD > 0)
                ioctl(FD, TIOCCDTR, 0);
@@ -97,6 +100,11 @@ dn_disconnect()
 
 dn_abort()
 {
 
 dn_abort()
 {
+       sleep(2);
+       if (child > 0)
+               kill(child, SIGKILL);
+       if (dn > 0)
+               close(dn);
 #ifdef VMUNIX
        if (FD > 0)
                ioctl(FD, TIOCCDTR, 0);
 #ifdef VMUNIX
        if (FD > 0)
                ioctl(FD, TIOCCDTR, 0);