100 REM ********************************************************************** 110 REM FILE NAME - EASYMENU.BAS 120 REM 130 REM WRITTEN BY - GARY PEEK 140 REM 3201 HIGHGATE 150 REM ST. CHARLES, MO. 63301 160 REM 314 946-5272 170 REM 180 REM LAST UPDATE - change below! 190 REM 200 REM ********************************************************************** 210 DIM ITEM$(9),DESC$(9),DRIVE$(9),DIR$(9),CMD$(9) 220 KEY OFF:FOR A=1 TO 10:KEY A,"":NEXT A 230 REM ----- READ MENU.DAT IF IT EXISTS ----- 300 ON ERROR GOTO 500 310 OPEN "EASYMENU.DAT" FOR INPUT AS 1 330 INPUT #1,TITLE$ 340 FOR LP=1 TO 9 350 INPUT #1,DESC$(LP),DRIVE$(LP),DIR$(LP),CMD$(LP) 360 NEXT LP 370 INPUT #1,TEXTFORE,TEXTBACK,DATAFORE,DATABACK,FIELDFORE,FIELDBACK 380 CLOSE #1 390 ON ERROR GOTO 0 400 GOTO 1000 410 REM ----- EASYMENU.DAT NOT FOUND ----- 500 RESUME 520 520 ON ERROR GOTO 0 530 BOX=1:GOSUB 9000 540 MSG$=" EASYMENU - A HARD DISK MENU PROGRAM version 1/14/95 " 550 ROW=3:GOSUB 9300 560 MSG$="THIS APPEARS TO BE AN INITIAL INSTALLATION OF EASYMENU. " 570 ROW=5:GOSUB 9300 580 MSG$="EASYMENU.EXE SHOULD RESIDE ON THE ROOT DIRECTORY OF DRIVE `C' " 590 ROW=7:GOSUB 9300 600 MSG$="AND BE RUN FROM THE ROOT DIRECTORY TO INITIALLY SET UP THE MENU" 610 ROW=8:GOSUB 9300 620 MSG$="PROGRAM. EASYMENU WILL CREATE MENU.BAT AND EASYMENU.DAT WHEN " 630 ROW=9:GOSUB 9300 640 MSG$="IT IS RUN FOR THE FIRST TIME. AFTER RUNNING EASYMENU.EXE ONCE, " 650 ROW=10:GOSUB 9300 660 MSG$="THE MENU PROGRAM SHOULD THEREAFTER BE RUN BY TYPING `MENU' AND " 670 ROW=11:GOSUB 9300 680 MSG$="HITTING `ENTER' (OR BY INCLUDING `MENU' IN AUTOEXEC.BAT). " 690 ROW=12:GOSUB 9300 700 MSG$="RUNNING EASYMENU.EXE FOR THE FIRST TIME WILL CREATE AN EXAMPLE " 710 ROW=14:GOSUB 9300 720 MSG$="MENU ENTRY FOR YOU. AFTER CHANGING THIS ENTRY AND ADDING " 730 ROW=15:GOSUB 9300 740 MSG$="OTHERS, THE CHANGES WILL BE SAVED IN EASYMENU.DAT. " 750 ROW=16:GOSUB 9300 760 MSG$="Hit ESCape to exit or any other key to continue installation. " 765 ROW=18:GOSUB 9300 770 MSG$=" This program has been provided by and is available from: " 775 ROW=23:GOSUB 9300 780 MSG$="Peek Engineering Services, 3201 Highgate, St. Charles, MO 63301" 785 ROW=24:GOSUB 9300 800 LOCATE ,,0 810 IN$=INKEY$:IF IN$="" THEN 810 820 IF IN$=CHR$(27) THEN COLOR 7,0:CLS:END 830 REM ----- CREATE EXAMPLE DATA 840 TITLE$="THIS IS THE TITLE OF YOUR MENU" 850 DESC$(1)="PROGRAM DESCRIPTION" 860 DRIVE$(1)="C":DIR$(1)="DIRECTRY":CMD$(1)="PROGRAM NAME" 870 FOR LP=2 TO 9 880 DESC$(LP)="":CMD$(LP)="":DRIVE$(LP)="":DIR$(LP)="" 890 NEXT LP 895 TEXTFORE=7:TEXTBACK=0:DATAFORE=15:DATABACK=0:FIELDFORE=0:FIELDBACK=7 900 REM ----- 910 GOSUB 1600 920 MENUEXIT=-1:REM EXIT IF FIRST TIME THROUGH 930 REM ----- DISPLAY MENU ----- 1000 CLS:BOX=2:GOSUB 9000 1010 MSG$=TITLE$:ROW=3:BOX=1:SWAP TEXTFORE,DATAFORE:SWAP TEXTBACK,DATABACK:GOSUB 9300 1020 MSG$="Use "+CHR$(24)+" and "+CHR$(25)+" to move, ENTER to run, " 1030 MSG$=MSG$+"ESCape to exit to DOS, F10 to edit menu" 1040 ROW=24:GOSUB 9300:SWAP TEXTFORE,DATAFORE:SWAP TEXTBACK,DATABACK 1050 REM ----- ADD NUMBERS TO ITEMS 1060 FOR LP=1 TO 9 1070 IF DESC$(LP)<>"" THEN ITEM$(LP)=RIGHT$(STR$(LP),LEN(STR$(LP))-1)+". "+DESC$(LP) 1080 NEXT LP 1090 REM ----- CALCULATE ROW AND COLUMN 1100 MSG$="Select Program:" 1110 MAXLEN=LEN(MSG$) 1120 MAXITEM=1 1130 FOR LP=1 TO 9 1140 IF ITEM$(LP)<>"" THEN MAXITEM=MAXITEM+1 1150 IF LEN(ITEM$(LP))>MAXLEN THEN MAXLEN=LEN(ITEM$(LP)) 1160 NEXT LP 1170 ROW=12-INT((MAXITEM/2)) 1180 COL=39-INT((MAXLEN/2)) 1190 REM ----- CALL MENU ROUTINE 1200 BOX=2:EDKEYS=1:GOSUB 30000 1210 IF EXIT$="ESC" THEN MENUEXIT=-1:GOTO 1300 1220 IF EXIT$="F10" THEN GOSUB 1600:GOTO 1000 1230 IF EXIT$="RIGHT" THEN BEEP:GOTO 1000 1240 IF EXIT$="LEFT" THEN BEEP:GOTO 1000 1250 IF EXIT$="PGUP" THEN BEEP:GOTO 1000 1260 IF EXIT$="PGDN" THEN BEEP:GOTO 1000 1270 REM ----- CREATE BATCH FILE TO RUN PROGRAM 1300 OPEN "MENU.BAT" FOR OUTPUT AS 1 1310 PRINT #1,"@ECHO OFF" 1320 PRINT #1,":CONTINUE" 1325 PRINT #1,"C:" 1330 PRINT #1,"CD\" 1340 PRINT #1,"EASYMENU" 1350 IF MENUEXIT THEN MENUEXIT=0:GOTO 1450 1360 PRINT #1,DRIVE$(ITEM)+":" 1370 PRINT #1,"CD\"+DIR$(ITEM) 1380 PRINT #1,CMD$(ITEM) 1390 REM PRINT #1,"CD\" 1400 PRINT #1,"GOTO CONTINUE" 1410 PRINT #1,CHR$(26) 1420 CLOSE #1 1430 LOCATE 1,1,0:COLOR 7,0:CLS:END 1440 REM ----- 1450 PRINT #1,CHR$(26) 1460 CLOSE #1 1470 LOCATE 1,1,0:COLOR 7,0:CLS 1480 PRINT "To use EASYMENU type MENU and hit the ENTER key" 1490 END 1500 REM ----- DISPLAY TITLE AND LINES ----- 1600 BOX=2:GOSUB 9000 1610 SWAP TEXTFORE,DATAFORE:SWAP TEXTBACK,DATABACK 1620 MSG$="Edit EASYMENU Entries" 1630 ROW=3:COL=12:BOX=1:GOSUB 9300 1640 MSG$=CHR$(24)+" "+CHR$(25)+" "+CHR$(26)+" "+CHR$(27)+" to move, " 1650 MSG$=MSG$+"ESCape to save and exit to menu, F10 to change colors" 1660 ROW=24:GOSUB 9300 1670 MSG$="Title":ROW=6:COL=3:GOSUB 9700 1680 MSG$=TITLE$:ROW=6:COL=10:GOSUB 9700 1685 MSG$="Item Program Description Drive Directory Program Name " 1690 ROW=8:COL=3:GOSUB 9700 1700 SWAP TEXTFORE,DATAFORE:SWAP TEXTBACK,DATABACK 1710 ROW=18:COL=4:MSG$=" ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄ Â ÄÄÂÄÄÄÄÄ ÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ":GOSUB 9700 1720 ROW=19:COL=4:MSG$=" text displayed in the menu ÄÙ ³ ³ ³ ":GOSUB 9700 1730 ROW=20:COL=4:MSG$=" disk drive the program is on ÄÙ ³ ³ ":GOSUB 9700 1740 ROW=21:COL=4:MSG$=" directory the program is on ÄÙ ³ ":GOSUB 9700 1750 ROW=22:COL=4:MSG$=" command line that runs the program ÄÙ ":GOSUB 9700 1760 FOR LP=1 TO 9 1770 ROW=LP+8:COL=3:MSG$=STR$(LP):GOSUB 9700 1780 ROW=LP+8:COL=10:MSG$=DESC$(LP):GOSUB 9700 1790 ROW=LP+8:COL=44:MSG$=DRIVE$(LP):GOSUB 9700 1800 ROW=LP+8:COL=49:MSG$=DIR$(LP):GOSUB 9700 1810 ROW=LP+8:COL=60:MSG$=CMD$(LP):GOSUB 9700 1820 NEXT LP 1830 REM ----- EDIT TITLE AND LINES ----- 2000 ROW=6:COL=10:LNG=55:EDKEYS=2:TEMP$=TITLE$:GOSUB 10000 2010 TITLE$=TEMP$ 2020 IF EXIT$="ESC" THEN 3000 2030 IF EXIT$="DOWN" THEN 2070 2040 IF EXIT$="ENTER" THEN 2070 2050 IF EXIT$="F10" THEN GOSUB 5000:GOTO 1600 2060 GOTO 2000 2065 REM ----- 2070 LP=1 2080 REM ----- DESCRIPTION 2200 ROW=LP+8:COL=10:LNG=30:EDKEYS=2 2210 TEMP$=DESC$(LP):GOSUB 10000 2220 DESC$(LP)=TEMP$ 2230 IF EXIT$="ESC" THEN 3000 2240 IF EXIT$="UP" AND LP=1 THEN 2000 2250 IF EXIT$="UP" AND LP>1 THEN LP=LP-1:GOTO 2200 2260 IF EXIT$="DOWN" AND LP<9 THEN LP=LP+1:GOTO 2200 2270 IF EXIT$="ENTER" THEN 2400 2280 IF EXIT$="RIGHT" THEN 2400 2290 IF EXIT$="LEFT" AND LP>1 THEN LP=LP-1:GOTO 2800 2300 IF EXIT$="F10" THEN GOSUB 5000:GOTO 1600 2310 GOTO 2200 2320 REM ----- DRIVE 2400 ROW=LP+8:COL=44:LNG=1:EDKEYS=2 2410 TEMP$=DRIVE$(LP):GOSUB 10000 2420 DRIVE$(LP)=TEMP$ 2430 IF EXIT$="ESC" THEN 3000 2440 IF EXIT$="UP" AND LP>1 THEN LP=LP-1:GOTO 2400 2450 IF EXIT$="DOWN" AND LP<9 THEN LP=LP+1:GOTO 2400 2460 IF EXIT$="ENTER" THEN 2600 2470 IF EXIT$="RIGHT" THEN 2600 2480 IF EXIT$="LEFT" THEN 2200 2490 IF EXIT$="F10" THEN GOSUB 5000:GOTO 1600 2500 GOTO 2400 2510 REM ----- DIRECTORY 2600 ROW=LP+8:COL=49:LNG=8:EDKEYS=2 2610 TEMP$=DIR$(LP):GOSUB 10000 2620 DIR$(LP)=TEMP$ 2630 IF EXIT$="ESC" THEN 3000 2640 IF EXIT$="UP" AND LP>1 THEN LP=LP-1:GOTO 2600 2650 IF EXIT$="DOWN" AND LP<9 THEN LP=LP+1:GOTO 2600 2660 IF EXIT$="ENTER" THEN 2800 2670 IF EXIT$="RIGHT" THEN 2800 2680 IF EXIT$="LEFT" THEN 2400 2690 IF EXIT$="F10" THEN GOSUB 5000:GOTO 1600 2700 GOTO 2600 2710 REM ----- COMMAND 2800 ROW=LP+8:COL=60:LNG=18:EDKEYS=2 2810 TEMP$=CMD$(LP):GOSUB 10000 2820 CMD$(LP)=TEMP$ 2830 IF EXIT$="ESC" THEN 3000 2840 IF EXIT$="UP" AND LP>1 THEN LP=LP-1:GOTO 2800 2850 IF EXIT$="DOWN" AND LP<9 THEN LP=LP+1:GOTO 2800 2860 IF EXIT$="ENTER" AND LP<9 THEN LP=LP+1:GOTO 2200 2870 IF EXIT$="RIGHT" AND LP<9 THEN LP=LP+1:GOTO 2200 2880 IF EXIT$="LEFT" THEN 2600 2890 IF EXIT$="F10" THEN GOSUB 5000:GOTO 1000 2900 GOTO 2800 2910 REM ----- SAVE DATA FILE ----- 3000 REM CLS:MSG$="Saving EASYMENU.DAT":ROW=9:BOX=1:GOSUB 9300 3010 OPEN "EASYMENU.DAT" FOR OUTPUT AS 1 3020 PRINT #1,TITLE$ 3030 FOR LP=1 TO 9 3040 WRITE #1,DESC$(LP);DRIVE$(LP);DIR$(LP);CMD$(LP) 3050 NEXT LP 3060 PRINT #1,TEXTFORE;TEXTBACK;DATAFORE;DATABACK;FIELDFORE;FIELDBACK 3070 CLOSE #1 3080 RETURN 3090 REM ----- CHANGE MENU COLORS ----- 5000 TF=TEXTFORE:TB=TEXTBACK:DF=DATAFORE:DB=DATABACK:FF=FIELDFORE:FB=FIELDBACK 5010 CLS:BOX=2:GOSUB 9000 5020 SWAP TEXTFORE,DATAFORE:SWAP TEXTBACK,DATABACK 5030 MSG$="Change Colors":ROW=3:BOX=1:GOSUB 9300 5040 MSG$="F1=Item Color, F2=Item Background, F3=Highlite Color, F4=Highlite Background" 5050 ROW=23:GOSUB 9300 5060 MSG$="F5=Selection Color, F6=Selection Background, F10=Original Colors, ESC=exit" 5070 ROW=24:GOSUB 9300:SWAP TEXTFORE,DATAFORE:SWAP TEXTBACK,DATABACK 5080 REM ----- 5090 MSG$="Highlite Color:" 5100 ITEM$(1)="1. Selection Color" 5110 ITEM$(2)="2. Item Color" 5120 ITEM$(3)="3. Item Color" 5130 MAXITEM=3:MAXLEN=18 5140 ROW=12-INT((MAXITEM/2)) 5150 COL=39-INT((MAXLEN/2)) 5160 REM ----- 5170 BOX=2:TYP=3:ITEM=1:GOSUB 30000 5180 REM ----- 5500 IN$=INKEY$:IF IN$="" THEN 5500 5510 IF IN$=CHR$(0)+CHR$(59) THEN 5620 5520 IF IN$=CHR$(0)+CHR$(60) THEN 5630 5530 IF IN$=CHR$(0)+CHR$(61) THEN 5640 5540 IF IN$=CHR$(0)+CHR$(62) THEN 5650 5550 IF IN$=CHR$(0)+CHR$(63) THEN 5660 5560 IF IN$=CHR$(0)+CHR$(64) THEN 5680 5570 IF IN$=CHR$(0)+CHR$(68) THEN 5700 5580 REM IF IN$=CHR$(13) THEN GOSUB 5000 5590 IF IN$=CHR$(27) THEN RETURN 5600 GOTO 5500 5610 REM 5620 TEXTFORE=TEXTFORE+1:IF TEXTFORE>15 THEN TEXTFORE=0 5622 IF TEXTFORE=TEXTBACK THEN 5620 5625 GOTO 5720 5630 TEXTBACK=TEXTBACK+1:IF TEXTBACK>7 THEN TEXTBACK=0 5632 IF TEXTFORE=TEXTBACK THEN 5630 5635 GOTO 5720 5640 DATAFORE=DATAFORE+1:IF DATAFORE>15 THEN DATAFORE=0 5642 IF DATAFORE=DATABACK THEN 5640 5645 GOTO 5720 5650 DATABACK=DATABACK+1:IF DATABACK>7 THEN DATABACK=0 5652 IF DATAFORE=DATABACK THEN 5650 5655 GOTO 5720 5660 FIELDFORE=FIELDFORE+1:IF FIELDFORE>15 THEN FIELDFORE=0 5662 IF FIELDFORE=FIELDBACK THEN 5660 5665 GOTO 5720 5680 FIELDBACK=FIELDBACK+1:IF FIELDBACK>7 THEN FIELDBACK=0 5682 IF FIELDFORE=FIELDBACK THEN 5680 5685 GOTO 5720 5700 TEXTFORE=TF:TEXTBACK=TB:DATAFORE=DF:DATABACK=DB 5710 FIELDFORE=FF:FIELDBACK=FB:GOTO 5720 5720 GOTO 5010 8000 REM --------------------------------------------------------------------- 8010 REM 8020 REM THE FOLLOWING HAVE BEEN ADAPTED FROM ROUTINES.BAS AND MAY BE MODIFIED 8030 REM 8945 REM ********************************************************************* 8950 REM --------------------- OUTLINE THE SCREEN ---------------------------- 8955 REM 8960 REM This subroutines allows you to outline the screen with your 8965 REM choice of 4 types of boxes. Boxes 1, 2, and 3 are the same 8970 REM types of boxes used in other subroutines. 8975 REM 8980 REM enter with - BOX = 0,1,2,3 - type of box to outline the screen with 8985 REM 0=squares, 1=1 line box, 2=2 line box, 3=solid box 8990 REM exit with - BOX=0 (to maintain BOX as optional for other routines) 8995 REM 9000 IF TEXTFORE=0 AND TEXTBACK=0 THEN TEXTFORE=7 :REM 9000 9005 KEY OFF:COLOR TEXTFORE,TEXTBACK:CLS:LOCATE ,,0 9010 IF BOX=0 THEN TP=254:BT=254:MS=254:UL=254:LL=254:UR=254:LR=254 9015 IF BOX=1 THEN TP=196:BT=196:MS=179:UL=218:LL=192:UR=191:LR=217 9020 IF BOX=2 THEN TP=205:BT=205:MS=186:UL=201:LL=200:UR=187:LR=188 9025 IF BOX=3 THEN TP=223:BT=220:MS=219:UL=219:LL=219:UR=219:LR=219 9030 ROW=1:LOCATE ROW,2:PRINT STRING$(78,CHR$(TP)); 9035 ROW=25:LOCATE ROW,2:PRINT STRING$(78,CHR$(BT)); 9040 COL=1:FOR ROW=2 TO 24:LOCATE ROW,COL:PRINT CHR$(MS);:NEXT 9045 COL=80:FOR ROW=2 TO 24:LOCATE ROW,COL:PRINT CHR$(MS);:NEXT 9050 LOCATE 1,1:PRINT CHR$(UL);:LOCATE 1,80:PRINT CHR$(UR); 9055 LOCATE 25,1:PRINT CHR$(LL);:LOCATE 25,80:PRINT CHR$(LR); 9060 BOX=0:RETURN 9065 REM 9070 REM 9240 REM ********************************************************************* 9245 REM ------------------- CENTER A MESSAGE IN ROW ------------------------- 9250 REM 9255 REM This subroutine allows you to center a message in a particular row 9260 REM and automatically makes adjustments to the column for centering. 9265 REM 9270 REM enter with - MSG$="message", to display (up to 74 characters) 9275 REM ROW=ROW (on which to display message) 9280 REM optional - BOX=0,1,2,3 - type of box to draw around MSG$ 9285 REM 0 = no box, 1 = 1 line, 2 = 2 line, 3 = solid 9290 REM exit with - BOX=0 (to maintain as optional) 9295 REM 9300 COL=41-INT((LEN(MSG$)/2)) :REM 9300 9305 GOSUB 9700:REM display message at row,col :REM SUBROUTINE USED HERE 9310 RETURN 9315 REM 9615 REM ********************************************************************* 9620 REM ---------------- DISPLAY MESSAGE AT ROW AND COLUMN ------------------ 9625 REM 9630 REM This subroutine allows you to display a message at a specified 9635 REM row and column and optionally draw a box with a shadow around it. 9640 REM 9645 REM enter with - MSG$="message", to display 9650 REM ROW and COL=row and column on which to display "message" 9655 REM optional- BOX=0,1,2,3 - type of box to draw around MSG$ 9660 REM 0 = no box, 1 = 1 line, 2 = 2 line, 3 = solid 9675 REM optional - TEXTFORE, TEXTBACK, DATAFORE, DATABACK, 9680 REM FIELDFORE, FIELDBACK 9685 REM colors optionally specified for COLOR statements 9690 REM exit with - BOX=0 (to maintain them as optional for later) 9695 REM 9700 IF TEXTFORE=0 AND TEXTBACK=0 THEN TEXTFORE=7 :REM 9700 9705 IF DATAFORE=0 AND DATABACK=0 THEN DATAFORE=15 9710 IF FIELDFORE=0 AND FIELDBACK=0 THEN FIELDBACK=7 9720 COLOR TEXTFORE,TEXTBACK:LOCATE ROW,COL,0:PRINT MSG$;:L=LEN(MSG$) 9725 IF BOX=0 THEN 9830 9730 LOCATE ROW,COL-1:PRINT " ";:LOCATE ROW,COL+LEN(MSG$):PRINT " "; 9735 IF BOX=1 THEN TP=196:BT=196:MS=179:UL=218:LL=192:UR=191:LR=217:DN=194:RT=195 9740 IF BOX=2 THEN TP=205:BT=205:MS=186:UL=201:LL=200:UR=187:LR=188:DN=203:RT=204 9745 IF BOX=3 THEN TP=223:BT=220:MS=219:UL=219:LL=219:UR=219:LR=219 9750 LOCATE ROW+1,COL-2:PRINT CHR$(LL);:LOCATE ROW,COL-2:PRINT CHR$(MS); 9755 LOCATE ROW-1,COL-2:PRINT CHR$(UL);:LOCATE ROW-1,COL+L+1:PRINT CHR$(UR); 9760 LOCATE ROW,COL+L+1:PRINT CHR$(MS);:LOCATE ROW+1,COL+L+1:PRINT CHR$(LR); 9765 LOCATE ROW-1,COL-1:PRINT STRING$(L+2,CHR$(TP)); 9770 LOCATE ROW+1,COL-1:PRINT STRING$(L+2,CHR$(BT)); 9830 BOX=0:COLOR TEXTFORE,TEXTBACK:RETURN 9835 REM 9840 REM ********************************************************************* 9845 REM ---------------- EDIT A FIELD AT ROW AND COLUMN --------------------- 9850 REM 9855 REM This subroutine allows you to edit or enter a string. The editing 9860 REM keys perform the same functions as BASIC in the screen editing mode. 9865 REM 9870 REM enter with - ROW and COL=row and column at which to edit the string 9875 REM LNG=maximum length of string allowed (up to 74) 9880 REM TEMP$="string" to edit 9885 REM optional - EDCOL=0, place cursor at beginning of string 9890 REM 1, place cursor at end of string 9895 REM optional - EDKEYS=0,1,2 - what keys allow you to exit the routine 9900 REM 0 = only ENTER or ESCAPE 9905 REM 1 = include PGUP, PGDN, UP, DOWN, LEFT, RIGHT ARROWS 9910 REM 2 = include F1-F10 9915 REM optional - INPTYPE=0,1,2,3 - type of input desired 9920 REM 0 = normal ALPHANUMERIC 9925 REM 1 = ALPHANUMERIC with lower case changed to upper case 9930 REM 2 = NUMERIC only allowed 9935 REM 3 = Y or N only (or y or n changed to upper case) 9940 REM optional - BOX=0,1,2,3 - type of box to draw around TEMP$ 9945 REM 0 = no box, 1 = 1 line, 2 = 2 line, 3 = solid 9950 REM optional - TEXTFORE,TEXTBACK,DATAFORE,DATABACK 9955 REM colors optionally specified for COLOR statements 9960 REM exit with - TEMP$="string" edited or entered 9965 REM BOX=0,INPTYP=0,EDKEYS=0,EDCOL=0 (to maintain as optional) 9970 REM EXIT$=key hit that exited routine- 9975 REM (EXIT$="ENTER" if field was completely filled) 9980 REM "LEFT" if LEFT ARROW when at left side of field 9985 REM "RIGHT" if RIGHT ARROW when at right side of field 9990 REM "UP","DOWN","PGUP","PGDN","F1"-"F10","ENTER","ESC" 9995 REM 10000 IF TEXTFORE=0 AND TEXTBACK=0 THEN TEXTFORE=7 :REM 10000 10005 IF DATAFORE=0 AND DATABACK=0 THEN DATAFORE=15 10010 IF FIELDFORE=0 AND FIELDBACK=0 THEN FIELDBACK=7 10020 IF LNG=0 THEN LNG=1 10025 LOCATE ,,0:INS=0:EXIT$="":TEMP$=LEFT$(TEMP$,LNG) 10030 IF EDCOL=0 THEN EDCOL=COL:GOTO 10040 10035 IF LEN(TEMP$)=LNG THEN EDCOL=COL+LEN(TEMP$)-1 ELSE EDCOL=COL+LEN(TEMP$) 10040 IF BOX=0 THEN 10160 10045 IF BOX=1 THEN TP=196:BT=196:MS=179:UL=218:LL=192:UR=191:LR=217:DN=194:RT=195 10050 IF BOX=2 THEN TP=205:BT=205:MS=186:UL=201:LL=200:UR=187:LR=188:DN=203:RT=204 10055 IF BOX=3 THEN TP=223:BT=220:MS=219:UL=219:LL=219:UR=219:LR=219 10060 COLOR TEXTFORE,TEXTBACK 10065 LOCATE ROW+1,COL-2:PRINT CHR$(LL);:LOCATE ROW,COL-2:PRINT CHR$(MS); 10070 LOCATE ROW-1,COL-2:PRINT CHR$(UL);:LOCATE ROW-1,COL+LNG+1:PRINT CHR$(UR); 10075 LOCATE ROW,COL+LNG+1:PRINT CHR$(MS); 10080 LOCATE ROW+1,COL+LNG+1:PRINT CHR$(LR); 10085 LOCATE ROW-1,COL-1:PRINT STRING$(LNG+2,CHR$(TP)); 10090 LOCATE ROW+1,COL-1:PRINT STRING$(LNG+2,CHR$(BT)); 10160 BOX=0 10165 LOCATE ROW,COL,0:COLOR FIELDFORE,FIELDBACK:PRINT TEMP$; 10170 LOCATE ROW,COL+LEN(TEMP$):PRINT SPACE$(LNG-LEN(TEMP$)); 10175 L=LEN(TEMP$) 10180 AAAA$=MID$(TEMP$,EDCOL-COL+1,1) :REM -------------- 10185 IF INS THEN LOCATE ROW,EDCOL:COLOR DATAFORE,DATABACK :REM editing | 10190 IF INS THEN PRINT AAAA$;:COLOR FIELDFORE,FIELDBACK :REM keys | 10195 LOCATE ROW,EDCOL :REM available | 10200 LOCATE,,1 :REM | 10205 IN$=INKEY$:IF IN$="" THEN 10200 :REM -------------- 10210 IF IN$=CHR$(13) THEN EXIT$="ENTER":GOTO 10690 :REM ENTER | 10215 IF IN$=CHR$(27) THEN EXIT$="ESC":GOTO 10690 :REM ESCAPE | 10220 IF IN$=CHR$(8) THEN 10500 :REM BACKSPACE | 10225 IF IN$=CHR$(0)+CHR$(71) THEN 10545 :REM HOME | 10230 IF IN$=CHR$(0)+CHR$(119) THEN 10555 :REM CONTROL HOME | 10235 IF IN$=CHR$(0)+CHR$(75) THEN 10565 :REM LEFT ARROW | 10240 IF IN$=CHR$(0)+CHR$(77) THEN 10585 :REM RIGHT ARROW | 10245 IF IN$=CHR$(0)+CHR$(79) THEN 10625 :REM END | 10250 IF IN$=CHR$(0)+CHR$(117) THEN 10645 :REM CONTROL END | 10255 IF IN$=CHR$(0)+CHR$(82) THEN 10655 :REM INSERT | 10260 IF IN$=CHR$(0)+CHR$(83) THEN 10665 :REM DELETE | 10265 IF EDKEYS=0 THEN 10355 :REM skip these - | 10270 IF IN$=CHR$(0)+CHR$(72) THEN EXIT$="UP":GOTO 10690 :REM UP ARROW | 10275 IF IN$=CHR$(0)+CHR$(80) THEN EXIT$="DOWN":GOTO 10690 :REM DOWN ARROW | 10280 IF IN$=CHR$(0)+CHR$(73) THEN EXIT$="PGUP":GOTO 10690 :REM PAGE UP | 10285 IF IN$=CHR$(0)+CHR$(81) THEN EXIT$="PGDN":GOTO 10690 :REM PAGE DOWN | 10290 REM :REM HOME | 10295 REM :REM END | 10300 IF EDKEYS=1 THEN 10355 :REM skip these - | 10305 IF IN$=CHR$(0)+CHR$(59) THEN EXIT$="F1":GOTO 10690 :REM F1 | 10310 IF IN$=CHR$(0)+CHR$(60) THEN EXIT$="F2":GOTO 10690 :REM F2 | 10315 IF IN$=CHR$(0)+CHR$(61) THEN EXIT$="F3":GOTO 10690 :REM F3 | 10320 IF IN$=CHR$(0)+CHR$(62) THEN EXIT$="F4":GOTO 10690 :REM F4 | 10325 IF IN$=CHR$(0)+CHR$(63) THEN EXIT$="F5":GOTO 10690 :REM F5 | 10330 IF IN$=CHR$(0)+CHR$(64) THEN EXIT$="F6":GOTO 10690 :REM F6 | 10335 IF IN$=CHR$(0)+CHR$(65) THEN EXIT$="F7":GOTO 10690 :REM F7 | 10340 IF IN$=CHR$(0)+CHR$(66) THEN EXIT$="F8":GOTO 10690 :REM F8 | 10345 IF IN$=CHR$(0)+CHR$(67) THEN EXIT$="F9":GOTO 10690 :REM F9 | 10350 IF IN$=CHR$(0)+CHR$(68) THEN EXIT$="F10":GOTO 10690 :REM F10 | 10355 IF INPTYPE=0 OR INPTYPE=1 OR INPTYPE=3 THEN 10375 :REM -------------- 10360 REM ----- allow only numbers or decimal point 10365 IF ASC(IN$)<46 OR ASC(IN$)>57 OR ASC(IN$)=47 THEN GOSUB 10740:GOTO 10200 10370 REM ----- allow only legitimate alphanumeric 10375 IF ASC(IN$)<32 OR ASC(IN$)>126 THEN GOSUB 10740:GOTO 10200 10380 REM ----- change to all upper case 10385 IF INPTYPE=0 OR INPTYPE=2 THEN 10415 10390 IF ASC(IN$)>=97 AND ASC(IN$)<=122 THEN IN$=CHR$(ASC(IN$)-32) 10395 REM ----- Yes or No only ----- 10400 IF INPTYPE<>3 THEN 10415 10405 IF IN$<>"Y" AND IN$<>"N" THEN GOSUB 10740:GOTO 10200 10410 REM ----- good character 10415 L=EDCOL-COL:IF INS THEN 10460 10420 REM ----- add char. if at end of string 10425 IF EDCOL=COL+LEN(TEMP$) THEN TEMP$=TEMP$+IN$:GOTO 10475 10430 REM ----- add char. in middle if not in insert mode 10435 TEMP$=LEFT$(TEMP$,L)+IN$+RIGHT$(TEMP$,LEN(TEMP$)-1-L) 10440 REM ----- exit if overwriting last character 10445 IF EDCOL=COL+LNG-1 AND LEN(TEMP$)=LNG THEN EXIT$="ENTER":GOTO 10690 10450 GOTO 10475 10455 REM ----- in insert mode, check for full field 10460 IF LEN(TEMP$)=LNG THEN GOSUB 10740:GOTO 10165 :REM full field 10465 TEMP$=LEFT$(TEMP$,L)+IN$+RIGHT$(TEMP$,LEN(TEMP$)-L) :REM not full 10470 REM ----- move cursor right if applicable 10475 IF EDCOLCOL THEN EDCOL=EDCOL-1:GOTO 10165 10570 IF EDKEYS=0 THEN GOSUB 10740:GOTO 10165 :REM error if left col 10575 EXIT$="LEFT":GOTO 10690 :REM or exit 10580 REM ----- RIGHT ARROW ----- 10585 INS=0:IF EDCOLCOL+LNG THEN EDCOL=COL+LNG:GOTO 10025 10640 REM ----- CONTROL END ----- 10645 INS=0:TEMP$=LEFT$(TEMP$,EDCOL-COL):GOTO 10165 10650 REM ----- INSERT ----- 10655 IF INS THEN INS=0:GOTO 10165 ELSE INS=-1:GOTO 10165 10660 REM ----- DELETE ----- 10665 INS=0:L=EDCOL-COL 10670 REM:IF EDCOL=COL+LNG-1 THEN GOSUB 10515:GOTO 10025:REM needed? 10675 IF EDCOL>=COL+LEN(TEMP$) THEN GOSUB 10740:GOTO 10165 10680 TEMP$=LEFT$(TEMP$,L)+RIGHT$(TEMP$,LEN(TEMP$)-L-1):GOTO 10165 10685 REM ----- COMMON EXIT ----- 10690 BLANK$=CHR$(255):REM remove blanks at end 10695 IF RIGHT$(TEMP$,1)=BLANK$ THEN TEMP$=LEFT$(TEMP$,LEN(TEMP$)-1):GOTO 10695 10700 FOR BLANKLOOP=1 TO LEN(TEMP$):REM change blanks in middle to spaces 10705 IF MID$(TEMP$,BLANKLOOP,1)=CHR$(255) THEN MID$(TEMP$,BLANKLOOP,1)=" " 10710 NEXT BLANKLOOP 10715 LOCATE ROW,COL,0:COLOR TEXTFORE,TEXTBACK 10720 PRINT TEMP$+SPACE$(LNG-LEN(TEMP$)); 10725 BOX=0:INPTYPE=0:EDKEYS=0:EDCOL=0:RETURN 10730 REM 10735 REM ----- BEEP IF ERROR ----- 10740 BEEP:RETURN 10745 REM 10750 REM 29800 REM ******************************************************************** 29805 REM ---------------------- POINT AND SHOOT MENU ------------------------ 29810 REM ----------------------- (or display window) ------------------------ 29815 REM 29820 REM Sets up menu and selects from up to 9 items. Moves among the items 29825 REM with the arrow keys and selects with ENTER or ESCAPE keys, numbers 29830 REM 1-9, F1-F9, and optionally PAGE UP, PAGE DOWN, LEFT, RIGHT, F10. 29835 REM Displays message at top and optionally, a box around the menu. 29840 REM Item names must be in order and none may be skipped. The ROW and COL 29845 REM must allow all of menu to be displayed on the screen. Menu can be 29850 REM optionally displayed as a pull-down menu, meaning that when item is 29855 REM selected, parts of the screen that were written over are restored. 29860 REM 29865 REM With the display window option set, the menu becomes only a display 29870 REM of text and does not wait for any keyboard entry. 29875 REM 29880 REM enter with ITEM$(1)="ITEM 1 message",(up to 76 chars.),ITEM$(2), etc. 29882 REM (array must be DIMinsioned before using this routine) 29885 REM MSG$="menu message or name", (up to 76 characters) 29890 REM ROW, COL=upper left corner of menu 29895 REM optional - TEXTFORE,TEXTBACK,DATAFORE,DATABACK 29900 REM colors optionally specified for COLOR statements 29905 REM BOX=0,1,2,3 - type of outline around menu 29910 REM 0 = no box, 1 = 1 line box, 2 = 2 line box, 3 = solid box 29915 REM optional - EDKEYS=0,1 - what keys allow you to exit the routine 29920 REM 0 = only ENTER or ESCAPE 29925 REM 1 = include PGUP, PGDN, LEFT and RIGHT ARROWS, F10 29930 REM ITEM = 1 to number of items, default item selected 29935 REM TYP=0,1,2,3 - type of menu/display desired 29940 REM 0 = normal menu 29945 REM 1 = REMOVED !!!!!!!!!!!!!!!!!!!! 29950 REM 2 = display window of text only 29955 REM 3 = display window with default "ITEM" hi-lighted 29960 REM exit with -ITEM = 1-9, item selected 29965 REM ITEM$ = ITEM$(1)-ITEM$(9), depending on item selected 29970 REM ESCAPE=-1 (TRUE) if ESCAPE key hit 29975 REM (for compatibility with old versions) 29980 REM EXIT$=key hit that exited routine- 29985 REM "ENTER","ESC","PGUP","PGDN","LEFT","RIGHT","F10" 29990 REM BOX=0, TYP=0 (to maintain as optional) 29995 REM 30000 IF TEXTFORE=0 AND TEXTBACK=0 THEN TEXTFORE=7 :REM 30000 30005 IF DATAFORE=0 AND DATABACK=0 THEN DATAFORE=15 30010 IF FIELDFORE=0 AND FIELDBACK=0 THEN FIELDBACK=7 30015 KEY OFF:FOR A=1 TO 10:KEY A,"":NEXT 30020 NUMITEMS=0:EXIT$="":ESCAPE=0 30030 FOR A=1 TO 9:IF ITEM$(A)="" THEN 30040 30035 NUMITEMS=NUMITEMS+1:NEXT A 30040 IF NUMITEMS+ROW+3>25 THEN ROW=25-3-NUMITEMS 30045 REM -------------- FIND MAX LNG AND PAD SHORTER ONES --------------- 30050 MAXLEN=LEN(MSG$) 30055 FOR MENULOOP=1 TO NUMITEMS 30060 IF LEN(ITEM$(MENULOOP))>MAXLEN THEN MAXLEN=LEN(ITEM$(MENULOOP)) 30065 NEXT MENULOOP 30070 IF LEN(MSG$)80 THEN COL=80-3-MAXLEN 30155 REM ---------------------- DISPLAY MENU ----------------------------- 30160 LOCATE ,,0 30165 IF BOX=0 THEN TP=0:BT=0:LS=0:RS=0:MS=0:MM=0:UL=0:LL=0:UR=0:LR=0 30170 IF BOX=1 THEN TP=196:BT=196:LS=195:RS=180:MS=179:MM=196:UL=218:LL=192:UR=191:LR=217 30175 IF BOX=2 THEN TP=205:BT=205:LS=204:RS=185:MS=186:MM=205:UL=201:LL=200:UR=187:LR=188 30180 IF BOX=3 THEN TP=223:BT=220:LS=219:RS=219:MS=219:MM=220:UL=219:LL=219:UR=219:LR=219 30185 IROW=ROW:ICOL=COL 30190 LOCATE IROW,ICOL:COLOR TEXTFORE,TEXTBACK 30195 PRINT CHR$(UL)+STRING$(MAXLEN+2,TP)+CHR$(UR); 30200 LOCATE IROW+1,ICOL:PRINT CHR$(MS)+" "; 30205 COLOR DATAFORE,DATABACK:PRINT MSG$; 30210 COLOR TEXTFORE,TEXTBACK:PRINT " "+CHR$(MS); 30215 LOCATE IROW+2,ICOL:COLOR TEXTFORE,TEXTBACK 30220 PRINT CHR$(LS)+STRING$(MAXLEN+2,MM)+CHR$(RS); 30225 FOR PRNLOOP=1 TO NUMITEMS 30230 LOCATE IROW+2+PRNLOOP,ICOL 30235 PRINT CHR$(MS)+" "+ITEM$(PRNLOOP)+" "+CHR$(MS); 30240 NEXT PRNLOOP 30245 LOCATE IROW+3+NUMITEMS,ICOL 30250 PRINT CHR$(LL)+STRING$(MAXLEN+2,BT)+CHR$(LR); 30255 REM ---------- DO NOT WAIT FOR ENTRY IF DISPLAY WINDOW ONLY ---------- 30260 IF TYP=2 THEN 30470:REM CHANGED !!!!!!!!1 30265 IF TYP=3 THEN IROW=ITEM:ICOL=ICOL+2:GOTO 30410:REM WINDOW WITH HI-LIGHT 30270 REM ------------- MOVE THROUGH MENU ITEMS AND SELECT ONE -------------- 30275 IROW=1:IF ITEM>=1 AND ITEM<=NUMITEMS THEN IROW=ITEM 30280 ESCAPE=0:OLDIROW=IROW:ICOL=COL+2 30285 LOCATE OLDIROW+ROW+2,ICOL:COLOR TEXTFORE,TEXTBACK:PRINT ITEM$(OLDIROW); 30290 LOCATE IROW+ROW+2,ICOL:COLOR FIELDFORE,FIELDBACK:PRINT ITEM$(IROW); 30295 IN$=INKEY$:IF IN$="" THEN 30295 30300 IF IN$=CHR$(27) THEN EXIT$="ESC":ESCAPE=-1:GOTO 30400 30305 IF IN$=CHR$(13) THEN EXIT$="ENTER":GOTO 30400 30310 IF EDKEYS=0 THEN 30340 30315 IF IN$=CHR$(0)+CHR$(75) THEN EXIT$="LEFT":GOTO 30400 30320 IF IN$=CHR$(0)+CHR$(77) THEN EXIT$="RIGHT":GOTO 30400 30325 IF IN$=CHR$(0)+CHR$(73) THEN EXIT$="PGUP":GOTO 30400 30330 IF IN$=CHR$(0)+CHR$(81) THEN EXIT$="PGDN":GOTO 30400 30335 IF IN$=CHR$(0)+CHR$(68) THEN EXIT$="F10":GOTO 30400 30340 IF LEN(IN$)=1 THEN 30350 30345 V=ASC(RIGHT$(IN$,1))-58:GOTO 30355:REM FUNCTION KEY 30350 V=VAL(IN$) 30355 IF V>=1 AND V<=9 AND V<=NUMITEMS THEN OLDIROW=IROW:IROW=V:GOTO 30400 30360 IF IN$=CHR$(0)+CHR$(72) THEN 30375:REM UP 30365 IF IN$=CHR$(0)+CHR$(80) THEN 30385:REM DOWN 30370 BEEP:GOTO 30295 30375 OLDIROW=IROW:IF IROW>1 THEN IROW=IROW-1:GOTO 30285 30380 IROW=NUMITEMS:GOTO 30285 30385 OLDIROW=IROW:IF IROW