home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 2 / goldfish_vol2_cd1.bin / files / comm / misc / modem / modem.c < prev    next >
C/C++ Source or Header  |  1993-09-04  |  4KB  |  183 lines

  1. /*
  2.  * Modem setup/dialer program.  Usage is: modem [-d Device] [-n number]
  3.  * 
  4.  * $Revision: 1.1 $ $Author: srn $ $Log: modem.c,v $
  5.  * Revision 1.1  1993/09/04  11:42:33  srn
  6.  * Initial revision
  7.  *
  8.  */
  9.  
  10. /*
  11.         This program is copyright 1990, 1993 Stephen Norris. 
  12.         May be freely distributed provided this notice remains intact.
  13. */
  14.  
  15.  
  16. #include <exec/types.h>
  17. #include <devices/serial.h>
  18. #include <dos/dos.h>
  19. #include <stdio.h>
  20. #include <stdlib.h>
  21. #include <string.h>
  22.  
  23. #include <clib/dos_protos.h>
  24.  
  25. #include "t:DateHeader.h"
  26. #define VERSIONTEXT "Modem 0.10 " __AMIGADATE__;
  27. const char Version[] = "$VER: " VERSIONTEXT;
  28.  
  29. const char Template[] = "DEVICE,UNIT/N";
  30. char   *Device = "serial.device";
  31. int     Unit = 0;
  32. int     SerOpen = FALSE;    /* Flag set if the serial device is open. */
  33.  
  34. struct MsgPort *SerialMP = NULL;    /* Port for replies to io messages to go
  35.  
  36.                        * to. */
  37. struct IOExtSer *SerialIO = NULL;    /* Data structure used for
  38.  
  39.                      * messages to device. */
  40. struct IOExtSer *IncomingIO = NULL;    /* Structure for incoming
  41.  
  42.                      * characters. */
  43. void    OpenAll();
  44. void    CloseAll();
  45.  
  46. void
  47. OpenAll()
  48. {
  49.     if ((SerialMP = (struct MsgPort *) CreatePort(0, 0)) == NULL) {
  50.         printf("Can't create message port.\n");
  51.         CloseAll();
  52.         exit(30);
  53.     }
  54.     if ((SerialIO = (struct IOExtSer *) CreateExtIO(SerialMP, sizeof(struct IOExtSer))) == NULL) {
  55.         printf("Can't allocate storage for ExtIO.\n");
  56.         CloseAll();
  57.         exit(30);
  58.     }
  59.     if ((IncomingIO = (struct IOExtSer *) CreateExtIO(SerialMP, sizeof(struct IOExtSer))) == NULL) {
  60.         printf("Can't allocate storage for ExtIO.\n");
  61.         CloseAll();
  62.         exit(30);
  63.     }
  64.     SerialIO->io_SerFlags = SERF_SHARED;    /* Turn on SHARED Mode */
  65.  
  66.     if ((SerOpen = !OpenDevice(Device, (long) Unit, SerialIO, 0L)) == NULL) {
  67.         printf("Can't open %s unit %ld.\n", Device, (long) Unit);
  68.         CloseAll();
  69.         exit(30);
  70.     }
  71.     memcpy(IncomingIO, SerialIO, sizeof(struct IOExtSer));
  72.  
  73.     if (!conInit()){
  74.         printf("Console setup failed.\n");
  75.         CloseAll();
  76.         exit(30);
  77.     }
  78. }
  79.  
  80. void
  81. CloseAll()
  82. {
  83.  
  84.     conClose();
  85.  
  86.     if (SerOpen)
  87.         CloseDevice(SerialIO);
  88.  
  89.     if (IncomingIO)
  90.         DeleteExtIO(IncomingIO);
  91.  
  92.     if (SerialIO)
  93.         DeleteExtIO(SerialIO);
  94.  
  95.     if (SerialMP)
  96.         DeletePort(SerialMP);
  97. }
  98.  
  99. void
  100. Break()
  101. {
  102.     printf("*** Break\n");
  103.     CloseAll();
  104.     exit(30);
  105. }
  106.  
  107. void
  108. main(int argc, char *argv[])
  109. {
  110.     struct    RDArgs *Args;
  111.     long    ArgRes[2] = {0, 0};
  112.     int     Done = 0;
  113.  
  114.     /* Handle arguments. */
  115.     if ((Args = ReadArgs(Template, ArgRes, NULL)) == NULL){
  116.         printf("Usage: %s\n", Template);
  117.         CloseAll();
  118.         exit(30);
  119.     }
  120.  
  121.     if (ArgRes[0] != 0){
  122.         Device = strdup((char *)ArgRes[0]);
  123.     }
  124.     if (ArgRes[1] != 0){
  125.         Unit = atol((char *)ArgRes[1]);
  126.     }
  127.  
  128.     FreeArgs(Args);
  129.  
  130.     OpenAll();
  131.     onbreak(Break);
  132.  
  133.     while (!Done) {
  134.         char    Buffer;
  135.         int     length;
  136.         char   *InBuffer;
  137.  
  138.         if (WaitForChar(Input(), 100000)) {
  139.             Buffer = getchar();
  140.             if (Buffer == '\n')
  141.                 Buffer = '\r';
  142.  
  143.             SerialIO->IOSer.io_Command = CMD_WRITE;
  144.             SerialIO->IOSer.io_Length = 1;
  145.             SerialIO->IOSer.io_Data = (APTR) &Buffer;
  146.             if (DoIO(SerialIO) != NULL) {
  147.                 printf("Failed write.\n");
  148.                 CloseAll();
  149.                 exit(30);
  150.             }
  151.         }
  152.         /* Serial input? */
  153.         IncomingIO->IOSer.io_Command = SDCMD_QUERY;
  154.         IncomingIO->IOSer.io_Actual = 0;
  155.         if (DoIO(IncomingIO) != NULL) {
  156.             printf("Failed SDCMD_QUERY\n");
  157.             CloseAll();
  158.             exit(30);
  159.         }
  160.         if ((length = IncomingIO->IOSer.io_Actual) > 0) {
  161.             if ((InBuffer = malloc(length+1)) == NULL) {
  162.                 printf("Out of memory\n");
  163.                 CloseAll();
  164.                 exit(30);
  165.             }
  166.             IncomingIO->IOSer.io_Command = CMD_READ;
  167.             IncomingIO->IOSer.io_Length = length;
  168.             IncomingIO->IOSer.io_Data = InBuffer;
  169.             if (DoIO(IncomingIO) != NULL) {
  170.                 printf("Failed read.\n");
  171.                 free(InBuffer);
  172.                 CloseAll();
  173.                 exit(30);
  174.             }
  175.             Write (Output(), InBuffer, length);
  176.  
  177.             free(InBuffer);
  178.         }
  179.     }
  180.     CloseAll();
  181.     exit(0);
  182. }
  183.