$CPU 8086 'make compatible with XT systems $LIB ALL OFF 'turn off all PowerBASIC libraries $ERROR ALL OFF 'turn off all PowerBASIC error checking $OPTIMIZE SIZE 'optimize for smaller code $COMPILE UNIT 'compile to a UNIT (.PBU) '$COMPILE EXE 'compile to a UNIT (.PBU) DEFINT A-Z 'Required for all numeric functions, forces PB to not 'include floating point in UNIT (makes it smaller) '/*------------------------------------------------------------------- DECLARE SUB SAY(BYVAL Row AS INTEGER, BYVAL Col AS INTEGER, BYVAL Text AS STRING, BYVAL Attr AS INTEGER) $CODE SEG "MLIB1" '/*------------------------------------------------------------------- ' DISPLAYLOCKSTATUS ROW,COL,BATTR,ATTR ' Displays the toggle status of the CAPS and NUM lock keys. ' ROW = Display row ' COL = Display column ' BATTR = Blanking color ' ATTR = Color to display words CAPS and NUM in. ' EXAMPLE: DISPLAYLOCKSTATUS 25,67,31,30 ' NOTE: Eleven columns are needed to display the CAPS and NUM ' characters. '/*------------------------------------------------------------------- SUB DISPLAYLOCKSTATUS(ROW%,COL%,BARATTR%,STATUSATTR%)PUBLIC REG 1,&h1200 CALL INTERRUPT &h16 B% = ABS(REG(1)) IF (B% AND 32) = 32 THEN NUMLOCK% = 1 ELSE NUMLOCK% = 0 IF (B% AND 64) = 64 THEN CAPSLOCK% = 1 ELSE CAPSLOCK% = 0 IF (B% AND 128) = 128 THEN INS% = 1 ELSE INS% = 0 SAY ROW%,COL%,SPACE$(11),BARATTR% IF CAPSLOCK% THEN SAY ROW%,COL%," CAPS ",STATUSATTR% IF NUMLOCK% THEN SAY ROW%,COL%+5," NUM ",STATUSATTR% END SUB '/*------------------------------------------------------------------- FUNCTION ISLEFTSHIFT() PUBLIC AS INTEGER REG 1,&H1200 CALL INTERRUPT &H16 b% = ABS(REG(1)) IF (b% and 2) = 2 THEN FUNCTION = 1 ELSE FUNCTION = 0 END IF END FUNCTION '/*------------------------------------------------------------------- FUNCTION ISRIGHTSHIFT() PUBLIC AS INTEGER REG 1,&H1200 CALL INTERRUPT &H16 b% = ABS(REG(1)) IF (b% AND 1) = 1 THEN FUNCTION = 1 ELSE FUNCTION = 0 END IF END FUNCTION '/*------------------------------------------------------------------- FUNCTION ISCTRLKEY() PUBLIC AS INTEGER REG 1,&H1200 CALL INTERRUPT &H16 b% = ABS(REG(1)) IF (b% and 4) = 4 THEN FUNCTION = 1 ELSE FUNCTION = 0 END IF END FUNCTION '/*------------------------------------------------------------------- FUNCTION ISALTKEY() PUBLIC AS INTEGER REG 1,&H1200 CALL INTERRUPT &H16 b% =ABS(REG(1)) IF (b% and 8) = 8 THEN FUNCTION = 1 ELSE FUNCTION = 0 END IF END FUNCTION '/*------------------------------------------------------------------- FUNCTION ISKEYDOWN() PUBLIC AS INTEGER DIM ABSOLUTE BIOS(&H300) AS INTEGER AT 0 IF BIOS(&H20C) = 32 OR BIOS(&H20C) = 64 THEN DELAY .1 FUNCTION = 1 ELSE FUNCTION = 0 END IF END FUNCTION '/*------------------------------------------------------------------- ' FUNCTION ISINSERTKEY() PUBLIC AS INTEGER ' REG 1,&h1200 ' CALL INTERRUPT &h16 ' b% = ABS(REG(1)) ' IF (b% and 128) = 128 THEN FUNCTION = 1 ELSE FUNCTION = 0 ' END FUNCTION '/*------------------------------------------------------------------- ' $INCLUDE "C:\CODE\MLIB\MLIB.INC" ' DO ' DISPLAYLOCKSTATUS 25,60,10,14 ' Y$ = INKEY$ ' LOOP UNTIL Y$ = CHR$(13)