home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / TELECOM / tterm_src.lzh / dial.c < prev    next >
Text File  |  1996-03-04  |  5KB  |  219 lines

  1. /*********************************************************************
  2. dial.c - dialing routines for tterm
  3. *********************************************************************/
  4. #include "common.h"
  5.  
  6. #define DIRECTORY "/USR/TTERM/"
  7. #define EXTENSION ".dial"       /* append to username */
  8. #define MAXUNLEN FILENAME_MAX-5 /* truncate user name if necessary */
  9. #define MAXENTRYS 10            /* for now */
  10.  
  11. typedef struct host
  12.     {
  13.     char 
  14.         namestr[32],
  15.         dialstr[32];
  16.     } HOSTLIST;
  17.  
  18. HOSTLIST *hostlist;
  19.  
  20. char 
  21.     dialerfile[128],    /* name of dialer file */
  22.     *m_responses[]={    /* modem responses */
  23. "CONNECT","NO CARRIER","NO DIALTONE","BUSY","NO ANSWER","ERROR","OK",0};
  24.  
  25. extern void 
  26.     DialerToScreen(int);
  27. extern int 
  28.     DialerCleanup(void);
  29.     
  30. /*********************************************************************
  31. SET the DIALER FILE
  32. *********************************************************************/
  33. SetDialerFile()
  34. {
  35. char *t;
  36.  
  37. strcpy(dialerfile,DIRECTORY);
  38.  
  39. t=getenv("USER");     /* get the user name */
  40. if(t == 0)
  41.     t="generic";
  42. sprintf(dialerfile,"%s%s%s%s",SysDev(),DIRECTORY,t,EXTENSION);
  43. tprint("Dialer file is ");tprint(dialerfile);tprint("\012\n");
  44. }
  45.  
  46. /*********************************************************************
  47. DIALER
  48. *********************************************************************/
  49. Dialer()
  50. {
  51. u_int32 interval=g_tickrate/6;
  52. u_int32 snooze;
  53. signal_code wakeup;
  54. int khar;
  55. char 
  56.     *t,
  57.     dialstr[32];
  58.  
  59. t_puts("Checking For Modem...");
  60. m_puts("AT\n");
  61. if(WaitSerial(5) == 0)
  62.     {
  63.     tprint(
  64.      "\012\nModem is not responding or is not attached to this port\012\n");
  65.     return 0;
  66.     }
  67. ClearLine();
  68. t_puts("OK.\012\n");
  69.  
  70. if(GetNumber(dialstr) == -1)
  71.     {
  72.     tprint("ABORTED!\012\n");
  73.     return 0;
  74.     }
  75. t_puts("\012\nDialing...");
  76. t=dialstr;
  77. while(*t)
  78.     {
  79.     m_putc(*t++);
  80.     while(!ModemReady());
  81.     khar=m_getc();
  82.     ToScreen(khar);
  83.     }
  84. T_PutC = DialerToScreen;
  85. }
  86.  
  87. /*********************************************************************
  88. DIALER TO SCREEN function - this isn't necessary but I wrote it in JIC
  89.     I ever figure out how to make a decent login macro work
  90. *********************************************************************/
  91. void DialerToScreen(int khar)
  92. {
  93. static char 
  94.     to[80],
  95.     *ip=to;
  96. int cntr;
  97.  
  98. ToScreen(khar);         /* have to write it out anyway */
  99.  
  100. *ip++ = khar;
  101. if(khar == 0x0A)        /* if a linefeed */
  102.     {
  103.     *ip = 0;
  104.     ip = to;
  105.     cntr = 0;
  106.     while(m_responses[cntr] != 0)   /* check for valid final message */
  107.         {
  108.         if(strstr(to,m_responses[cntr++]) != 0)
  109.             nextphase = TRUE;
  110.         }
  111.     }
  112. }
  113.  
  114. /*********************************************************************
  115. GET a NUMBER to dial - returns -1 on error
  116. *********************************************************************/
  117. GetNumber(char *dialstr)
  118. {
  119. FILE *fpath;
  120. int cntr,top,listsize;
  121. int status,rtn;
  122. HOSTLIST *host;
  123. char outstr[80];
  124.  
  125. fpath=fopen(dialerfile,"r");
  126. if(fpath == 0)
  127.     {
  128.     tprint("\012\nUnable to open dial directory ");
  129.     tprint(dialerfile); tprint("\012\n");
  130.     return -1;
  131.     }
  132.  
  133. top=MAXENTRYS;
  134. listsize=0;
  135. hostlist=malloc(sizeof(HOSTLIST) * top);
  136. if(hostlist == 0)
  137.     return -1;
  138.  
  139. host=hostlist;
  140. status=0;
  141. while(status != 1)
  142.     {
  143.     status=LoadDialRecord(host,fpath);
  144.     if(status == 0)
  145.         {
  146.         host++;
  147.         listsize++;
  148.         if(listsize >= top)
  149.             break;
  150.         }
  151.     }
  152. fclose(fpath);
  153. if(listsize == 0)       /* if no entrys */
  154.     {
  155.     tprint(dialerfile); tprint(" has no valid entries!\012\n");
  156.     return -1;
  157.     }
  158. tprint("\012\nDialing directory from ");
  159. tprint(dialerfile); tprint("\012\012\n");
  160. for(cntr=0; cntr < listsize; cntr++)
  161.     {
  162.     sprintf(outstr,"%d. %s\012\n",cntr,hostlist[cntr].namestr);
  163.     tprint(outstr);
  164.     }
  165.  
  166. t_puts("Selection? ");
  167. eatterminal();
  168. status=GetOneChar();
  169. status-=0x30;
  170. if(status < 0 || status > listsize)
  171.     rtn=-1;
  172. else
  173.     {
  174.     strcpy(dialstr,hostlist[status].dialstr);
  175.     rtn=1;
  176.     }
  177. free(hostlist);
  178. return rtn;
  179. }
  180.  
  181.  
  182. /*********************************************************************
  183. LOAD a DIALer RECORD - currently only two lines are relevant
  184.     returns 0 if an entire record and terminator read
  185.             1 if end of file
  186.            -1 if error in record entry
  187. *********************************************************************/
  188. LoadDialRecord(h,fpath)
  189. HOSTLIST *h;
  190. FILE *fpath;
  191. {
  192. char instring[128];
  193.  
  194. /* get the host name */
  195. if(fgets(instring,128,fpath) == 0)
  196.     return 1;
  197. if(instring[0] == '/' && instring[1] == '/')
  198.     return -1;
  199. strncpy(h->namestr,instring,31);
  200.  
  201. /* get the dial string */
  202. if(fgets(instring,128,fpath) == 0)
  203.     return 1;
  204. if(instring[0] == '/' && instring[1] == '/')
  205.     return -1;
  206. strncpy(h->dialstr,instring,31);
  207.  
  208. /*  search for a '//' or EOF -- this lets us add entrys later w/o 
  209.     sacrificing compatability */
  210.  
  211. while(fgets(instring,128,fpath) != 0)
  212.     {
  213.     if(instring[0] == '/' && instring[1] == '/')
  214.     return 0;
  215.     }
  216. return 1;
  217. }
  218.  
  219.