home *** CD-ROM | disk | FTP | other *** search
/ World of Shareware - Software Farm 2 / wosw_2.zip / wosw_2 / CPROG / PCL4C40.ZIP / MODEM_IO.C < prev    next >
Text File  |  1993-10-18  |  3KB  |  146 lines

  1. /*** MODEM_IO.C ***/
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include "pcl4c.h"
  6. #include "ascii.h"
  7. #include "term.h"
  8. #include "term.cfg"
  9.  
  10. #define FALSE 0
  11. #define TRUE !FALSE
  12. #define SECONDS 18
  13.  
  14. /* NOTE: Requires AT COMMAND SET for all functions in this file */
  15.  
  16. #if AT_COMMAND_SET
  17.  
  18. #include "modem_io.h"
  19.  
  20. void CmdState(int);
  21. void Hangup(int);
  22.  
  23. /*** send string to modem & get echo ***/
  24.  
  25. int SendTo(
  26.   int  Port,       /* port to talk to */
  27.   char *String)    /* string to send to modem */
  28. {int i;
  29.  char c;
  30.  int Code;
  31.  SioRxFlush(Port);
  32.  SioDelay(SECONDS/4);
  33.  for(i=0;i<strlen(String);i++)
  34.     {/* User BREAK ? */
  35.      if(BreakTest()) return(FALSE);
  36.      /* fetch character */
  37.      c = toupper( String[i] );
  38.      switch(c)
  39.         {case '!':
  40.             /* replace ! with carriage return */
  41.             c = CR;
  42.             break;
  43.          case '~':
  44.             /* delay 1/2 second */
  45.             SioDelay(SECONDS/2);
  46.             c = ' ';
  47.             break;
  48.          case ' ':
  49.             /* delay 1/4 second */
  50.             SioDelay(SECONDS/4);
  51.             break;
  52.         } /* end switch */
  53.      /* transmit as 7 bit character */
  54.      PutChar(Port,(char)(0x7f & c));
  55.      /* delay 3/18th of a second */
  56.      SioDelay(3);
  57.      /* wait up to 1 second for the echo */
  58.      Code = GetChar(Port,SECONDS);
  59.      if(Code>0) SioCrtWrite((char)Code);
  60.     }
  61.  return(TRUE);
  62. } /* end SendTo */
  63.  
  64. /*** wait for incoming string from modem ***/
  65.  
  66. int WaitFor(
  67.   int  Port,     /* Port to talk to */
  68.   char *String)  /* string to wait for */
  69. {int i, k;
  70.  char c;
  71.  int Code;
  72.  SioCrtWrite(LF);
  73.  /* flush leading LFs and CRs */
  74.  while(1)
  75.     {/* User BREAK ? */
  76.      if(BreakTest()) return(FALSE);
  77.      /* get next incoming character */
  78.      Code = GetChar(Port,2*SECONDS);
  79.         /* printf("{\n%x}",Code); */
  80.      if(Code==-1) break;
  81.      /* skip any leading CR or LF */
  82.      if(((char)Code!=LF)&&((char)Code!=CR))
  83.         {/* stuff character back & break out of loop */
  84.          SioUnGetc(Port,(char)Code);
  85.          break;
  86.         }
  87.      SioDelay(SECONDS/5);
  88.     }
  89.  /* wait for string */
  90.  for(i=0;i<strlen(String);i++)
  91.     {/* User BREAK ? */
  92.      if(BreakTest()) return(FALSE);
  93.      c = String[i];
  94.      /* wait up to 1 second for next character */
  95.      Code = GetChar(Port,SECONDS);
  96.         /* printf("(\n%x)",Code);*/
  97.      if(Code==-1) return(FALSE);
  98.      SioCrtWrite((char)Code);
  99.      if((char)Code != c)
  100.         {printf("\nExpecting %xH not %xH\n",c,Code);
  101.          return(FALSE);
  102.         }
  103.     } /* end for(i) */
  104.  /* another character ? */
  105.  Code = GetChar(Port,SECONDS);
  106.  if(Code>0) SioCrtWrite((char)Code);
  107.  return(TRUE);
  108. } /* end WaitFor */
  109.  
  110. /*** enter command state ***/
  111.  
  112. /* NOTE: assumes escape char = '+' & guard time = 1 sec */
  113.  
  114. void CmdState(int Port)
  115. {int i;
  116.  /* delay a bit over 1 second */
  117.  SioDelay(20);
  118.  /* send Escape Code exactly 3 times */
  119.  for(i=0;i<3;i++)
  120.     {SioPutc(Port,'+');
  121.      SioDelay(4);
  122.     }
  123.  /* delay again */
  124.  SioDelay(16);
  125. } /* end CmdState */
  126.  
  127. /*** hangup phone (in command state) ***/
  128.  
  129. void Hangup(int Port)
  130. {/* enter command state */
  131.  CmdState(Port);
  132.  /* hangup ! */
  133.  SendTo(Port,"!AT!");
  134.  SendTo(Port,"ATH0!");
  135. } /* end Hangup */
  136.  
  137. static int BreakTest()
  138. {/* User BREAK ? */
  139.  if(SioBrkKey())
  140.     {printf("User BREAK\n");
  141.      return(TRUE);
  142.     }
  143.  else return(FALSE);
  144. } /* end BreakTest */
  145. #endif
  146.