DEFINT A-Z DECLARE SUB Buffer () OPEN "CONS:" FOR OUTPUT AS #1 IF COMMAND$ = "/B" THEN Buffer LineNum = CSRLIN SCREEN 0, , 1, 1 COLOR 2, 1 PRINT #1, "" CLS WHILE INKEY$ <> "": WEND DEF SEG = 0 KeyFlags = PEEK(1047) AddKey = PEEK(1048) DEF SEG DO LOCATE 1, 1 PRINT "É" + STRING$(78, "Í") + "»" PRINT "º KEYSCAN.EXE(c). Copyright Stanislav Sokolov, Mai 1995. Version 2.0 º" PRINT "º Press any key or Ctrl+, Alt+ or Shift+ combination to scan its value. º" PRINT "º Press 'Esc' to quit. Start with /B parameter to view the keyboard buffer. º" PRINT "Ì" + STRING$(78, "Í") + "¹" FOR a = 6 TO 24 LOCATE a, 80: PRINT "º"; NEXT a LOCATE 6, 1 PRINT "º 1st byte (ASCII) -" PRINT "º 2nd byte (ScanCode) -" PRINT "º Symbol (Returned by INKEY$) -" PRINT "º Hexadecimal -" PRINT "º Octal -" PRINT "Ì" + STRING$(78, "Í") + "¹" IF KeyFlags AND 32 THEN PRINT "º Num Lock is on " ELSE PRINT "º Num Lock is off" IF KeyFlags AND 64 THEN PRINT "º Caps Lock is on " ELSE PRINT "º Caps Lock is off" IF KeyFlags AND 16 THEN PRINT "º Scroll Lock is on " ELSE PRINT "º Scroll Lock is off" IF KeyFlags AND 128 THEN PRINT "º Insert is on " ELSE PRINT "º Insert is off" PRINT "Ì" + STRING$(78, "Í") + "¹" IF KeyFlags AND 2 THEN PRINT "º Left Shift is pressed in" ELSE PRINT "º Left Shift is untouched " IF KeyFlags AND 1 THEN PRINT "º Right Shift is pressed in" ELSE PRINT "º Right Shift is untouched " IF KeyFlags AND 4 THEN IF AddKey AND 1 THEN PRINT "º Left Ctrl is pressed in" PRINT "º Right Ctrl is untouched " ELSE PRINT "º Left Ctrl is untouched " PRINT "º Right Ctrl is pressed in" END IF ELSE PRINT "º Left Ctrl is untouched " PRINT "º Right Ctrl is untouched " END IF IF KeyFlags AND 8 THEN IF AddKey AND 2 THEN PRINT "º Alt is pressed in" PRINT "º AltGr is untouched " ELSE PRINT "º Alt is untouched " PRINT "º AltGr is pressed in" END IF ELSE PRINT "º Alt is untouched " PRINT "º AltGr is untouched " END IF PRINT "º Byte 1047:" + STR$(KeyFlags) + "; Byte 1048:" + STR$(AddKey) + " " IF NOT KeyFlags AND 12 THEN PRINT "º" + SPACE$(78); ELSE LOCATE 24, 1 PRINT "º Caution! Ctrl+Alt is pressed! DO NOT PRESS DELETE OR INSERT!"; END IF LOCATE 25, 1 PRINT "È" + STRING$(78, "Í") + "¼"; OldKeyFlags = KeyFlags OldAddKey = AddKey DO DEF SEG = 0 KeyFlags = PEEK(1047) AddKey = PEEK(1048) StartPoint = PEEK(1050) NextChar = PEEK(1052) DEF SEG LOOP WHILE StartPoint = NextChar AND KeyFlags = OldKeyFlags AND AddKey = OldAddKey IF StartPoint <> NextChar THEN DEF SEG = 0 Byte1 = PEEK(1024 + StartPoint) Byte2 = PEEK(1024 + StartPoint + 1) DEF SEG X$ = INKEY$ END IF IF X$ <> "" THEN FOR a = 6 TO 10 LOCATE a, 33: PRINT SPACE$(20) NEXT a z = ASC(MID$(X$, 1, 1)) LOCATE 6, 32: PRINT Byte1 LOCATE 7, 32: PRINT Byte2 LOCATE 8, 33: PRINT #1, LTRIM$(LEFT$(X$, 1)) LOCATE 9, 33: PRINT HEX$(z) LOCATE 10, 33: PRINT OCT$(z) IF LEN(X$) = 2 THEN z = ASC(MID$(X$, 2, 1)) LOCATE 8, 33: PRINT #1, "0 + " + LTRIM$(RIGHT$(X$, 1)) LOCATE 9, 35: PRINT "+ " + HEX$(z) LOCATE 10, 35: PRINT "+ " + OCT$(z) END IF END IF LOOP UNTIL X$ = CHR$(27) SLEEP 1 PRINT #1, "" CLOSE #1 SCREEN 0, , 0, 0 LOCATE LineNum, 1 END SUB Buffer CLS DIM a(35) WIDTH 80, 43 DO DEF SEG = 0 FOR b = 0 TO 35 a(b) = PEEK(1050 + b) NEXT b Keyb = PEEK(1047) add = PEEK(1048) DEF SEG LOCATE 1, 1 PRINT 1050; " "; a(0); " " + "Keyboard buffer read-in start position." PRINT 1052; " "; a(2); " " + "Keyboard buffer next char pointer." FOR b = 4 TO 34 STEP 2 LOCATE b, 1 PRINT 1050 + b; (1500 + b) - 1474; a(b); " " LOCATE b, 17: PRINT #1, CHR$(a(b)) + " " NEXT b FOR b = 5 TO 35 STEP 2 LOCATE b, 1 PRINT 1050 + b; (1500 + b) - 1474; a(b); " " NEXT b LOCATE 37, 1 PRINT 1047; "key"; Keyb; " " PRINT 1048; "add"; add; " " PRINT PRINT PRINT "Press and hold Alt to epty the keyboard buffer." PRINT "Press Ctrl-Alt to quit."; DEF SEG = 0 xx = PEEK(1048) DEF SEG IF xx = 2 THEN LOCATE 43, 1 PRINT SPACE$(30); c$ = c$ + INKEY$ ELSE LOCATE 43, 1 PRINT #1, c$; c$ = "" END IF IF NOT Keyb AND 12 THEN ELSE EXIT DO END IF LOOP CLOSE #1 WIDTH 80, 25 WHILE INKEY$ <> "": WEND END END SUB