home *** CD-ROM | disk | FTP | other *** search
/ High Voltage Shareware / high1.zip / high1 / DIR24 / OTHL_100.ZIP / GIO-100.ZIP / GIO-1.C next >
Text File  |  1992-11-27  |  3KB  |  138 lines

  1. ///////////////////////////////////////////////////////////////////////////
  2. //                                                                       //
  3. // GIO-1.C  Text based GIO example                                       //
  4. //                                                                       //
  5. //                                                                       //
  6. ///////////////////////////////////////////////////////////////////////////
  7.  
  8. #define INCL_BASE
  9. #include <os2.h>
  10.  
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #include <string.h>
  14. #include <malloc.h>
  15. #include "gio.h"
  16.  
  17. SHORT CommIn(VOID);
  18. SHORT CommOut(VOID);
  19. VOID ErrExit(CHAR *);
  20.  
  21. // some of my bad C programming habits..
  22. #define AND  &&
  23. #define OR   ||
  24. #define NOT  !
  25.  
  26. #define EXITKEY 0x2D
  27. #define CLRSCRN 0x2E
  28.  
  29. CHAR    TempString[80];
  30.  
  31. void main(SHORT ArgCount, CHAR **ArgVars)
  32. {
  33.     BOOL    KeepLooping = TRUE;
  34.     CHAR    ComPort[6];
  35.     SHORT   PortNumber;
  36.     KBDINFO KBStatus;
  37.  
  38.     if (ArgCount < 2)
  39.         ErrExit("\nUsage:  GIO-1 comport#\n");
  40.  
  41.     strcpy(TempString, "Com... A test for Gern's IO routines...\n\r");
  42.     VioWrtTTY(TempString, strlen(TempString), 0);
  43.  
  44.     // Set up keyboard
  45.  
  46.     KBStatus.cb = sizeof(KBStatus);
  47.     KbdGetStatus(&KBStatus, 0);
  48.  
  49.     KBStatus.fsMask &= 0xFFF0;
  50.     KBStatus.fsMask |= KEYBOARD_ECHO_OFF | KEYBOARD_BINARY_MODE;
  51.     KbdSetStatus(&KBStatus, 0);
  52.  
  53.     // set up com port.. just for the heck of it.. GIO actually does this
  54.  
  55.     sprintf(ComPort, "COM%c", ArgVars[1][0]);
  56.  
  57.     // Open Com Port "COMx" just like a file..
  58.  
  59.     PortNumber = atoi(ArgVars[1]);
  60.  
  61.     if (ComOpen(NULL, PortNumber, 19200, 'N', 8, 1, 128, 128, 0))
  62.         ErrExit("\nCan't Open Com1!\n");
  63.  
  64.     do
  65.     {
  66.         CommIn();
  67.  
  68.         KeepLooping = (BOOL) CommOut();
  69.  
  70.     } while (KeepLooping);
  71.  
  72.     ComClose();
  73.  
  74.     DosSleep(200L);
  75.  
  76.     strcpy(TempString, "\r\nTerminating...\r\n\n");
  77.     VioWrtTTY(TempString, strlen(TempString), 0);
  78.  
  79.     DosExit(EXIT_PROCESS, 0);
  80. }
  81.  
  82. SHORT CommOut(VOID)
  83. {
  84.     KBDKEYINFO KBInfo;
  85.  
  86.     KbdCharIn(&KBInfo, IO_NOWAIT, 0);
  87.  
  88.     if (NOT KBInfo.fbStatus)
  89.         return(1);
  90.  
  91.     if ((KBInfo.chChar == 0) OR (KBInfo.chChar == 0xE0))
  92.     {
  93.         switch (KBInfo.chScan)
  94.         {
  95.             case CLRSCRN:
  96.                 VioWrtTTY("\x1B[2J", 4, 0);
  97.                 break;
  98.             case EXITKEY:
  99.                 return (0);
  100.         }
  101.     }
  102.  
  103.     ComTXChar(KBInfo.chChar);
  104.  
  105.     return (1);
  106. }
  107.  
  108. SHORT CommIn(VOID)
  109. {
  110.     BYTE     TrueChar;
  111.     SHORT    InChar;
  112.     USHORT   WaitFlag;
  113.  
  114.     if (ComRXCharWaiting())
  115.     {
  116.         ComRXChar(&InChar);
  117.  
  118.         if (InChar == 12)   // FormFeed / Clear Screen
  119.             VioWrtTTY("\x1B[2J", 4, 0);
  120.         else
  121.         {
  122.             TrueChar = (BYTE) InChar;
  123.             VioWrtTTY(&TrueChar, 1, 0);
  124.         }
  125.     }
  126.     else
  127.         DosSleep(5L);
  128.  
  129.     return(0);
  130. }
  131.  
  132. VOID ErrExit(CHAR *ErrMsg)
  133. {
  134.     VioWrtTTY(ErrMsg, strlen(ErrMsg), 0);
  135.  
  136.     DosExit(EXIT_PROCESS, 1);              // Error Level of 1
  137. }
  138.