home *** CD-ROM | disk | FTP | other *** search
Wrap
10 REM *******5/29/85******** 20 REM * GAS.MISER * 30 REM * BY DANIEL WHITNEY * 40 REM * COPYRIGHT (C) 1985 * 50 REM * BY MICROSPARC, INC * 60 REM * CONCORD, MA 01742 * 70 REM ********************** 80 IF PEEK(104) < >64 THEN POKE 103,1: POKE 104,64: POKE 16384,0: PRINT CHR$(4)"RUN GAS.MISER" 90 GOSUB 2030: REM OPENING SCREEN AND INSTRUCTIONS 100 MG = 50 110 D$ = CHR$(4) 120 DEF FN R(X) = INT(X *100 +.5)/100 130 DEF FN MOD(A) = A - INT(A/8) *8 140 OS = 18 150 DT = 0 160 HOME 170 DIM D(60),M(60),MI(60),G(60),YM(12),MN(12),C(63,6) 180 FOR I = 0 TO 12: READ MN(I): NEXT I 190 DATA 0,31,28,31,30,31,30,31,31,30,31,30,31 200 HOME : PRINT "ONE MOMENT...": PRINT : PRINT "READING CHARACTER DEFINITIONS": FOR I = 0 TO 63: FOR J = 0 TO 6: READ C(I,J): NEXT J,I: HOME 210 POKE -16368,0: INPUT "ARE YOU STARTING A NEW FILE? ";Z$:Z$ = LEFT$(Z$,1): IF Z$ < >"Y" THEN 270 220 INPUT "STARTING MILEAGE: ";X$:OM = VAL(X$): IF OM <0 THEN 220 230 INPUT "STARTING MONTH: ";X$:MN = INT( VAL(X$)): IF MN <1 OR MN >12 THEN 230 240 INPUT "STARTING DAY: ";X$:DP = INT( VAL(X$)): IF DP <1 OR DP >MN(MN) THEN 240 250 GOTO 380 260 REM GET DATA FROM EXISTING FILE 270 PRINT "ENTER FILENAME (? FOR CATALOG):": INPUT " ?";NA$: IF LEFT$(NA$,1) = "?" THEN PRINT D$"CATALOG": GOTO 270 280 IF LEN(NA$) = 0 THEN 270 290 IF LEN(NA$) >13 THEN NA$ = LEFT$(NA$,13) 300 ONERR GOTO 2200 310 PRINT D$"VERIFY "NA$ 320 PRINT D$;"OPEN ";NA$: PRINT D$;"READ ";NA$ 330 INPUT DT,OM,MN,DP 340 FOR DI = 1 TO DT: INPUT M(DI),D(DI),MI(DI),G(DI) 350 NEXT DI 360 PRINT D$;"CLOSE ";NA$ 370 POKE 216,0 380 PM = OM:M = MN:D = DP: HGR 390 VTAB 23 400 GOSUB 1400 410 FOR II = 0 TO M -1:DA = DA +MN(II): NEXT II 420 XX = (DA +D) *5/7:Y = 150: HPLOT OS,Y TO XX +OS,Y 430 IF DT = 0 THEN M(0) = MN:D(0) = DP: GOTO 520 440 I = DT 450 FOR DT = 1 TO I 460 M = M(DT):D = D(DT):G = G(DT):MI = MI(DT) 470 GOSUB 1300 480 PM = MI 490 NEXT DT 500 DT = I 510 Y = 23:X = ((40 - LEN(NA$))/2 +1):N$ = NA$: GOSUB 1160 520 DT = DT +1 530 HOME : VTAB 21 540 PRINT "LAST DATE: "M(DT -1)"/"D(DT -1);: HTAB 18: PRINT "LAST MILEAGE: "PM 550 VTAB 22: CALL -868 560 VTAB 22: INPUT "MONTH ->";X$:M = VAL(X$): IF M <0 THEN 800: REM 11 SPACES 570 IF M >12 THEN GOSUB 1940: GOTO 550 580 IF M <M(DT -1) THEN GOSUB 1950: GOTO 550 590 M = INT(M) 600 VTAB 22: CALL -868 610 VTAB 22: INPUT "DAY ->";X$:D = VAL(X$): IF D <0 THEN 800: REM 13 SPACES 620 IF M = M(DT -1) THEN IF D <D(DT -1) THEN GOSUB 1970: GOTO 600 630 IF D >MN(M) THEN IF D < >29 THEN GOSUB 1960: GOTO 600 640 D = INT(D) 650 VTAB 22: CALL -868 660 VTAB 22: INPUT "GALLONS ->";G$: IF G <0 THEN 800: REM 9 SPACES 670 GOSUB 2130: IF GF THEN GOSUB 1980: GOTO 650 680 VTAB 22: CALL -868 690 VTAB 22: INPUT "ENDING MILEAGE ->";X$:MI = VAL(X$): IF MI <0 THEN 800 700 IF MI -PM < = 0 THEN GOSUB 1990: GOTO 680 710 VTAB 22: CALL -868: VTAB 22: PRINT "DATE: "M"/"D;: HTAB 12: PRINT "GALS: "G;: HTAB 23: PRINT "MILEAGE: "MI 720 VTAB 23: CALL -868: VTAB 23 730 PRINT FN R((MI -PM)/G)" MPG ";: IF (MI -PM)/G >50 THEN PRINT "> 50 ";: CALL -198 740 HTAB 20: INPUT "OK?";OK$ 750 IF LEFT$(OK$,1) < >"Y" THEN 530 760 D(DT) = D:M(DT) = M:G(DT) = G:MI(DT) = MI 770 GOSUB 1300 780 PM = MI 790 GOTO 520 800 GOSUB 1810: GOSUB 1730: PRINT "PRESS A KEY TO END & STORE FILE": GET A$: TEXT : HOME 810 REM STORE UPDATED FILE 820 REM 830 IF Z$ = "Y" THEN 870 840 PRINT "OLD FILENAME IS ";NA$ 850 PRINT "RENAME ";NA$;: INPUT " ?";A$ 860 IF LEFT$(A$,1) = "N" THEN A$ = NA$: GOTO 890 870 INPUT "NEW FILENAME ";NA$: IF LEN(A$) = 0 THEN 870 880 IF LEN(A$) >13 THEN A$ = LEFT$(A$,13) 890 ONERR GOTO 2250 900 IF Z$ = "Y" THEN 940 910 PRINT D$"VERIFY "NA$ 920 PRINT D$"RENAME ";NA$",";A$ 930 PRINT D$"DELETE ";A$ 940 NA$ = A$ 950 PRINT D$;"OPEN ";NA$ 960 PRINT D$;"WRITE ";NA$ 970 PRINT DT -1","OM","MN","DP 980 FOR DI = 1 TO DT 990 PRINT M(DI)","D(DI)","MI(DI)","G(DI) 1000 NEXT DI 1010 PRINT D$;"CLOSE ";NA$ 1020 REM WRITE COMPLETE 1030 POKE 216,0 1040 H = 0 1050 PRINT "PLEASE WAIT..." 1060 Y = 23:X = ((40 - LEN(NA$))/2 +1):N$ = NA$: GOSUB 1160 1070 N$ = " J F M A M J J A S O N D " 1080 Y = 20:X = 1: GOSUB 1160:MM = PEEK( -16304) + PEEK( -16302) + PEEK( -16300): GET A$: TEXT 1085 HOME : VTAB 12: PRINT "PRESS ANY KEY WHEN FINISHED VIEWING THE SCREEN": FOR MM = 1 TO 1000: NEXT MM:MM = PEEK( -16304) + PEEK( -16302) - PEEK( -16300): POKE 49168,0: GET A$: TEXT 1090 INPUT "DO YOU WANT TO SAVE THE SCREEN?";AB$ 1100 IF LEFT$(AB$,1) = "N" THEN 1140 1110 ONERR GOTO 2280 1120 PRINT D$;"BSAVE P."NA$",A$2000,L$2000" 1130 POKE 216,0 1140 INPUT "RUN AGAIN ? ";AB$: IF LEFT$(AB$,1) = "Y" THEN RUN 1150 END 1160 REM ROUTINE TO PLOT N$ ON SCREEN 1170 L9 = D 1180 FOR I = 1 TO LEN(N$) 1190 REM COMPUTE ADDRESS IN CHAR TABLE 1200 Z = ( ASC( MID$ (N$,I,1)) -32) 1210 GOSUB 1270 1220 X = X +1 1230 NEXT I 1240 D = L9 1250 RETURN 1260 REM PLOTS A CHARACTER 1270 L = 8192 + FN MOD(Y) *128 +(X -1) + INT(Y/8) *40 1280 FOR J = 0 TO 6: POKE L +J *1024,C(Z,J): NEXT 1290 RETURN 1300 REM PLOTS ONE GAS PURCHASE 1310 DA = 0 1320 FOR II = 0 TO M -1:DA = DA +MN(II): NEXT II 1330 X = (DA +D) *5/7 1340 Y = (MI -PM)/G 1350 IF Y >50 THEN PF = 1: RETURN 1360 IF DT = 1 OR PF THEN PF = 0: HPLOT X +OS,150 -3 *Y: RETURN 1370 HPLOT TO X +OS,150 -3 *Y 1380 RETURN 1390 REM 1400 REM PLOT GRID 1410 HCOLOR= 3: HPLOT OS,0 TO OS,150 TO 279,150 1420 HPLOT OS,120 TO 279,120 1430 HPLOT OS,90 TO 279,90 1440 HPLOT OS,60 TO 279,60 1450 HPLOT OS,30 TO 279,30 1460 HCOLOR= 5 1470 HPLOT OS +1,0 TO OS +1,30: HPLOT OS +1,60 TO OS +1,90 1480 HPLOT OS +1,120 TO OS +1,150 1490 HCOLOR= 3 1500 FOR I = 1 TO 50 1510 HPLOT OS -2,3 *I TO OS,3 *I: REM EACH TICK IS 1 MPG 1520 NEXT I 1530 FOR I = 1 TO 52 1540 HPLOT OS +5 *I,150 TO OS +5 *I,147: REM EACH TICK IS 1 WEEK 1550 NEXT I 1560 YM(0) = 0: FOR I = 1 TO 12 1570 YM(I) = MN(I) +YM(I -1) 1580 NEXT I 1590 HCOLOR= 5: FOR I = 1 TO 12 STEP 2 1600 HPLOT OS +YM(I) *5/7,151 TO OS +YM(I +1) *5/7,151 1610 NEXT I 1620 REM PLOT NUMBERS ON Y AXIS 1630 HCOLOR= 3 1640 HPLOT OS,150 1650 L9 = D 1660 X = 1:Y = 3:N$ = "40": GOSUB 1160 1670 X = 1:Y = Y +4:N$ = "30": GOSUB 1160 1680 X = 1:Y = Y +4:N$ = "20": GOSUB 1160 1690 X = 1:Y = Y +4:N$ = "10": GOSUB 1160 1700 X = 2:Y = 0:N$ = "M": GOSUB 1160:X = 2:Y = 1:N$ = "P": GOSUB 1160:N$ = "G":X = 2:Y = 2: GOSUB 1160 1710 D = L9 1720 RETURN 1730 REM CALCULATE AND PLOT OVERALL GAS MILEAGE FOR THE YEAR 1740 FOR I = 1 TO DT:H = H +G(I): NEXT I 1750 PM = MI(DT -1) -OM 1760 VTAB 22: CALL -868 1770 VTAB 22: PRINT "OVERALL AVERAGE MPG= "; FN R(PM/H) 1780 HCOLOR= 6: HPLOT OS,150 -3 *(PM/H) TO 279,150 -3 *(PM/H) 1790 RETURN 1800 REM 1810 REM PLOT 3 TERM MOVING AVERAGE MPG 1820 HCOLOR= 5: HPLOT XX +OS,150 1830 I = DT 1840 FOR DT = 1 TO I -1 1850 M = M(DT):D = D(DT):MI = MI(DT) 1860 IF DT = 1 THEN G = G(1):PM = OM: GOTO 1900 1870 IF DT = 2 THEN G = G(1) +G(2):PM = OM: GOTO 1900 1880 IF DT = 3 THEN G = G(1) +G(2) +G(3):PM = OM: GOTO 1900 1890 G = G(DT) +G(DT -1) +G(DT -2):PM = MI(DT -3) 1900 GOSUB 1300 1910 NEXT DT 1920 RETURN 1930 REM ERROR HANDLERS 1940 M$ = "MONTH > 12": GOTO 2000 1950 M$ = "MONTH < LAST MONTH": GOTO 2000 1960 M$ = "INVALID DAY": GOTO 2000 1970 M$ = "DAY < LAST DAY": GOTO 2000 1980 M$ = "INVALID GALLONS": GOTO 2000 1990 M$ = "INVALID MILEAGE" 2000 VTAB 22: CALL -868 2010 VTAB 22: PRINT M$;: HTAB 20 2020 INVERSE : PRINT "ANY KEY WHEN READY";: NORMAL : CALL -198: GET T$: PRINT : RETURN 2030 HOME : VTAB 6: HTAB 10: PRINT "NIBBLE GAS MISER" 2040 VTAB 8: HTAB 10: PRINT "BY DANIEL WHITNEY" 2050 VTAB 14: PRINT "* COPYRIGHT 1985 BY MICROSPARC, INC. *" 2060 VTAB 21: HTAB 7: PRINT "DO YOU WANT INSTRUCTIONS? ";: GET T$: PRINT T$: IF T$ < >"Y" THEN RETURN 2070 HOME : VTAB 2: PRINT "NIBBLE GAS MISER IS A GAS MILEAGE": PRINT " RECORDING AND PLOTTING PROGRAM." 2080 PRINT : PRINT "THE PROGRAM ASKS YOU FOR DATA ON": PRINT " ON EACH GAS PURCHASE. ENTER THE": PRINT " MONTH AND DAY NUMERICALLY." 2090 PRINT : PRINT "THEN ENTER THE NUMBER OF GALLONS.": PRINT " IF YOUR QUANTITY IS IN LITERS,": PRINT " PRECEDE THE ENTRY WITH AN 'L':": PRINT " >L31.2": PRINT " THE PROGRAM WILL CONVERT IT FOR YOU." 2100 PRINT : PRINT "TO QUIT, ENTER -1 FOR ANY REQUESTED": PRINT " DATA ITEM. THE PROGRAM WILL THEN": PRINT " PLOT A 3-POINT MOVING AVERAGE FOR": PRINT " YOUR DATA." 2110 VTAB 22: PRINT "PRESS ANY KEY TO CONTINUE ";: GET T$: PRINT : RETURN 2120 REM GALLON PROCESSOR 2130 GF = 0:L$ = LEFT$(G$,1): IF L$ = "L" THEN G$ = MID$ (G$,2) 2140 G = VAL(G$): IF L$ < >"L" GOTO 2180 2150 G = G/3.785 2160 G = FN R(G) 2170 VTAB 22: HTAB 30: PRINT G" GALS": FOR I = 1 TO 600: NEXT 2180 IF G >MG OR G = 0 THEN GF = 1 2190 RETURN 2200 ER = PEEK(222): IF ER = 6 THEN PRINT "FILE NOT FOUND": GOTO 2230 2210 IF ER = 13 THEN PRINT "FILE TYPE MISMATCH": GOTO 2230 2220 PRINT "ERROR NUMBER "ER 2230 PRINT D$"CLOSE "N$ 2240 GOSUB 2020: GOTO 270 2250 ER = PEEK(222): IF ER = 6 THEN PRINT "FILE NOT FOUND": GOTO 2270 2260 PRINT "ERROR #"ER 2270 POKE 216,0: GOSUB 2020: GOTO 870 2280 ER = PEEK(222): PRINT "ERROR #"ER 2290 POKE 216,0: GOSUB 2020: GOTO 1090 2300 DATA 0,0,0,0,0,0,0: REM SPACE 2310 DATA 8,8,8,8,8,0,8: REM ! 2320 DATA 20,20,20,0,0,0,0: REM " 2330 DATA 20,20,62,20,62,20,20: REM # 2340 DATA 8,60,10,28,40,30,8: REM $ 2350 DATA 6,38,16,8,4,50,48: REM % 2360 DATA 4,10,10,4,42,18,44: REM & 2370 DATA 8,8,8,0,0,0,0: REM ' 2380 DATA 8,4,2,2,2,4,8: REM ( 2390 DATA 8,16,32,32,32,16,8: REM ) 2400 DATA 8,42,28,8,28,42,8: REM * 2410 DATA 0,8,8,62,8,8,0: REM + 2420 DATA 0,0,0,0,8,8,4: REM , 2430 DATA 0,0,0,62,0,0,0: REM - 2440 DATA 0,0,0,0,0,0,8: REM . 2450 DATA 0,32,16,8,4,2,0: REM / 2460 DATA 28,34,50,42,38,34,28: REM 0 2470 DATA 8,12,8,8,8,8,28: REM 1 2480 DATA 28,34,32,24,4,2,62: REM 2 2490 DATA 62,32,16,24,32,34,28: REM 3 2500 DATA 16,24,20,18,62,16,16: REM 4 2510 DATA 62,2,30,32,32,34,28: REM 5 2520 DATA 56,4,2,30,34,34,28: REM 6 2530 DATA 62,32,16,8,4,4,4: REM 7 2540 DATA 28,34,34,28,34,34,28: REM 8 2550 DATA 28,34,34,60,32,16,14: REM 9 2560 DATA 0,0,8,0,8,0,0: REM : 2570 DATA 0,0,8,0,8,8,4: REM ; 2580 DATA 16,8,4,2,4,8,16: REM < 2590 DATA 0,0,62,0,62,0,0: REM = 2600 DATA 4,8,16,32,16,8,4: REM > 2610 DATA 28,34,16,8,8,0,8: REM ? 2620 DATA 28,34,42,58,26,2,60: REM @ 2630 DATA 8,20,34,34,62,34,34: REM A 2640 DATA 30,34,34,30,34,34,30: REM B 2650 DATA 28,34,2,2,2,34,28: REM C 2660 DATA 30,34,34,34,34,34,30: REM D 2670 DATA 62,2,2,30,2,2,62: REM E 2680 DATA 62,2,2,30,2,2,2: REM F 2690 DATA 60,2,2,2,50,34,60: REM G 2700 DATA 34,34,34,62,34,34,34: REM H 2710 DATA 28,8,8,8,8,8,28: REM I 2720 DATA 32,32,32,32,32,34,28: REM J 2730 DATA 34,18,10,6,10,18,34: REM K 2740 DATA 2,2,2,2,2,2,62: REM L 2750 DATA 34,54,42,34,34,34,34: REM M 2760 DATA 34,34,38,42,50,34,34: REM N 2770 DATA 28,34,34,34,34,34,28: REM O 2780 DATA 30,34,34,30,2,2,2: REM P 2790 DATA 28,34,34,34,42,18,44: REM Q 2800 DATA 30,34,34,30,10,18,34: REM R 2810 DATA 28,34,2,28,32,34,28: REM S 2820 DATA 62,8,8,8,8,8,8: REM T 2830 DATA 34,34,34,34,34,34,28: REM U 2840 DATA 34,34,34,34,34,20,8: REM V 2850 DATA 34,34,34,42,42,54,34: REM W 2860 DATA 34,34,20,8,20,34,34: REM X 2870 DATA 34,34,20,8,8,8,8: REM Y 2880 DATA 62,32,16,8,4,2,62: REM Z 2890 DATA 0,0,0,0,0,0,0: REM NONE 2900 DATA 0,0,0,0,0,0,0: REM NONE 2910 DATA 62,48,48,48,48,48,62: REM R-BKT 2920 DATA 0,0,8,20,34,0,0: REM CARET 2930 DATA 127,127,127,127,127,127,127: REM DELETE