1: #ifndef lint
   2: static char sccsid[] = "@(#)sy.c	4.1 (Berkeley) 1/22/85";
   3: #endif
   4: 
   5: #include "../condevs.h"
   6: 
   7: #ifdef SYTEK
   8: 
   9: /*
  10:  *	sykopn: establish connection through a sytek port.
  11:  *	Returns descriptor open to tty for reading and writing.
  12:  *	Negative values (-1...-7) denote errors in connmsg.
  13:  *	Will try to change baud rate of local port to match
  14:  *	that of the remote side.
  15:  */
  16: char sykspeed[50];  /* speed to reset to on close */
  17: 
  18: sykopn(flds)
  19: register char *flds[];
  20: {
  21:     extern errno;
  22:     char *rindex(), *fdig(), dcname[20];
  23:     int dh, ok = 0, speed;
  24:     register FILE *dfp;
  25:     struct Devices dev;
  26:     char speedbuf[50];
  27: 
  28:     dfp = fopen(DEVFILE, "r");
  29:     ASSERT(dfp != NULL, "Can't open", DEVFILE, 0);
  30: 
  31:     signal(SIGALRM, alarmtr);
  32:     dh = -1;
  33:     while(rddev(dfp, &dev) != FAIL) {
  34: /* we'll set our own speed; F_CLASS is how cynthia configures it every night
  35: 		if (strcmp(flds[F_CLASS], dev.D_class) != SAME)
  36: 			continue;
  37: */
  38:         if (snccmp(flds[F_LINE], dev.D_type) != SAME)
  39:             continue;
  40:         if (mlock(dev.D_line) == FAIL)
  41:             continue;
  42: 
  43:         sprintf(dcname, "/dev/%s", dev.D_line);
  44:         getnextfd();
  45:         alarm(10);
  46:         if (setjmp(Sjbuf)) {
  47:             delock(dev.D_line);
  48:             logent(dev.D_line,"sytek open TIMEOUT");
  49:             dh = -1;
  50:             break;
  51:             }
  52:         dh = open(dcname, 2);
  53:         alarm(0);
  54:         next_fd = -1;
  55:         if (dh > 0) {
  56:             break;
  57:             }
  58:         devSel[0] = '\0';
  59:         delock(dev.D_line);
  60:     }
  61:     fclose(dfp);
  62:     if (dh < 0)
  63:         return(CF_NODEV);
  64: 
  65:     speed = atoi(fdig(dev.D_class));
  66:     fixline(dh, speed);
  67:     sleep(1);
  68: 
  69:     /* negotiate with sytek */
  70:     genbrk(dh, 3);
  71: 
  72:     DEBUG(4, "wanted %s ", "#");
  73:     ok = expect("#", dh);
  74:     DEBUG(4, "got %s\n", ok ? "?" : "that");
  75:     if(ok != 0){
  76:         if(atoi(fdig(dev.D_class)) == 9600){
  77:             fixline(dh, 2400);
  78:             speed = 2400;
  79:         } else {
  80:             fixline(dh, 9600);
  81:             speed = 9600;
  82:         }
  83:         sleep(1);
  84:         genbrk(dh, 3);
  85:         ok = expect("#", dh);
  86:         if(ok){
  87:             close(dh);
  88:             DEBUG(4, "sytek BREAK failed\n", "");
  89:             delock(dev.D_line);
  90:             return(CF_DIAL);
  91:         }
  92:     }
  93:     write(dh, "done \r", 6);
  94:     ok = expect("#", dh);
  95:     DEBUG(4, "got %s\n", ok ? "?" : "that");
  96:     if(speed != atoi(fdig(flds[F_CLASS]))){
  97:         DEBUG(4, "changing speed\n", "");
  98:         sprintf(speedbuf, "baud %s\r", fdig(flds[F_CLASS]));
  99:         write(dh, speedbuf, strlen(speedbuf));
 100:         sleep(1);
 101:         speed = atoi(fdig(flds[F_CLASS]));
 102:         fixline(dh, speed);
 103:         genbrk(dh, 3);
 104:         ok = expect("#", dh);
 105:         DEBUG(4, "speed set %s\n", ok ? "failed" : flds[F_CLASS]);
 106:     }
 107:     strcpy(sykspeed, dev.D_class);
 108:     write(dh, "command break\r", 14);
 109:     ok = expect("#", dh);
 110:     DEBUG(4, "got %s\n", ok ? "?" : "that");
 111:     if (ok == 0) {
 112:         write(dh, "call ", 5);
 113:         write(dh, flds[F_PHONE], strlen(flds[F_PHONE]));
 114:         write(dh, "\r", 1);
 115:         DEBUG(4, "sytek dial %s\n", flds[F_PHONE]);
 116:         DEBUG(4, "wanted %s ", "COMPLETED TO ");
 117:         ok = expect("COMPLETED TO ", dh);
 118:         DEBUG(4, "got %s\n", ok ? "?" : "that");
 119:     }
 120: 
 121:     if (ok != 0) {
 122:         close(dh);
 123:         DEBUG(4, "sytek failed\n", "");
 124:         delock(dev.D_line);
 125:         return(CF_DIAL);
 126:     } else
 127:         DEBUG(4, "sytek ok\n", "");
 128: 
 129:     CU_end = sykcls;
 130:     strcpy(devSel, dev.D_line); /* for later unlock */
 131:     return(dh);
 132: 
 133: }
 134: 
 135: sykcls(fd)
 136: register int fd;
 137: {
 138:     register int ok, speed;
 139: 
 140: 
 141:     if (fd > 0) {
 142:         genbrk(fd, 3);
 143:         ok = expect("#", fd);
 144:         DEBUG(4, "got %s\n", ok ? "?" : "that");
 145:         if(ok != 0){
 146:             genbrk(fd, 3);
 147:             ok = expect("#", fd);
 148:         }
 149:         if(ok == 0){
 150:             write(fd, "done 1\r", 7);
 151:             ok = expect("#", fd);
 152:             DEBUG(4, "got %s\n", ok ? "?" : "that");
 153:             DEBUG(4, "reset baud to %s\n", sykspeed);
 154:             write(fd, "baud ", 5);
 155:             write(fd, sykspeed, strlen(sykspeed));
 156:             write(fd, "\r", 1);
 157:             sleep(1);
 158:         }
 159:         close(fd);
 160:         delock(devSel);
 161:     }
 162: }
 163: #endif SYTEK

Defined functions

sykcls defined in line 135; used 1 times
sykopn defined in line 18; never used

Defined variables

sccsid defined in line 2; never used
sykspeed defined in line 16; used 4 times
Last modified: 1987-02-17
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 3356
Valid CSS Valid XHTML 1.0 Strict