1 #ifndef lint 2 static char sccsid[] = "@(#)va212.c 4.2 (Berkeley) 06/23/85"; 3 #endif 4 5 #include "../condevs.h" 6 7 #ifdef VA212 8 va212opn(telno, flds, dev) 9 char *telno; 10 char *flds[]; 11 struct Devices *dev; 12 { 13 int dh = -1; 14 int i, ok, er = 0, delay; 15 extern errno; 16 char dcname[20]; 17 18 sprintf(dcname, "/dev/%s", dev->D_line); 19 if (setjmp(Sjbuf)) { 20 DEBUG(1, "timeout va212 open\n", 0); 21 logent("va212 open", "TIMEOUT"); 22 if (dh >= 0) 23 close(dh); 24 delock(dev->D_line); 25 return CF_NODEV; 26 } 27 signal(SIGALRM, alarmtr); 28 getnextfd(); 29 alarm(10); 30 dh = open(dcname, 2); 31 alarm(0); 32 33 /* modem is open */ 34 next_fd = -1; 35 if (dh < 0) { 36 DEBUG (4, errno == 4 ? "%s: no carrier\n" : "%s: can't open\n", 37 dcname); 38 delock(dev->D_line); 39 return errno == 4 ? CF_DIAL : CF_NODEV; 40 } 41 fixline(dh, dev->D_speed); 42 43 /* translate - to K for Vadic */ 44 DEBUG(4, "calling %s -> ", telno); 45 delay = 0; 46 for (i = 0; i < strlen(telno); ++i) { 47 switch(telno[i]) { 48 case '=': /* await dial tone */ 49 case '-': /* delay */ 50 case '<': 51 telno[i] = 'K'; 52 delay += 5; 53 break; 54 } 55 } 56 DEBUG(4, "%s\n", telno); 57 for(i = 0; i < TRYCALLS; ++i) { /* make TRYCALLS tries */ 58 /* wake up Vadic */ 59 sendthem("\005\\d", dh); 60 DEBUG(4, "wanted * ", CNULL); 61 ok = expect("*", dh); 62 DEBUG(4, "got %s\n", ok ? "?" : "that"); 63 if (ok != 0) 64 continue; 65 66 sendthem("D\\d", dh); /* "D" (enter number) command */ 67 DEBUG(4, "wanted NUMBER? ", CNULL); 68 ok = expect("NUMBER?", dh); 69 if (ok == 0) 70 ok = expect("\n", dh); 71 DEBUG(4, "got %s\n", ok ? "?" : "that"); 72 if (ok != 0) 73 continue; 74 75 /* send telno, send \r */ 76 sendthem(telno, dh); 77 DEBUG(4, "wanted %s ", telno); 78 ok = expect(telno, dh); 79 if (ok == 0) 80 ok = expect("\n", dh); 81 DEBUG(4, "got %s\n", ok ? "?" : "that"); 82 if (ok != 0) 83 continue; 84 85 sendthem("", dh); /* confirm number */ 86 DEBUG(4, "wanted %s ", "DIALING..."); 87 ok = expect("DIALING...", dh); 88 if (ok == 0) { 89 ok = expect("\n", dh); 90 DEBUG(4, "wanted ANSWER TONE", CNULL); 91 ok = expect("ANSWER TONE", dh); 92 if (ok == 0) 93 ok = expect("\n", dh); 94 } 95 DEBUG(4, "got %s\n", ok ? "?" : "that"); 96 if (ok == 0) 97 break; 98 } 99 100 if (ok == 0) { 101 DEBUG(4, "wanted ON LINE\\r\\n ", CNULL); 102 ok = expect("ON LINE\r\n", dh); 103 DEBUG(4, "got %s\n", ok ? "?" : "that"); 104 } 105 106 if (ok != 0) { 107 sendthem("I\\d", dh); /* back to idle */ 108 if (dh > 2) 109 close(dh); 110 DEBUG(4, "vadDial failed\n", CNULL); 111 delock(dev->D_line); 112 return CF_DIAL; 113 } 114 DEBUG(4, "va212 ok\n", 0); 115 return dh; 116 } 117 118 va212cls(fd) 119 { 120 if (fd > 0) { 121 close(fd); 122 sleep(5); 123 delock(devSel); 124 } 125 } 126 #endif VA212 127