--- title: "Home Improvement Planner" id: 51727 type: "computer_media" slug: "home-improvement-planner-2" url: "http://localhost/computer_media/home-improvement-planner-2/" markdown_url: "http://localhost/computer_media/home-improvement-planner-2.md" published_at: "2023-08-13T23:14:29+00:00" modified_at: "2026-03-31T09:54:41+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2022/03/Home-Improvement-Planner-2.png" excerpt: "A nine-option home improvement planner calculates carpet, paint, and wallpaper estimates from stored room dimensions, complete with graphical dimension diagrams." 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/Home Improvement Planner (1983)(Timex)(US)(TS2068)(Cassette).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/Home-Improvement-Planner-2.png" - url: "http://localhost/wp-content/uploads/2021/01/HomeImprovementPlanner.jpg" related_products: - id: 35316 title: "The Home Improvement Planner" type: "product" url: "http://localhost/product/home-improvement-planner-2/" media_type_tags: "Home" --- # Home Improvement Planner This program is a home improvement planning tool that helps users estimate materials and costs for interior and exterior renovation tasks. It stores measurements for up to 19 named rooms in two parallel arrays — a string array `D$` for room names and a numeric array `D` for floor area (in square feet) and wall area — then uses those stored values to calculate carpet yardage, interior and exterior paint gallons, and wallpaper rolls needed. A block of machine code is loaded from tape at address 57970 and called repeatedly via `USR 57970`, likely handling custom display routines or UDG character definitions. The program uses detailed PLOT/DRAW sequences and UDG characters to render room-layout diagrams with labeled dimension arrows on screen during data entry. *** ## Program Analysis ### Program Structure The program is organized into a main menu dispatcher and a set of subroutine-like sections branched to by line number. Initialization occurs in the subroutine at lines 7010–7050, called from line 2 before jumping to the menu at line 20. The nine menu options dispatch as follows: | Key | Function | Target Line | | --- | --- | --- | | 1 | Internal dimension entry | 1000 | | 2 | External dimension entry | 5000 | | 3 | Carpet yardage estimation | 2000 | | 4 | Interior paint estimation | 3000 | | 5 | Wallpaper roll estimation | 4000 | | 6 | External painting estimation | 5500 | | 7 | Area and dimension catalogue | 1395 | | 8 | Save program and dimensions | 9950 | | 9 | Operating instructions | 300 | | 0 | Delete all previous specs | 2 (re-init) | The main polling loop (lines 160–250) reads `INKEY$` without a wait, interspersed with `PAUSE 10` delays and animated PAPER color flashes at lines 165 and 195 to provide a visual “ticker” effect while awaiting input. ### Data Storage Room data is held in three parallel structures dimensioned at lines 7010–7040: - `D$(19,10)` — names of up to 19 rooms, 10 characters each - `D(19,2)` — column 1 = floor area in square feet; column 2 = wall area in square feet - `H$(1,10)` and `H(2)` — a single external “HOUSE” entry storing ground area and siding area During internal dimension entry (lines 1000–1340), data is first collected into temporary arrays `I$` and `I`, then copied into the permanent `D$`/`D` arrays via the subroutine at line 9520. This two-stage approach allows the user to skip re-entering unchanged rooms. ### Machine Code Usage Line 10 loads 7,560 bytes of machine code from tape into memory at address 57970. This routine is called frequently throughout the program via `LET c1=USR 57970`. The result is stored in `c1` but never used — the call is made purely for the side effect of executing the machine code routine, most likely to redefine UDG characters or reset display hardware state. The UDG characters `\a` through `\u` are used extensively in the diagram-drawing subroutines (lines 6000–6530), confirming that the machine code block sets up custom graphic characters. ### Diagram Drawing Subroutines Three graphical subroutines render annotated dimension diagrams to guide data entry: - `GO SUB 6000` — draws a floor-plan rectangle with labeled L (length) and W (width) arrows, plus extra-area indicators, using a mix of `PLOT`/`DRAW` and UDG characters - `GO SUB 6200` — draws a wall elevation diagram with H (height) and L labels - `GO SUB 6300` — draws an exterior house outline with roof, garage, window, and door features using lengthy `PLOT`/`DRAW` sequences across lines 6300–6530 Dimension labels flash on-screen (`FLASH 1`) to indicate which measurement the user should enter next, then are turned off (`FLASH 0`) before the next label flashes. ### Estimation Algorithms The material estimation formulas are straightforward but include deliberate rounding biases to avoid underestimation: - **Carpet:**`INT((W/9)+.9)` — divides floor square footage by 9 to get square yards, biased strongly upward - **Interior wall paint:**`INT((PAINT/3.5)+.5)` — assumes approximately 350 square feet per gallon (stored ×100 for dollar arithmetic) - **Ceiling paint:**`INT((D(X,1)/4)+.5)` — approximately 400 sq ft per gallon - **Wallpaper:**`INT((PAPER/30)+.99)` — 30 square feet per roll, strongly rounded up - **Exterior paint:**`INT((FINAL/35)+.5)` — 350 sq ft per gallon, divided by 10 to yield gallons ### Wall Area Calculation Wall area for a room is computed at line 1310 as `INT((LENGTH*P*2)+(EXTRA*P)+.5)`, where `LENGTH` is the sum of room length and width (so multiplying by 2 gives perimeter), `P` is ceiling height, and `EXTRA` accumulates 1.5× the perimeter of any L-shaped extensions added at line 1230. This is an approximation that can overestimate wall area for complex floor plans. ### Save and Error Recovery The save routine (lines 9950–9995) saves both the BASIC program (with `SAVE P$ LINE 8`, auto-starting at line 8 to reload machine code first) and the machine code block separately as `"home"CODE 57970,7560`. Lines 9982–9985 implement an error-recovery loop using `ON ERR GO TO 9982`, `ON ERR RESET`, and `ON ERR CONTINUE` to handle tape errors gracefully. ### Bugs and Anomalies - Lines 1410 and 1420 both open a `FOR X=1 TO 19` loop, making line 1410’s loop immediately superseded. The inner loop at line 1420 also duplicates the `PRINT` and skip logic that appears again at lines 1430–1435, causing each qualifying row to print twice. - Line 3210 contains the label for the non-paint area entry, but the branch at line 3180 goes to line 3210 while the branch at line 3270 also goes to 3210 — however, the initial branch target is `GO TO 3210` yet line 3215 is the actual first executable line in that block; line 3210 is missing from the listing, meaning control falls through from 3210 to 3215 which is fine, but it is a structural inconsistency. - Lines 5350 and 5360 are referenced by `GO TO 5350` from line 5440, but line 5350 does not appear in the listing — control would fall into line 5360, which is the intended destination. This is a harmless gap. - The variable name `VAL` at line 5930 shadows the built-in `VAL` function. While legal in BASIC, this could cause confusion if `VAL` were subsequently used as a function. - Line 4135 is the target of `GO TO 4130` (lines 4100 and 4200), but line 4130 does not exist — control passes directly to 4135. This is a benign line-number gap. ### Audio Feedback The subroutine at lines 6600–6610 plays an eight-note `BEEP` melody as a return-to-menu cue. It is called via `GO SUB 6600` from the “press z to return” wait loop at line 1990, providing audio confirmation before the menu redisplay. ## Source Code ``` 2 GO SUB 7010 5 GO TO 20 8 PRINT INK 2;AT 16,10;"\::"; INK 3;AT 16,11;"\::"; INK 4;AT 16,12;"\::"; INK 5;AT 16,13;"\::"; INK 6;AT 16,14;"\::"; INK 7;AT 16,15;"\::" 10 LOAD "home"CODE 57970,7560 11 PRINT INK 0; PAPER 7; BRIGHT 1; FLASH 1;AT 15,8;"TURN OFF";AT 16,7;"TAPE PLAYER": PAUSE 350 12 INK 0 13 ON ERR GO TO 9982 14 PAPER 7 20 CLS : BORDER 5 25 LET c1=USR 57970 27 PRINT AT 2,11;"MENU" 30 PRINT AT 11,1;"CHOOSE AREA OF INTEREST BELOW " 50 PRINT "1 INTERNAL DIMENSION SPECS","2 EXTERNAL DIMENSION SPECS","3 CARPETING YARDAGE ESTIMATION","4 INTERNAL PAINTING ESTIMATION","5 WALLPAPER ROLL ESTIMATION","6 EXTERNAL PAINTING ESTIMATION","7 AREA AND DIMENSION CATALOGUE","8 SAVE PROGRAM AND DIMENSIONS","9 PROGRAM OPERATING INSTRUCTION" 60 PRINT "0 DELETE ALL PREVIOUS SPECS " 160 IF INKEY$="1" THEN GO TO 1000 162 IF INKEY$="0" THEN GO TO 2 165 PRINT PAPER 5;AT 1,1;"\s";AT 2,2;"\s";AT 1,29;"\s" 170 IF INKEY$="2" THEN GO TO 5000 175 IF INKEY$="3" THEN GO TO 2000 180 IF INKEY$="4" THEN GO TO 3000 185 PAUSE 10 190 IF INKEY$="5" THEN GO TO 4000 195 PRINT PAPER 5;AT 1,1;"\t";AT 2,2;"\t";AT 1,29;"\t" 200 IF INKEY$="6" THEN GO TO 5500 205 PAUSE 10 210 IF INKEY$="7" THEN GO TO 1395 230 IF INKEY$="8" THEN GO TO 9950 240 IF INKEY$="9" THEN GO TO 300 250 GO TO 160 300 CLS : PRINT "WELCOME TO YOUR HOME IMPROVEMENTPLANNER ***";P$;"***": PRINT AT 4,0;"THE FOLLOWING INSTRUCTIONS WILL SIMPLIFY THE USE OF THIS PROGRAM": PRINT AT 7,0;"AREA NAMES TO BE 10 SPACES MAX": PRINT AT 9,0;"IF ERROR APPEARS ENTER " 330 PRINT AT 11,0;"ALL DIMENSIONS TO BE IN FEET";AT 13,0;"FLASHING LETTER INDICATES TYPE OF DIMENSION TO BE ENTERED";AT 16,0;"ALL AREAS GIVEN ARE SQUARE FEET" 350 PRINT AT 18,0;"IF ALL ELSE FAILS THEN RELOAD" 450 GO TO 1985 1000 CLS : BORDER 1: DIM I$(19,10): DIM I(19,2) 1010 FOR X=1 TO 19 1014 IF D$(X,1)=" " THEN GO TO 1025 1015 LET c1=USR 57970 1016 PRINT AT 12,0;"ARE YOU CHANGING THE ";D$(X,1 TO 10),"PRESS y FOR YES",,"PRESS n FOR NO" 1018 IF INKEY$="y" THEN GO TO 1024 1020 IF INKEY$="n" THEN GO TO 1330 1022 GO TO 1018 1024 CLS 1025 LET c1=USR 57970 1030 PRINT AT 12,4;"INPUT AREA DESIGNATION": PRINT AT 14,0;"IF NONE ENTER 0": INPUT I$(X,1 TO 10) 1035 IF I$(X,1)="0" THEN GO TO 1395 1040 PRINT AT 11,0;I$(X,1 TO 10): GO SUB 9520 1050 CLS : GO SUB 6000 1055 PRINT FLASH 1;AT 0,15;"L" 1060 PRINT AT 14,0;"INPUT LENGTH OF ";I$(X,1 TO 10): INPUT L 1070 PRINT FLASH 0;AT 0,15;"L"; FLASH 1;AT 4,7;"W" 1080 PRINT AT 14,0;"INPUT WIDTH OF ";I$(X,1 TO 10);" ": INPUT W 1100 LET FLOOR=INT ((L*W)+.5): LET I(X,1)=FLOOR: LET LENGTH=L+W: LET EXTRA=0 1110 PRINT FLASH 0;AT 4,7;"W" 1130 PRINT AT 14,0;"IS ANY EXTRA AREA IN ";I$(X,1 TO 10);" PRESS y FOR YES PRESS n FOR NO" 1140 IF INKEY$="y" THEN GO TO 1150 1145 IF INKEY$="n" THEN GO TO 1270 1147 GO TO 1140 1150 PRINT FLASH 1;AT 8,18;"L" 1180 PRINT AT 14,0;"INPUT EXTRA LENGTH IN ";I$(X,1 TO 10),,,,,: INPUT Y 1190 PRINT FLASH 0;AT 8,18;"L"; FLASH 1;AT 4,23;"W" 1210 PRINT AT 14,0;"INPUT EXTRA WIDTH IN ";I$(X,1 TO 10);" ": INPUT U 1220 PRINT FLASH 0;AT 4,23;"W" 1230 LET O=INT ((Y*U)+.5): LET I(X,1)=I(X,1)+O: LET WALL=INT (LENGTH+Y+U): LET EXTRA=EXTRA+INT ((1.5*(Y+U))+.5): GO TO 1130 1270 GO SUB 9520 1280 CLS : GO SUB 6200 1290 PRINT FLASH 1;AT 4,7;"H" 1300 PRINT AT 12,0;"INPUT WALL HEIGHT OF ";I$(X,1 TO 10): INPUT P 1310 LET I(X,2)=INT ((LENGTH*P*2)+(EXTRA*P)+.5) 1320 GO SUB 9520 1330 FOR p=1 TO 75: NEXT p 1340 NEXT X 1395 CLS : BORDER 6 1400 PRINT "HOME AREA FLOOR WALL" 1410 FOR X=1 TO 19 1420 FOR X=1 TO 19: IF D$(X,1 TO 5)=" " THEN GO TO 1440: PRINT TAB 0;D$(X,1 TO 10);TAB 14;D(X,1);TAB 23;D(X,2) 1430 IF D$(X,1 TO 5)=" " THEN GO TO 1440 1435 PRINT TAB 0;D$(X,1 TO 10);TAB 14;D(X,1);TAB 23;D(X,2) 1440 NEXT X 1445 IF H(1)=0 AND H(2)=0 THEN GO TO 1985 1450 PRINT TAB 0;H$(1,1 TO 10);TAB 14;H(1);TAB 23;H(2) 1960 PRINT AT 21,0;"PRESS z KEY TO RETURN TO MENU " 1970 PAUSE 70 1985 PRINT AT 21,0;"PRESS z KEY TO RETURN TO MENU " 1990 GO SUB 6600 1995 IF INKEY$="z" THEN GO TO 20 1997 GO TO 1995 2000 CLS : BORDER 2 2005 LET c1=USR 57970 2007 PRINT PAPER 5;AT 0,0;" " 2010 PRINT AT 12,0;"INPUT ROOM TO BE CARPETED" 2020 DIM U$(1,10): INPUT U$(1,1 TO 10) 2030 FOR X=1 TO 19: IF U$(1,1 TO 10)=D$(X,1 TO 10) THEN GO TO 2080 2040 NEXT X 2060 CLS : PRINT AT 3,0;"YOU HAVE NO ROOM LISTED BY THAT NAME. PLEASE INPUT ANOTHER";AT 6,0;"INPUT ROOM TO BE CARPETED";AT 8,0;"CHOOSE FROM LIST OF AREAS BELOW": GO SUB 9560 2070 GO TO 2020 2080 CLS : GO SUB 6000 2085 LET W=D(X,1): PRINT AT 10,0;"DO YOU WISH TO COVER THE ENTIRE FLOOR AREA OF ";D$(X,1 TO 10),"PRESS y FOR YES",,"PRESS n FOR NO" 2090 IF INKEY$="y" THEN GO TO 2300 2100 IF INKEY$="n" THEN GO TO 2150 2110 GO TO 2090 2150 PRINT FLASH 1;AT 8,18;"L" 2160 PRINT AT 10,0;"INPUT LENGTH OF FLOOR NOT TO BE CARPETED IN ";D$(X,1 TO 10),,,,,: INPUT CAR 2165 PRINT FLASH 0;AT 8,18;"L"; FLASH 1;AT 4,23;"W" 2170 PRINT AT 10,0;"INPUT WIDTH OF FLOOR NOT TO BE CARPETED IN ";D$(X,1 TO 10): INPUT PET 2180 LET W=W-(CAR*PET) 2182 PRINT FLASH 0;AT 4,23;"W" 2185 PRINT AT 10,0;"IS THERE ANY OTHER AREA NOT TO BE COVERED IN ";D$(X,1 TO 10),"PRESS y FOR YES",,"PRESS n FOR NO" 2186 IF INKEY$="y" THEN GO TO 2150 2187 IF INKEY$="n" THEN GO TO 2190 2188 GO TO 2186 2190 LET R=INT ((W/9)+.9): GO TO 2310 2300 LET R=INT ((D(X,1)/9)+.9) 2310 PRINT AT 10,0;"YOU WILL NEED APPROXIMATELY ";R;" SQUARE YARDS TO COVER THE","FLOOR IN THE ";D$(X,1 TO 10),,: PRINT AT 15,0;"INPUT THE PRICE PER SQUARE YARD OF YOUR NEW CARPET": INPUT PRICEC 2410 LET YARD=PRICEC*R: PRINT AT 15,0;"IT WILL COST YOU $";YARD;" TO BUY": PRINT R;" SQUARE YARDS OF CARPET": GO TO 1970 3000 LET c1=USR 57970 3005 PRINT AT 10,0;"INPUT NAME OF ROOM TO BE PAINTED" 3010 DIM U$(1,10) 3020 INPUT U$(1,1 TO 10) 3030 FOR X=1 TO 19 3040 IF U$(1,1 TO 10)=D$(X,1 TO 10) THEN GO TO 3110 3050 NEXT X 3060 CLS : PRINT AT 3,0;"YOU HAVE NO ROOM LISTED BY THAT NAME. PLEASE INPUT ANOTHER";AT 6,0;"INPUT NAME OF ROOM TO BE PAINTED";AT 8,0;"CHOOSE FROM LIST OF AREAS BELOW": GO SUB 9560 3090 GO TO 3010 3110 PRINT AT 10,0;"DO YOU WISH TO PAINT THE WALLS OR THE CEILING IN THE ";D$(X,1 TO 10);"PRESS w FOR WALLS","PRESS c FOR CEILING" 3130 IF INKEY$="w" THEN GO TO 3160 3140 IF INKEY$="c" THEN GO TO 3500 3150 GO TO 3130 3160 CLS : LET NONPA=0 3165 GO SUB 6200 3170 PRINT AT 10,0;"ARE THERE ANY WALL AREAS NOT TO BE PAINTED IN THE ";D$(X,1 TO 10),"PRESS y FOR YES",,"PRESS n FOR NO" 3180 IF INKEY$="y" THEN GO TO 3210 3190 IF INKEY$="n" THEN GO TO 3300 3200 GO TO 3180 3215 PRINT FLASH 1;AT 8,15;"L" 3220 PRINT AT 10,0;"INPUT LENGTH OF AREA NOT PAINTED",,,,,,: INPUT P 3230 PRINT FLASH 0;AT 8,15;"L": PRINT FLASH 1;AT 7,23;"H" 3240 PRINT AT 10,0;"INPUT HEIGHT OF AREA NOT PAINTED": INPUT A 3250 LET NONPA=NONPA+(P*A): CLS 3255 GO SUB 6200 3260 PRINT AT 10,0;"ARE THERE ANY OTHER WALL AREAS NOT TO BE PAINTED IN ";D$(X,1 TO 10),"PRESS y FOR YES",,"PRESS n FOR NO" 3270 IF INKEY$="y" THEN GO TO 3210 3280 IF INKEY$="n" THEN GO TO 3300 3290 GO TO 3270 3300 CLS : LET PAINT=D(X,2)-INT (NONPA+.5): LET CANS=INT ((PAINT/3.5)+.5): LET GAL=CANS/100 3340 PRINT AT 8,0;"YOU WILL NEED APPROXIMATELY ";GAL;" GALLONS TO PAINT THE","WALLS IN THE ";D$(X,1 TO 10);AT 15,0;"INPUT THE PRICE PER GALLON OF THE PAINT YOU WISH TO USE": INPUT PRIC 3430 LET PGAL=INT (PRIC*GAL*100): LET COGAL=PGAL/100: LET LAL=INT (GAL+1): LET HAL=LAL*PRIC 3450 PRINT AT 15,0;"IT WILL COST $";COGAL;" FOR ";GAL,"GALLONS OR $";HAL;" FOR ";LAL;" " 3495 GO TO 1970 3500 CLS : LET UP=INT ((D(X,1)/4)+.5): LET CEIL=UP/100 3530 PRINT AT 8,0;"YOU WILL NEED APPROXIMATELY ";CEIL;" GALLONS TO PAINT THE","CEILING IN THE ";D$(X,1 TO 10);AT 15,0;"INPUT THE PRICE PER GALLON OF THE PAINT YOU WISH TO USE": INPUT PRIC 3610 LET SAL=INT (CEIL*PRIC*100): LET DAL=SAL/100: LET FAL=INT (CEIL+1): LET JAL=FAL*PRIC 3680 PRINT AT 15,0;"IT WILL COST $";DAL;" FOR ";CEIL,"GALLONS OR $";JAL;" FOR ";FAL;" " 3695 GO TO 1970 4000 CLS : BORDER 4 4005 LET c1=USR 57970 4010 PRINT AT 12,0;"INPUT ROOM TO BE WALLPAPERED": DIM U$(1,10) 4020 INPUT U$(1,1 TO 10) 4030 FOR X=1 TO 19 4040 IF U$(1,1 TO 10)=D$(X,1 TO 10) THEN GO TO 4080 4050 NEXT X 4060 CLS : PRINT AT 3,0;"YOU HAVE NO ROOM LISTED BY THAT NAME. PLEASE INPUT ANOTHER";AT 6,0;"INPUT ROOM TO BE WALLPAPERED";AT 8,0;"CHOOSE FROM LIST OF AREAS BELOW": GO SUB 9560 4070 GO TO 4020 4080 CLS : GO SUB 6200 4090 LET NP=0: PRINT AT 10,0;"ARE THERE ANY AREAS THAT ARE LONGER THAN 4 FEET THAT WILL NOTBE PAPERED IN THE ";D$(X,1 TO 10);" PRESS y FOR YES",,"PRESS n FOR NO" 4100 IF INKEY$="y" THEN GO TO 4130 4110 IF INKEY$="n" THEN GO TO 4500 4120 GO TO 4100 4135 PRINT FLASH 1;AT 8,15;"L" 4140 PRINT AT 10,0;"INPUT LENGTH OF AREA NOT PAPERED",,,,,,,: INPUT J 4150 PRINT FLASH 0;AT 8,15;"L": PRINT FLASH 1;AT 7,23;"H" 4160 PRINT AT 10,0;"INPUT HEIGHT OF AREA NOT PAPERED": INPUT K 4170 LET NP=NP+((J-4)*K) 4180 PRINT FLASH 0;AT 7,23;"H" 4190 PRINT AT 10,0;"ARE THERE ANY OTHER AREAS THAT ARE LONGER THAN 4 FEET THAT WILLNOT BE PAPERED IN THE ";D$(X,1 TO 10);"PRESS y FOR YES",,"PRESS n FOR NO" 4200 IF INKEY$="y" THEN GO TO 4130 4210 IF INKEY$="n" THEN GO TO 4500 4220 GO TO 4200 4500 CLS : LET PAPER=D(X,2)-INT (NP+.5): LET ROLLS=INT ((PAPER/30)+.99) 4530 CLS : PRINT AT 7,0;"YOU WILL NEED APPROXIMATELY ";ROLLS;" ROLLS OF WALLPAPER TO PAPER","THE WALLS OF THE ";D$(X,1 TO 10);AT 11,0;"THIS IS ONLY AN ESTIMATE. YOU MAY REQUIRE MORE ROLLS IF THE PAPER HAS A REPEATING PATTERN WITH A LENGTH OF REPEAT OF MORE THAN 12 INCHES" 4550 PRINT AT 17,0;"INPUT THE PRICE PER ROLL YOU WILL PAY FOR WALLPAPER": INPUT PRICEW 4570 LET BAL=ROLLS*PRICEW 4580 PRINT AT 17,0;"IT WILL COST YOU $";BAL;" FOR ";ROLLS,"ROLLS OF WALLPAPER",: GO TO 1970 5000 CLS : BORDER 5: LET H$(1,1 TO 10)="HOUSE" 5060 LET SIDING=0: LET GROUND=0 5070 CLS : GO SUB 6300 5080 PRINT FLASH 1;AT 11,13;"L" 5100 PRINT AT 15,0;"INPUT MAJOR LENGTH OF HOUSE": INPUT LEN 5110 PRINT FLASH 0;AT 11,13;"L"; FLASH 1;AT 0,22;"W" 5130 PRINT AT 15,0;"INPUT THE MAJOR WIDTH OF HOUSE ": INPUT WID 5140 PRINT FLASH 0;AT 0,22;"W"; FLASH 1;AT 7,0;"H" 5150 PRINT AT 15,0;"INPUT THE MAJOR FOUNDATION TO ROOF HEIGHT OF HOUSE": INPUT HEI 5170 LET SIDING=(LEN+WID)*2*HEI: LET GROUND=LEN*WID 5190 PRINT FLASH 0;AT 7,0;"H" 5200 PRINT AT 15,0;"IS THERE ANY MORE SIDE AREA ON YOUR HOUSE",,"PRESS y FOR YES",,"PRESS n FOR NO" 5210 IF INKEY$="y" THEN GO TO 5240 5220 IF INKEY$="n" THEN GO TO 5350 5230 GO TO 5210 5240 CLS : GO SUB 6300 5245 PRINT FLASH 1;AT 7,24;"L";AT 7,27;"L"; INVERSE 1;AT 6,26;"L" 5250 PRINT AT 15,0;"INPUT THE LENGTH OF SIDE AREA": INPUT SL 5255 PRINT FLASH 0;AT 7,24;"L"; FLASH 0;AT 7,27;"L"; FLASH 0; INVERSE 1;AT 6,26;"L"; FLASH 1;AT 6,31;"H" 5260 PRINT AT 15,0;"INPUT THE AVERAGE FOUNDATION TO ROOF HEIGHT OF SIDE AREA": INPUT HS 5270 PRINT FLASH 0;AT 6,31;"H" 5280 LET SIDING=SIDING+(SL*HS): GO TO 5190 5360 PRINT AT 15,0;"DOES YOUR HOUSE COVER ANY MORE GROUND AREA THAN THE MAJOR DIMENSIONS COVER","PRESS y FOR YES",,"PRESS n FOR NO" 5370 IF INKEY$="y" THEN GO TO 5400 5380 IF INKEY$="n" THEN GO TO 5460 5390 GO TO 5370 5400 CLS : GO SUB 6300 5405 PRINT FLASH 1;AT 10,27;"L" 5410 PRINT AT 15,0;"INPUT LENGTH OF EXTRA AREA": INPUT EXL 5420 PRINT FLASH 0;AT 10,27;"L"; FLASH 1;AT 10,24;"W" 5430 PRINT AT 15,0;"INPUT WIDTH OF EXTRA AREA ": INPUT WEX 5435 PRINT FLASH 0;AT 10,24;"W" 5440 LET GROUND=GROUND+(EXL*WEX): GO TO 5350 5460 LET H(2)=INT (SIDING+.5): LET H(1)=INT (GROUND+.5): GO TO 1395 5500 CLS : LET BRUSH=0 5510 PRINT AT 8,0;"ARE THERE ANY SIDE AREAS THAT YOU WISH TO EXCLUDE FROM YOUR PAINT USAGE ESTIMATION","PRESS y FOR YES",,"PRESS n FOR NO" 5520 IF INKEY$="y" THEN GO TO 5550 5530 IF INKEY$="n" THEN GO TO 5800 5540 GO TO 5520 5550 CLS : GO SUB 6300 5555 PRINT FLASH 1;AT 10,7;"L" 5560 PRINT AT 15,0;"INPUT LENGTH OF AREA NOT PAINTED": INPUT NPSL 5570 PRINT FLASH 0;AT 10,7;"L"; FLASH 1;AT 8,2;"H" 5580 PRINT AT 15,0;"INPUT HEIGHT OF AREA NOT PAINTED": INPUT HNPA 5590 LET BRUSH=BRUSH+(NPSL*HNPA): CLS : GO TO 5510 5800 LET FINAL=H(2)-INT (BRUSH+.5): LET Z=INT ((FINAL/35)+.5): LET Z=Z/10: CLS 5840 PRINT AT 8,0;"YOU WILL NEED APPROXIMATELY ";Z;" GALLONS TO PAINT YOUR HOUSE";AT 11,0;"YOUR USAGE MAY VARY IF YOU USE A SPRAYER TO PAINT YOUR HOUSE";AT 15,0;"INPUT THE PRICE PER GALLON OF THE PAINT YOU WISH TO USE": INPUT PRICEH 5930 LET ZAL=INT (Z*PRICEH*100): LET XAL=ZAL/100: LET CAL=INT (Z+1): LET VAL=CAL*PRICEH 5970 PRINT AT 15,0;"IT WILL COST $";XAL;" FOR ";Z,"GALLONS OR $";VAL;" FOR ";CAL;" " 5980 GO TO 1970 6000 FOR F=73 TO 121: PLOT INK 4;F,163: DRAW INK 4;0,-40: NEXT F 6010 FOR F=122 TO 175: PLOT INK 4;F,163: DRAW INK 4;0,-48: NEXT F 6020 PRINT AT 0,15;"L": PRINT AT 0,9;"<": PRINT AT 0,21;">" 6030 PLOT 73,168: DRAW 0,6: PLOT 73,171: DRAW 42,0: PLOT 131,171: DRAW 43,0: PLOT 175,168: DRAW 0,6 6040 PRINT AT 4,7;"W";AT 1,7;"\a";AT 6,7;"\b" 6050 PLOT 58,123: DRAW 10,0: PLOT 58,163: DRAW 10,0: PLOT 60,123: DRAW 0,11: PLOT 60,146: DRAW 0,17 6060 PRINT AT 4,23;"W";AT 6,23;"\b";AT 7,23;"\a" 6070 PLOT 180,115: DRAW 11,0: PLOT 180,123: DRAW 11,0: PLOT 188,105: DRAW 0,9: PLOT 188,123: DRAW 0,9 6080 PRINT AT 8,18;"L";AT 8,21;">";AT 8,15;"<" 6090 PLOT 122,104: DRAW 0,7: PLOT 175,104: DRAW 0,7: PLOT 122,107: DRAW 14,0: PLOT 156,107: DRAW 19,0 6110 PRINT INK 3; PAPER 4;AT 5,19;"\c\::";AT 6,20;"\d"; PAPER 3; INK 4;AT 4,19;"\:.\.." 6120 PRINT INK 5; PAPER 4;AT 2,12;"\e\g\f"; INK 2;AT 2,11;"\h";AT 2,15;"\i"; INK 5;AT 5,14;"\j" 6190 RETURN 6200 FOR F=73 TO 175: PLOT INK 6;F,168: DRAW INK 6;0,-48: NEXT F 6240 PRINT AT 4,7;"H";AT 1,7;"\q";AT 6,7;"\r";AT 8,13;"> L <": PLOT 96,107: DRAW 11,0: PLOT 141,107: DRAW 11,0: PLOT 111,103: DRAW 0,11: PLOT 137,103: DRAW 0,11 6250 PLOT 58,120: DRAW 10,0: PLOT 58,168: DRAW 10,0: PLOT 60,120: DRAW 0,11: PLOT 60,151: DRAW 0,17 6260 PRINT INK 3;AT 6,15;"\k";AT 3,19;"\o\o";AT 4,19;"\j\j";AT 5,19;"\::\:.";AT 6,19;"\::\::" 6270 PRINT INK 0;AT 3,11;"\l";AT 4,11;"\m";AT 5,11;"\n";AT 6,11;"\o"; INK 2;AT 3,14;"\p\p\p";AT 4,14;"\p\p\p"; INK 0; PAPER 6;AT 1,15;"\b" 6280 PRINT AT 7,23;"H";AT 5,23;"\q";AT 2,23;"\r": PLOT 180,136: DRAW 11,0: PLOT 180,151: DRAW 11,0: PLOT 188,124: DRAW 0,11: PLOT 188,152: DRAW 0,11 6290 RETURN 6300 PLOT 36,102: DRAW 0,30: DRAW 124,8: DRAW 0,-40: DRAW -124,2 6310 PLOT 160,140: DRAW 28,18: DRAW -118,-10: DRAW -38,-16: DRAW 7,0 6320 PLOT 188,158: DRAW 13,-14 6330 PLOT 197,143: DRAW -9,11: DRAW 0,4 6340 PLOT 44,102: DRAW 0,16: DRAW 25,0: DRAW 0,-16 6350 PRINT AT 6,6;"\p";AT 6,9;"\p" 6360 PLOT 97,101: DRAW 0,20: DRAW 10,0: DRAW 0,-20 6370 PLOT 120,130: DRAW 30,2: DRAW 0,-15: DRAW -30,1: DRAW 0,12 6380 PLOT 180,105: DRAW 0,28: DRAW 24,1: DRAW 0,-29: DRAW -24,0: DRAW -20,-4 6390 PLOT 180,132: DRAW 18,12: DRAW 24,1: DRAW 7,-9: DRAW 0,-25: DRAW -25,-6 6400 PLOT 204,133: DRAW 18,11 6410 PRINT AT 6,24;"\p" 6420 PLOT 184,106: PLOT 188,107: PLOT 192,108: PLOT 196,109: PLOT 200,110: PLOT 201,111: PLOT 201,115: PLOT 201,119: PLOT 201,123: PLOT 201,127: PLOT 201,131: PLOT 201,135: PLOT 201,139 6430 PLOT 205,111: PLOT 209,111: PLOT 213,111: PLOT 217,111: PLOT 221,111: PLOT 225,111 6450 PRINT AT 10,5;"<";AT 10,8;">";AT 11,19;">";AT 11,4;"<";AT 8,0;"\r";AT 9,2;"\q";AT 6,2;"\r";AT 5,0;"\a" 6460 PRINT AT 10,22;"<";AT 10,25;">";AT 0,24;">";AT 0,20;"<";AT 10,29;"<";AT 4,31;"\a";AT 7,31;"\r" 6470 PLOT 34,78: DRAW 0,18: PLOT 160,78: DRAW 0,18: PLOT 70,86: DRAW 0,10: PLOT 42,86: DRAW 0,10 6480 PLOT 0,132: DRAW 25,0: PLOT 0,103: DRAW 29,0: PLOT 14,120: DRAW 15,0 6490 PLOT 178,86: DRAW 0,14: PLOT 206,86: DRAW 0,14: PLOT 232,87: DRAW 0,20: PLOT 160,175: DRAW 0,-30: PLOT 200,175: DRAW 0,-27 6500 PLOT 4,103: DRAW 0,28: PLOT 20,91: DRAW 0,10: PLOT 20,122: DRAW 0,7: PLOT 45,91: DRAW 23,0: PLOT 37,83: DRAW 118,0: PLOT 163,171: DRAW 35,0: PLOT 180,91: DRAW 24,0: PLOT 234,91: DRAW 8,0 6505 PLOT 236,112: DRAW 19,0: PLOT 236,140: DRAW 19,0: PLOT 252,113: DRAW 0,26 6510 PRINT AT 0,22;"W";AT 10,24;"W";AT 10,27;"L";AT 11,13;"L";AT 10,7;"L";AT 8,2;"H";AT 7,0;"H";AT 6,31;"H" 6530 RETURN 6600 BEEP .07,14: BEEP .12,10: BEEP .07,6: BEEP .07,7: BEEP .1,11: BEEP .1,4: BEEP .22,18: BEEP .01,5 6610 RETURN 6990 STOP 7000 STOP 7010 DIM D$(19,10) 7020 DIM D(19,2) 7030 DIM H$(1,10) 7040 DIM H(2) 7045 LET P$="home" 7050 RETURN 9520 LET D$(X,1 TO 10)=I$(X,1 TO 10): LET D(X,1)=I(X,1): LET D(X,2)=I(X,2): RETURN 9560 PRINT AT 11,0;D$(1,1 TO 10);" ";D$(2,1 TO 10);" ";D$(3,1 TO 10): PRINT D$(4,1 TO 10);" ";D$(5,1 TO 10);" ";D$(6,1 TO 10): PRINT D$(7,1 TO 10);" ";D$(8,1 TO 10);" ";D$(9,1 TO 10): PRINT D$(10,1 TO 10);" ";D$(11,1 TO 10);" ";D$(12,1 TO 10): PRINT D$(13,1 TO 10);" ";D$(14,1 TO 10);" ";D$(15,1 TO 10): PRINT D$(16,1 TO 10);" ";D$(17,1 TO 10);" ";D$(18,1 TO 10): PRINT D$(19,1 TO 10) 9570 RETURN 9950 CLS : BORDER 7: PRINT AT 8,0;"TO SAVE THIS PROGRAM WITH YOUR HOME DIMENSIONS, TYPE IN YOUR PROGRAM NAME AND PRESS ENTER" 9970 INPUT P$ 9980 CLS 9981 GO TO 9990 9982 ON ERR RESET 9983 PAUSE 100 9984 ON ERR GO TO 9982 9985 ON ERR CONTINUE 9990 SAVE P$ LINE 8 9991 PRINT AT 10,2;"press a key to complete save" 9995 SAVE "home"CODE 57970,7560 ```