home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / alde_c / misc / lib / r_la4_02 / comtest.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-01-16  |  2.5 KB  |  75 lines

  1. /* COMTEST.C - From page 499 of "Microsoft C Programming for    */
  2. /* the IBM" by Robert Lafore. Program tests automatic command   */
  3. /* transmission to modem. Program works at 300 bpi. To work     */
  4. /* at 1200 with PC or XT, add the clscr() and putscr() func-    */
  5. /* tions from the SER1200.C program and change CONF to 0x83.    */
  6. /****************************************************************/
  7.  
  8. #include "dos.h"              /*for union REGS */
  9. #define COM 1                 /*serial port no. (0 = COM1, 1 = COM2)*/
  10. #define CONF 0x43             /*300 bpi, no par, 1 stop, 8 bits*/
  11. #define RS232 0x14            /*RS232 serial port interrupt number*/
  12. #define DATAR 0x100           /*data ready bit in status word*/
  13. char *comstr = "AT Z\r";      /*modem reset command*/
  14. union REGS inregs, outregs;   /*for ROM BIOS calls*/
  15.  
  16. main()
  17. {
  18. char ch, receive();
  19. int j, k;
  20. init();
  21.  
  22.    for(j = 0; (ch = *(comstr + j)) != '\0'; j++)  {     /*send command*/
  23.       send(ch);               /*send char to modem*/
  24.       while(!ready())         /*wait for echo*/
  25.          ;
  26.       ch = receive();         /*get echo*/
  27.       putch(ch);
  28.    }
  29.    do  {
  30.       while(!ready())         /*wait for response char*/
  31.          ;
  32.       ch = receive();         /*get response*/
  33.       putch(ch);
  34.    } while(ch != 'K');        /*quit on 'K' in "OK"*/
  35. }
  36.  
  37. /* init() */      /* initialize serial port */
  38. init(conf)
  39. char conf;        /*addr of configuration code*/
  40. {
  41.    inregs.h.ah = 0;        /* 'initialize port' service */
  42.    inregs.x.dx = COM;      /*port number*/
  43.    inregs.h.al = CONF;     /*configuration*/
  44.    int86(RS232, &inregs, &outregs);
  45. }
  46.  
  47. /* send() */      /* send char to serial port */
  48. send(c)
  49. char c;
  50. {
  51.    inregs.h.ah = 1;        /* 'send char' service */
  52.    inregs.x.dx = COM;      /*port number*/
  53.    inregs.h.al = c;        /*character*/
  54.    int86(RS232, &inregs, &outregs);
  55. }
  56.  
  57. /* ready */    /* get serial port ready status */
  58. ready()
  59. {
  60.    inregs.h.ah = 3;        /* 'get status' service */
  61.    inregs.x.dx = COM;      /*port number*/
  62.    int86(RS232, &inregs, &outregs);
  63.    return(outregs.x.ax & DATAR);    /*return 'data ready' status*/
  64. }
  65.  
  66. /* receive */     /* get character from serial port */
  67. char receive()
  68. {
  69.    inregs.h.ah = 2;        /* 'receive char' service */
  70.    inregs.x.dx = COM;      /*port number*/
  71.    int86(RS232, &inregs, &outregs);
  72.    return(outregs.h.al & 0x7F);     /*return character*/
  73.                                     /* (AND off 8th bit*/
  74. }
  75.