# 2.11BSD#431 - /usr/src/usr.bin/uucp/aculib/hysq.c

##### Functions

    hysqcls           X
    hysqopn           X
    hysqpopn          X
    hysqtopn          X

       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

- in line 42, 49

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: 1345 |