image of READY prompt

Wang2200.org

Listing of file='@MENU' on disk='vmedia/701-2118L.wvd.zip'

# Sector 732, program filename = '@MENU'
0010 REM %@MENU -- PLATTER MENU
   : REM 12/31/79 BP 1/25/80 DA
   : REM System -- VP, MVP
0020 REM This program provides a tree structured menu for program selection.
          Multiple levels of menu can be set up with each successive screen
           displaying the next menu node.  Node information is overlayed in at
0030 REM lines 9000-9999; each node is saved as a separate program file ('31).
          Access to the root node is always available with RESET & LOADRUN if
           the progam START is this program or loads in this program.
0040 REM %VARIABLES
   : DIM F$8,F1$68,F2$1,K$1,C$(95,2)1,L(5),X$10,C$1
0050 REM Display
   : REM  C$=cursor
   : REM  C=column#
   : REM  C0=CRT column
   : REM  C5=# CRT columns
   : REM  T=tab
   : REM  R=row#
   : REM  R0=CRT row
   : REM  R5=# CRT rows
   : REM  R9=# rows
   : REM  C$(=item coordinates
   : REM  L(i)=length column(i)
0060 REM Node Items
   : REM  F=# fields/item
   : REM  F$=filename
   : REM  F1$=description
   : REM  F2$=type
   : REM  I,J=item#
   : REM  M=# extra fields in node descriptor
   : REM  I9=# items
0070 REM Other
   : REM  K$=keystroke
   : REM  X,X$=scratch
0080 REM %ROOT NODE
   : REM To start at particular node, LOAD @MENU with common F$="nodename"
   : IF F$<>" "THEN 90
   : DATA LOAD DC OPEN T ".STARTD"
   : DATA LOAD DC F$
0090 REM %GET NEXT NODE
   : LOAD T F$ 9000,9999 BEG  110
   : ERRORREM
0100 SELECT P9
   : PRINT HEX(07020404000E);"File not found";HEX(0D0D)
0110 REM %CRT SIZE
   : R5=24
   : C5=80
   : C$=HEX(8B)
   : $GIO/005(7601,X$)
   : X$=AND HEX(10)
   : IF STR(X$,,1)=HEX(10) THEN 120
   : R5=16
   : C5=64
   : C$="*"
0120 REM %DISPLAY NODE TITLE
   : $PSTAT=" "
   : RESTORE LINE8990
   : READ F$,F1$,F,M
   : SELECT PRINT 005(C5),P
   : PRINT HEX(03060D);AT(0,(C5-LEN(F1$))/2);HEX(020402000E);F1$;HEX(0F)
   : PRINT
0130 REM %DISPLAY INSTRUCTIONS
   : PRINT "Select item with SPACE & BACKSPACE."
   : PRINT "Press RUN to execute, CLEAR for previous screen."
   : PRINT AT(2,C5-22);"Partition";#PART;HEX(08);",";SPACEK;"K"
   : PRINT AT(3,C5-15);"Terminal";#TERM
0140 REM %# NODE ITEMS
   : J=-1
   : RESTORE LINE 8990,5+M
0150 GOSUB 420
   : IF F$<>"no more" THEN 150
   : I9=J
   : C=INT((I9+R5-6)/(R5-5))
   : R9=-INT(-I9/C)
0160 REM %MAX ITEM LENGTH FOR EACH COL
   : J=-1
   : C=0
   : MAT L=ZER
   : RESTORE LINE 8990,5+M
0170 FOR I=1 TO I9
   : GOSUB 420
   : IF MOD(J,R9)=0 THEN C=C+1
   : L(C)=MAX(L(C),LEN(F1$)+2)
   : NEXT I
0180 REM %CALCULATE DISPLAY COORDINATES
   : R0=INT((R5-5-R9)/2)+5
   : C0,T=INT((C5-L(1)-L(2)-L(3)-L(4)-L(5))/(C+1))
   : IF T<5 THEN STOP "Screen too small -- reduce length or number of node ite
     ms. "
0190 FOR I=1 TO I9
   : R=MOD(I-1,R9)
   : C=INT((I-1)/R9)
   : IF R=0 AND C>0 THEN C0=C0+L(C)+T
   : C$(I,1)=BIN(R+R0)
   : C$(I,2)=BIN(C0)
   : NEXT I
0200 REM %DISPLAY NODE
   : RESTORE LINE 8990,5+M
   : FOR I=1 TO I9
   : GOSUB 420
   : PRINT AT(VAL(C$(I,1)),VAL(C$(I,2)));". ";F1$;
   : NEXT I
   : I=1
0210 REM %DISPLAY CURSOR
   : PRINT HEX(0E);AT(VAL(C$(I,1)),VAL(C$(I,2)));C$;HEX(0F);
0220 REM %USER REQUEST
   : KEYIN K$,,220
   : IF K$>="a"AND K$<="z"THEN K$=SUB HEX(20)
   : ON POS(HEX(20088281)=K$) GOTO 290,300,310,340
0230 REM Starting character?
   : RESTORE LINE 8990,5+M
   : J=0
0240 GOSUB 420
   : IF I<>J THEN 240
0250 GOSUB 420
   : IF F$="no more" THEN 260
   : IF STR(F1$,,1)<>K$ THEN 250
   : GOTO 280
0260 RESTORE LINE 8990,5+M
   : J=0
0270 GOSUB 420
   : IF I=J THEN 220
   : IF STR(F1$,,1)<>K$ THEN 270
0280 PRINT AT(VAL(C$(I,1)),VAL(C$(I,2)));".";
   : I=J
   : GOTO 210
0290 REM SPACE key
   : PRINT AT(VAL(C$(I,1)),VAL(C$(I,2)));".";
   : I=MOD(I,I9)+1
   : GOTO 210
0300 REM BACKSPACE key
   : PRINT AT(VAL(C$(I,1)),VAL(C$(I,2)));".";
   : I=MOD(I-2,I9)+1
   : GOTO 210
0310 REM RUN key
   : RESTORE LINE 8990,5+M
   : J=0
0320 GOSUB 420
   : IF I<>J THEN 320
0330 PRINT AT(3,0,48);AT(2,0,40);HEX(0E05);"Loading ";BOX(1,LEN(F$)+1);" ";F$;
     "    ";HEX(0F);
   : IF F2$<>"P" THEN 90
   : $PSTAT=F$
   : LOAD T F$
   : ERRORGOTO 100
0340 REM CLEAR key
   : IF M=0 THEN 220
   : RESTORE LINE 8990,5
   : READ F$
   : F2$="M"
   : GOTO 330
0350 REM %SUBROUTINES
0360 DEFFN'29"LISTSD 9000,";HEX(0D)
0370 DEFFN'30
   : PRINT "Saving menu program"
   : SAVE T$(5)"@MENU"0,8999
   : ERRORSCRATCH T "@MENU"
   : SAVE T ()"@MENU"0,8999
0380 RETURN
0390 DEFFN'31
   : PRINT "Saving node data"
   : RESTORE LINE 8990
   : READ F$
   : SAVE T$(5)F$9000,
   : ERRORSCRATCH T F$
   : SAVE T$()F$ 9000,
0400 RETURN
0410 REM %GET NEXT NODE ITEM
0420 READ F$,F1$,F2$
   : IF F=3THEN 430
   : FOR X=4 TO F
   : READ X$
   : NEXT X
0430 IF POS("MP "=F2$)=0THEN 420
   : J=J+1
   : RETURN
8970 REM %NODE DATA (lines 9000-)
   : REM DATA "node name","node title",no. of items in each file descriptor (3
     ),no. of other items in node descriptor,["previous node name"]
8980 REM DATA "filename","file description","type (P=program,M=menu node,D=dat
     afile, O=overlay,A=accessory utility) [+ (indicates next file is related
     to this file)]"
   : REM DATA   .
   : REM DATA   .
   : REM DATA   .
   : REM DATA "no more","end of node"," "
8990 REM