(* From: ROB PERELMAN Subj: A COMPLETE Keyboard Unit in ASM *) UNIT Keyboard; INTERFACE FUNCTION AltPress: Boolean; FUNCTION CapsOn: Boolean; FUNCTION CtrlPress: Boolean; FUNCTION InsertOn: Boolean; FUNCTION LAltPress: Boolean; FUNCTION LCtrlPress: Boolean; FUNCTION LShiftPress: Boolean; FUNCTION NumOn: Boolean; FUNCTION RAltPress: Boolean; FUNCTION RCtrlPress: Boolean; FUNCTION RShiftPress: Boolean; FUNCTION ScrollOn: Boolean; FUNCTION ShiftPress: Boolean; PROCEDURE ClearKbd; PROCEDURE PrintScreen; PROCEDURE SetCaps (CapsLock: Boolean); PROCEDURE SetEnhKbd (Enhanced: Boolean); PROCEDURE SetInsert (Ins: Boolean); PROCEDURE SetNum (NumLock: Boolean); PROCEDURE SetPrtSc (PrtScOn: Boolean); PROCEDURE SetScroll (ScrollLock: Boolean); PROCEDURE SpeedKey (RepDelay, RepRate: Integer); PROCEDURE TypeIn (Keys: String); IMPLEMENTATION {$F+} { the routines are actually in assembly language } FUNCTION AltPress; external; FUNCTION CapsOn; external; FUNCTION CtrlPress; external; FUNCTION InsertOn; external; FUNCTION LAltPress; external; FUNCTION LCtrlPress; external; FUNCTION LShiftPress; external; FUNCTION NumOn; external; FUNCTION RAltPress; external; FUNCTION RCtrlPress; external; FUNCTION RShiftPress; external; FUNCTION ScrollOn; external; FUNCTION ShiftPress; external; PROCEDURE ClearKbd; external; PROCEDURE PrintScreen; external; PROCEDURE SetCaps; external; PROCEDURE SetEnhKbd; external; PROCEDURE SetInsert; external; PROCEDURE SetNum; external; PROCEDURE SetPrtSc; external; PROCEDURE SetScroll; external; PROCEDURE SpeedKey; external; PROCEDURE TypeIn; external; {$L KBD} BEGIN END. { --------------------- CUT HERE -----------------------} 1. CUT THIS OUT TO A SEPARATE FILE. 2. Name it KBD.XX. 3. Execute : XX3401 D KBD.XX 4. KBD.OBJ will be created. Here comes the XX-encoded KBD.OBJ file... *XX3401-001215-010792--68--85-18007---------KBD.OBJ--1-OF--1 U+Y+-qhWN0tVQqrEZUQ+++F1HoF3F7U5+0VT+k6-+RCE6U2++ERHFJF1EJ-HjU++0p-G GItIIoBGFIJCPE++02ZCIoJGJ2xCAE++0IBIIYlEIYJHImI+++VHFJFEIZFHEqw-++NI KJ-3GIs2+U+8IoV7FZFEIYJHIy+-++JCJIpDHZo+++hGIoV7FZFEIYJHIuE+++hAIoV7 FZFEIYJHIpA+++ZHFJFHEp7DH2n++E+8H2BIIYlEIYJHIoY+++V1H2J-IYh0F-k+++dG EpFGH3-GFJBHZU++023AJ3-GFJBH++++0Il-H3FEIYJHIno+++ZGEIlII373IpC4+++4 IoJIHZJBHk2+03B1IYxAH2xCf+++0JB3J2ZCIoJGJ0w-++N1EJ-HHosC+++7IoJIFIt6 Go72rU++03BEFIJ2GoJNw+2+u6U2++0W+R4UsU6-++0o+goKoSXFuB5cUy+-mvE0nFMn qx1UoC1FotD9h+OmzwoVRTX9h+9B3h5coSW1s+59h+9B3XDPoC1FotD9h-9B3cf2oSW1 s+59h-9B3cf2Uy+-mvE0nFPFu6DU+Qio+goKAxjEsB1UoC1FotD9JJNL9c+y++++REPB -JxSLQiQ9jwS++1fx9EGnFO8lB5coSXFu6DU+Qio2goKWgHFuB5cUy+-mvE0nFO1s+59 h+9B3XDPoC1EsB1UoC1FotD9JMjg5ch4-XDPXhg9k5E8U+sL-2+TLQc0+6+a3kGzuzFJ WykSWoM40w-p5Gu+DU+++5EE9gIK++0s3WLB6Gv4-U+++-xRmU6+9c+y++++RTCs3XLB 6Gu75U++9ck4++0u+++C5vUK7QoV9gM4+++-ux7JWykSWoM4AxiCqkj+R+e+1VQ2U-xR mU6+U0ML-5zfx3K9v-u9FUMnqsvP0w-o0c+C3kEU5pr8+U0+7VQ2ryjoJMjg5ch4-Uj+ RGkiU1s+++-p5vU3BQoV9cYS+++iX+M++9U37EsTiU++nG2ilUM+++2TLQc0+0u+DU++ +5Hni+IZ9gIK++1B6Gv4-U+++CjVJMjg5ch4-XDPXhg9k5E8U+sL--+TLQc0+6+a3kHj uzGo+goKAxjFuB5HUy+-0wD9JMjg5cdy06dS-fU3+woK5pr8-+-JWylKJlv3RUMnmTmg WgWu1k0sE+0Ck9wS+DcaWHsO+9g++8m8s+j+9hRp-2Zo18m4l8h8sCoaWHsQ+DgTLptR mUE+UDk0RkC+l-+izms++Aw++++++++++++++-sk9W+G6G6X3mEZ7X6l4-YE2lwI3WwF 9FIg4WgP-kkt+WU2-EM68+c90+on11Ep0k61-+I4-kU70WQbAkooBE6SA0sU2W2W6lQY 7GMmAFUN2-AT3-Mj2GoJ9-cf4kQA8Fsk9W+G6G6X3mEZ7X6l4-YE2lwI3WwF9FIg4WgP 8SiQSE12Qp+-KU92UZ+-Kk92v3+-JE92x3+-JU92zZ+-JE930J+-JE933Z+-JU934p+- K+935Z+-Fk938Z+-JE93TJ+-KU93WZ+-Kk93Xp+-LE93Zp+-J+93bZ+-KU93eJ+-KU93 h3+-Kk93ip+-KU947J+-Lk94IZ+-JU85cUc++Rs0UE++++2+wMc0++-o ***** END OF XX-BLOCK *****