have acucntrl show site called instead of "uucp"
[unix-history] / usr / src / usr.bin / uucp / libacu / mic.c
CommitLineData
1f59c325 1#ifndef lint
74040d36 2static char sccsid[] = "@(#)mic.c 4.2 (Berkeley) %G%";
1f59c325
RC
3#endif
4
5#include "../condevs.h"
6#ifdef MICOM
7
8/*
9 * micopn: establish connection through a micom.
10 * Returns descriptor open to tty for reading and writing.
11 * Negative values (-1...-7) denote errors in connmsg.
12 * Be sure to disconnect tty when done, via HUPCL or stty 0.
13 */
14micopn(flds)
15register char *flds[];
16{
17 extern errno;
18 char *rindex(), *fdig(), dcname[20];
19 int dh, ok = 0, speed;
20 register struct condev *cd;
21 register FILE *dfp;
22 struct Devices dev;
23
24 dfp = fopen(DEVFILE, "r");
25 ASSERT(dfp != NULL, "Can't open", DEVFILE, 0);
26
27 signal(SIGALRM, alarmtr);
28 dh = -1;
29 for(cd = condevs; ((cd->CU_meth != NULL)&&(dh < 0)); cd++) {
30 if (snccmp(flds[F_LINE], cd->CU_meth) == SAME) {
31 fseek(dfp, (off_t)0, 0);
32 while(rddev(dfp, &dev) != FAIL) {
33 if (strcmp(flds[F_CLASS], dev.D_class) != SAME)
34 continue;
35 if (snccmp(flds[F_LINE], dev.D_type) != SAME)
36 continue;
37 if (mlock(dev.D_line) == FAIL)
38 continue;
39
40 sprintf(dcname, "/dev/%s", dev.D_line);
41 getnextfd();
42 alarm(10);
43 if (setjmp(Sjbuf)) {
44 delock(dev.D_line);
45 logent(dev.D_line,"micom open TIMEOUT");
46 dh = -1;
47 break;
48 }
49 dh = open(dcname, 2);
50 alarm(0);
51 next_fd = -1;
52 if (dh > 0) {
53 break;
54 }
55 devSel[0] = '\0';
56 delock(dev.D_line);
57 }
58 }
59 }
60 fclose(dfp);
61 if (dh < 0)
62 return CF_NODEV;
63
64 speed = atoi(fdig(flds[F_CLASS]));
65 fixline(dh, speed);
66 sleep(1);
67
68 /* negotiate with micom */
69 if (speed != 4800) /* damn their eyes! */
70 write(dh, "\r", 1);
71 else
72 write(dh, " ", 1);
73
74 DEBUG(4, "wanted %s ", "SELECTION");
75 ok = expect("SELECTION", dh);
76 DEBUG(4, "got %s\n", ok ? "?" : "that");
77 if (ok == 0) {
78 write(dh, flds[F_PHONE], strlen(flds[F_PHONE]));
79 sleep(1);
80 write(dh, "\r", 1);
81 DEBUG(4, "wanted %s ", "GO");
82 ok = expect("GO", dh);
83 DEBUG(4, "got %s\n", ok ? "?" : "that");
84 }
85
86 if (ok != 0) {
87 if (dh > 2)
88 close(dh);
89 DEBUG(4, "micom failed\n", "");
90 delock(dev.D_line);
91 return(CF_DIAL);
92 }
93 else
94 DEBUG(4, "micom ok\n", "");
95
96 CU_end = cd->CU_clos;
97 strcat(devSel, dev.D_line); /* for later unlock */
98 return dh;
99}
100
101miccls(fd)
102register int fd;
103{
104
105 if (fd > 0) {
106 close(fd);
107 delock(devSel);
108 }
109}
110#endif MICOM