BB>procedure ShiftStatus(var Ins,
  >                          CapsLock,
  >                          NumLock,
  >                          ScrollLock,
  >                          Alt,
  >                          Ctrl,
  >                          LeftShift,
  >                          RightShift: Boolean);

I thought this was a little tedious because it is a pain to have all
those variables....so I made something like this:


Unit KeyStats;

Interface

  Function RightShift: Boolean;
  Function LeftShift: Boolean;
  Function Control: Boolean;
  Function Alt: Boolean;
  Function ScrollLock: Boolean;
  Function NumLock: Boolean;
  Function CapsLock: Boolean;
  Function Insert: Boolean;

Implementation

Uses Dos;

Function ShiftState: Byte;
Var Regs: Registers;
Begin
  Regs.Ah:=2;
  Intr($16, Regs);
  ShiftState:=Regs.Al;
End;

Function RightShift: Boolean;
Begin
  RightShift:=(ShiftState and 1)<>0;
End;

Function LeftShift: Boolean;
Begin
  LeftShift:=(ShiftState and 2)<>0;
End;

Function Control: Boolean;
Begin
  Control:=(ShiftState and 4)<>0;
End;

Function Alt: Boolean;
Begin
  Alt:=(ShiftState and 8)<>0;
End;

Function ScrollLock: Boolean;
Begin
  ScrollLock:=(ShiftState and 16)<>0;
End;

Function NumLock: Boolean;
Begin
  NumLock:=(ShiftState and 32)<>0;
End;

Function CapsLock: Boolean;
Begin
  CapsLock:=(ShiftState and 64)<>0;
End;

Function Insert: Boolean;
Begin
  Insert:=(ShiftState and 128)<>0;
End;

End.

Here is a little something that will turn on the light for you.
The state of the keys below is at addrees $40 and offset $17 in memory, by
changing the values at that location, you can turn on the CAPS, the NUM etc..


Type

   Toggles      = (RShift, LShift, Ctrl, Alt,
                   ScrollLock, NumLock, CapsLock, Insert);
   Status       = Set of Toggles;

Var
   KeyStatus   : Status Absolute $40:$17;


Example : to turn on the caps lock, do this :

                        KeyStatus := KeyStatus + [CapsLock];

