10 REM Model 100 Miles Per Gallon Computer, Copyright (c) 1988 by Mark Lutton, 73106,1627 11 REM Written for Tandy Model 100, but should also work on 102 and 200. 14 REM version 0.9 9/24/88 15 REM Mark Lutton, 30 Rich St., Malden, MA 02148 50 CLS:PRINT@84,"Loading data, please wait..." 60 CLEAR1500:GOSUB9000 70 GOSUB1000 100 A$=INKEY$:IFA$=""THEN100 120 KEYSTOP:A=ASC(A$) 140 IFA=32THEN280:ELSEIFA=13THEN207:ELSEIFA=9ORA=28THEN210:ELSEIFA=29THEN200 150 IFA=30THEN220:ELSEIFA=31THEN230:ELSEIFA=20THEN240:ELSEIFA=2THEN250 160 IFA=23THEN260:ELSEIFA=26THEN270:ELSE800 200 GOSUB2250:IFCF%>0THENCF%=CF%-1:ELSECF%=7 205 GOTO800 207 GOSUB2250:IFCF%=7THENCF%=0:ELSEIFCF%=6THENCF%=0:ELSEIFCF%=0THENCF%=1:ELSEIFCF%=1THENCF%=2+PM%:ELSECF%=CF%+2 208 GOTO800 210 GOSUB2250:IFCF%<7THENCF%=CF%+1:ELSECF%=0 215 GOTO800 220 GOSUB2250:IFCF%>1THENCF%=CF%-2:ELSECF%=CF%+6 225 GOTO800 230 GOSUB2250:IFCF%<6THENCF%=CF%+2:ELSECF%=CF%-6 235 GOTO800 240 GOSUB2250:CF%=0:GOTO800 250 GOSUB2250:CF%=7:GOTO800 260 WP%=1:GOSUB2600:GOTO810 270 IFCP%<=NP%THENWP%=NP%:GOSUB2600 275 GOTO810 280 GOSUB2000:GOTO810 800 GOSUB2200 810 KEYON:GOTO100 1000 CF%=0:CLS:PRINT@14,"GAS MILEAGE";:PRINT@30,CP%; 1010 IFCP%>NP%THEN1060 1020 PRINT@40,USING"Ref/Date: \\\ \\\ City/Mixed/Hwy:!";RV$;RF$(CP%);NR$;CH$(CP%); 1030 SK=SM(CP%)*KP:EK=EM(CP%)*KP:LI=GL(CP%)*LP:MI=EM(CP%)-SM(CP%) 1031 IFGL(CP%)=0THENMP=0:ELSEMP=MI/GL(CP%) 1032 IFLI=0THENKL=0:ELSEKL=(EK-SK)/LI 1040 PRINT@80,USING"Start miles:#######.# KM:#######.#";SM(CP%);SK;:PRINT@120,USING" End miles:#######.# KM:#######.#";EM(CP%);EK; 1050 PRINT@160,USING" Gallons: ####.# Liters: ####.#";GL(CP%);LI:PRINT@200,USING"Miles/Gallon: ####.# KM/Liter: ####.#";MP;KL:GOTO 1090 1060 PRINT" (New)"; 1065 RF$(CP%)="":SM(CP%)=EM(CP%-1):EM(CP%)=0:GL(CP%)=0:CH$(CP%)="":SK=SM(CP%)*KP:EK=0:MI=0:LI=0:MP=0:KL=0 1070 PRINT@40,"Ref/Date: ";RV$;" ";NR$;" City/Mixed/Hwy:":PRINT@80,USING"Start miles:#######.# KM:#######.#";SM(CP%);SK;:PRINT@120," End miles: KM:"; 1080 PRINT@160," Gallons: Liters:":PRINT@200,"Miles/Gallon: KM/Liter:" 1090 GOSUB8000:PRINT@280,"Find Stat Prev Next Add Del Grph Menu"; 1190 RETURN 2000 GOSUB8010:LINEINPUT"New value? ";R$ 2010 IFR$=""THEN2030 2020 SC%=0:ONCF%+1GOSUB2400,2410,2420,2430,2440,2450,2460,2470 2030 GOSUB8000:RETURN 2200 T1$=RV$:GOTO2280 2250 T1$=NR$: 2280 ONCF%+1GOTO2300,2310,2320,2330,2340,2350,2360,2370,2380,2390 2300 PRINT@50,USING"\\\ \\\";T1$;RF$(CP%);NR$;:RETURN 2310 PRINT@77,USING"\\!\\";T1$;CH$(CP%);NR$;:RETURN 2320 PRINT@92,USING"\\#######.#\\";T1$;SM(CP%);NR$;:RETURN 2330 PRINT@109,USING"\\#######.#\\";T1$;SK;NR$;:RETURN 2340 PRINT@132,USING"\\#######.#\\";T1$;EM(CP%);NR$;:RETURN 2350 PRINT@149,USING"\\#######.#\\";T1$;EK;NR$;:RETURN 2360 PRINT@175,USING"\\####.#\\";T1$;GL(CP%);NR$;:RETURN 2370 PRINT@192,USING"\\####.#\\";T1$;LI;NR$;:RETURN 2380 PRINT@215,USING"\\####.#\\";T1$;MP;NR$;:RETURN 2390 PRINT@232,USING"\\####.#\\";T1$;KL;NR$;:RETURN 2400 IFINSTR(R$,",")=0THEN2405 2401 GOSUB8010:PRINT"No comma allowed in field!";:GOSUB8020:RETURN 2405 IFLEN(R$)>10THENR$=LEFT$(R$,10) 2408 RF$(CP%)=R$:GOSUB2250:CF%=1:GOSUB2200:RETURN 2410 IFLEN(R$)>1THENR$=LEFT$(R$,1) 2412 IFR$="h"THENR$="H":ELSEIFR$="m"THENR$="M":ELSEIFR$="c"THENR$="C":ELSEIFR$<>"H"ANDR$<>"M"ANDR$<>"C"THENR$="":GOSUB8010:PRINT"C M or H only!";:GOSUB8020:RETURN 2414 CH$(CP%)=R$:GOSUB2250:CF%=2+PM%:GOSUB2200:RETURN 2420 SM(CP%)=VAL(R$):SK=SM(CP%)*KP:PM%=0 2425 GOSUB2250:CF%=3:GOSUB2250:GOSUB2500:CF%=4:GOSUB2200:RETURN 2430 SK=VAL(R$):SM(CP%)=SK/KP:PM%=1 2432 GOSUB2250:CF%=2:GOSUB2250:GOSUB2500:CF%=5:GOSUB2200:RETURN 2440 EM(CP%)=VAL(R$):EK=EM(CP%)*KP:PM%=0 2442 GOSUB2250:CF%=5:GOSUB2250:GOSUB2500:CF%=6:GOSUB2200:RETURN 2450 EK=VAL(R$):EM(CP%)=EK/KP:PM%=1 2452 GOSUB2250:CF%=4:GOSUB2250:GOSUB2500:CF%=7:GOSUB2200:RETURN 2460 GL(CP%)=VAL(R$):LI=GL(CP%)*LP:PM%=0 2462 GOSUB2250:CF%=7:GOSUB2250:GOSUB2500:CF%=0:GOSUB2200:RETURN 2470 LI=VAL(R$):GL(CP%)=LI/LP:PM%=1 2472 GOSUB2250:CF%=6:GOSUB2250:GOSUB2500:CF%=0:GOSUB2200:RETURN 2500 MI=EM(CP%)-SM(CP%):IFGL(CP%)=0THENMP=0:GOTO2530 2510 MP=MI/GL(CP%):IFMP<0THENMP=0 2520 CF%=8:GOSUB2250 2530 IFLI=0THENKL=0:GOTO2560 2540 KL=(EK-SK)/LI:IFKL<0THENKL=0 2550 CF%=9:GOSUB2250 2560 RETURN 2600 GOSUB2700 2610 IFV%=0THENRETURN 2620 CP%=WP%:GOSUB1000 2630 RETURN 2700 V%=0 2710 IFCP%>NP%ANDRF$(CP%)=""ANDCH$(CP%)=""ANDEM(CP%)=0ANDEK=0ANDGL(CP%)=0ANDLI=0THENV%=1:RETURN 2720 IFRF$(CP%)=""THENVF%=0:GOTO2800 2730 IFCH$(CP%)=""THENVF%=1:GOTO2800 2740 IFEM(CP%)<=SM(CP%)THENVF%=4:GOTO2810 2750 IFEK<=SKTHENVF%=5:GOTO2810 2760 IFGL(CP%)<=0THENVF%=6:GOTO2820 2770 IFLI<=0THENVF%=7:GOTO2820 2780 V%=1:IFCP%>NP%THENNP%=CP% 2790 RETURN 2800 GOSUB8010:PRINT"This field must have a value.";:GOTO2880 2810 GOSUB8010:PRINT"Ending mi/km must exceed starting";:GOTO2880 2820 GOSUB8010:PRINT"Gallons/Liters must be more than 0"; 2880 GOSUB2250:CF%=VF%:GOSUB2200 2890 RETURN 3000 CLS:PRINT@122,"Calculating statistics, please wait..." 3010 FOR T1%=0TO4:FOR T2%=0TO9:ST(T1%,T2%)=0:NEXT:NEXT 3020 IFNP%=0THENRETURN 3030 FOR T1%=1TONP% 3040 ST(4,1)=ST(4,1)+1:T1$=CH$(T1%):IFT1$="C"THENT2%=1:ELSEIFT1$="M"THENT2%=2:ELSEIFT1$="H"THENT2%=3:ELSET2%=0 3050 ST(T2%,1)=ST(T2%,1)+1 3060 MI=EM(T1%)-SM(T1%):ST(4,2)=ST(4,2)+MI:ST(T2%,2)=ST(T2%,2)+MI 3070 ST(4,3)=ST(4,3)+GL(T1%):ST(T2%,3)=ST(T2%,3)+GL(T1%) 3080 IFGL(T1%)<=0THEN3150 3090 T3=MI/GL(T1%):IFT3>ST(4,4)THENST(4,4)=T3 3100 IFT3>ST(T2%,4)THENST(T2%,4)=T3 3110 IFST(4,6)=0ORT30THENST(T1%,5)=ST(T1%,2)/ST(T1%,3) 3180 ST(T1%,7)=(ST(T1%,4)/LP)*KP 3190 ST(T1%,8)=(ST(T1%,5)/LP)*KP 3200 ST(T1%,9)=(ST(T1%,6)/LP)*KP 3210 NEXT 3290 SC%=1:RETURN 4000 CLS:PRINT@15,"STATISTICS"; 4010 PRINT@53,"CITY MIXED HIGHWAY ALL" 4020 PRINTUSING" Best MPG ####.# ####.# ####.# ####.#";ST(1,4);ST(2,4);ST(3,4);ST(4,4) 4030 PRINTUSING" Avg MPG ####.# ####.# ####.# ####.#";ST(1,5);ST(2,5);ST(3,5);ST(4,5) 4040 PRINTUSING"Worst MPG ####.# ####.# ####.# ####.#";ST(1,6);ST(2,6);ST(3,6);ST(4,6) 4050 PRINTUSING" Best KPL ####.# ####.# ####.# ####.#";ST(1,7);ST(2,7);ST(3,7);ST(4,7) 4060 PRINTUSING" Avg KPL ####.# ####.# ####.# ####.#";ST(1,8);ST(2,8);ST(3,8);ST(4,8) 4070 PRINTUSING"Worst KPL ####.# ####.# ####.# ####.#";ST(1,9);ST(2,9);ST(3,9);ST(4,9); 4080 GOSUB8020 4090 RETURN 5000 YM=ST(1,4):IFYM1THEN5200 5110 PRINT@50,"Can't graph ";XT$;" data:";:PRINT@90,"fewer than 2 data points."; 5120 PRINT@170,"Press a key to continue."; 5130 GOSUB8020:RETURN 5200 PRINT@13,XT$;" Mileage"; 5210 PRINT@40,"MPG: "; 5220 PRINTUSING"####";YM; 5221 PRINT@290,RF$(1);:PRINT@319-LEN(RF$(NP%)),RF$(NP%);:PRINT@248,"0"; 5224 LINE(60,8)-(60,55):LINE(60,55)-(239,55) 5228 XD=179/(ST(X1%,1)-1):YO=0:XO=60-XD 5230 FOR T1%=1TONP% 5240 IFXH$<>"A"ANDXH$<>CH$(T1%)THEN5300 5250 XN=XO+XD:MI=EM(T1%)-SM(T1%):MP=0:IFGL(T1%)>0THENMP=MI/GL(T1%) 5260 YN=55-((MP*48)/YM) 5270 IFYO>0THENLINE(XO,YO)-(XN,YN) 5280 XO=XN:YO=YN 5300 NEXT 5310 GOSUB8020 5320 RETURN 6100 KEYSTOP:GOSUB8010:LINEINPUT"Find Ref/Date: ";T1$ 6110 IFT1$=""THEN6190 6120 T1%=1:T2%=LEN(T1$) 6130 IFT1%>NP%THEN6180 6140 IFT1$=LEFT$(RF$(T1%),T2%)THEN6160 6150 T1%=T1%+1:GOTO6130 6160 CP%=T1%:GOSUB1000:GOTO6190 6180 GOSUB8010:PRINT"Not found"; 6190 KEYON:RETURN 6200 KEYSTOP 6210 GOSUB2700:IFV%=0THEN6230 6215 IFSC%=0THENGOSUB3000 6220 GOSUB4000:GOSUB1000 6230 KEYON:RETURN 6300 KEYSTOP:IFCP%>1THENWP%=CP%-1:GOSUB2600:ELSEGOSUB8010:PRINT"Already on first record"; 6310 KEYON:RETURN 6400 KEYSTOP:IFCP%"y"ANDR$<>"Y"THENGOSUB8010:PRINT"Not deleted";:KEYON:RETURN 6620 GOSUB8010:PRINT"Deleting..."; 6622 IFCP%<=NP%THEN6630 6625 RF$(CP%)="":SM(CP%)=EM(CP%-1):EM(CP%)=0:GL(CP%)=0:CH$(CP%)="" 6626 GOTO6680 6630 IFCP%=NP%THEN6660 6640 FOR T1%=CP%TONP%-1STEP1 6650 RF$(T1%)=RF$(T1%+1):SM(T1%)=SM(T1%+1):EM(T1%)=EM(T1%+1):GL(T1%)=GL(T1%+1):CH$(T1%)=CH$(T1%+1):NEXT 6660 RF$(NP%)="":SM(NP%)=EM(NP%-1):EM(NP%)=0:GL(NP%)=0:CH$(NP%)="":IFCP%>NP%THENCP%=NP% 6670 NP%=NP%-1:IFCP%>NP%THENCP%=NP% 6675 IFCP%=0THENCP%=1 6680 SC%=0:GOSUB1000 6690 KEYON:RETURN 6700 KEYSTOP 6710 GOSUB2700:IFV%=0THEN6730 6715 IFSC%=0THENGOSUB3000 6720 GOSUB5000:GOSUB1000 6730 KEYON:RETURN 6800 KEYSTOP:GOSUB2700:IFV%THENGOTO9500 6810 KEYON:RETURN 8000 PRINT@240,"Press Spacebar to change value.";:RETURN 8010 PRINT@240," ";:PRINT@240,;:RETURN 8020 BEEP 8021 A$=INKEY$:IFA$=""THEN8021 8025 A$="":RETURN 9000 CR$=CHR$(13):ESC$=CHR$(27):QU$=CHR$(34):RV$=ESC$+"p":NR$=ESC$+"q":LP=3.785:KP=1.609 9010 MP%=100:DIMRF$(MP%),SM(MP%),EM(MP%),GL(MP%),CH$(MP%),ST(4,9) 9030 ONERRORGOTO9400 9040 EM(0)=0:OPEN"mpgdat"FORINPUTAS1 9050 ONERRORGOTO:NP%=0 9060 IFEOF(1)THENGOTO9090 9070 NP%=NP%+1:INPUT#1,RF$(NP%),SM(NP%),EM(NP%),GL(NP%),CH$(NP%) 9075 IFSM(NP%)=0THENSM(NP%)=EM(NP%-1) 9080 GOTO9060 9090 CLOSE1:CP%=1 9095 GOTO9200 9100 ONERRORGOTO:NP%=0:CP%=1 9200 CF%=0 9210 ONKEYGOSUB6100,6200,6300,6400,6500,6600,6700,6800:KEYON 9290 RETURN 9400 IFERR=52THENRESUME9100 9410 ERRORERR 9500 CLS:PRINT@85,"Saving data, please wait...";:OPEN"mpgdat"FOROUTPUTAS#1 9510 IFNP%<1THEN9570 9515 FOR CP%=1TONP%STEP1 9520 IFSM(CP%)=EM(CP%-1)THENF2$="":ELSEF2$=STR$(SM(CP%)):IFLEFT$(F2$,1)=" "THENF2$=MID$(F2$,2) 9530 F3$=STR$(EM(CP%)):IFLEFT$(F3$,1)=" "THENF3$=MID$(F3$,2) 9540 F4$=STR$(GL(CP%)):IFLEFT$(F4$,1)=" "THENF4$=MID$(F4$,2) 9550 PRINT#1,RF$(CP%);",";F2$;",";F3$;",";F4$;",";CH$(CP%) 9560 NEXT 9570 CLOSE1 9999 MENU