home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 December / simtel1292_SIMTEL_1292_Walnut_Creek.iso / msdos / pcmag / pp704.arc / MACDEMO.C < prev    next >
C/C++ Source or Header  |  1988-01-26  |  3KB  |  79 lines

  1. /*----------------------------------------------------------
  2.    MACDEMO.C -- OS/2 Keyboard Macro Demonstration
  3.                 (C) 1988, Ziff-Davis Communications Company
  4.                 Programmed by Charles Petzold, 11/87
  5.   ----------------------------------------------------------*/
  6.  
  7. #include <doscalls.h>
  8. #include <subcalls.h>
  9. #include <string.h>
  10.  
  11. main ()
  12.      {
  13.      static struct  {
  14.                     char scan ;
  15.                     char *str ;
  16.                     }
  17.                     table [] = {
  18.                                0x20, "DIR\r",
  19.                                0x2E, "CHKDSK\r",
  20.                                0x2F, "VER\r"
  21.                                } ;
  22.      struct MonKeyData 
  23.                     {
  24.                     unsigned int   MonFlagWord ;
  25.                     struct KeyData kd ;
  26.                     unsigned int   KbdDDFlagWord ;
  27.                     }
  28.                     mkd ;
  29.  
  30.      char           InBuffer [128], OutBuffer [128] ;
  31.      unsigned int   GlobalSeg, LocalSeg, ScreenGroup, MonitorHandle ;
  32.      unsigned int   count, len, i, j ;
  33.  
  34.      DOSMONOPEN ("KBD$", &MonitorHandle) ;
  35.  
  36.      * (int *) InBuffer  = sizeof (InBuffer) ;
  37.      * (int *) OutBuffer = sizeof (OutBuffer) ;
  38.  
  39.      DOSGETINFOSEG (&GlobalSeg, &LocalSeg) ;
  40.  
  41.      ScreenGroup = * ((unsigned char far *) (((long) GlobalSeg << 16) + 24)) ;
  42.  
  43.      DOSMONREG (MonitorHandle, InBuffer, OutBuffer, 0, ScreenGroup) ;
  44.  
  45.      while (1)
  46.           {
  47.           count = sizeof (mkd) ;
  48.  
  49.           DOSMONREAD (InBuffer, 0, (char far *) &mkd, &count) ;
  50.  
  51.           if (mkd.kd.char_code == 0 && mkd.KbdDDFlagWord == 0)
  52.                {                              for (i = 0 ; i < sizeof (table) / sizeof (table [0]) ; i++)
  53.                     {
  54.                     if (mkd.kd.scan_code == table[i].scan)
  55.                          {
  56.                          len = strlen (table[i].str) ;
  57.  
  58.                          mkd.MonFlagWord = 0 ;
  59.                          mkd.kd.scan_code = 0 ;
  60.                          mkd.kd.status = 0 ;
  61.                          mkd.kd.nls_shift = 0 ;
  62.                          mkd.kd.shift_state = 0 ;
  63.  
  64.                          for (j = 0 ; j < len ; j++)
  65.                               {
  66.                               mkd.kd.char_code = table[i].str[j] ;
  67.  
  68.                               DOSMONWRITE (OutBuffer, (char far *) &mkd,
  69.                                            sizeof (mkd)) ;
  70.                               }
  71.                          break ;
  72.                          }
  73.                     }
  74.                }
  75.           else
  76.                DOSMONWRITE (OutBuffer, (char far *) &mkd, count) ;
  77.           }
  78.      }
  79.