home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Amiga 13 / MA_Cover_13.bin / source / c / stefanb_src / private_projects / fax / watcher2.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-09-06  |  2.9 KB  |  126 lines

  1. #include "serio.h"
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <stdio.h>
  5. #include <clib/dos_protos.h>
  6.  
  7. static struct ReadArgs *rda;
  8. static char Template[]="DEVICE/K,UNIT/K/N,BAUD/K/N,RECEIVER/K,PATH/K";
  9. static struct {
  10.                char *device;
  11.                long *unit;
  12.                long *baud;
  13.                char *receiver;
  14.                char *path;
  15.               } def={"serial.device",NULL,NULL,"receivefax2","FAX:"};
  16. static struct SerialStream *ss;
  17. static BOOL notend;
  18. static UBYTE buffer[1024];
  19.  
  20. /* Read one reply line from modem */
  21. static void ReadLine(void *buf)
  22. {
  23.  char c='\0',*cp=buf;
  24.  
  25.  /* Read until EOL is reached */
  26.  while (c!='\n')
  27.   {
  28.    if (ReadSerialSynch(ss,&c,1)==0) break;
  29.    *cp++=c;
  30.   }
  31.  
  32.  /* Terminate string */
  33.  *cp='\0';
  34. }
  35.  
  36. /* CTRL-C shutdown routine */
  37. static int Shutdown(void)
  38. {
  39.  notend=FALSE;
  40.  return(0);
  41. }
  42.  
  43. int main(int argc, char *argv[])
  44. {
  45.  int (*oldbreak)();
  46.  ULONG Unit,Baud;
  47.  
  48.  /* Read command line arguments */
  49.  if (!(rda=ReadArgs(Template,(LONG *) &def,NULL)))
  50.   {
  51.    PrintFault(IoErr(),argv[0]);
  52.    exit(20);
  53.   }
  54.  Unit=(def.unit)?(*def.unit):0;
  55.  Baud=(def.baud)?(*def.baud):19200;
  56.  
  57.  /* Set CTRL-C shut down routine */
  58.  notend=TRUE;
  59.  oldbreak=onbreak(Shutdown);
  60.  printf("Monitoring device '%s' unit %ld (%ldbps)\n",def.device,Unit,Baud);
  61.  printf("FAX Parameters - Receiver: '%s'  Path: '%s'\n",def.receiver,def.path);
  62.  
  63.  /* Open serial stream */
  64.  if (ss=CreateSerialStream(def.device,Unit,
  65.                            SERF_SHARED|SERF_7WIRE|SERF_RAD_BOOGIE))
  66.   {
  67.    ULONG faxnumber=1;
  68.  
  69.    if (SetSerialParamsTags(ss,SIO_Baud,Baud,TAG_DONE))
  70.     while (notend)
  71.      {
  72.       /* Reset modem */
  73.       WriteSerialSynch(ss,"ATZ\r",4);
  74.       Delay(100);
  75.       ClearSerial(ss);
  76.  
  77.       /* Init Modem */
  78.       WriteSerialSynch(ss,"AT+fclass=0+fcr=1+fbor=1\r",25);
  79.       Delay(50);
  80.       ReadLine(buffer);
  81.       printf("%s",buffer);
  82.  
  83.       /* Wait for FAX connect */
  84.       while (notend)
  85.        {
  86.         /* Wait on modem reply */
  87.         ReadLine(buffer);
  88.         printf("%s",buffer);
  89.  
  90.         /* FAX connect message? */
  91.         if (!strncmp("+FCON",buffer,5))
  92.          {
  93.           LONG rc;
  94.  
  95.           /* Yes. Build FAX receiver command line */
  96.           sprintf(buffer,"%s DEVICE %s UNIT %ld BAUD %ld FILE %s/fax%04ld",
  97.                   def.receiver,def.device,Unit,Baud,def.path,faxnumber);
  98.  
  99.           /* Start FAX receiver */
  100.           rc=SystemTags(buffer,TAG_DONE);
  101.  
  102.           /* Analyse return code */
  103.           if (rc==-1) puts("Couldn't start FAX receiver!");
  104.           else if (rc>0) puts("Error in FAX receiver!");
  105.           else faxnumber++;
  106.  
  107.           /* Leave connect loop */
  108.           break;
  109.          }
  110.        }
  111.      }
  112.    else printf("Couldn't set parameters!\n");
  113.  
  114.    /* Free resources */
  115.    DeleteSerialStream(ss);
  116.   }
  117.  else printf("Couldn't open stream!\n");
  118.  
  119.  /* Free command line argumets */
  120.  FreeArgs(rda);
  121.  
  122.  /* Leave program */
  123.  onbreak(oldbreak);
  124.  return(0);
  125. }
  126.