home *** CD-ROM | disk | FTP | other *** search
- {@@@@@@@@@@@ copyright (C) 1984 by Neil J. Rubenking @@@@@@@@@@@@@@@@@@@@@@@@
- The purchaser of these procedures and functions may include them in COMPILED
- programs freely, but may not sell or give away the source text.
-
- If the function KeyBoard is invoked with the [W]ait parameter, it
- WAITS for a key to be pressed. If [N]o wait, it returns zero if
- there's nothing in the keyboard buffer, or calls KeyBoard('W') if
- there is something. The return is an integer--its low byte is the
- ASCII code of the key pressed (zero if a "special" code key) and
- its high byte is the scan code. If you call for [N]o wait and no
- key was pressed, both high and low bytes will be zero.
-
- Note that the file SCANCODE.DAT contains a screen picture of the
- keyboard scan codes and a chart of the special codes.
-
- }
- {$I regpack.typ}
- {$I keyboard.lib}
- var
- TheseCodes : integer;
- ASCIIcode, ScanCode : byte;
- ThisCharacter : char;
-
- begin
- WriteLn('Press a key to begin. Press Escape to end.');
- repeat
- TheseCodes := KeyBoard('W');
- ASCIIcode := (TheseCodes shl 8) shr 8;
- ScanCode := TheseCodes shr 8;
-
- { NOTE: I have used "shl" and "shr" here to get the high and low bytes.
- These will be familiar to Assembly language programmers. They mean
- "shift left" and "shift right". "shl <x>" is a left shift of <x> bits.
- The highest bits are "pushed off" the top end, and <x> zeroes are
- tacked on the low end. Thus, if a 16-bit integer is shown by
- HHHHHHHHLLLLLLLL, (the Hs begin the High 8 bits and the Ls the Low)
- after a "shl 8" it will look like "LLLLLLLL00000000", and after being
- shifted 8 right again, it will be "00000000LLLLLLLL". If we just
- "shr 8" to start with, we get "00000000HHHHHHHH". SHR and SHL are
- invaluable any time you need to do individual bit manipulation.}
-
- if ASCIIcode = 0 then
- WriteLn('Character is "special"')
- else WriteLn('Character is ',chr(ASCIIcode));
- WriteLn('Scan Code is ',ScanCode);
- WriteLn;
- until (ASCIIcode = 27) and (ScanCode = 1);
- end.