Auto Analyzer

Products: Auto Analyzer
Date: 1983
Type: Program
Platform(s): TS 2068
Tags: Home

This program is a car maintenance recordkeeper and engine diagnostic tool that stores service history for up to 14 vehicles. It uses two parallel arrays — a numeric array m() for mileage figures and a string array d$() of 152-character records — to track oil changes, tune-ups, brake jobs, tire rotations, and transmission checks alongside free-text messages and a 12-character vehicle ID packed into fixed-width fields. The “When to Check” section (line 500) calculates upcoming service intervals by adding standard mileage thresholds (e.g., 6,000 or 12,000 miles) to the stored last-service mileage. An engine diagnosis branch (line 9000) walks the user through a decision-tree troubleshooting guide covering battery, spark, ignition, fuel, and carburetor systems. The program includes VERIFY support for tape-based data integrity checking and uses ON ERR with RESET and CONTINUE at lines 9990–9993 as a global error trap.


Program Analysis

Program Structure

The program is organized into several distinct functional regions, navigated via a numeric main menu at line 10. The entry point is an unusual non-sequential arrangement: line 1 (GO TO VAL "5") skips initialization, line 2 sets k=-1 as a sentinel, and line 5 installs the global error handler before falling through to line 10. Lines 1–2 are only reached via GO TO within other routines.

Line RangeFunction
1–49Entry, main menu, file save/load (options 6 & 7)
100–220Car diagram drawing subroutine (PLOT/DRAW graphics)
500–540“When to Check” section dispatcher
610–682Per-system maintenance advice subroutines (610, 620, … 680)
1000–1160Initialize / enter new car records
2000–2900Display, search, and update existing records
3000–3010Tire diagram subroutine
4000–4010Input validation subroutine
8010–8810Engine diagnosis decision tree
9000–9100Diagnosis entry point (“Starts but runs poor”)
9510–9600Diagnosis entry point (“Engine will not start”)
9800–9801Optional screen printout (COPY)
9990–9999Error handler and border/beep utility subroutine

Data Storage Layout

Vehicle records are stored in two parallel arrays. m(t, 1..8) holds up to eight numeric values per record (mileage at last service for each category). d$(t, 1..152) holds a fixed-width string record built by concatenating 8-character date fields, a 12-character vehicle ID, and up to 100 characters of free-text message:

  • Bytes 1–8: Oil change date
  • Bytes 9–16: Tune-up date
  • Bytes 17–24: Brake job date
  • Bytes 25–32: Tire rotation date
  • Bytes 33–40: Transmission check date
  • Bytes 41–52: Vehicle ID (12 characters)
  • Bytes 53–152: Special message (100 characters)

This packing is assembled using string concatenation into f$ during record entry (lines 1042–1105) and sliced back out with TO substring notation at display and update time.

Maintenance Interval Calculations

The “When to Check” subroutines (lines 610–682) calculate future service mileages by adding fixed constants to the stored last-service mileage from m(t, n). For example, line 611 prints m(t,3)+6000 as the next brake check mileage. The variable t is both the current record index and the loop counter for search, which requires resetting t back to a valid record after any search loop (line 500 checks IF t>t1 THEN LET t=SGN PI).

Key BASIC Idioms

  • SGN PI is used pervasively as a constant for 1 (since SGN(3.14159…) = 1), and NOT PI for 0, avoiding direct numeric literals throughout.
  • VAL "number" in GO TO and GO SUB targets (e.g., GO TO VAL "10", GO SUB VAL "4000") is a memory-saving technique that stores the destination as a string rather than a floating-point number token.
  • 4e4 is used as a large PAUSE value (40,000 ticks ≈ indefinite wait), typically before an INKEY$ or following one.
  • The input validation subroutine at line 4000 rejects any character whose ASCII code is outside 45–57 (digits, period, and hyphen), setting a$="" on failure.

Error Handling

Lines 9990–9993 implement a three-stage error recovery trap using ON ERR. Line 9990 catches errors and calls RESET, line 9991 inserts a brief PAUSE 100, line 9992 re-installs the handler with ON ERR GO TO 9990, and line 9993 uses ON ERR CONTINUE to resume. This cycling trap is intended to handle recoverable runtime errors (such as invalid string operations) without crashing to BASIC.

Graphics Subroutines

The car diagram subroutine (lines 101–220) uses a series of PLOT, DRAW, and CIRCLE commands to render a schematic side view of a car with labeled part positions. The arc parameter in several DRAW calls (e.g., DRAW 80,0,-.7) produces curved lines for wheel arches and rounded body panels. A data-driven point-plot loop at line 200 iterates over arrays a() and b() to overlay additional highlighted component markers.

Record Search and Update

The search routine at line 2100 uses a FOR t=1 TO t1 loop comparing a 12-character g$(1) against the vehicle ID slice d$(t, 41 TO 52) and branches immediately to the display routine on a match. When no match is found, line 2200 lists all records whose ID field is non-blank (tested via CODE d$(t,41)<>32). The update routine (lines 2500–2600) uses a DATA statement at line 2800 and RESTORE to step through field names by index, enabling the user to patch individual date or mileage fields without re-entering the whole record.

Tape Save and Load

Lines 46–48 handle tape operations. Both arrays are saved and loaded sequentially: first d$(), then m(), with the same filename used for both blocks. The save routine optionally runs VERIFY to confirm the written data. No error handling is wrapped around the tape operations themselves, so a load failure would trigger the global ON ERR trap at line 9990.

Notable Anomalies

  • Line 9500 is referenced by GO TO VAL "9500" at line 9010, but no line 9500 exists in the listing; execution would fall through to line 9510, which is the intended target. This is a benign off-by-ten typo that happens to land correctly.
  • Line 8100 is referenced in multiple places (lines 8080, 9050) but is absent from the listing; these paths would trigger the ON ERR handler. The intended routine is likely the distributor-check block starting at line 8110.
  • Line 8280 is also referenced but absent; GO TO VAL "8280" at line 8084 and line 8750 would similarly fall through to line 8290 (spark plug observation), which is the logical continuation.
  • Line 1035 contains GO TO SGN PI, which evaluates to GO TO 1 — sending the program to the LET k=-1 sentinel reset line if the car ID input is left blank, effectively aborting the record entry.
  • The variable Q$ at line 8062 uses a capital letter, while the rest of the program uses lowercase variable names, suggesting this section was written or edited separately.

