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 eachD(19,2)— column 1 = floor area in square feet; column 2 = wall area in square feetH$(1,10)andH(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 ofPLOT/DRAWand UDG charactersGO SUB 6200— draws a wall elevation diagram with H (height) and L labelsGO SUB 6300— draws an exterior house outline with roof, garage, window, and door features using lengthyPLOT/DRAWsequences 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 19loop, making line 1410’s loop immediately superseded. The inner loop at line 1420 also duplicates thePRINTand 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 3210yet 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 5350from 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
VALat line 5930 shadows the built-inVALfunction. While legal in BASIC, this could cause confusion ifVALwere 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.
Content
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 <GOTO 20>"
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
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

