home *** CD-ROM | disk | FTP | other *** search
- /*** MODEM_IO.C ***/
-
- #include <stdio.h>
- #include "pcl4c.h"
- #include "ascii.h"
-
- #define FALSE 0
- #define TRUE !FALSE
- #define SECONDS 18
-
- /*** send string to modem & get echo ***/
-
- int SendTo(Port,String)
- int Port; /* port to talk to */
- char *String; /* string to send to mdoem */
- {int i;
- char c;
- int Code;
- SioRxFlush(Port);
- SioDelay(SECONDS/4);
- for(i=0;i<strlen(String);i++)
- {/* User BREAK ? */
- if(BreakTest()) return(FALSE);
- /* fetch character */
- c = toupper( String[i] );
- switch(c)
- {case '!':
- /* replace ! with carriage return */
- c = CR;
- break;
- case '~':
- /* delay 1/2 second */
- SioDelay(SECONDS/2);
- c = ' ';
- break;
- case ' ':
- /* delay 1/4 second */
- SioDelay(SECONDS/4);
- break;
- } /* end switch */
- /* transmit as 7 bit character */
- PutChar(Port,(char)(0x7f & c));
- /* delay 3/18th of a second */
- SioDelay(3);
- /* wait up to 1 second for the echo */
- Code = GetChar(Port,SECONDS);
- if(Code>0) SioCrtWrite((char)Code);
- }
- return(TRUE);
- } /* end SendTo */
-
- /*** wait for incoming string from modem ***/
-
- int WaitFor(Port,String)
- int Port; /* Port to talk to */
- char *String; /* string to wait for */
- {int i, k;
- char c;
- int Code;
- SioCrtWrite(LF);
- /* flush leading LFs and CRs */
- while(1)
- {/* User BREAK ? */
- if(BreakTest()) return(FALSE);
- /* get next incoming character */
- Code = GetChar(Port,2*SECONDS);
- /* printf("{\n%x}",Code); */
- if(Code==-1) break;
- /* skip any leading CR or LF */
- if(((char)Code!=LF)&&((char)Code!=CR))
- {/* stuff character back & break out of loop */
- SioUnGetc(Port,(char)Code);
- break;
- }
- SioDelay(SECONDS/5);
- }
- /* wait for string */
- for(i=0;i<strlen(String);i++)
- {/* User BREAK ? */
- if(BreakTest()) return(FALSE);
- c = String[i];
- /* wait up to 1 second for next character */
- Code = GetChar(Port,SECONDS);
- /* printf("(\n%x)",Code);*/
- if(Code==-1) return(FALSE);
- SioCrtWrite((char)Code);
- if((char)Code != c)
- {printf("\nExpecting %xH not %xH\n",c,Code);
- return(FALSE);
- }
- } /* end for(i) */
- /* another character ? */
- Code = GetChar(Port,SECONDS);
- if(Code>0) SioCrtWrite((char)Code);
- return(TRUE);
- } /* end WaitFor */
-
- int BreakTest()
- {/* User BREAK ? */
- if(SioBrkKey())
- {printf("User BREAK\n");
- return(TRUE);
- }
- else return(FALSE);
- }