1010 REM ...... THIS IS FILE "IRS.BAS"
1020
1030 REM  ******************************
1040 REM  **  COMPUTATION OF IRS TAX  **
1050 REM  ******************************
1060
2000 REM ...... DRIVER FOR TESTING SUBROUTINE IRS TAX
2005 PRINT
2010 INPUT "ENTER MARITAL STATUS (S,MJ,MS,H) : "; STATUS$
2015 IF(STATUS$="E") THEN GO TO 29000
2020 INPUT "ENTER 1977 ADJUSTED GROSS INCOME : "; INCOME
2030 INPUT "ENTER NUMBER OF EXEMPTIONS       : "; EXEMPTIONS
2090
2500 REM ...... STANDARD DEDUCTION DETERMINATION
2510 IF(STATUS$="S" ) THEN STDED=2200
2520 IF(STATUS$="MS") THEN STDED=1600
2530 IF(STATUS$="MJ") THEN STDED=3200
2540 IF(STATUS$="H" ) THEN STDED=2200
2571
2572     INPUT "ENTER INCREMENT & LAST INCOME AMOUNT : "; INCREMENT, INCOMELAST
2573     INCOME0=INCOME
2574     FOR INCOME= INCOME0 TO INCOMELAST   STEP INCREMENT
2575
2590
2600 REM ...... TAX COMPUTATION
2610 TAXABLE=INCOME-STDED-750*EXEMPTIONS
2650 GOSUB 10000   ! IRS TAX
2660 GTC = 180  MIN  TAXABLE*0.02  MAX  35*EXEMPTIONS
2665 IF(STATUS$="MS") THEN GTC=35
2670 TAX=TAX-GTC  MAX  0
2690
2800 REM ...... OUTPUT
2810 PRINT USING "INCOME =#######.##      TAX =#######.##", INCOME, TAX
2871
2872     NEXT INCOME
2873
2890
2900 REM ...... REPEAT
2910 GO TO 2000
2970
2980
2990
10000 REM ...... SUB : IRS TAX
10010 REM   INPUT  : STATUS$ = "S" , "MJ" , "MS" , "H"
10020 REM            TAXABLE = TAXABLE INCOME
10030 REM   OUTPUT : TAX     = TAX FROM IRS SCHEDULES X,Y,Z
10090
10100 REM ...... READ IN TAX RATE SCHEDULES
10105 IF(FLAG <> 0) THEN GO TO 10400
10110 FLAG=1
10115 DIM BRACKET(40),SCHEDULE(3,40)
10120 FOR I=1 TO 37
10130   READ BRACKET(I),SCHEDULE(1,I),SCHEDULE(2,I),SCHEDULE(3,I)
10140 NEXT I
10190
10200 REM ...... TAX SCHEDULE DATA
10202
10205 REM      BRK  X  Y  Z     BRK  X  Y  Z     BRK  X  Y  Z     BRK  X  Y  Z
10206 REM      ------------     ------------     ------------     ------------
10210 DATA       0 14 14 14      .5 15 15 14       1 16 16 16     1.5 17 17 16
10220 DATA       2 19 19 18       4 21 22 19       6 24 25 22       8 25 28 23
10230 DATA      10 27 32 25      12 29 36 27      14 31 39 28      16 34 42 31
10240 DATA      18 36 45 32      20 38 48 35      22 40 50 36      24 40 50 38
10250 DATA      26 45 53 41      28 45 53 42      32 50 55 45      36 50 55 48
10260 DATA      38 55 58 51      40 55 58 52      44 60 60 55      50 62 62 56
10270 DATA      52 62 62 58      60 64 64 58      64 64 64 59      70 66 66 61
10280 DATA      76 66 66 62      80 68 68 63      88 68 68 64      90 69 69 64
10290 DATA     100 70 70 66     120 70 70 67     140 70 70 68     160 70 70 69
10300 DATA     180 70 70 70
10310
10400 REM ...... SET UP TAX COMPUTATION LOOP
10410 IF(STATUS$="S" ) THEN I=1
10420 IF(STATUS$="MJ") THEN I=2  :  TAXABLE=TAXABLE/2
10430 IF(STATUS$="MS") THEN I=2
10440 IF(STATUS$="H" ) THEN I=3
10460 J=1
10470 TAX=0
10490
10500 REM ...... TAX COMPUTATION LOOP
10510 J=J+1
10520 IF(J=38) THEN GO TO 10600
10530 IF(TAXABLE < BRACKET(J)*1000) THEN GO TO 10600
10540 IF(J > 1) THEN TAX=TAX+(BRACKET(J)-BRACKET(J-1))*1000*SCHEDULE(I,J-1)/100
10550 GO TO 10500
10590
10600 REM ...... FINISH UP TAX COMPUTATION
10610 TAX=TAX+(TAXABLE-BRACKET(J-1)*1000)*SCHEDULE(I,J-1)/100
10680 IF(STATUS$="MJ") THEN TAXABLE=TAXABLE+TAXABLE  :  TAX=TAX+TAX
10690
10900 REM ...... END
10910 RETURN
10970
10980
10990
29000 REM ...... END
29010 END