bas7ex.hlp (Topic list)
DEF SEG, PEEK and POKE Programming Example
                       Example                 Contents  Index  Back
──────────────────────────────────────────────────────────────────────────────
'This example uses the DEF SEG statement, the PEEK function, and POKE
'statement to turn the Caps Lock key on and off. The program uses the
'LINE INPUT statement to prompt the user to enter a string, demonstrating
'that the Caps Lock key is on.
 
'Note: This program contains hardware-specific instructions. It works
'correctly on IBM PC, XT, and AT computers.
 
DECLARE SUB CapsOn ()
DECLARE SUB CapsOff ()
DECLARE SUB PrntMsg (R%, C%, M$)
 
CLS
CapsOn
PrntMsg 24, 1, "<Caps Lock On>"
LOCATE 12, 10
LINE INPUT "Enter a string (all characters are caps): ", S$
CapsOff
PrntMsg 24, 1, "              "
PrntMsg 25, 1, "Press any key to continue..."
DO WHILE INKEY$ = "": LOOP
CLS
END
 
SUB CapsOff STATIC
'Turn Caps Lock off.
   DEF SEG = 0
   'Set Caps Lock off (turn off bit 6 of &H0417).
   POKE &H417, PEEK(&H417) AND &HBF
   DEF SEG
END SUB
 
SUB CapsOn STATIC
'Turn Caps Lock on.
   'Set segment to low memory.
   DEF SEG = 0
   'Set Caps Lock on (turn on bit 6 of &H0417).
   POKE &H417, PEEK(&H417) OR &H40
   'Restore segment.
   DEF SEG
END SUB
 
SUB PrntMsg (Row%, Col%, Message$) STATIC
   'Print message at Row%, Col% without changing cursor.
   'Save cursor position.
   CurRow% = CSRLIN: CurCol% = POS(0)
   LOCATE Row%, Col%: PRINT Message$;
   'Restore cursor.
   LOCATE CurRow%, CurCol%
END SUB