home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 11 Util
/
11-Util.zip
/
KBDSET.ZIP
/
KEYBOARD.C
next >
Wrap
C/C++ Source or Header
|
1991-10-26
|
4KB
|
86 lines
/****************************************************************************
****************************************************************************
** **
** Keyboard.C **
** A program to change keyboard status. **
** **
** Syntax/Usage: **
** KEYBOARD [Cc[+-]] [Nn[+-]] [Ss[+-]] [Ii[+-]] **
** **
** C or c = Caps Lock **
** N or n = Number Lock **
** S or s = Scroll Lock **
** I or i = Insert Mode BIOS Flag **
** **
** + = Turn parameter on unconditionally. **
** - = Turn parameter off unconditionally. **
** No Switch = Toggle parameter (off-->on or on-->off) **
** **
** **
** Technical Information: **
** **
** MicroSoft C Compiler, version 6.00A. **
** **
** Compiler Options - 80286, Small Model, Optimize for Time, **
** No Stack Checking **
** Linker Options - /Batch **
** **
** 10/27/91 Version 1.0 D. J. Pagliughi **
****************************************************************************
****************************************************************************/
#include <DOS.H> /* FP_SEG and FP_OFF Macros */
unsigned char _far *kbd_status;
void set_status (char *parameter, unsigned char value);
void main (int number_parameters, char *parameter[])
{
int i;
FP_SEG(kbd_status) = 0x0000;
FP_OFF(kbd_status) = 0x0417;
if (number_parameters > 1)
for (i = 1; i < number_parameters; i++)
switch ((int) *parameter[i])
{
case 's':
case 'S': set_status (parameter[i], 16);
break;
case 'n':
case 'N': set_status (parameter[i], 32);
break;
case 'c':
case 'C': set_status (parameter[i], 64);
break;
case 'i':
case 'I': set_status (parameter[i], 128);
break;
}
}
void set_status (char *parameter, unsigned char value)
{
parameter++;
switch ((int) *parameter)
{
case '+': if (*kbd_status ^ value)
*kbd_status += value;
break;
case '-': if (*kbd_status & value)
*kbd_status -= value;
break;
default : if (*kbd_status & value)
*kbd_status -= value;
else
*kbd_status += value;
}
}