Content

Appears On

Related Products

Keep your car in tip-top shape. Tracks all automotive maintenance and lets you know when next service is due. Diagnostic...

Related Articles

Related Content

Image Gallery

Auto Analyzer

Source Code

   10 BORDER 2: PAPER 2: INK 7: CLS : PRINT AT 10,7;"LOAD TEST PASSED";AT 12,5;"NOW LOADING PROGRAM": INK 2
   20 LOAD ""SCREEN$ : PAUSE 30: LOAD ""
    1 GO TO VAL "5"
    2 LET k=-1
    5 ON ERR GO TO 9990
   10 BORDER SGN PI: PAPER SGN PI: INK VAL "7": CLS : BEEP .03,40: BEEP .03,30
   20 PRINT PAPER VAL "4"; INK NOT PI;AT VAL "2",VAL "8";"CHOOSE FUNCTION"
   30 PRINT AT VAL "5",SGN PI;"1 - Initialize Car Recordkeeper",," 2 - Search for Record",,," 3 - Add Another Car Record",,," 4 - Engine Diagnosis",,," 5 - WHEN TO CHECK Section",,," 6 - Save Record File",,," 7 - Load a data file"
   32 PRINT AT VAL "19",VAL "3";"Use Choice 5 only after      Initializing Car Record Keeper."
   40 INPUT AT NOT PI,VAL "8";"Enter Number>";a$: GO SUB VAL "4000": IF a$="" THEN GO TO VAL "40": IF c=SGN PI THEN GO TO VAL "1000"
   41 LET c=VAL a$: IF c=SGN PI THEN GO TO VAL "1000"
   42 IF c=VAL "2" AND k<>-1 THEN GO TO VAL "2100"
   43 IF k<>-1 AND c=VAL "3" AND t1<>k THEN BORDER NOT PI: PAPER VAL "2": GO TO VAL "1030"
   44 IF c=VAL "4" THEN GO TO VAL "9000"
   45 IF c=VAL "5" AND k<>-1 THEN GO TO VAL "500"
   46 IF c=VAL "6" THEN BORDER NOT PI: PAPER NOT PI: CLS : PRINT INK VAL "4";AT VAL "6",VAL "6";"Enter Name for File": INPUT a$: PRINT AT VAL "8",VAL "8";"Saving ";a$: SAVE a$ DATA d$(): PRINT FLASH SGN PI; INK VAL "7"; PAPER VAL "2";AT VAL "14",VAL "4";"Press Enter to Continue": SAVE a$ DATA m(): CLS : PRINT FLASH SGN PI;AT VAL "8",VAL "9";"STOP THE TAPE": PAUSE VAL "130"
   47 IF c=VAL "6" THEN CLS : PRINT AT VAL "8",VAL "9";"VERIFY?(y/n)": INPUT b$: IF b$="y" THEN PRINT AT VAL "8",VAL "15";"ING>";a$;"  ";AT VAL "12",VAL "3";"REWIND AND START THE TAPE": VERIFY a$ DATA d$(): VERIFY a$ DATA m(): PRINT PAPER VAL "7"; INK NOT PI; FLASH SGN PI;AT VAL "20",VAL "11";"RECORD OK": PAUSE VAL "130": GO TO VAL "10"
   48 IF c=VAL "7" THEN CLS : INPUT "   Enter File Name>";a$: PRINT FLASH 1;AT VAL "8",16-(4+LEN a$/2);"Loading ";a$;AT VAL "14",VAL "9";"START THE TAPE": LOAD a$ DATA d$(): LOAD a$ DATA m(): CLS : PRINT FLASH SGN PI;AT VAL "8",VAL "8";"LOAD COMPLETE": PAUSE VAL "130": GO TO VAL "10"
   49 GO TO VAL "10"
  101 PLOT 140,8: DRAW 0,150: DRAW 80,0,-.7: DRAW 0,-150: DRAW -80,0,-.2
  103 PLOT 142,18: DRAW 0,22: PLOT 143,41: DRAW 4,0: PLOT 148,40: DRAW 0,-22: PLOT 147,17: DRAW -4,0
  108 PLOT 211,18: DRAW 0,22: PLOT 212,41: DRAW 4,0: PLOT 217,40: DRAW 0,-22: PLOT 216,17: DRAW -4,0
  110 PLOT 211,120: DRAW 0,22: PLOT 212,143: DRAW 4,0: PLOT 217,142: DRAW 0,-22: PLOT 216,119: DRAW -4,0
  114 PLOT 142,120: DRAW 0,22: PLOT 143,143: DRAW 4,0: PLOT 148,142: DRAW 0,-22: PLOT 147,119: DRAW -4,0
  115 PLOT 149,27: DRAW 25,0: DRAW 12,0,1.7: DRAW 25,0
  116 PLOT 149,31: DRAW 24,0: DRAW 13,0,-3: DRAW 24,0
  117 PLOT 178,38: DRAW 0,30: PLOT 181,38: DRAW 0,30
  118 PLOT 173,68: DRAW 13,0: DRAW 0,2: DRAW -13,0: DRAW 0,-2
  119 PLOT 171,71: DRAW 17,0: DRAW 0,3: DRAW -17,0: DRAW 0,-3
  120 PLOT 178,78: DRAW 0,30: PLOT 181,78: DRAW 0,30
  130 CIRCLE 154,37,4: CIRCLE 154,36,3: CIRCLE 154,35,2
  140 CIRCLE 204,37,4: CIRCLE 204,36,3: CIRCLE 204,35,2
  150 PLOT 150,40: DRAW 0,30: DRAW 25,20: DRAW 6,0: DRAW 28,-25: DRAW 0,-26
  160 PLOT 152,40: DRAW 0,30: DRAW 24,19: DRAW 4,0: DRAW 27,-25: DRAW 0,-24
  170 PLOT 145,112: DRAW 0,-64: DRAW 7,-7: PLOT 215,112: DRAW 0,-64: DRAW -7,-7
  180 PLOT 190,153: DRAW 12,0: DRAW 0,5: DRAW -12,0: DRAW 0,-5
  190 CIRCLE 175,135,8: CIRCLE 175,135,5: CIRCLE 176,135,2
  195 PLOT 223,0: DRAW 0,175
  200 FOR j=1 TO h: PLOT a(j)+60,b(j): NEXT j
  220 RETURN 
  500 BORDER SGN PI: PAPER SGN PI: INK VAL "6": CLS : IF t>t1 THEN LET t=SGN PI
  510 PRINT AT 2,8;"WHEN TO CHECK"
  520 PRINT AT VAL "4",SGN PI;"1 - Braking System";AT VAL "6",SGN PI;"2 - Suspension";AT VAL "8",SGN PI;"3 - Tires";AT VAL "10",SGN PI;"4 - Transmission(Automatic)";AT VAL "12",SGN PI;"5 - Transmission(Manual)";AT VAL "14",SGN PI;"6 - Rear Axle";AT VAL "16",SGN PI;"7 - Driveshaft";AT VAL "18",SGN PI;"8 - Windshield & Wipers";AT VAL "20",SGN PI;"9 - Return to Main Menu"
  522 INPUT AT NOT PI,NOT PI;"Enter number for information>";a$: GO SUB VAL "4000": IF a$="" THEN GO TO VAL "522"
  523 LET c=VAL a$: IF c>VAL "9" OR c<SGN PI THEN GO TO VAL "522"
  524 IF c=VAL "9" THEN GO TO VAL "10"
  525 IF c<>VAL "3" AND c<>VAL "8" THEN INPUT AT NOT PI,SGN PI;"Do you wish to see position of the parts to check?(y/n)";a$
  527 IF c=VAL "3" THEN BORDER VAL "2": PAPER VAL "6": INK SGN PI: CLS : GO SUB VAL "3000": PLOT NOT PI,173: DRAW 137,NOT PI: DRAW 0,-173: DRAW -137,0: PAPER VAL "5": INK NOT PI: GO SUB 600+c*10
  529 IF c<>VAL "3" THEN BORDER VAL "2": PAPER VAL "6": INK SGN PI: CLS 
  531 IF c<>VAL "3" THEN PLOT NOT PI,173: DRAW 137,0: DRAW 0,-173: DRAW -137,0: PAPER 5: INK 0: GO SUB 600+c*10
  532 IF c<>VAL "8" THEN PRINT PAPER SGN PI; INK VAL "7";AT SGN PI,NOT PI;"I.D.>";d$(t,41 TO 52)
  533 IF a$="y" AND c<>3 THEN GO SUB 100
  540 GO SUB VAL "9800": PRINT FLASH SGN PI;AT VAL "21",NOT PI;"Press any Key": PAUSE 4e4: GO TO VAL "500"
  610 PRINT PAPER VAL "5"; INK VAL "7";AT VAL "2",NOT PI;"     BRAKES"," ";AT VAL "4",NOT PI;"Check condition  ";AT VAL "5",NOT PI;"of Brake Pads or ";AT VAL "6",NOT PI;"Brake Shoes."," ";AT VAL "7",NOT PI;"6 mon/6000 miles^";AT VAL "9",NOT PI;"Check wheel"," ";AT VAL "10",NOT PI;"cylinders,return ";AT VAL "11",NOT PI;"springs,calipers,";AT VAL "12",NOT PI;"hoses,drums a/or ";AT VAL "13",NOT PI;"rotors (1->)"," ";AT VAL "14",NOT PI;"6 mon/6000 miles^";AT VAL "16",NOT PI;"Adjust Parking"," ";AT VAL "17",NOT PI;"Brake (2->)"," ";AT VAL "18",NOT PI;"AS NECESSARY     "
  611 PRINT PAPER SGN PI; INK VAL "7";AT VAL "8",NOT PI; FLASH SGN PI;"^"; FLASH NOT PI;"CHECK AT ";m(t,VAL "3")+6000, FLASH SGN PI;"^";AT 15,NOT PI;"^"; FLASH NOT PI;"CHECK AT ";m(t,3)+6000, FLASH SGN PI;"^"
  612 IF a$="y" THEN PRINT AT VAL "5",VAL "27";"<-1";AT VAL "18",VAL "27";"<-1";AT VAL "9",VAL "18";"2->"
  613 RETURN 
  620 PRINT AT VAL "2",NOT PI;"   SUSPENSION"," ";AT VAL "4",NOT PI;"Check shock ab-"," ";AT VAL "5",NOT PI;"sorbers for leaks";AT VAL "6",NOT PI;"and cracks (1>)  ";AT VAL "7",NOT PI;"1 yr/12000 miles^";AT VAL "9",NOT PI;"Check tires for  ";AT VAL "10",NOT PI;"abnormal wear(2>)";AT VAL "11",NOT PI;"1 mon/1000 miles^";AT VAL "13",NOT PI;"Lubricate Front  ";AT VAL "14",NOT PI;"end."," ";AT VAL "15",NOT PI;"3 mon/3000 miles^"
  621 PRINT PAPER SGN PI; INK VAL "7";AT VAL "8",NOT PI; FLASH SGN PI;"^"; FLASH NOT PI;"CHECK AT ";m(t,3)+12000, FLASH SGN PI;"^";AT VAL "12",NOT PI;"^"; FLASH NOT PI;"CHECK AT ";m(t,3)+1000, FLASH SGN PI;"^";AT VAL "16",NOT PI;"^"; FLASH NOT PI;"CHECK AT ";m(t,3)+3000, FLASH SGN PI;"^"
  622 IF a$="y" THEN PRINT AT VAL "17",VAL "20";"<1";AT VAL "17",VAL "23";"1>";AT VAL "4",VAL "27";"<-2";AT VAL "17",VAL "27";"<-2"
  623 RETURN 
  630 PRINT AT VAL "2",NOT PI;"     Tires"," ";AT VAL "4",NOT PI;"Clean Treads.(1>)";AT VAL "5",NOT PI;"AS NECESSARY     ";AT VAL "7",NOT PI;"Check tread depth";AT VAL "8",NOT PI;"6 mon/6000 miles^";AT VAL "10",NOT PI;"Check tire pres- ";AT VAL "11",NOT PI;"sure. (2>)"," ";AT VAL "12",NOT PI;"EACH FUEL STOP^ ^";AT VAL "14",NOT PI;"Rotate tires."," ";AT VAL "15",NOT PI;"6 mon/6000 miles^"
  631 PRINT PAPER SGN PI; INK VAL "7";AT VAL "9",NOT PI; FLASH SGN PI;"^"; FLASH NOT PI;"CHECK AT ";m(t,4)+6000, FLASH SGN PI;"^";AT VAL "16",NOT PI;"^"; FLASH 0;"CHECK AT ";m(t,4)+6000, FLASH SGN PI;"^"
  632 PRINT AT VAL "8",VAL "24";"<1"; PAPER VAL "6"; OVER SGN PI;AT VAL "17",VAL "22";"2>"
  633 RETURN 
  640 PRINT AT VAL "2",NOT PI;" Automatic Trans ";AT VAL "4",NOT PI;"Change Fluid (1>)";AT VAL "5",NOT PI;"2 yrs/24000 miles";AT VAL "7",NOT PI;"Clear Screen or  ";AT VAL "8",NOT PI;"Replace Filter 1>";AT VAL "9",NOT PI;"2 yrs/24000 miles"
  641 PRINT PAPER SGN PI; INK VAL "7";AT VAL "6",NOT PI; FLASH SGN PI;"^"; FLASH NOT PI;"CHECK AT ";m(t,VAL "5")+VAL "24000", FLASH SGN PI;"^";AT VAL "10",NOT PI;"^"; FLASH NOT PI;"CHECK AT ";m(t,VAL "5")+VAL "24000", FLASH SGN PI;"^"
  642 IF a$="y" THEN PRINT PAPER 6; FLASH SGN PI; OVER SGN PI;AT VAL "7",VAL "23";"<1"
  643 RETURN 
  650 PRINT AT VAL "2",NOT PI;"  Manual Trans.  ";AT VAL "4",NOT PI;"Check lube level.";AT VAL "5",NOT PI;"3 mon/3000 miles^";AT VAL "7",NOT PI;"Check clutch pe- ";AT VAL "8",NOT PI;"dal freeplay."," ";AT VAL "9",NOT PI;"6 mon/6000 miles^";AT VAL "11",NOT PI;"Lubricate shift  ";AT VAL "12",NOT PI;"linkage."," ";AT VAL "13",NOT PI;"6 mon/6000 miles^";AT VAL "15",NOT PI;"All located near ";AT VAL "16",VAL "5";"^(1>)^"
  651 PRINT PAPER SGN PI; INK VAL "7";AT VAL "6",NOT PI; FLASH SGN PI;"^"; FLASH NOT PI;"CHECK AT ";m(t,VAL "5")+VAL "3000", FLASH SGN PI;"^";AT VAL "10",NOT PI;"^"; FLASH NOT PI;"CHECK AT ";m(t,VAL "5")+VAL "6000", FLASH SGN PI;"^";AT VAL "14",NOT PI;"^"; FLASH NOT PI;"CHECK AT ";m(t,5)+6000, FLASH SGN PI;"^"
  652 IF a$="y" THEN PRINT PAPER 6; FLASH SGN PI; OVER SGN PI;AT VAL "7",VAL "23";"<1"
  653 RETURN 
  660 PRINT AT VAL "2",NOT PI;"    Rear Axle    ";AT VAL "4",NOT PI;"Check level of   ";AT VAL "5",NOT PI;"rear axle fluid. ";AT VAL "11",VAL "5";"^(1>)^";AT VAL "6",NOT PI;"6 mon/6000 miles^";AT VAL "8",NOT PI;"Change Fluid."," ";AT VAL "9",NOT PI;"2 yrs/24000 miles"
  661 PRINT PAPER SGN PI; INK VAL "7";AT VAL "7",NOT PI; FLASH SGN PI;"^"; FLASH NOT PI;"CHECK AT ";m(t,VAL "3")+VAL "6000", FLASH SGN PI;"^";AT VAL "10",NOT PI;"^"; FLASH NOT PI;"CHECK AT ";m(t,VAL "3")+VAL "24000", FLASH SGN PI;"^"
  662 IF a$="y" THEN PRINT PAPER VAL "6"; FLASH SGN PI;AT VAL "19",VAL "22";"^";AT VAL "20",VAL "22";"1"
  663 RETURN 
  670 PRINT AT VAL "2",NOT PI;"   Driveshaft"," ";AT VAL "4",NOT PI;"Lubricate"," ";AT VAL "5",NOT PI;"U-joints. ("; FLASH SGN PI;"1>"; FLASH NOT PI;")"," ";AT VAL "6",NOT PI;"6 mon/6000 miles^"
  671 PRINT PAPER SGN PI; INK VAL "7";AT VAL "7",NOT PI; FLASH SGN PI;"^"; FLASH NOT PI;"CHECK AT ";m(t,VAL "4")+VAL "6000", FLASH SGN PI;"^"
  672 IF a$="y" THEN PRINT FLASH SGN PI;AT VAL "8",VAL "23";"<1"
  673 RETURN 
  680 PRINT AT VAL "2",NOT PI;"   Windshield"," ";AT VAL "4",NOT PI;"Check or Replace ";AT VAL "5",NOT PI;"Wiper Blades."," ";AT VAL "6",NOT PI;"3 mon/3000 miles^";AT VAL "8",NOT PI;"Lubricate pivots ";AT VAL "9",NOT PI;"and linkage."," ";AT VAL "10",NOT PI;"6 mon/6000 miles^";AT VAL "12",NOT PI;"Check hoses and  ";AT VAL "13",NOT PI;"nozzles."," ";AT VAL "14",NOT PI;"3 mon/3000 miles^"
  682 RETURN 
 1000 BORDER SGN PI: PAPER VAL "2": INK VAL "7": CLS : PRINT AT VAL "5",SGN PI;"YOU ARE ABOUT TO ERASE ALL OLD  RECORDS.";AT VAL "9",VAL "4";"DO YOU WISH TO CONTINUE?";AT VAL "11",VAL "13";"(y/n)": GO SUB VAL "9999": INPUT a$: IF a$<>"y" THEN GO TO VAL "10"
 1010 LET a$="14"
 1012 LET t=VAL a$: DIM m(t,8): DIM d$(t,152): DIM o$(SGN PI,12): LET t1=t: LET k=NOT PI
 1030 DIM o$(SGN PI,12): CLS : PRINT INK VAL "7"; PAPER VAL "2";,,,, PAPER 1;"    Car Maintenance Calender",: PLOT 0,160: DRAW 255,0: DRAW 0,-9: DRAW -255,0
 1035 LET k=k+SGN PI: LET f$="": INPUT AT NOT PI,NOT PI;"Enter car I.D.->";a$: IF a$="" THEN GO TO SGN PI
 1036 PRINT PAPER SGN PI; INK VAL "7";TAB 15-LEN a$/2;a$,: LET o$(1)=a$: PLOT NOT PI,144: DRAW 255,0: DRAW NOT PI,10: PRINT AT VAL "21",NOT PI;"Rec#";k: IF k=VAL "30" THEN PRINT AT VAL "21",NOT PI; FLASH SGN PI;"LAST RECORD"
 1040 INPUT AT NOT PI,SGN PI;"Enter Date of last:";AT SGN PI,8;"Oil Change->";l$(SGN PI): IF CODE l$(SGN PI)<>VAL "32" THEN PRINT AT 5,NOT PI;"Last Oil Change    Date:";l$(SGN PI): INPUT AT NOT PI,NOT PI;"Enter mileage at ";(l$(SGN PI));">";m(k,1): PRINT AT 6,16;"Mileage:";m(k,1)
 1042 LET f$=f$+l$(1)
 1050 INPUT AT NOT PI,SGN PI;"Enter Date of last:";AT SGN PI,10;"Tune up->";l$(SGN PI): IF CODE l$(SGN PI)<>VAL "32" THEN PRINT AT 8,3;"Last Tune Up    Date:";l$(1): INPUT AT NOT PI,NOT PI;"Enter mileage at ";(l$(SGN PI));">";m(k,2): PRINT AT 9,16;"Mileage:";m(k,2)
 1052 LET f$=f$+l$(1)
 1060 INPUT AT NOT PI,SGN PI;"Enter Date of last:";AT 1,8;"Brake Job->";l$(SGN PI): IF CODE l$(SGN PI)<>VAL "32" THEN PRINT AT 11,SGN PI;"Last Brake job    Date:";l$(SGN PI): INPUT AT NOT PI,NOT PI;"Enter mileage at ";(l$(SGN PI));">";m(k,3): PRINT AT 12,16;"Mileage:";m(k,3)
 1061 LET f$=f$+l$(1)
 1070 INPUT AT NOT PI,SGN PI;"Enter Date of last:";AT SGN PI,6;"Tire Rotation->";l$(SGN PI): IF CODE l$(SGN PI)<>VAL "32" THEN PRINT AT 14,NOT PI;"Last Tire Rotation Date:";l$(SGN PI): INPUT AT NOT PI,NOT PI;"Enter mileage at ";(l$(SGN PI));">";m(k,4): PRINT AT 15,16;"Mileage:";m(k,4)
 1071 LET f$=f$+l$(1)
 1075 INPUT AT NOT PI,SGN PI;"Enter Date of last:";AT SGN PI,3;"Transmission Check->";l$(SGN PI): IF CODE l$(SGN PI)<>VAL "32" THEN PRINT AT 17,NOT PI;"Last Trans. Check  Date:";l$(SGN PI): INPUT AT NOT PI,NOT PI;"Enter mileage at ";(l$(SGN PI));">";m(k,5): PRINT AT 18,16;"Mileage:";m(k,5)
 1077 LET f$=f$+l$(1)
 1080 INPUT AT NOT PI,VAL "5";"Is the above correct?";AT SGN PI,11;"(y/n)->";a$: IF a$="n" THEN LET k=k-1: GO TO VAL "1030"
 1085 LET f$=f$+o$(SGN PI)
 1090 CLS : DIM o$(SGN PI,100): PRINT AT VAL "4",VAL "3";"Enter Special Message": INPUT o$(SGN PI): CLS : PRINT AT VAL "2",SGN PI;"Your Message";AT VAL "4",SGN PI;o$(SGN PI)
 1100 INPUT AT NOT PI,VAL "5";"Is the above correct?";AT SGN PI,11;"(y/n)->";a$: IF a$="n" THEN GO TO 1090
 1105 LET d$(k)=f$+o$(SGN PI): DIM o$(SGN PI,SGN PI)
 1145 IF k=t THEN GO TO VAL "10"
 1150 INPUT AT NOT PI,SGN PI;"Another Record Entry?? (y/n)";a$: IF a$="y" THEN GO TO VAL "1030"
 1160 BEEP .2,30: BEEP .2,40: BEEP .3,25: LET t=k: CLS : GO TO VAL "10"
 2000 CLS : PRINT INK 7;,,,, PAPER 1;"    Car Maintenance Calender",: PLOT 0,160: DRAW 255,0
 2010 PRINT PAPER 1; INK 7;TAB 2;"Vehicle I.D.->";d$(t,41 TO 52),
 2015 PLOT 0,143: DRAW INK 7,255,0
 2020 PRINT AT VAL "5",NOT PI;"Last Oil Change    Date:";d$(t,1 TO 8);AT 6,16;"Mileage:";m(t,1)
 2030 PRINT AT VAL "8",VAL "3";"Last Tune Up    Date:";d$(t,9 TO 16);AT 9,16;"Mileage:";m(t,2)
 2040 PRINT AT VAL "11",SGN PI;"Last Brake job    Date:";d$(t,17 TO 24);AT 12,16;"Mileage:";m(t,3)
 2050 PRINT AT VAL "14",NOT PI;"Last Tire Rotation Date:";d$(t,25 TO 32);AT 15,16;"Mileage:";m(t,4)
 2055 PRINT AT VAL "17",NOT PI;"Last Trans. Check  Date:";d$(t,33 TO 40);AT 18,16;"Mileage:";m(t,5)
 2060 PRINT AT VAL "20",VAL "9";"PRESS Any Key": PAUSE 4e4: INK VAL "6": CLS : PRINT AT VAL "2",VAL "8";"Special Message"; INK 6;AT 4,SGN PI;d$(t,VAL "53" TO VAL "152")
 2070 PRINT AT 20,9;"Press any key": PAUSE VAL "4e4"
 2075 INPUT AT NOT PI,SGN PI;"Update Record? (y/n)>";a$: IF a$="y" THEN GO TO VAL "2500"
 2080 INPUT AT NOT PI,SGN PI;"Check Another Record (y/n)";a$: IF a$="y" THEN GO TO VAL "2100"
 2090 GO TO VAL "10"
 2100 BORDER SGN PI: PAPER 2: CLS : PRINT AT VAL "8",VAL "9";"Record Search": GO SUB 9998: DIM g$(1,12): INPUT AT NOT PI,NOT PI;"ENTER CAR I.D.>";g$(SGN PI): FOR t=1 TO t1: IF g$(1)=d$(t,41 TO 52) THEN GO TO 2000
 2110 NEXT t
 2200 CLS : PRINT AT SGN PI,VAL "7";"Car I.D.>";g$(SGN PI); FLASH SGN PI;AT VAL "2",VAL "7";"RECORD NOT FOUND"; FLASH NOT PI;AT VAL "4",VAL "7";"FILES ON RECORD:"
 2211 PRINT : FOR t=SGN PI TO t1: IF CODE d$(t,41)<>VAL "32" THEN PRINT " ";d$(t,41 TO 52);: IF t<>t1 THEN PRINT " ";d$(t+1,41 TO 52): LET t=t+1
 2212 NEXT t: PRINT AT 21,9;"Press Any Key"
 2300 PAUSE VAL "4e4": GO TO VAL "10"
 2500 CLS : PRINT AT SGN PI,SGN PI;"Choose Item";AT VAL "3",NOT PI;"(1) Car I.D.-> ";d$(t,41 TO 52): PRINT 
 2510 DIM o$(SGN PI,12): RESTORE 2800: FOR j=NOT PI TO VAL "4": READ o$(SGN PI): PRINT "(";j+2;") Last ";o$(SGN PI);">";d$(t,1+j*8 TO (j+1)*8): PRINT TAB (21);"(";m(t,j+1);")": NEXT j
 2520 PRINT "(7) Message:",,"    ";d$(t,53 TO 152)
 2530 PRINT "(8) return to menu"
 2540 LET a$=INKEY$: IF a$="" OR CODE a$>VAL "56" OR CODE a$<VAL "46" THEN GO TO VAL "2540"
 2542 IF a$="8" THEN GO TO VAL "2080"
 2544 IF a$="1" THEN INPUT "Enter I.D.>";o$(SGN PI): LET a$=d$(t,SGN PI TO 40): LET f$=d$(t,53 TO 152): LET d$(t)=a$+o$(SGN PI)+f$: GO TO VAL "2500"
 2546 IF a$="7" THEN DIM o$(SGN PI,100): INPUT AT NOT PI,VAL "8";"Enter Message:";AT SGN PI,SGN PI;o$(SGN PI): LET f$=d$(t,SGN PI TO 52): LET d$(t)=f$+o$(SGN PI): GO TO VAL "2500"
 2550 DIM o$(SGN PI,VAL "8"): LET f$="": LET q$="": RESTORE 2800: FOR j=SGN PI TO VAL a$-SGN PI: READ z$: NEXT j
 2560 INPUT "Date of ";(z$);"?>";o$(SGN PI)
 2562 IF a$<>"2" THEN LET f$=d$(t,SGN PI TO (VAL a$-VAL "2")*8)
 2564 LET z$=d$(t,(VAL a$-VAL "1")*8 TO 152)
 2566 LET d$(t)=f$+o$(SGN PI)+z$
 2570 INPUT "Enter Mileage on ";(o$(SGN PI));">";m(t,VAL a$-SGN PI)
 2600 GO TO VAL "2500"
 2800 DATA "Oil Change","Tune-up","Brake Job","Tire Ro.","Trans. Check"
 2900 STOP 
 3000 PLOT 150,80: DRAW 0,80: DRAW 50,0,-.7: DRAW 0,-80: DRAW -50,0,-.7: FOR l=154 TO 200 STEP 6: PLOT l,79: DRAW 0,82: NEXT l
 3002 CIRCLE 175,40,33: CIRCLE 175,40,20
 3010 RETURN 
 4000 IF CODE a$<45 OR CODE a$>57 THEN LET a$=""
 4010 RETURN 
 8010 GO SUB 9999: PRINT AT 4,4;"Check BATTERY CASING or ";AT 5,2;"Possible leaks or corrosion";AT 8,9;"OBSERVATION";AT 10,5;"1-Battery seems fine";AT 12,5;"2-Battery has a crack": INPUT AT 0,1;"Enter observation number>";t
 8020 CLS : IF t=VAL "2" THEN PRINT AT 6,10;"PROCEDURE"; FLASH NOT PI,,,"Have BATTERY replaced and retestcar.": PAUSE VAL "220": GO TO VAL "10"
 8021 IF t<>SGN PI THEN GO TO VAL "8010"
 8030 PRINT AT VAL "6",10;"Procedure",,," Clean BATTERY terminals with          a  wire brush.";AT 17,8;"Press Any Key": GO SUB 9999: PAUSE 4e4: CLS : PRINT AT 4,1;"Test Charge of BATTERY using    a HYDROMETER.";AT 8,9;"OBSERVATION";AT 11,3;"1-All Cells Indicate Charge";AT 13,3;"2-Defective Cell Found";AT 15,3;"3-All Cells Undercharged": GO SUB 9999: INPUT AT 0,8;"Enter Number>";t
 8035 IF t<SGN PI OR t>VAL "3" THEN GO TO VAL "8030"
 8040 IF t=VAL "2" THEN CLS : PRINT AT VAL "6",VAL "10";"PROCEDURE",,,"    Have Battery Replaced!!": GO SUB VAL "9999"
 8050 IF t=VAL "3" THEN CLS : PRINT AT VAL "6",VAL "10";"PROCEDURE",,," Have Battery charged and check  electrical system for shorts.": GO SUB VAL "9999"
 8055 IF t>SGN PI THEN PAUSE VAL "300": GO TO VAL "10"
 8056 IF t>VAL "3" THEN GO TO VAL "10"
 8060 CLS : PRINT AT VAL "4",NOT PI;"Check Battery cable connections to ground and starter -> If ne-cessary tighten connections.";AT VAL "9",VAL "3";"Also check for damaged cable,if found replace cable.";AT 19,VAL "3";" IF PROBLEM STILL EXISTS";AT 20,VAL "11";"PRESS "; FLASH SGN PI;"P"
 8061 GO SUB VAL "9999"
 8062 LET Q$=INKEY$: IF Q$="" THEN GO TO VAL "8062"
 8064 IF Q$<>"p" THEN GO TO VAL "10"
 8070 CLS : PRINT AT VAL "3",VAL "4";"Checking Spark Procedure";AT 5,VAL "2";"Hold spark plug wire 1/4 inch   from ground and crank engine.","   <-(USE GLOVES)->";AT VAL "9",10;"OBSERVATION";AT 11,VAL "2";"1-Good Spark in all cylinders";AT 13,VAL "2";"2-Good Spark in some cylinders";AT 15,VAL "2";"3-No sparks": GO SUB 9999: INPUT AT NOT PI,VAL "8";"Enter number>";t: IF t>VAL "3" OR t<SGN PI THEN GO TO 8070
 8080 IF t-1 THEN GO TO VAL "8100"
 8084 GO TO VAL "8280"
 8110 CLS : PRINT AT VAL "4",SGN PI;"Check Distributer cap and rotorfor corroded contacts,moisture  or cracks.";AT VAL "7",SGN PI;"If cracks or corrosion are pre-sent replace the part(s) in question. If moisture is present,dryand recheck spark.";AT VAL "17",VAL "4";" IF all appeared normal";AT VAL "19",VAL "12";"Press "; FLASH SGN PI;"P"
 8120 LET a$=INKEY$: IF a$="" THEN GO TO VAL "8120"
 8125 CLS : IF a$<>"p" THEN RETURN 
 8200 PRINT AT VAL "4",VAL "3";"Check spark plug wires for   cracks. If any are cracked or   warped replace WHOLE set.",,,"*Follow instructions carefully*";AT VAL "10",VAL "5";"Then retest for spark.";AT VAL "16",VAL "3";"If wires were not damaged:";AT VAL "17",VAL "11";"Press "; FLASH SGN PI;"P": BEEP .6,37
 8205 LET a$=INKEY$: IF a$="" THEN GO TO VAL "8205"
 8206 CLS : IF a$<>"p" THEN RETURN 
 8290 PAPER VAL "4": CLS : PRINT INK SGN PI;AT VAL "4",VAL "3";"Remove each spark plug and    enter observation no.";AT 7,7;"Electrodes have:";AT 9,1;"1-Light Brown Deposits"," 2-Wet Black Deposits"," 3-Dry Black Deposits"," 4-Glazed-like Deposits"," 5-Deposits bridging gap"," 6-Melted Severly"," 7-Burnt,with extremely white","   insulator with small black","   deposits": GO SUB VAL "9999": INPUT AT NOT PI,VAL "8";"Enter number>";t
 8300 IF t>VAL "7" OR t<SGN PI THEN GO TO 8290
 8310 CLS : IF t=SGN PI THEN PRINT AT VAL "4",VAL "2";"These deposits are just the","  indication of normal wear."; INK VAL "2";AT VAL "8",VAL "10";"*PROCEDURE*"; INK SGN PI,,,"     Clean and Regap Plug": GO SUB VAL "9999"
 8320 IF t=VAL "2" THEN PRINT AT VAL "4",VAL "3";"These Deposits indicate","   possible worn engine parts."; INK 7;AT VAL "8",10;"PROCEDURE",, INK NOT PI,"  Have spark plug replaced and    engine compression checked.": GO SUB 9999
 8330 IF t=VAL "3" THEN PRINT AT VAL "2",NOT PI;"These Deposits indicate an over-rich fuel mixture due to a bad  air filter or an unadjusted car-buretor if present in most of   the plugs.";AT 7,NOT PI;" If only present in 1 or 2 plugscan be an indication of stickingvalves"; INK VAL "7";AT VAL "11",VAL "10";"*PROCEDURE*",,,"Clean and Regap Plug and cor-   rect the above by adjusting car-buretor and replacing air filterif restricted"," If present in 1or 2, open valve cover and ad-  just valves to specifications": GO SUB 9999
 8340 IF t=VAL "4" THEN PRINT AT VAL "6",SGN PI;"Clean and Regap Plug and if     the same problem reoccurs try   plugs in a different heat range": GO SUB 9999
 8350 IF t=VAL "5" THEN PRINT AT VAL "6",VAL "3";"These Deposits are not a","  serious problem. Just replace   plug and periodically check     condition.": GO SUB 9999
 8360 IF t=VAL "6" THEN PRINT AT VAL "4",NOT PI;"This can be caused by:",,,"1-Very Lean Fuel Mixture","2-Low Fuel Quality","3-Very Advanced Ignition Timing","4-Wrong Heat Range of Spark Plug";AT VAL "11",VAL "9";"*PROCEDURE*";AT VAL "13",NOT PI;"1-Have Fuel System Checked","2-Use a higher octane fuel","3-Adjust using Timing Light","4-Check Owner's Manual for        correct Heat Range"
 8361 IF t=VAL "6" THEN GO SUB 9999
 8370 IF t=VAL "7" THEN PRINT AT VAL "4",SGN PI;"This can be caused by a spark   plug with an incorrect heat     range.";AT VAL "8",VAL "10";"*PROCEDURE*"; INK SGN PI;AT VAL "10",SGN PI;"Check ignition timing and fuel  mixture.  If all is fine        install spark plugs one heat    range colder.": GO SUB VAL "9998"
 8700 GO SUB VAL "9998": INPUT AT NOT PI,VAL "4";"Enter 1 to test again";AT 1,4;"Enter 2 for main menu-->";a$: IF a$<>"1" THEN CLS : GO TO VAL "10"
 8750 GO TO VAL "8280"
 8800 PRINT AT VAL "4",SGN PI;"Check to see if air filter is   working properly-i.e. If light  can pass through paper element",,," Replace if necesary.": GO SUB VAL "9999"
 8805 INPUT AT NOT PI,VAL "2";"Enter 1 if filter seems fine";AT SGN PI,VAL "2";"Enter 2 if filter was bad->";t: IF t<>SGN PI THEN CLS : PRINT AT VAL "4",VAL "3";"REPLACE AIR FILTER ELEMENT": GO SUB VAL "9999": BEEP .6,37: PAUSE VAL "100": GO TO VAL "10"
 8810 CLS : PRINT AT VAL "4",VAL "2";"Check for flooded carburetor",,,"Indications:",,"Strong smell of gas and/or      Throttle bores are overfilled   with gas.";AT VAL "11",NOT PI;"If flooding isn't evident check Fuel line and Fuel Pump";AT 14,NOT PI;"If flooding is evident, let gas dry and restart and if flooding continues have carburetor ad-   justed";AT 20,SGN PI;"Press Any Key": PAUSE VAL "4e4": GO TO VAL "10"
 9000 CLS : GO SUB VAL "9999"
 9010 PRINT INK VAL "7";AT VAL "2",VAL "9";"PICK PROBLEM";AT VAL "5",VAL "3";"1 - Engine will not start";AT VAL "7",VAL "3";"2 - Starts but runs poor": INPUT AT NOT PI,VAL "7";"Enter Number->";t: IF t=SGN PI THEN CLS : GO TO VAL "9500"
 9020 IF t<>VAL "2" THEN GO TO VAL "9000"
 9030 CLS : PRINT AT VAL "1",VAL "7";"PICK DESCRIPTION";AT VAL "4",SGN PI;"1 - Engine Misfires";AT VAL "6",SGN PI;"2 - Poor Pickup";AT VAL "8",SGN PI;"3 - Rough Idling";AT VAL "10",SGN PI;"4 - Hesitates on Acceleration";AT VAL "12",SGN PI;"5 - Car Stalls";AT VAL "14",SGN PI;"6 - Problems when wet";AT VAL "16",SGN PI;"7 - Car Backfires"
 9035 GO SUB VAL "9999": INPUT AT NOT PI,VAL "7";"Enter Number>";t: IF t>VAL "7" OR t<SGN PI THEN GO TO VAL "9035"
 9040 CLS : IF t<VAL "5" OR t=VAL "7" THEN GO SUB VAL "8070"
 9050 IF t=VAL "6" THEN GO SUB VAL "8100"
 9060 IF t=VAL "5" OR t=VAL "4" THEN GO SUB VAL "8800"
 9070 IF t>VAL "7" THEN GO TO VAL "9035"
 9100 GO TO VAL "10"
 9510 BORDER VAL "2": PAPER VAL "2": CLS : PRINT INK VAL "7";AT VAL "3",VAL "9";"PICK PROBLEM";AT 5,SGN PI;"1- No Movement by Starter",,," 2- Starter Cranks Engine Slowly",," 3- Starter Function Normally",,," 4- Engine turns normally": GO SUB 9999: INPUT AT NOT PI,7;"Enter Number>";t: IF t>VAL "4" OR t<SGN PI THEN GO TO VAL "9510"
 9518 CLS 
 9520 IF t<=VAL "2" THEN GO SUB 8010
 9530 IF t=VAL "3" THEN GO SUB VAL "8070"
 9540 GO SUB VAL "8800"
 9600 GO TO VAL "10"
 9800 INPUT AT NOT PI,NOT PI;"Do you wish a printout (y/n)?";a$: IF a$="y" THEN COPY 
 9801 RETURN 
 9990 ON ERR RESET 
 9991 PAUSE 100
 9992 ON ERR GO TO 9990
 9993 ON ERR CONTINUE 
 9999 PLOT 0,0: DRAW 255,0: BEEP .03,35: DRAW 0,175: BEEP .03,40: DRAW -255,0: BEEP .02,30: DRAW 0,-175: BEEP .1,20: RETURN 

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

People

No people associated with this content.

Scroll to Top