--- title: "Auto Analyzer" id: 51518 type: "computer_media" slug: "auto-analyzer" url: "http://localhost/computer_media/auto-analyzer/" markdown_url: "http://localhost/computer_media/auto-analyzer.md" published_at: "2023-08-06T22:06:04+00:00" modified_at: "2026-03-30T21:41:00+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2022/03/Auto-Analyzer-3.png" excerpt: "A full car maintenance recordkeeper with mileage-based service reminders, multi-vehicle record storage, tape save/load, and an interactive engine diagnosis decision tree." category: - name: "Archived Media" slug: "archived-media" taxonomy: "category" url: "http://localhost/category/archived-media/" post_tag: - name: "Downloadable" slug: "downloadable" taxonomy: "post_tag" url: "http://localhost/tag/downloadable/" - name: "Timex Computer Corporation" slug: "timex-computer-corporation" taxonomy: "post_tag" url: "http://localhost/tag/timex-computer-corporation/" - name: "TS 2068" slug: "ts2068" taxonomy: "post_tag" url: "http://localhost/tag/ts2068/" model: - name: "Timex/Sinclair 2068" slug: "ts-2068" taxonomy: "model" url: "http://localhost/model/ts-2068/" genre: - name: "Home" slug: "home" taxonomy: "genre" url: "http://localhost/type/home/" media_type: "Program" download_url: "https://archive.org/download/timex-sinclair-software-archive/Auto%20Analyzer%20%281983%29%28Timex%29%28US%29%28TS2068%29%28Program%29.zip" mediadate: "1983" producer_company: - id: 11401 title: "Timex Computer Corporation" type: "company" url: "http://localhost/company/timex-computer-corporation/" images: - url: "http://localhost/wp-content/uploads/2022/03/Auto-Analyzer-3.png" - url: "http://localhost/wp-content/uploads/2022/03/Auto-Analyzer.png" - url: "http://localhost/wp-content/uploads/2022/03/Auto-Analyzer-2.png" - url: "http://localhost/wp-content/uploads/2020/09/AutoAnalyzer.jpg" related_products: - id: 11843 title: "Auto Analyzer" type: "product" url: "http://localhost/product/auto-analyzer/" media_type_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 Range | Function | | --- | --- | | 1–49 | Entry, main menu, file save/load (options 6 & 7) | | 100–220 | Car diagram drawing subroutine (PLOT/DRAW graphics) | | 500–540 | “When to Check” section dispatcher | | 610–682 | Per-system maintenance advice subroutines (610, 620, … 680) | | 1000–1160 | Initialize / enter new car records | | 2000–2900 | Display, search, and update existing records | | 3000–3010 | Tire diagram subroutine | | 4000–4010 | Input validation subroutine | | 8010–8810 | Engine diagnosis decision tree | | 9000–9100 | Diagnosis entry point (“Starts but runs poor”) | | 9510–9600 | Diagnosis entry point (“Engine will not start”) | | 9800–9801 | Optional screen printout (COPY) | | 9990–9999 | Error 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. ## 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 cVAL "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$";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 tVAL "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"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";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 tVAL "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