Replace sleep calls for 'wake up'.
[unix-history] / usr / src / usr.bin / tip / aculib / biz31.c
index d573cf6..bb5e277 100644 (file)
@@ -1,12 +1,15 @@
-/*     biz31.c 4.3     81/11/20        */
+#ifndef lint
+static char sccsid[] = "@(#)biz31.c    4.7 (Berkeley) %G%";
+#endif
+
 #include "tip.h"
 
 #include "tip.h"
 
-#if BIZ1031
 #define MAXRETRY       3               /* sync up retry count */
 #define MAXRETRY       3               /* sync up retry count */
-#define DISCONNECT     "\21\25\11\24"  /* disconnection string */
+#define DISCONNECT_CMD "\21\25\11\24"  /* disconnection string */
 
 
-static int sigALRM();
-static int timeout = 0;
+static int sigALRM();
+static int timeout = 0;
+static jmp_buf timeoutbuf;
 
 /*
  * Dial up on a BIZCOMP Model 1031 with either
 
 /*
  * Dial up on a BIZCOMP Model 1031 with either
@@ -32,7 +35,7 @@ biz_dialer(num, mod)
        echo(mod);
        echo("$\r$\n");
        echo("$>$.$ #\re$ ");                   /* disconnection sequence */
        echo(mod);
        echo("$\r$\n");
        echo("$>$.$ #\re$ ");                   /* disconnection sequence */
-       echo(DISCONNECT);
+       echo(DISCONNECT_CMD);
        echo("\r$\n$\r$\n");
        echo("$>$.$ #\rr$ ");                   /* repeat dial */
        echo(num);
        echo("\r$\n$\r$\n");
        echo("$>$.$ #\rr$ ");                   /* repeat dial */
        echo(num);
@@ -60,32 +63,35 @@ biz_dialer(num, mod)
                flush("CONNECTION\r\n\07");
        if (timeout)
                biz31_disconnect();     /* insurance */
                flush("CONNECTION\r\n\07");
        if (timeout)
                biz31_disconnect();     /* insurance */
-       return(connected);
+       return (connected);
 }
 
 biz31w_dialer(num, acu)
        char *num, *acu;
 {
 }
 
 biz31w_dialer(num, acu)
        char *num, *acu;
 {
-       return(biz_dialer(num, "w"));
+
+       return (biz_dialer(num, "w"));
 }
 
 biz31f_dialer(num, acu)
        char *num, *acu;
 {
 }
 
 biz31f_dialer(num, acu)
        char *num, *acu;
 {
-       return(biz_dialer(num, "f"));
+
+       return (biz_dialer(num, "f"));
 }
 
 biz31_disconnect()
 {
 }
 
 biz31_disconnect()
 {
-       write(FD, DISCONNECT, 4);
+
+       write(FD, DISCONNECT_CMD, 4);
        sleep(2);
        ioctl(FD, TIOCFLUSH);
 }
 
 biz31_abort()
 {
        sleep(2);
        ioctl(FD, TIOCFLUSH);
 }
 
 biz31_abort()
 {
+
        write(FD, "\33", 1);
        write(FD, "\33", 1);
-       timeout = 1;
 }
 
 static int
 }
 
 static int
@@ -94,29 +100,30 @@ echo(s)
 {
        char c;
 
 {
        char c;
 
-       while (c = *s++)
-               switch(c)
-               {
-                       case '$':
-                               read(FD, &c, 1);
-                               s++;
-                               break;
-                       case '#':
-                               c = *s++;
-                               write(FD, &c, 1);
-                               break;
-                       default:
-                               write(FD, &c, 1);
-                               read(FD, &c, 1);
-               }
+       while (c = *s++) switch (c) {
+
+       case '$':
+               read(FD, &c, 1);
+               s++;
+               break;
+
+       case '#':
+               c = *s++;
+               write(FD, &c, 1);
+               break;
+
+       default:
+               write(FD, &c, 1);
+               read(FD, &c, 1);
+       }
 }
 
 static int
 sigALRM()
 {
 }
 
 static int
 sigALRM()
 {
-       signal(SIGALRM, SIG_IGN);
-       printf("\07timeout waiting for reply\n");
+
        timeout = 1;
        timeout = 1;
+       longjmp(timeoutbuf, 1);
 }
 
 static int
 }
 
 static int
@@ -124,21 +131,24 @@ detect(s)
        register char *s;
 {
        char c;
        register char *s;
 {
        char c;
+       int (*f)();
 
 
-       signal(SIGALRM, biz31_abort);
+       f = signal(SIGALRM, sigALRM);
        timeout = 0;
        timeout = 0;
-       while (*s)
-       {
+       while (*s) {
+               if (setjmp(timeoutbuf)) {
+                       printf("\07timeout waiting for reply\n");
+                       biz31_abort();
+                       break;
+               }
                alarm(number(value(DIALTIMEOUT)));
                read(FD, &c, 1);
                alarm(0);
                alarm(number(value(DIALTIMEOUT)));
                read(FD, &c, 1);
                alarm(0);
-               if (timeout)
-                       return(0);
                if (c != *s++)
                if (c != *s++)
-                       return(0);
+                       break;
        }
        }
-       signal(SIGALRM, SIG_DFL);
-       return(1);
+       signal(SIGALRM, f);
+       return (timeout == 0);
 }
 
 static int
 }
 
 static int
@@ -146,20 +156,18 @@ flush(s)
        register char *s;
 {
        char c;
        register char *s;
 {
        char c;
+       int (*f)();
 
 
-       signal(SIGALRM, sigALRM);
-       timeout = 0;
-       while (*s++)
-       {
+       f = signal(SIGALRM, sigALRM);
+       while (*s++) {
+               if (setjmp(timeoutbuf))
+                       break;
                alarm(10);
                read(FD, &c, 1);
                alarm(0);
                alarm(10);
                read(FD, &c, 1);
                alarm(0);
-               if (timeout)
-                       break;
        }
        }
-       signal(SIGALRM, SIG_DFL);
+       signal(SIGALRM, f);
        timeout = 0;                    /* guard against disconnection */
        timeout = 0;                    /* guard against disconnection */
-       return(1);
 }
 
 /*
 }
 
 /*
@@ -192,8 +200,8 @@ retry:
                if (chars(b) != 10) {
        nono:
                        if (already > MAXRETRY)
                if (chars(b) != 10) {
        nono:
                        if (already > MAXRETRY)
-                               return(0);
-                       write(fd, DISCONNECT, 4);
+                               return (0);
+                       write(fd, DISCONNECT_CMD, 4);
                        sleep(2);
                        already++;
                        goto retry;
                        sleep(2);
                        already++;
                        goto retry;
@@ -203,6 +211,5 @@ retry:
                                goto nono;
                }
        }
                                goto nono;
                }
        }
-       return(1);
+       return (1);
 }
 }
-#endif