home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Interactive Guide / c-cplusplus-interactive-guide.iso / c_ref / csource1 / cenvid / keystate.bat < prev    next >
DOS Batch File  |  1993-09-24  |  3KB  |  71 lines

  1. @echo off
  2. REM KeyState - Macro to set, unset, or display the state of keys.
  3. cenvi %0.bat %1 %2 %3 %4
  4. GOTO CENVI_EXIT
  5.  
  6. #define  NUMLOCK_BIT    0x20
  7. #define  CAPSLOCK_BIT   0x40
  8. #define  INSERT_BIT     0x80
  9. #define  KEYS_SEGMENT   0x0040
  10. #define  KEYS_OFFSET    0x0017
  11. KeysAddress = Address(KEYS_SEGMENT,KEYS_OFFSET)
  12.  
  13. main(argc,argv)
  14. {
  15.    // check that the input is valid
  16.    if ( argc != 3
  17.      || ( argv[1][1] != 0  ||  !strchr("+?-",argv[1][0]) )
  18.      || ( strnicmp("CAP",argv[2],3)
  19.        && strnicmp("NUM",argv[2],3)
  20.        && strnicmp("INS",argv[2],3) ) ) {
  21.       Instructions()
  22.    } else {
  23.       // determine whether to apply to CapsLock or NumLock
  24.       if ( !strnicmp("CAP",argv[2],3) ) {
  25.          KeyName = "CapsLock", KeyBit = CAPSLOCK_BIT
  26.       }
  27.       else if ( !strnicmp("NUM",argv[2],3) ) {
  28.          KeyName = "NumLock",  KeyBit = NUMLOCK_BIT
  29.       } else {
  30.          KeyName = "Insert",   KeyBit = INSERT_BIT
  31.       }
  32.       // perform action on the selected key
  33.       CurrentState = peek(KeysAddress)
  34.       switch( argv[1][0] ) {
  35.          case '+':   // Set Key ON
  36.             poke(KeysAddress,CurrentState | KeyBit)
  37.             break
  38.          case '-':   // Turn KEY OFF
  39.             poke(KeysAddress,CurrentState & ~KeyBit)
  40.             break
  41.          case '?':   // display and return state of key
  42.             printf("%s is currently set %s.\n",KeyName,CurrentState & KeyBit ? "ON" : "OFF")
  43.             return( CurrentState & KeyBit ? 1 : 0 )
  44.       }
  45.    }
  46. }
  47.  
  48.  
  49. Instructions()
  50. {
  51.    printf("\a\n")
  52.    printf("KeyState - Set, Clear, or Show the keyboard state of NumLock or CapsLock\n");
  53.    printf("\n");
  54.    printf("SYNTAX: KeyState < + | - | ? > < CAP | NUM | INS >\n");
  55.    printf("\n");
  56.    printf("Where:  +    Set KeyState ON\n");
  57.    printf("        -    Set KeySTate OFF\n");
  58.    printf("        ?    Display current Key State, and return ERRORLEVEL 1 if set\n");
  59.    printf("             and ERRORLEVEL 0 if clear\n");
  60.    printf("        NUM  Apply command < + | - | ? > to the NumLock key\n");
  61.    printf("        CAP  Apply command < + | - | ? > to the CapsLock key\n");
  62.    printf("        INS  Apply command < + | - | ? > to the Insert key\n");
  63.    printf("\n");
  64.    printf("Examples: KeyState + Num      Turn on the Numlock key\n");
  65.    printf("          KeyState - Cap      Turn of the CapsLock key\n");
  66.    printf("          KeyState ? Num      Show state of NumLock, return ERRORLEVEL if set\n");
  67.    printf("\n")
  68. }
  69.  
  70. :CENVI_EXIT
  71.