1: #ifndef lint
   2: static char sccsid[] = "@(#)hysq.c	4.1 (Berkeley) 1/22/85";
   3: #endif
   4: 
   5: #include "../condevs.h"
   6: 
   7: #ifdef HAYESQ
   8: /*
   9:  * New dialout routine to work with Hayes' SMART MODEM
  10:  * 13-JUL-82, Mike Mitchell
  11:  * Modified 23-MAR-83 to work with Tom Truscott's (rti!trt)
  12:  * version of UUCP	(ncsu!mcm)
  13:  *
  14:  * The modem should be set to NOT send any result codes to
  15:  * the system (switch 3 up, 4 down). This end will figure out
  16:  * what is wrong.
  17:  *
  18:  * I had lots of problems with the modem sending
  19:  * result codes since I am using the same modem for both incomming and
  20:  * outgoing calls.  I'd occasionally miss the result code (getty would
  21:  * grab it), and the connect would fail.  Worse yet, the getty would
  22:  * think the result code was a user name, and send garbage to it while
  23:  * it was in the command state.  I turned off ALL result codes, and hope
  24:  * for the best.  99% of the time the modem is in the correct state.
  25:  * Occassionally it doesn't connect, or the phone was busy, etc., and
  26:  * uucico sits there trying to log in.  It eventually times out, calling
  27:  * clsacu() in the process, so it resets itself for the next attempt.
  28:  */
  29: 
  30: /*
  31:  * NOTE: this version is not for the faint-hearted.
  32:  * Someday it would be nice to have a single version of hayes dialer
  33:  * with a way to specify the switch settings that are on the dialer
  34:  * as well as tone/pulse.
  35:  * In the meantime, using HAYES rather than HAYESQ is probably best.
  36:  */
  37: 
  38: hysqpopn(telno, flds, dev)
  39: char *telno, *flds[];
  40: struct Devices *dev;
  41: {
  42:     return hysqopn(telno, flds, dev, 0);
  43: }
  44: 
  45: hysqtopn(telno, flds, dev)
  46: char *telno, *flds[];
  47: struct Devices *dev;
  48: {
  49:     return hysqopn(telno, flds, dev, 1);
  50: }
  51: 
  52: hysqopn(telno, flds, dev, toneflag)
  53: char *telno, *flds[];
  54: struct Devices *dev;
  55: int toneflag;
  56: {
  57:     char dcname[20], phone[MAXPH+10], c = 0;
  58: #ifdef  USG
  59:     struct termio ttbuf;
  60: #endif USG
  61:     int status, dnf;
  62:     unsigned timelim;
  63: 
  64:     signal(SIGALRM, alarmtr);
  65:     sprintf(dcname, "/dev/%s", dev->D_line);
  66: 
  67:     getnextfd();
  68:     if (setjmp(Sjbuf)) {
  69:         logent("DEVICE", "NO");
  70:         DEBUG(4, "Open timed out %s", dcname);
  71:         return CF_NODEV;
  72:     }
  73:     alarm(10);
  74: 
  75:     if ((dnf = open(dcname, 2)) <= 0) {
  76:         logent("DEVICE", "NO");
  77:         DEBUG(4, "Can't open %s", dcname);
  78:         return CF_NODEV;
  79:     }
  80: 
  81:     alarm(0);
  82:     next_fd = -1;
  83:     fixline(dnf, dev->D_speed);
  84:     DEBUG(4, "Hayes port - %s, ", dcname);
  85: 
  86:     if (toneflag)
  87:         sprintf(phone, "\rATDT%s\r", telno);
  88:     else
  89:         sprintf(phone, "\rATDP%s\r", telno);
  90: 
  91:     write(dnf, phone, strlen(phone));
  92: 
  93:     /* calculate delay time for the other system to answer the phone.
  94: 	 * Default is 15 seconds, add 2 seconds for each comma in the phone
  95: 	 * number.
  96: 	 */
  97:     timelim = 150;
  98:     while(*telno) {
  99:         c = *telno++;
 100:         if (c == ',')
 101:             timelim += 20;
 102:         else if (toneflag)
 103:             timelim += 2;   /* .2 seconds per tone */
 104:         else {
 105:             if (c == '0') timelim += 10;   /* .1 sec per digit */
 106:             else if (c > '0' && c <= '9')
 107:                 timelim += (c - '0');
 108:         }
 109:     }
 110:     alarm(timelim/10 + 1);
 111:     if (setjmp(Sjbuf) == 0) {
 112:         read(dnf, &c, 1);
 113:         alarm(0);
 114:     }
 115: 
 116:     return dnf;
 117: }
 118: 
 119: hysqcls(fd)
 120: int fd;
 121: {
 122:     char dcname[20];
 123:     struct sgttyb hup, sav;
 124: 
 125:     if (fd > 0) {
 126:         sprintf(dcname, "/dev/%s", devSel);
 127:         DEBUG(4, "Hanging up fd = %d\n", fd);
 128:         /*
 129: 		 * code to drop DTR -- change to 0 baud then back to default.
 130: 		 */
 131:         gtty(fd, &hup);
 132:         gtty(fd, &sav);
 133:         hup.sg_ispeed = B0;
 134:         hup.sg_ospeed = B0;
 135:         stty(fd, &hup);
 136:         sleep(2);
 137:         stty(fd, &sav);
 138:         /*
 139: 		 * now raise DTR -- close the device & open it again.
 140: 		 */
 141:         sleep(2);
 142:         close(fd);
 143:         sleep(2);
 144:         fd = open(dcname, 2);
 145:         /*
 146: 		 * Since we have a getty sleeping on this line, when it wakes up it sends
 147: 		 * all kinds of garbage to the modem.  Unfortunatly, the modem likes to
 148: 		 * execute the previous command when it sees the garbage.  The previous
 149: 		 * command was to dial the phone, so let's make the last command reset
 150: 		 * the modem.
 151: 		 */
 152:         sleep(2);
 153:         write(fd, "\rATZ\r", 5);
 154:         close(fd);
 155:         delock(devSel);
 156:     }
 157: }
 158: 
 159: #endif HAYESQ

Defined functions

hysqcls defined in line 119; never used
hysqopn defined in line 52; used 2 times
hysqpopn defined in line 38; never used
hysqtopn defined in line 45; never used

Defined variables

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