image of READY prompt

Wang2200.org

Listing of file='uKeyTest' on disk='vmedia/mvp-diag-2.6.2.wvd.zip'

# Sector 3750, program filename = 'uKeyTest'
0010 REM %VARIABLES........
   : DIM K$(144)6,U$8,U8$8,U6$1,U$(68)8,W$(95,3)1,X$(8)32,U(5),R$10,W$1,U4$8
   : PRINT HEX(0202020F)
0020 REM Display
   : REM  W$=cursor
   : REM  W1=column#
   : REM  W0=CRT column
   : REM  W5=# CRT columns
   : REM  U3=tab
   : REM  R1=row#
   : REM  R0=CRT row
   : REM  R5=# CRT rows
   : REM  R9=# rows
   : REM  W$(=item coordinates
   : REM  U(i)=length column(i)
   : REM K$(=keyboard data array
0030 REM Node Items
   : REM  U1=# fields/item
   : REM  U$, U8$ =filename/description
   : REM  U2$=type
   : REM  W,R=item#
   : REM  R2=data record#
   : REM  U=# extra fields in node descriptor
   : REM  W9=# items (including blank lines)
   : REM  W8=# items (excluding blank lines)
   : REM  U4$=password
0040 REM U6$ = Identifier byte, keystroke
   : REM U$( = Menu list array
   : REM S = SECTOR COUNT
   : REM R = RECORD COUNT
   : REM S1 = # INDEX SECTORS
   : REM X$( = Sector data/passing array
   : REM  U4,R$=scratch
0050 REM % MAIN PROGRAM..........
0060 REM % MENU 1 TEST OR EDIT
   : INIT(20)U$()
   : RESTORE LINE6010
   : READ U$(1),U$(2),X$(1)
   : GOSUB 190
   : ON N-1GOTO 70,65
0065 IF SPACEK<14THEN 66
   : LOAD DC T"uTextEdt"7000,9500BEG 7000
0066 SELECT P9
   : PRINT HEX(0306020402020E);AT(10,32);"INSUFFICIENT MEMORY"
   : PRINT HEX(0F)
   : PRINT " "
   : GOTO 10
0070 REM % KEY TEST NODE
   : REM KEY DATA IDENTIFIER BYTE = \AA
   : U6$="\AA"
   : GOSUB 600
   : RESTORE LINE6020
   : READ X$(1)
   : GOSUB 190
   : GOSUB 570
0080 GOSUB 90
   : RESTORE LINE6030
   : READ U$(1),U$(2),U$(3)
   : GOSUB 190
   : ON N-1GOTO 80,70,10
0090 REM % DOUBLE STRIKE KEY TEST .......
   : RESTORE LINE6050
   : READ X$(1)
   : STR(X$(1),LEN(X$(1))+2,7)=STR(U$,2,7)
   : GOSUB 780
   : GOSUB 670
   : N,N1=1
0100 GOSUB 700
   : IF R+C=0THEN 160
   : IF MOD(N-1,18)=0THEN GOSUB 720
0110 REM % CHECK FIRST STROKE ON KEY
   : I=5
   : KEYIN U6$
   : IF U6$<>HEX(FF)THEN 120
   : KEYIN U6$
0120 GOSUB 710
   : IF U6$=STR(K$(N),5,1)THEN 130
   : PRINT HEX(07)
   : GOTO 110
0130 REM % CHECK SECOND STROKE ON KEY
   : I=6
   : KEYIN U6$
   : IF U6$<>HEX(FF)THEN 140
   : KEYIN U6$
0140 GOSUB 710
   : IF U6$=STR(K$(N),6,1)THEN 150
   : PRINT HEX(07)
   : GOTO 130
0150 REM % NEXT KEY POSITION
   : N1=N
   : N=N+1
   : GOSUB 700
   : IF R+C=0THEN 160
   : GOTO 100
0160 RETURN
0170 REM % MENU SUBROUTINE ...........
0180 STOP
0190 REM NODE DESCRIPTORS
   : N=1
   : U$=U$(N)
   : REM % INSERT PRINT TITLE
0200 REM %CRT SIZE
   : REM Exit-- R5=#rows, W5=#columns, W$=cursor character
   : R5=24
   : W5=80
   : W$=HEX(8B)
   : $GIO/005(7601,R$)
   : R$=AND HEX(10)
   : IF STR(R$,,1)=HEX(10) THEN 220
   : R5=16
   : W5=64
   : W$="*"
0210 REM %DETERMINE DISPLAY COORDINATES OF NODE ITEMS........
0220 REM %# NODE ITEMS
   : R=-1
0230 GOSUB 530
   : IF U$<>"  " THEN 230
   : W9=R
   : W1=INT((W9+R5-6)/(R5-5))
   : R9=-INT(-W9/W1)
0240 REM %MAX ITEM LENGTH FOR EACH COL
   : R=-1
   : W1=0
   : MAT U=ZER
0250 FOR W=1 TO W9
   : GOSUB 530
   : IF MOD(R,R9)=0 THEN W1=W1+1
   : U(W1)=MAX(U(W1),LEN(U$)+2)
   : NEXT W
0260 REM %CALC. DISPLAY COORDS
   : R0=INT((R5-5-R9)/2)+5
   : W0,U3=INT((W5-U(1)-U(2)-U(3)-U(4)-U(5))/(W1+1))
   : IF U3<5 THEN STOP "Screen too small - reduce no. of items. "
   : W8=0
   : N=1
   : R2=-1
0270 FOR W=1 TO W9
   : R1=MOD(W-1,R9)
   : W1=INT((W-1)/R9)
   : IF R1=0 AND W1>0 THEN W0=W0+U(W1)+U3
   : GOSUB 530
   : W8=W8+1
   : W$(W8,1)=BIN(R1+R0)
   : W$(W8,2)=BIN(W0)
   : W$(W8,3)=BIN(R2)
0280 NEXT W
0290 REM %DISPLAY NODE.........
0300 RESTORE LINE6040
   : GOSUB 780
0310 REM %DISPLAY NODE
   : N=1
   : FOR W=1 TO W8
   : GOSUB 510
   : U8$=U$
   : GOSUB 560
   : NEXT W
   : W=1
0320 REM %PROCESS USER REQUESTS........
0330 REM %DISPLAY CURRENT ENTRY HIGHLIT
   : N=VAL(W$(W,3))+1
   : GOSUB 510
   : U8$=U$
   : PRINT HEX(0E);AT(VAL(W$(W,1)),VAL(W$(W,2)));W$;" ";STR(U8$,2,7);HEX(0F);
0340 REM %USER REQUEST
   : KEYIN U6$,,470
   : ON POS(HEX(20080DF0)=U6$) GOTO 410,420,430,480
0350 REM %Starting character?
   : N=1
   : R=0
0360 GOSUB 510
   : IF W<>R THEN 360
0370 GOSUB 510
   : IF U$="  " THEN 380
   : IF STR(U$,2,1)<>U6$ THEN 370
   : GOTO 400
0380 N=1
   : R=0
0390 GOSUB 510
   : IF W=R THEN 340
   : IF STR(U$,,1)<>U6$ THEN 390
0400 GOSUB 560
   : W=R
   : GOTO 330
0410 REM %SPACE key
   : GOSUB 560
   : W=MOD(W,W8)+1
   : GOTO 330
0420 REM %BACKSPACE key
   : GOSUB 560
   : W=MOD(W-2,W8)+1
   : GOTO 330
0430 REM %RETURN key
   : N=1
   : R=0
0440 GOSUB 510
   : IF W<>R THEN 440
0450 REM Check for password
   : GOSUB 540
   : IF X$(3)<>" " THEN 300
0460 RESTORE LINE6060
   : READ X$(2)
   : PRINT AT(3,0,48);AT(2,0,40);HEX(0E05);X$(2);;" ";BOX(1,LEN(U$)+1);" ";U$;
     "    ";HEX(0F);
   : RETURN
0470 REM %'31 (CLEAR)
   : IF U6$<>HEX(F0) THEN 340
0480 REM % EDIT key 'RESTART'
   : X$(3)=" "
   : GOTO 60
0490 REM %SUBROUTINES.........
0500 REM %GET NEXT NODE ITEM (excluding blank lines)
0510 U$=U$(N)
   : N=N+1
   : R=R+1
   : RETURN
0520 REM %GET NEXT NODE ITEM (including blank lines)
0530 U$=U$(N)
   : N=N+1
   : R2=R2+1
   : R=R+1
   : RETURN
0540 REM %CHECK FOR PASSWORD
   : REM RETURN -- X$(3)=" " if password ok or none
   : REM
   : IF X$(3) =" " THEN RETURN
0550 PRINT AT(3,0,48);AT(2,0,40);HEX(0E05);"Enter password ";
   : FOR U4=1 TO LEN(X$(3))
   : KEYIN U6$
   : STR(X$(3),U4,1)=XOR U6$
   : PRINT W$;
   : NEXT U4
   : $TRAN(X$(3),HEX(2000))R
   : RETURN
0560 REM %DISPLAY CURRENT ENTRY (W) WITHOUT HIGHLIGHT
   : PRINT AT(VAL(W$(W,1)),VAL(W$(W,2)));". ";STR(U8$,2,7);
   : RETURN
0570 REM % LOAD KEY FILE DATA ........
   : DATA LOAD DC OPEN T U$
   : DATA LOAD DC K$()
   : DATA SAVE DC CLOSEALL
   : RETURN
0580 REM %^ LOAD DISK FILE MENU ARRAY SUBROUTINE..........
0590 REM Searchs disk index file for all active data files whose
   : REM filenames that start with the identifierbyte 'U6$'.  All matching
   : REM filenames are returned in array 'U$()'.
0600 REM % READ DECODE SECTOR 0 RECORD 0
   : DATA LOAD BA T(0,N)X$()
   : S1=VAL(STR(X$(1),2,1))
   : R=1
   : N=1
   : S=0
   : I=1
   : INIT(20)U$()
   : GOTO 620
0610 REM % READ DECODE INDEX RECORDS IN SECTOR
   : S=S+1
   : IF S=S1THEN 650
   : R=0
   : N=1
0620 REM % DECODE RECORD
   : IF STR(X$(N),R*16+1,1)=HEX(00)THEN 640
   : IF STR(X$(N),R*16+2,1)<>HEX(00)THEN 630
   : IF STR(X$(N),R*16+1,1)<>HEX(10)OR STR(X$(N),R*16+9,1)<>U6$THEN 630
   : U$(I)=STR(X$(N),R*16+9,8)
   : I=I+1
0630 REM % POINT TO NEXT RECORD
   : R=R+1
   : IF R<2THEN 620
   : R=0
   : N=N+1
   : IF N<9THEN 620
0640 REM % LOAD NEXT SECTOR
   : DATA LOAD BA T(S,N)X$()
   : GOTO 610
0650 INIT(20)X$()
   : RETURN
0660 REM % DISPLAY GRAPHIC KEYBOARD FROM DATA IN K$()............
0670 I=1
   : PRINT HEX(060202020F0F)
0680 GOSUB 750
   : I=I+1
   : IF R+C=0THEN 690
   : PRINT AT(R,C);HEX(CFC5)
   : GOTO 680
0690 GOSUB 750
   : IF R+C=0THEN RETURN
   : PRINT AT(R,C-1);BOX(1,2);" ";HEX(CFC5)
   : I=I+1
   : GOTO 690
0700 REM % DISPLAY EXPECTED KEY..........
   : REM N = ARRAY POINTER, N1 = PREVIOUS
   : REM END IF R & C =0
   : I=N1
   : GOSUB 750
   : PRINT AT(R,C);HEX(0FCFC5)
   : I=N
   : GOSUB 750
   : IF R+C=0THEN RETURN
   : PRINT AT(R,C);HEX(0204020ECFC50F)
   : RETURN
0710 REM % DISPLAY EXPECTED AND RETURNED KEY CODES
   : RESTORE LINE6070
   : READ X$(4),X$(5)
   : PRINT HEX(020402000E);AT(20,40-(LEN(X$(4))+LEN(X$(5))+7)/2);X$(4);" ";HEX
     OF(STR(K$(N),I,1));" ";X$(5);" ";HEXOF(U6$);HEX(0F)
   : RETURN
0720 REM % DISPLAY EXPECTED SETTING MESSAGE...........
   : REM SET S = DISPLACEMENTFACTOR
   : IF N>1THEN 740
   : I=0
0730 I=I+1
   : GOSUB 750
   : IF R+C<>0THEN 730
   : CONVERT STR(K$(I),5,2)TO S
0740 REM DISPLAY LINE
   : RESTORE LINE6120,(S*6+((N-1)/18+1))
   : READ X$(4)
   : PRINT HEX(020402000E);AT(7,10,60);AT(7,(W5-LEN(X$(4)))/2);X$(4);HEX(070F)
   : FOR I=1TO 600
   : NEXT I
   : PRINT HEX(07)
   : RETURN
0750 REM % GET ROW COLUMN COORDINATES
   : CONVERT STR(K$(I),1,2)TO R
   : CONVERT STR(K$(I),3,2)TO C
   : RETURN
0760 REM % MISC. SUBROUTINES.........
0770 REM %DISPLAY NODE TITLE
   : READ X$(1)
0780 N=1
   : SELECT PRINT 005(W5),P
   : PRINT HEX(020D0C030F06);AT(0,(W5-LEN(X$(N)))/2);HEX(0E);X$(N);HEX(0F)
   : PRINT
0790 REM %DISPLAY INSTRUCTIONS
   : READ X$(2),X$(4),X$(5),X$(6),X$(7),X$(8)
   : PRINT AT(2,0);X$(2);X$(4);AT(3,0);X$(5);X$(6);AT(2,W5-22);X$(7);#PART;HEX
     (08);",";SPACEK;"K";AT(3,W5-15);X$(8);#TERM
   : RETURN