Tax 2068 is a two-part U.S. federal income tax computation program for the 1983 tax year, split across two cassette sides. Part 1 handles income entry (wages, dividends, interest, capital gains, other income), adjustments to income (IRA, Keogh, alimony, moving expenses, etc.), and itemized deductions broken into medical, taxes, interest, contributions, and miscellaneous categories. Part 2 performs the actual tax calculation using bracket tables encoded as colon-delimited numeric strings in long string variables, parsed at runtime into a DIM array by a dedicated subroutine. The program supports all five IRS filing statuses with corresponding standard deductions, income averaging (Schedule G), tax credits, other taxes, and withholding payments to compute a final refund or amount owed. Deduction category labels are stored compactly in string variables and parsed similarly into a string array for display.
Program Analysis
Program Structure
The program is split into two independent parts, each saved to a separate side of a cassette tape. Part 1 (lines 1–9030) collects income, adjustments, and deductions. At line 3100 it instructs the user to write down two carry-forward values (AI and DE) and load Part 2. Part 2 (lines 1–9030 in the second listing) accepts those two values as manual input, then performs tax bracket lookup, income averaging, credits, other taxes, and payment reconciliation to produce a final refund or balance-due figure.
Data Encoding and Parsing
Both parts use a compact colon-delimited string encoding for tabular data. In Part 1, lines 14–15 hold deduction category labels in C$ and D$; subroutine 5500 walks the string character by character, splitting on : and ; to populate the string array V$(). In Part 2, lines 4 and 6 hold the IRS tax bracket tables as long numeric strings in B$ and C$; subroutine 5000 parses these into the numeric array V() (dimensioned to 126). This avoids storing large DATA blocks and saves memory.
Tax Bracket Lookup (Part 2)
Subroutine 3700 implements the bracket search loop. The variable H is used as a pointer into the V() array. An initial base tax TX is read, then the loop (lines 3740–3800) reads triplets of upper-limit, base-tax, and marginal-rate values. The filing status determines the starting offset in the array: status 2, 3, and 5 begin at offset 42; status 4 at offset 84; status 1 at offset 0. For married-filing-separately (status 3), income and base tax are halved before lookup and the result is not doubled back — this appears to be a potential bug in the bracket calculation.
Income Averaging (Schedule G)
Lines 3440–3680 implement income averaging. The user enters taxable income for 1979–1982 (net of exemptions). The base income BI is 30% of the four-year sum. The tax is computed twice via subroutine 3700: once on BI alone to get TB, and once on 0.2*IA + BI where IA is the averageable income. The final tax is 4*(TX-TB)+TB_tax, approximating the Schedule G formula. If IA does not exceed $3,000, income averaging is suppressed.
Input and Navigation Idiom
Throughout both parts, the program uses the pattern at lines such as 770, 1430, 1920, 2860, and 4080:
IF INKEY$="" THEN GO TO [same line]
LET A$=INKEY$
This busy-waits for a keypress then dispatches on the character with a cascade of IF A$="x" THEN GO SUB / GO TO statements. This is a standard menu-driven navigation technique, avoiding INPUT for single-character commands.
String Array Label Display (Part 1, Subroutine 2880)
Lines 2880–2920 display a deduction label stored in V$(I) by splitting it into a left portion (characters 1–4), a middle character (position 5), and a right portion (position 6 onward). The middle character’s code is incremented by 128 (line 2904–2906) to produce an inverse-video character for visual emphasis on screen. This is a deliberate display technique using CODE and CHR$ arithmetic.
Capital Gains Calculation (Part 1)
Lines 840–1040 implement Schedule D capital gains. Short-term (NS) and long-term (NL) net gains are combined. The 60% long-term deduction is applied when the net is positive. When the net is negative, a $3,000 loss limit is enforced (line 952), and short-term and long-term carryforward amounts S1 and S2 are computed and displayed (lines 1000–1006).
Variable Summary
| Variable | Meaning |
|---|---|
AI | Adjusted gross income (carry-forward between parts) |
DE | Total itemized deductions (carry-forward between parts) |
NI | Taxable income (after deductions and exemptions) |
TX | Computed tax from bracket table |
XT | Total tax (TX + additional tax AT) |
FS | Filing status (1–5) |
SD | Standard deduction ($2300/$3400/$1700 by status) |
EX | Number of exemptions |
H | Array pointer used in bracket table parsing |
V() | Numeric array holding parsed bracket table values (Part 2) |
V$() | String array holding deduction category labels (Part 1) |
Notable Anomalies
- Line 200 in Part 1 loops
FOR I=14 TO NDwhen displaying existing dividends, but the arrayD()is indexed 1–10 elsewhere; starting at 14 would always be out of range and the loop body never executes for any realisticNDvalue — likely a typo forFOR I=1 TO ND. - Lines 910 and 920 in the capital gains section are unreachable: line 910 is only reached when
NG<0, but its conditionIF NS>0combined with the prior logic at line 880 means line 920 can never be reached through normal flow, and theGO TO 940at line 912 skips line 920 entirely regardless. - Line 1422 in Part 1 is a bare line number with no statement — a harmless no-op.
- The “DISABILITY” label is misspelled as “DISIBILITY” at line 1732.
- Part 2 lines 3700–3702 set
H=42for both filing status 2 and status 3, even though status 3 (married filing separately) uses halved brackets — the halving at lines 3784–3786 compensates, but the offset logic conflates two distinct tax schedules.
Save/Reload Pattern
Both parts end with a lines-9000 block (CLS : CLEAR : SAVE "TAX x" : RUN) providing a convenient way to re-save the program to tape after any modifications, immediately followed by RUN to restart.
Content
Image Gallery
Source Code
1 REM "TAX 1"
3 PRINT AT 11,9;"PLEASE WAIT"
4 LET GI=0
5 LET AD=0
6 LET DE=0
7 LET TX=0
8 LET P=0
9 LET TT=0
12 DIM V$(21,20)
13 DIM V(21)
14 LET C$=" 1 MEDICINE:: 4A DOCTORS, ETC.: 4B TRANSPORT.: 4C OTHER MEDICAL: 8 INCOME TAXES: 9 PROPERTY:10A SALES TAXES:10B VEHICLE:11 OTHER TAXES:13A BANK MORT:13B IND. MORT:14 CREDIT CARDS:15 OTHER INTER.:17ABCASH CONT.:18 OTHER CONT.:19 PRIOR YEARS:;"
15 LET D$="21 CASUALTY:22 DUES-UN. AND PR.:23 TAX FEE:24 OTHER DEDUC.:;"
22 LET H$="NO"
24 LET EX=1
25 LET NN=0
26 LET FS=1
28 LET SD=2300
30 DIM I(10)
31 LET ND=0
32 DIM D(10)
33 LET NS=0
34 LET NL=0
35 LET IG=0
36 DIM S(10)
37 DIM L(10)
38 LET IL=0
39 DIM O(10)
40 LET W2=0
41 LET IN=0
42 LET D=0
43 LET EC=0
44 LET CG=0
45 LET IO=0
47 LET MV=0
48 LET BS=0
49 LET IR=0
50 LET K=0
51 LET SP=0
52 LET AL=0
53 LET MP=0
54 LET DS=0
55 LET M=0
56 LET T=0
57 LET ID=0
58 LET CO=0
59 LET MS=0
60 LET LO=0
62 LET B=0
65 LET H=0
66 LET F$=C$
68 CLS
72 GO SUB 5500
74 LET F$=D$
76 GO SUB 5500
78 GO TO 1360
80 CLS
84 PRINT AT 1,0;"7.TYPE TOTAL WAGES"
94 PRINT AT 4,0;" ";W2
120 INPUT W2
124 PRINT AT 4,0;" ";W2;" "
170 RETURN
180 CLS
184 PRINT AT 1,0;"9.TYPE DIVIDEND"
185 PRINT "TYPE 0 TO QUIT"
186 PRINT
190 IF ND=0 THEN GO TO 220
200 FOR I=14 TO ND
210 PRINT " ";D(I)
212 NEXT I
220 LET D=0
230 FOR I=1 TO 10
240 INPUT D(I)
245 PRINT D(I);" "
250 IF D(I)=0 THEN GO TO 280
260 LET D=D+D(I)
270 NEXT I
280 LET ND=I-1
290 RETURN
300 CLS
302 PRINT AT 1,0;"8.TYPE INTEREST"
306 PRINT "TYPE 0 TO QUIT"
308 PRINT
310 IF NN=0 THEN GO TO 350
320 FOR I=1 TO NN
330 PRINT " ";I(I)
332 NEXT I
340 PRINT AT 3,0
350 LET IN=0
360 FOR I=1 TO 10
370 INPUT I(I)
375 PRINT " ";I(I);" "
380 IF I(I)=0 THEN GO TO 410
390 LET IN=IN+I(I)
400 NEXT I
410 LET NN=I-1
420 RETURN
430 CLS
432 PRINT AT 1,0;"OTHER INCOME"
436 PRINT
440 PRINT "10TAX REFUND ";O(1)
450 PRINT "11ALIMONY REC. ";O(2)
460 PRINT "12BUSINESS INC.";O(3)
470 PRINT "14OTHER GAIN ";O(4)
480 PRINT "15SUPP. GAIN ";O(5)
490 PRINT "16/17PENSION ";O(6)
500 PRINT "18RENTS, ROYAL.";O(7)
510 PRINT "19FARM INCOME ";O(8)
520 PRINT "20UNEMP. COM. ";O(9)
530 PRINT "21OTHER INCOME ";O(10)
531 PRINT
532 PRINT " RETURN"
533 PRINT
534 PRINT "TYPE BLACK LETTER"
535 PRINT
536 IF INKEY$="" THEN GO TO 536
538 LET A$=INKEY$
540 IF A$="R" THEN GO TO 593
541 IF A$<>"T" THEN GO TO 546
542 PRINT "TAX REFUND"
543 INPUT O(1)
544 PRINT AT 3,15;O(1);" "
545 GO TO 590
546 IF A$<>"A" THEN GO TO 551
547 PRINT "ALIMONY REC."
548 INPUT O(2)
549 PRINT AT 4,15;O(2);" "
550 GO TO 590
551 IF A$<>"B" THEN GO TO 556
552 PRINT "BUSINESS INC."
553 INPUT O(3)
554 PRINT AT 5,15;O(3);" "
555 GO TO 590
556 IF A$<>"O" THEN GO TO 561
557 PRINT "OTHER GAIN"
558 INPUT O(4)
559 PRINT AT 6,15;O(4);" "
560 GO TO 590
561 IF A$<>"S" THEN GO TO 566
562 PRINT "SUPP. GAIN"
563 INPUT O(5)
564 PRINT AT 7,15;O(5);" "
565 GO TO 590
566 IF A$<>"P" THEN GO TO 571
567 PRINT "PENSION"
568 INPUT O(6)
569 PRINT AT 8,15;O(6);" "
570 GO TO 590
571 IF A$<>"E" THEN GO TO 576
572 PRINT "RENTS, ROYAL."
573 INPUT O(7)
574 PRINT AT 9,15;O(7);" "
575 GO TO 590
576 IF A$<>"F" THEN GO TO 581
577 PRINT "FARM INC."
578 INPUT O(8)
579 PRINT AT 10,15;O(8);" "
580 GO TO 590
581 IF A$<>"U" THEN GO TO 586
582 PRINT "UNEMP. COM."
583 INPUT O(9)
584 PRINT AT 11,15;O(9);" "
585 GO TO 590
586 IF A$<>"I" THEN GO TO 590
587 PRINT "OTHER INCOME"
588 INPUT O(10)
589 PRINT AT 12,15;O(10);" "
590 PRINT AT 18,0;" "
591 PRINT AT 17,0
592 GO TO 536
593 LET IO=0
594 FOR I=1 TO 10
596 LET IO=IO+O(I)
598 NEXT I
600 RETURN
610 CLS
612 PRINT
614 PRINT "1983 TAX: INCOME"
616 PRINT "TYPE BLACK LETTERS"
620 PRINT
622 PRINT " 7WAGES, SAL.",W2
630 PRINT " 8INTEREST",IN
640 LET DV=D-EC
642 IF DV<0 THEN LET DV=0
650 PRINT " 9DIVIDEND",DV
660 PRINT "(";D;"-";EC;")"
670 PRINT " (EXCL.)",EC
680 PRINT "13CAP. GAIN",CG
690 PRINT " OTHER INCOME",IO
700 LET GI=W2+DV+IN+IO+CG
710 IF GI<0 THEN LET GI=0
720 PRINT
722 PRINT "22TOTAL INCOME",GI
740 PRINT
742 PRINT " RETURN"
750 PRINT AT 21,0;"COPR 1983 PRACTIC PROG"
770 IF INKEY$="" THEN GO TO 770
772 LET A$=INKEY$
780 IF A$="R" THEN RETURN
790 IF A$="W" THEN GO SUB 80
792 IF A$="D" THEN GO SUB 180
800 IF A$="I" THEN GO SUB 300
802 IF A$="O" THEN GO SUB 430
804 IF A$="C" THEN GO SUB 840
810 IF A$="E" THEN GO SUB 830
820 GO TO 610
830 CLS
832 PRINT
834 PRINT "EXCLUSION"
836 INPUT EC
837 PRINT " ";EC
838 RETURN
840 CLS
842 PRINT
844 PRINT "D.CAPITAL GAIN"
850 PRINT
852 PRINT "I. SHORT",NS
860 PRINT
862 PRINT "II.LONG",NL
870 LET NG=NS+NL
880 IF NG<0 THEN GO TO 910
890 LET GG=NG
892 IF NL<NG THEN LET GG=NL
894 IF GG<0 THEN LET GG=0
900 LET CG=NG-.6*GG
902 GO TO 940
910 IF NS>0 THEN LET CG=.5*NG
912 GO TO 940
920 IF NL>0 THEN LET CG=NG
922 GO TO 940
930 LET CG=NS+.5*NL
940 IF CG>-3000 THEN GO TO 1010
950 LET CF=CG+3000
952 LET CG=-3000
960 LET S1=NS+3000
970 IF S1>0 THEN LET S1=0
980 IF S1<CF THEN LET S1=CF
990 LET S2=2*(CF-S1)
1000 PRINT
1002 PRINT "CARRYFORWARDS:"
1004 PRINT "30SHORT",S1
1006 PRINT "36LONG",S2
1010 LET A=22
1012 IF CG<0 THEN LET A=24
1020 LET CG=INT (CG+.5)
1030 PRINT
1032 PRINT A;"TOTAL",CG
1040 PRINT
1042 PRINT "RETURN"
1050 PRINT "TYPE LETTER"
1060 IF INKEY$="" THEN GO TO 1060
1062 LET A$=INKEY$
1070 IF A$="R" THEN RETURN
1072 IF A$=CHR$ 118 THEN RETURN
1080 IF A$="S" THEN GO SUB 1100
1082 IF A$="L" THEN GO SUB 1230
1090 GO TO 840
1100 CLS
1102 PRINT
1104 PRINT "I.TYPE SHORT TERM CAPITAL GAINS."
1105 PRINT "TYPE 0 TO QUIT"
1106 PRINT
1110 IF IG=0 THEN GO TO 1150
1120 FOR I=1 TO IG
1130 PRINT " ";S(I)
1132 NEXT I
1150 LET NS=0
1152 PRINT AT 3,0
1160 FOR I=1 TO 10
1170 INPUT S(I)
1175 PRINT " ";S(I);" "
1180 IF S(I)=0 THEN GO TO 1210
1190 LET NS=NS+S(I)
1200 NEXT I
1210 LET IG=I-1
1220 RETURN
1230 CLS
1232 PRINT
1234 PRINT "II.TYPE LONG TERM CAPITAL GAINS."
1235 PRINT "TYPE 0 TO QUIT"
1236 PRINT
1240 IF IL=0 THEN GO TO 1280
1250 FOR I=1 TO IL
1260 PRINT " ";L(I)
1262 NEXT I
1280 LET NL=0
1285 PRINT AT 3,0
1290 FOR I=1 TO 10
1300 INPUT L(I)
1302 PRINT " ";L(I);" "
1310 IF L(I)=0 THEN GO TO 1340
1320 LET NL=NL+L(I)
1330 NEXT I
1340 LET IL=I-1
1350 RETURN
1360 CLS
1362 PRINT
1364 PRINT "1983 INCOME TAX COMPUTATION PROG"
1366 PRINT "TYPE BLACK LETTERS"
1370 PRINT
1372 PRINT "22TOT. INC",GI
1380 PRINT
1382 PRINT "31ADJUSTMENTS",AD
1390 LET AI=GI-AD
1392 IF AI<0 THEN LET AI=0
1400 PRINT
1402 PRINT "32ADJ. INC.",AI
1404 PRINT
1406 PRINT "34DEDUCTIONS",DE
1408 PRINT
1410 PRINT " GOTO PART 2 OF PROG."
1416 PRINT
1418 PRINT " QUIT"
1420 PRINT AT 20,0;"COPR 1983 PRACTICAL PROGRAMS, INC."
1422
1430 IF INKEY$="" THEN GO TO 1430
1432 LET A$=INKEY$
1440 IF A$="Q" THEN STOP
1450 IF A$="A" THEN GO SUB 1490
1452 IF A$="I" THEN GO SUB 610
1454 IF A$="D" THEN GO SUB 1840
1456 IF A$="G" THEN GO SUB 3000
1460 GO TO 1360
1470 PRINT "TOTAL INC."
1472 INPUT GI
1474 PRINT AT 12,0;GI
1480 GO TO 1360
1490 CLS
1491 PRINT
1492 PRINT "TYPE ADJUSTMENTS TO INCOME"
1500 PRINT
1502 PRINT "23MOVING EXP.",MV
1510 PRINT "24BUSINESS",BS
1520 PRINT "25IRA PAYMENTS",IR
1530 PRINT "26KEOGH PAYM.",K
1540 PRINT "27SAV. PENALTY",SP
1550 PRINT "28ALIMONY PAID",AL
1560 PRINT "29MARRIAGE",MP
1570 PRINT "30DISABILITY",DS
1580 LET AD=MV+BS+IR+K+SP+AL+MP+DS
1590 GO SUB 1740
1600 IF A$="R" THEN RETURN
1610 IF A$="O" THEN GO TO 1650
1612 IF A$="B" THEN GO TO 1660
1614 IF A$="I" THEN GO TO 1680
1620 IF A$="K" THEN GO TO 1690
1622 IF A$="S" THEN GO TO 1700
1624 IF A$="A" THEN GO TO 1710
1630 IF A$="M" THEN GO TO 1720
1632 IF A$="D" THEN GO TO 1730
1640 GO TO 1490
1650 PRINT
1652 PRINT "MOVING"
1654 INPUT MV
1656 GO TO 1490
1660 PRINT
1662 PRINT "BUSINESS EXPENSE"
1664 INPUT BS
1670 GO TO 1490
1680 PRINT
1682 PRINT "IRA CONTRIB."
1684 INPUT IR
1686 GO TO 1490
1690 PRINT
1692 PRINT "KEOGH"
1694 INPUT K
1696 GO TO 1490
1700 PRINT
1702 PRINT "SAVING PEN."
1704 INPUT SP
1706 GO TO 1490
1710 PRINT
1712 PRINT "ALIMONY"
1714 INPUT AL
1716 GO TO 1490
1720 PRINT
1722 PRINT "MARRIAGE"
1724 INPUT MP
1726 GO TO 1490
1730 PRINT
1732 PRINT "DISIBILITY"
1734 INPUT DS
1736 GO TO 1490
1740 PRINT
1742 PRINT "RETURN"
1750 PRINT
1752 PRINT "TYPE LETTER"
1760 IF INKEY$="" THEN GO TO 1760
1762 LET A$=INKEY$
1770 RETURN
1840 CLS
1842 PRINT
1844 PRINT "DEDUCTIONS"
1850 PRINT
1852 PRINT "32ADJUST. INC",AI
1860 PRINT
1862 PRINT " 7MEDICAL DED.",M
1865 PRINT "12TAXES",T
1870 PRINT "16INTEREST EXP.",ID
1875 PRINT "20CONTRIBUTIONS",CO
1877 PRINT "21LOSSES",LO
1880 PRINT "24OTHER DEDUCT.",MS
1890 LET DE=M+T+ID+CO+LO+B+MS
1900 PRINT
1902 PRINT "25TOTAL DEDUCT.",DE
1910 PRINT
1912 PRINT " RETURN"
1914 PRINT
1916 PRINT "TYPE LETTER"
1920 IF INKEY$="" THEN GO TO 1920
1922 LET A$=INKEY$
1930 IF A$="R" THEN RETURN
1950 IF A$="M" THEN GO SUB 1980
1952 IF A$="T" THEN GO SUB 2280
1960 IF A$="I" THEN GO SUB 2430
1962 IF A$="C" THEN GO SUB 2570
1964 IF A$="O" THEN GO SUB 2700
1966 IF A$="L" THEN GO SUB 2691
1970 GO TO 1840
1980 CLS
1981 PRINT
1982 PRINT "MEDICAL DEDUCTIONS"
1990 LET I=1
1992 GO SUB 2880
2000 LET L2=INT (.01*AI+.5)
2010 PRINT " 2 1PERCENT INC. ";L2
2020 LET L3=V(1)-L2
2022 IF L3<0 THEN LET L3=0
2030 PRINT " 3"," ";L3
2050 LET I=3
2052 GO SUB 2880
2060 LET I=4
2062 GO SUB 2880
2070 LET I=5
2072 GO SUB 2880
2080 LET L6=L3
2082 FOR I=2 TO 5
2084 LET L6=L6+V(I)
2086 NEXT I
2090 PRINT " 5"," ";L6
2100 LET L7=INT (.05*AI+.5)
2110 PRINT " 6 5PERCENT INC. ";L7
2120 LET M=L6-L7
2122 IF M<0 THEN LET M=0
2170 PRINT " 7 TOTAL MEDICAL ";M
2180 GO SUB 2840
2190 IF A$="R" THEN RETURN
2200 IF A$="M" THEN LET I=1
2220 IF A$="D" THEN LET I=3
2230 IF A$="T" THEN LET I=4
2240 IF A$="O" THEN LET I=5
2250 IF I=0 THEN GO TO 1980
2260 GO SUB 2930
2270 GO TO 1980
2280 CLS
2282 PRINT
2284 PRINT "TAXES"
2290 LET T=0
2300 FOR I=6 TO 10
2302 GO SUB 2880
2310 LET T=T+V(I)
2312 NEXT I
2320 PRINT "12TOTAL TAXES ";T
2330 GO SUB 2840
2340 IF A$="R" THEN RETURN
2350 IF A$="I" THEN LET I=6
2360 IF A$="P" THEN LET I=7
2370 IF A$="S" THEN LET I=8
2380 IF A$="V" THEN LET I=9
2390 IF A$="O" THEN LET I=10
2400 IF I=0 THEN GO TO 2280
2410 GO SUB 2930
2420 GO TO 2280
2430 CLS
2432 PRINT
2434 PRINT "INTEREST EXPENSE"
2440 LET ID=0
2450 FOR I=11 TO 14
2452 GO SUB 2880
2460 LET ID=ID+V(I)
2462 NEXT I
2470 PRINT "16TOTAL INTEREST ";ID
2480 GO SUB 2840
2490 IF A$="R" THEN RETURN
2500 IF A$="B" THEN LET I=11
2510 IF A$="I" THEN LET I=12
2520 IF A$="C" THEN LET I=13
2530 IF A$="O" THEN LET I=14
2540 IF I=0 THEN GO TO 2430
2550 GO SUB 2930
2560 GO TO 2430
2570 CLS
2572 PRINT
2574 PRINT "CONTRIBUTIONS"
2580 LET CO=0
2590 FOR I=15 TO 17
2592 GO SUB 2880
2600 LET CO=CO+V(I)
2602 NEXT I
2610 PRINT "20TOTAL CONTRIB. ";CO
2620 GO SUB 2840
2630 IF A$="R" THEN RETURN
2640 IF A$="C" THEN LET I=15
2650 IF A$="O" THEN LET I=16
2660 IF A$="P" THEN LET I=17
2670 IF I=0 THEN GO TO 2570
2680 GO SUB 2930
2690 GO TO 2570
2691 CLS
2692 PRINT "21 LOSSES ";LO
2693 INPUT LO
2694 RETURN
2700 CLS
2702 PRINT
2704 PRINT "MISCELLANEOUS"
2710 LET MS=0
2720 FOR I=19 TO 21
2722 GO SUB 2880
2730 LET MS=MS+V(I)
2732 NEXT I
2740 PRINT "25TOTAL MISCEL. ";MS
2750 GO SUB 2840
2760 IF A$="R" THEN RETURN
2780 IF A$="D" THEN LET I=19
2790 IF A$="T" THEN LET I=20
2800 IF A$="O" THEN LET I=21
2810 IF I=0 THEN GO TO 2700
2820 GO SUB 2930
2830 GO TO 2700
2840 PRINT
2842 PRINT " RETURN"
2850 PRINT
2852 PRINT "TYPE LETTER"
2860 IF INKEY$="" THEN GO TO 2860
2862 LET A$=INKEY$
2870 LET I=0
2872 RETURN
2880 LET L$=V$(I)( TO 4)
2890 LET M$=V$(I)(5 TO 5)
2900 LET R$=V$(I)(6 TO )
2902 LET ZZ=CODE M$
2904 LET ZZ=ZZ+128
2906 LET M$=CHR$ ZZ
2910 PRINT L$;M$;R$;" ";V(I)
2920 RETURN
2930 PRINT
2932 PRINT V$(I)
2934 INPUT V(I)
2936 RETURN
3000 CLS
3002 PRINT
3009 PRINT "ARE YOU SURE YOU ARE"
3010 PRINT "COMPLETELY FINISHED WITH PART 1"
3020 PRINT "(Y OR N)"
3030 INPUT T$
3040 IF T$="Y" THEN GO TO 3100
3050 GO TO 1360
3100 PRINT "WRITE DOWN THE FOLLOWING VALUES"
3105 PRINT
3110 PRINT "1. ";AI
3120 PRINT "2. ";DE
3140 PRINT
3150 PRINT "THEN FLIP OVER CASSETTE AND TYPE"
3155 PRINT
3160 PRINT " LOAD TAX 2 "
3165 PRINT
3170 PRINT "PART 2 WILL ASK FOR VALUES"
3180 PRINT "1-2 IN ORDER"
4000 STOP
5500 LET N=0
5505 LET E$=""
5510 LET H=H+1
5515 LET N=N+1
5520 LET G$=F$(N TO N)
5525 IF G$=":" THEN GO TO 5545
5530 IF G$=";" THEN GO TO 5565
5535 LET E$=E$+G$
5540 GO TO 5515
5545 LET V$(H)=E$
5550 LET E$=""
5555 GO TO 5510
5565 LET H=H-1
5570 RETURN
9000 CLS
9010 CLEAR
9020 SAVE "TAX 1"
9030 RUN
1 REM "TAX 2"
3 PRINT AT 11,9;"PLEASE WAIT"
4 LET B$="23:0:0:34:0:11:44:121:13:85:251:15:108:866:17:129:1257:19:150:1656:21:182:2097:24:235:2865:28:288:4349:32:341:6045:36:415:7953:40:553:10913:45:10000:17123:50:34:0:0:55:0:11:76:231:13:119:504:15:160:1149:17:202:1846:19:246:2644:23:299:3656:26:;"
6 LET C$="352:5034:30:458:6624:35:600:10334:40:856:16014:44:1094:27278:48:10000:38702:50:23:0:0:44:0:11:65:231:13:87:504:15:118:834:18:150:1392:19:182:2000:21:235:2672:25:288:3997:29:341:5534:34:447:7336:37:606:11258:44:818:18254:48:10000:28430:50:;"
10 DIM V(126)
12 LET H=0
22 LET H$="NO"
24 LET EX=1
26 LET FS=1
28 LET SD=2300
30 CLS
34 LET F$=B$
36 GO SUB 5000
38 LET F$=C$
40 GO SUB 5000
44 CLS
46 PRINT
50 PRINT "INPUT THE VALUES 1-2 FROM PART 1"
60 PRINT
70 PRINT "VALUE 1="
74 INPUT AI
76 PRINT AT 3,9;AI
80 PRINT
90 PRINT "VALUE 2="
94 INPUT DE
96 PRINT AT 5,9;DE
100 PRINT
140 PRINT "ARE THESE VALUES RIGHT (Y OR N)"
150 INPUT Q$
160 IF Q$="N" THEN GO TO 30
170 LET H=0
180 LET Q=0
190 LET TX=0
195 LET XT=0
200 LET P=0
210 LET TT=0
230 LET AT=0
240 LET C=0
250 LET OT=0
260 LET TD=0
270 LET I0=0
280 LET I1=0
290 LET I2=0
300 LET I3=0
310 LET P=0
320 LET WI=0
330 DIM R(7)
340 DIM X(8)
360 DIM W(7)
400 LET UL=0
410 LET H=1
1360 CLS
1362 PRINT
1364 PRINT "1983 INCOME TAX COMPUTATION PROG."
1366 PRINT "TYPE BLACK LETTERS"
1400 PRINT
1402 PRINT "32ADJ. INC.",AI
1404 PRINT
1406 PRINT "34DEDUCTIONS",DE
1408 PRINT
1410 PRINT "40TAX COMP.",XT
1412 PRINT
1414 PRINT "69NET REFUND",P-TT
1416 PRINT
1418 PRINT " QUIT"
1420 PRINT AT 20,0;"COPR 1983 PRACTICAL PROGRAMS INC"
1430 IF INKEY$="" THEN GO TO 1430
1432 LET A$=INKEY$
1440 IF A$="Q" THEN STOP
1456 IF A$="T" THEN GO SUB 3000
1458 IF A$="N" THEN GO SUB 3930
1460 GO TO 1360
1470 PRINT "TOTAL INC."
1472 INPUT GI
1474 PRINT AT 0,12;GI
1480 GO TO 1360
3000 CLS
3002 PRINT
3004 PRINT "TAX CALCULATION"
3010 PRINT FS;"FILING STATUS"
3020 PRINT
3022 PRINT "32ADJUST. INC.",AI
3030 LET ED=DE-SD
3032 IF ED<0 THEN LET ED=0
3040 PRINT "34DEDUCTIONS",ED
3042 PRINT "(";DE;"-";SD;")"
3050 PRINT "35",AI-ED
3060 PRINT "36EXEMPTIONS",1000*EX
3062 PRINT "(1000*";EX;")"
3070 LET NI=AI-ED-1000*EX
3080 IF NI<0 THEN LET NI=0
3090 PRINT "37TAXABLE INC.",NI
3100 LET TX=INT (TX+.5)
3110 PRINT
3112 PRINT "38TAX",TX
3120 PRINT " G:INCOME AVG. ";H$
3130 PRINT
3132 PRINT "39ADD. TAX",AT
3140 LET XT=TX+AT
3150 PRINT "40TOTAL TAX",XT
3160 PRINT
3162 PRINT " RETURN"
3170 PRINT "TYPE LETTER"
3180 IF INKEY$="" THEN GO TO 3180
3182 LET A$=INKEY$
3190 IF A$="I" THEN GO SUB 3310
3195 IF A$="R" THEN RETURN
3200 IF A$="D" THEN GO SUB 3340
3202 IF A$="E" THEN GO SUB 3410
3204 IF A$="G" THEN GO SUB 3440
3210 IF A$="T" THEN GO SUB 3690
3212 IF A$="F" THEN GO SUB 3240
3214 IF A$="A" THEN GO SUB 3230
3220 GO TO 3000
3230 PRINT "ADD. TAX"
3232 INPUT AT
3234 RETURN
3240 CLS
3242 PRINT
3246 PRINT "FILING STATUS="
3248 PRINT "1=SINGLE","2=JOINT"
3250 PRINT "3=SEPARATE, MARRIED"
3252 PRINT "4=HEAD OF HOUSEHOLD"
3254 PRINT "5=WIDOW(ER)"
3260 IF INKEY$="" THEN GO TO 3260
3262 LET FS=(CODE INKEY$)-28
3264 IF FS=0 THEN GO TO 3260
3266 IF FS>5 THEN GO TO 3260
3270 IF FS=1 THEN GO TO 3280
3272 IF FS=2 THEN GO TO 3290
3274 IF FS=3 THEN GO TO 3300
3276 IF FS=4 THEN GO TO 3280
3278 IF FS=5 THEN GO TO 3290
3280 LET SD=2300
3282 RETURN
3290 LET SD=3400
3292 RETURN
3300 LET SD=1700
3302 RETURN
3310 PRINT "ADJ. INC."
3320 INPUT AI
3330 RETURN
3340 CLS
3342 PRINT
3344 PRINT "DEDUCTIONS"
3350 INPUT DE
3355 PRINT " ";DE
3360 IF DE>SD THEN RETURN
3370 PRINT "DEDUCTION<STANDARD. WANT 34B?"
3375 PRINT "(Y OR N)"
3380 IF INKEY$="" THEN GO TO 3380
3382 LET A$=INKEY$
3390 IF A$="Y" THEN GO TO 3394
3392 GO TO 3400
3394 PRINT "AMOUNT"
3396 INPUT DE
3398 LET SD=0
3400 RETURN
3410 PRINT "NUMBER OF EXEMPTIONS"
3420 INPUT EX
3430 RETURN
3440 CLS
3442 PRINT
3446 PRINT "G:INCOME AVERAGING"
3450 LET H$="YES"
3460 PRINT "INCOME-EXEMPT.:"
3462 PRINT
3470 PRINT " 3 1979 ";I0
3480 PRINT " 6 1980 ";I1
3490 PRINT " 7 1981 ";I2
3500 PRINT " 8 1982 ";I3
3502 PRINT
3504 PRINT "1979"
3510 INPUT I0
3520 PRINT AT 4,9;I0
3528 PRINT AT 9,0;"1980"
3530 INPUT I1
3532 PRINT AT 5,9;I1
3538 PRINT AT 9,0;"1981"
3540 INPUT I2
3542 PRINT AT 6,9;I2
3548 PRINT AT 9,0;"1982"
3550 INPUT I3
3552 PRINT AT 7,9;I3
3560 LET BI=(I0+I1+I2+I3)*.3
3570 LET II=NI
3572 LET NI=BI
3574 GO SUB 3700
3580 LET TB=TX
3582 LET IA=II-BI
3590 LET NI=.2*IA+BI
3592 GO SUB 3700
3600 LET NI=II
3602 LET TX=4*(TX-TB)+TX
3610 PRINT AT 10,0;"18 AVERAGEABLE INC. ";IA
3620 IF IA>3000 THEN GO TO 3640
3630 PRINT "NO AVERAGING"
3640 PRINT "TYPE ANY KEY"
3650 IF INKEY$="" THEN GO TO 3650
3660 LET A$=""
3670 IF IA<3000 THEN GO SUB 3690
3680 RETURN
3690 PRINT AT 20,0;"TAXES BEING CALCULATED"
3692 LET H$="NO"
3700 IF FS=2 THEN LET H=42
3702 IF FS=3 THEN LET H=42
3704 IF FS=5 THEN LET H=42
3710 IF FS=4 THEN LET H=84
3712 LET TX=V(H)
3713 IF FS=1 THEN LET H=0
3720 IF H$="YES" THEN GO TO 3740
3722 IF NI>50000 THEN GO TO 3740
3724 IF NI>3000 THEN GO TO 3730
3726 LET NI=25*INT (NI/25)+12.5
3728 GO TO 3740
3730 LET NI=50*INT (NI/50)+25
3740 FOR I=1 TO 20
3750 LET LL=UL
3760 LET H=H+1
3762 LET UL=V(H)
3764 LET H=H+1
3766 LET TX=V(H)
3768 LET H=H+1
3770 LET PC=V(H)
3772 LET UL=UL*100
3780 IF FS=3 THEN GO TO 3784
3782 GO TO 3790
3784 LET UL=UL/2
3786 LET TX=TX/2
3790 IF NI<UL THEN GO TO 3810
3800 NEXT I
3810 LET TX=TX+PC/100*(NI-LL)
3820 LET H=0
3830 RETURN
3930 IF P=0 THEN LET P=WI
3940 CLS
3942 PRINT
3944 PRINT "REFUND OR OWED"
3950 PRINT
3952 PRINT "40TTOTAL TAX",XT
3960 PRINT "48CREDITS",C
3970 LET TT=XT-C
3980 PRINT "49BALANCE",TT
3990 LET TT=TT+OT
4000 PRINT " OTHER TAXES",OT
4010 PRINT "56TOT TAX",TT
4020 PRINT "64PAYMENTS",P
4030 LET TD=TT-P
4040 IF TD<0 THEN GO TO 4044
4042 GO TO 4050
4044 PRINT "68REFUND",-TD
4046 GO TO 4060
4050 PRINT "68DUE IRS",TD
4060 PRINT
4062 PRINT " RETURN"
4070 PRINT "TYPE LETTER"
4080 IF INKEY$="" THEN GO TO 4080
4082 LET A$=INKEY$
4085 IF A$="R" THEN RETURN
4090 IF A$="O" THEN GO SUB 4360
4100 IF A$="T" THEN GO TO 4104
4102 GO TO 4110
4104 PRINT "TAX"
4106 INPUT TX
4108 GO TO 3940
4110 IF A$="C" THEN GO SUB 4150
4112 IF A$="P" THEN GO SUB 4570
4120 GO TO 3940
4150 CLS
4152 PRINT
4154 PRINT "CREDITS."
4156 PRINT
4160 PRINT "41ELDERLY"
4162 INPUT R(1)
4164 PRINT AT 3,10;R(1)
4170 PRINT "42FOREIGN"
4172 INPUT R(2)
4174 PRINT AT 4,10;R(2)
4180 PRINT "43INVEST."
4182 INPUT R(3)
4184 PRINT AT 5,10;R(3)
4190 PRINT "44POLITC,"
4192 INPUT R(4)
4194 PRINT AT 6,10;R(4)
4200 PRINT "45CHILD"
4202 INPUT R(5)
4204 PRINT AT 7,10;R(5)
4210 PRINT "46JOBS"
4212 INPUT R(6)
4214 PRINT AT 8,10;R(6)
4220 PRINT "47ENERGY"
4222 INPUT R(7)
4224 PRINT AT 9,10;R(7)
4330 LET C=0
4340 FOR I=1 TO 7
4342 LET C=C+R(I)
4344 NEXT I
4350 RETURN
4360 CLS
4362 PRINT
4364 PRINT "OTHER TAXES"
4366 PRINT
4370 PRINT "51SELF EM"
4372 INPUT X(1)
4374 PRINT AT 3,10;X(1)
4390 PRINT "51ALT MIN"
4392 INPUT X(2)
4394 PRINT AT 4,10;X(2)
4400 PRINT "52INV CR."
4402 INPUT X(3)
4404 PRINT AT 5,10;X(3)
4410 PRINT "53UNR TIP"
4412 INPUT X(4)
4414 PRINT AT 6,10;X(4)
4420 PRINT "54UNC TIP"
4422 INPUT X(5)
4424 PRINT AT 7,10;X(5)
4430 PRINT "55IRA"
4432 INPUT X(6)
4434 PRINT AT 8,10;X(6)
4450 LET OT=0
4550 FOR I=1 TO 6
4552 LET OT=X(I)+OT
4554 NEXT I
4560 RETURN
4570 CLS
4572 PRINT
4574 PRINT "TYPE WITHHOLDING AND OTHER TAX PAYMENTS."
4576 PRINT
4580 IF W(1)=0 THEN LET W(1)=WI
4590 PRINT "57WITHHLD"
4592 INPUT W(1)
4594 PRINT AT 4,10;W(1)
4600 PRINT "58EST PAY"
4602 INPUT W(2)
4604 PRINT AT 5,10;W(2)
4610 PRINT "59EIC"
4612 INPUT W(3)
4614 PRINT AT 6,10;W(3)
4620 PRINT "60FM 4868"
4622 INPUT W(4)
4624 PRINT AT 7,10;W(4)
4630 PRINT "61EX FICA"
4632 INPUT W(5)
4634 PRINT AT 8,10;W(5)
4640 PRINT "62FUELS"
4642 INPUT W(6)
4644 PRINT AT 9,10;W(6)
4650 PRINT "63RIC CR"
4652 INPUT W(7)
4654 PRINT AT 10,10;W(7)
4660 LET P=0
4740 FOR I=1 TO 7
4742 LET P=W(I)+P
4744 NEXT I
4750 RETURN
5000 LET N=0
5005 LET E$=""
5010 LET H=H+1
5015 LET N=N+1
5020 LET G$=F$(N TO N)
5025 IF G$=":" THEN GO TO 5045
5030 IF G$=";" THEN GO TO 5065
5035 LET E$=E$+G$
5040 GO TO 5015
5045 LET V(H)=VAL E$
5050 LET E$=""
5055 GO TO 5010
5065 LET H=H-1
5070 RETURN
9000 CLS
9010 CLEAR
9020 SAVE "TAX 2"
9030 RUN
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.