[Back to KEYBOARD SWAG index]  [Back to Main SWAG index]  [Original]

{IDIOT PASCAL 101
----------------

Welcome to IP 101. In today's lesson we will be answering a few
often asked questions about Turbo Pascal. if you signed up For
IDIOT C/C++ 101, please get up and run beFore you get shot.

Q:  HOW do I TURN ofF/ON THE KEYBOARD FROM MY Program?
A:  Easy. Though you may search through many books, you will find
    the answer in a Excellent reference called _THE MS-Dos
    ENCYCLOPEDIA_. It tells of a mystical I/O port where you can
    turn off/on the keyboard by just flipping a bit. This port is
    the 8259 Programmible Interrupt Controller. Now, part of the
    8259 is the Interrupt Mask Register, or IMR For short. The
    port location is $21. to turn off the Keyboard...(RECKLESSLY)

}    Procedure KEYBOARD_ofF;

      begin
        PorT[$21]:=$02
      end;
{
    to turn the keyboard back on (RECKLESSLY), just set the port
    back to $0.

      (THE MSDos ENCYCLOPEDIA (C) 1988 Microsoft Press p417)

Q: HOW do I FLIP BITS ON/ofF in A Byte or Integer?
A: Simple, Really.  The following Procedures work on both
   Byte,Char,Boolean,Integer, and Word values(I hope).
}
Procedure SBIT(Var TARGET;BITNUM:Integer);   {set bit}

Var
  SUBJECT : Integer Absolute TARGET;
  MASK    : Integer;

 begin
   MASK := 1 SHL BITNUM;
   SUBJECT := SUBJECT or MASK
 end;

Procedure CBIT(Var TARGET;BITNUM:Integer);  {clear bit}

 Var
   SUBJECT : Integer Absolute TARGET;
   MASK    : Integer;

  begin
    MASK := not(1 SHL BITNUM);
    SUBJECT := SUBJECT and MASK
  end;

Procedure SETBIT(Var TARGET;BITNUM:Integer;VALUE:Byte);{control}
                                                       {Proc.  }
 begin
   if VALUE = 1 then
     SBIT(TARGET,BITNUM)
   else
     CBIT(TARGET,BITNUM)
 end;


[Back to KEYBOARD SWAG index]  [Back to Main SWAG index]  [Original]