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 EDCOL