1  REM  ****  HP BASIC PROGRAM LIBRARY  ***************************
2  REM
3  REM        QTRLEG:  CTC PAYROLL PROGRAM, PART 19 OF 34
4  REM
5  REM        36213  REV B  6/73
6  REM
7  REM ****  CONTRIBUTED PROGRAM **************************************
9  H$='29'31'13'26'30
10  DIM T[8,16],I[11],V[51],C[6],E[20],F[32]
11  DIM H$[5],A$[20],E$[22]
100  FILES E1,E2,EP1,EP2,E0,EAUX
200  READ E9,E7
210  DATA 2,17
220  N1=2*E9+1
230  MAT  READ #(N1+1),2;C
240  READ #(N1+1),5
250  MAT  READ #(N1+1);V
300  MAT T=ZER
315  P=C1=C2=0
320  PRINT "WHICH PRINTER: (1) ACCOUNTING (2) ABDICK";
330  INPUT P5
340  IF P5=1 OR P5=2 THEN 400
350  PRINT '7'7'7'7'7'7"WHAT";
360  GOTO 330
400  PRINT H$[1,2]"QUARTER#";
410  INPUT Q
420  IF INT(Q)=Q THEN 440
430  PRINT '7'7'7'7'7"INVALID DATA";
435  GOTO 400
440  IF Q<1 OR Q>4 THEN 430
450  PRINT "YEAR";
460  INPUT D3
465  IF INT(D3)=D3 THEN 480
470  PRINT '7'7'7"INVALID DATA";H$[3,5];
475  GOTO 450
480  IF D3<71 OR D3>80 THEN 470
485  GOTO Q OF 490,500,510,525
490  D1=3
495  GOTO 530
500  D1=6
505  GOTO 515
510  D1=9
515  D2=30
520  GOTO 600
525  D1=12
530  D2=31
600  P9=66
610  PRINT "BEGINNING STATE#";
615  INPUT G2
620  IF INT(G2)=G2 AND G2 >= -1 AND G2<51 THEN 640
625  PRINT '7'7"INVALID STATE#"
630  GOTO 610
640  PRINT "BEGINNING PAGE#";
645  INPUT P
650  P=P-1
655  L0=1
1000  IF  END #N1 THEN 1067
1010  READ #N1;X
1020  IF SGN(X)=-1 THEN 1032
1025  PRINT '7'7"ERROR IN STATE/DPT FILE"
1030  STOP 
1032  G1=INT(ABS(X)/100)
1033  GOTO L0 OF 1034,1037
1034  IF G2=-1 THEN 1036
1035  IF G2#G1 THEN 1040
1036  L0=2
1037  GOSUB 7000
1040  READ #N1;X
1045  IF SGN(X)=-1 THEN 1070
1050  IF X<1001 THEN 1040
1051  GOTO L0 OF 1055,1052
1052  IF P9<60 THEN 1055
1053  GOSUB 7000
1055  U6=X
1060  GOSUB 2000
1065  GOTO 1040
1067  IF L0=1 THEN 1570
1068  F1=2
1069  GOTO 1072
1070  F1=1
1071  GOTO L0 OF 1080,1072
1072  I1=1
1075  A$="STATE"
1077  GOSUB 1200
1080  GOTO F1 OF 1081,1100
1081  C1=0
1082  FOR I=1 TO 8
1084  FOR J=1 TO 8
1086  T[I,J]=0
1088  NEXT J
1089  NEXT I
1090  GOTO 1032
1100  GOSUB 7000
1120  I1=9
1125  A$="COMPANY"
1130  GOSUB 1207
1140  END 
1200  IF P9+12 <= 64 THEN 1207
1205  GOSUB 7000
1207  K=1
1208  GOSUB 9910
1210  PRINT TAB(6);A$;" TOTALS";TAB(29)"---Q U A R T E R L Y---";TAB(62);
1215  PRINT "-Y E A R  T O  D A T E-";
1216  GOSUB 6000
1220  PRINT TAB(35)"WAGE";TAB(47)"TAX";TAB(67)"WAGE        TAX";
1225  K=1
1230  GOSUB 9900
1235  FOR I=1 TO 8
1240  GOTO I OF 1245,1255,1265,1275,1285,1295,1305,1307
1245  A$="GROSS"
1250  GOTO 1310
1255  A$="FEDERAL"
1260  GOTO 1310
1265  A$="FICA"
1270  GOTO 1310
1275  A$="ST DISABILITY"
1280  GOTO 1310
1285  A$="FUTA"
1290  GOTO 1310
1295  A$="STATE TAX"
1300  GOTO 1310
1305  A$="CITY TAX"
1306  GOTO 1310
1307  A$="ST UNEMPLOYMENT"
1310  PRINT TAB(8);A$;TAB(30);
1320  FOR J=I1 TO I1+6 STEP 2
1322  IF T[I,J] OR T[I,J+1] THEN 1330
1324  K=12
1326  GOSUB 9950
1328  GOTO 1380
1330  Z$="#######."
1340  X$=" "
1345  Z[1]=T[I,J]
1350  GOSUB 9000
1355  Z$="##  "
1360  X$="0"
1365  Z[1]=T[I,J+1]
1370  GOSUB 9000
1380  IF J#I1+2 THEN 1400
1390  K=8
1395  GOSUB 9950
1400  NEXT J
1407  GOSUB 6000
1410  NEXT I
1420  PRINT TAB(8)"NO. OF EMPLOYEES";TAB(37);
1430  Z$="###"
1435  X$=" "
1440  IF I1=9 THEN 1455
1445  Z[1]=C1
1450  GOTO 1465
1455  Z[1]=C2
1465  GOSUB 9000
1475  GOSUB 6000
1477  P9=P9+13
1480  RETURN 
1570  PRINT '7'7"STATE# NOT ON ST/DPT FILE"
1575  STOP 
2000  GOSUB 4000
2010  IF  NOT B1 THEN 2045
2015  PRINT U6;"INVALID EMP#"
2020  K=3
2030  GOSUB 9910
2040  GOTO 2280
2045  GOSUB 4085
2050  IF  NOT B1 THEN 2015
2052  GOTO L0 OF 2160,2055
2055  X$=" "
2060  Z[1]=U6
2065  Z$="####    "
2070  PRINT TAB(11);
2075  GOSUB 9000
2080  PRINT E$;TAB(50);
2085  Z$="###-##-####          "
2087  X$="0"
2090  Z[1]=S5
2095  Z[2]=S6
2100  Z[3]=S7
2105  GOSUB 9000
2125  X$=" "
2130  Z$="##"
2135  Z[1]=S2
2140  GOSUB 9000
2145  GOSUB 6000
2160  A$="QTD "
2165  L=0
2170  GOSUB 3000
2175  FOR X=4 TO 8 STEP 2
2177  IF X=6 AND G1#4 THEN 2190
2180  X1=C[X-3]
2185  GOSUB 3100
2190  NEXT X
2192  X=11
2195  X1=V[G1+1]
2200  GOSUB 3100
2210  GOSUB 2400
2220  A$="YTD "
2225  L=10
2230  GOSUB 3000
2235  FOR X=4 TO 8 STEP 2
2237  IF X=6 AND G1#4 THEN 2255
2240  I[X]=F[31]
2245  IF F[31] <= C[X-3] THEN 2255
2250  I[X]=C[X-3]
2255  NEXT X
2260  I[11]=F[31]
2265  IF F[31] <= V[G1+1] THEN 2275
2270  I[11]=V[G1+1]
2275  GOSUB 2400
2276  C1=C1+1
2277  C2=C2+1
2278  GOTO L0 OF 2285,2279
2279  K=1
2280  GOSUB 9910
2285  P9=P9+4
2295  RETURN 
2400  GOTO L0 OF 2465,2402
2402  PRINT A$;
2403  FOR I=1 TO 11
2405  IF I[I] THEN 2410
2406  F1=1
2407  K=11
2408  GOSUB 9950
2409  GOTO 2412
2410  PRINT "   ";
2411  F1=0
2412  IF I=1 OR I=3 OR I=5 OR I=7 THEN 2417
2414  PRINT " ";
2417  IF F1 THEN 2460
2420  X$=" "
2422  Z$="#####."
2424  GOSUB 3400
2426  Z[1]=T6
2428  GOSUB 9000
2430  X$="0"
2435  Z$="##"
2443  Z[1]=T7
2445  GOSUB 9000
2460  NEXT I
2464  GOSUB 6000
2465  IF L=10 THEN 2480
2470  L1=1
2475  GOTO 2485
2480  L1=5
2485  X=L1
2487  J=X3=1
2490  GOSUB 3200
2495  FOR J=2 TO 4
2500  FOR K=0 TO 2 STEP 2
2505  X=L1+K
2507  X3=X3+1
2510  GOSUB 3200
2515  NEXT K
2520  NEXT J
2525  FOR J=5 TO 8
2530  GOTO J-4 OF 2535,2545,2545,2535
2535  X=L1
2540  GOTO 2550
2545  X=L1+2
2550  X3=J+3
2555  GOSUB 3200
2560  NEXT J
2580  RETURN 
3000  MAT I=ZER
3010  I[1]=I[2]=F[21+L]
3020  I[3]=F[14+L]
3030  I[5]=F[13+L]
3040  I[7]=F[16+L]
3050  I[9]=F[15+L]
3055  I[10]=F[17+L]
3060  RETURN 
3100  IF Q#1 THEN 3130
3105  I[X]=F[21]
3110  IF F[21] <= X1 THEN 3120
3115  I[X]=X1
3120  RETURN 
3130  Y=F[31]-F[21]
3135  IF Y>X1 THEN 3155
3140  I[X]=F[21]
3145  IF F[31] <= X1 THEN 3155
3150  I[X]=I[X]-(F[31]-X1)
3155  RETURN 
3200  X1=I[X3]*100
3210  FOR I=0 TO 8 STEP 8
3215  T[J,X+I]=T[J,X+I]+INT(X1/100)
3220  J1=X+I+1
3222  T[J,J1]=T[J,J1]+X1-INT(X1/100)*100
3225  IF T[J,J1]<100 THEN 3245
3235  T[J,X+I]=T[J,X+I]+1
3240  T[J,J1]=T[J,J1]-100
3245  REM
3260  NEXT I
3265  RETURN 
3400  T5=I[I]*100
3410  T6=INT(T5/100)
3420  T7=T5-INT(T5/100)*100
3430  RETURN 
4000  B1=0
4010  R=U6-1000
4025  FOR I=1 TO E9
4030  IF R <= I*200 THEN 4050
4035  NEXT I
4040  B1=1
4045  RETURN 
4050  N=I
4055  R1=R-(I-1)*200
4060  RETURN 
4085  B1=0
4090  READ #N,R1;E$
4095  FOR I=1 TO E7
4100  READ #N;E[I]
4103  NEXT I
4105  IF E[1]=-1 THEN 4175
4120  B1=1
4130  X=INT(E[1]/10^4)
4135  S2=INT((E[1]-X*10^4)/100)
4140  X=INT(E[2]/1000)
4145  S5=E[2]-X*1000
4150  S6=INT(E[3]/10^4)
4155  S7=E[3]-S6*10^4
4173  MAT  READ #(N+E9),R1;F
4175  RETURN 
6000  GOTO P5 OF 6010,6030
6010  PRINT '13;
6020  RETURN 
6030  PRINT 
6040  RETURN 
7000  GOTO P5 OF 7010,7025
7010  PRINT " ";
7015  PRINT '18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18;
7020  GOTO 7040
7025  K=66-P9
7030  GOSUB 9910
7040  GOSUB 8000
7050  RETURN 
8000  K=2
8010  GOSUB 9910
8015  P=P+1
8020  PRINT TAB(9)"STATE:";G1;TAB(23)"PAGE:";P;TAB(40);
8025  PRINT "Q U A R T E R L Y  P A Y R O L L  T A X  L E D G E R        ";
8030  PRINT "QUARTER: ";
8035  X$=" "
8036  Z$="#"
8037  Z[1]=Q
8038  GOSUB 9000
8039  PRINT "     DATE: ";
8040  Z$="##/##/##"
8045  Z[1]=D1
8050  Z[2]=D2
8055  Z[3]=D3
8060  GOSUB 9000
8070  K=1
8075  GOSUB 9900
8080  GOSUB 8200
8085  PRINT TAB(11)"EMP#    EMPLOYEE NAME";TAB(50)"SOC.SECURITY";
8086  PRINT "        DEPT";
8090  GOSUB 6000
8095  GOSUB 8200
8100  PRINT TAB(6)"G R O S S    ---F E D E R A L---    ------F I C A------";
8105  PRINT "    -ST  D I S A B I L-   -F U T A-  -S T A T E-  ";
8107  PRINT "-C I T Y- -U N E M P-";
8110  GOSUB 6000
8120  PRINT TAB(7)"EARNINGS       WAGE      TAX";TAB(45)"WAGE      TAX";
8125  PRINT TAB(67)"WAGE        TAX        WAGE        TAX         ";
8127  PRINT "TAX     STATE WAGE";
8130  GOSUB 6000
8135  GOSUB 8200
8140  K=2
8145  GOSUB 9910
8150  P9=12
8160  RETURN 
8200  FOR I=1 TO 132
8205  PRINT "-";
8210  NEXT I
8220  GOSUB 6000
8225  RETURN 
9000  REM
9003  LET Z2=Z3=Z4=Z5=Z7=Z8=Z9=1
9004  DIM Y$[10],Z$[72]
9005  LET Y$="0123456789"
9006  LET Z0=Z9-1
9007  LET Z0=Z0+1
9008  IF Z0=LEN(Z$)+1 THEN 9059
9009  IF Z$[Z0,Z0]="#" THEN 9016
9010  IF Z$[Z0,Z0+1]=".#" THEN 9016
9011  IF Z$[Z0,Z0+1]="+#" THEN 9014
9012  PRINT Z$[Z0,Z0];
9013  GOTO 9007
9014  LET Z4=0
9015  GOTO 9007
9016  LET Z=100
9017  LET Z6=Z[Z2]
9018  LET Z9=Z0-1
9019  LET Z9=Z9+1
9020  IF Z$[Z9,Z9]="." THEN 9023
9021  IF Z$[Z9,Z9]="#" THEN 9019
9022  GOTO 9027
9023  IF Z5#1 THEN 9027
9024  LET Z5=0
9025  LET Z=Z9
9026  GOTO 9019
9027  IF Z#100 THEN 9029
9028  LET Z=Z9
9029  IF Z4=1 THEN 9034
9030  IF Z6 >= 0 THEN 9033
9031  PRINT "-";
9032  GOTO 9034
9033  PRINT " ";
9034  LET Z6=ABS(Z6)+10^(Z-Z9-1)
9035  FOR Z1=Z-Z0 TO Z+1-Z9 STEP -1
9036  IF Z$[Z-Z1,Z-Z1]#"." THEN 9041
9037  PRINT ".";
9038  LET Z3=0
9039  LET Z7=2
9040  GOTO 9055
9041  LET Z8=INT(Z6/(10^(Z1+Z7-2)))
9042  IF Z6<10^(Z-Z0) THEN 9045
9043  PRINT "#";
9044  GOTO 9055
9045  LET Z6=Z6-Z8*10^(Z1+Z7-2)
9046  IF Y$[Z8+1,Z8+1]="0" THEN 9048
9047  LET Z3=0
9048  IF Z3=0 THEN 9054
9049  IF Z1#1 THEN 9052
9050  PRINT "0";
9051  GOTO 9055
9052  PRINT X$;
9053  GOTO 9055
9054  PRINT Y$[Z8+1,Z8+1];
9055  NEXT Z1
9056  LET Z3=Z4=Z5=Z7=1
9057  LET Z2=Z2+1
9058  GOTO 9006
9059  RETURN 
9900  GOSUB 6000
9910  FOR K5=1 TO K
9915  PRINT "         ";
9920  GOSUB 6000
9930  NEXT K5
9940  RETURN 
9950  FOR K5=1 TO K
9960  PRINT " ";
9970  NEXT K5
9980  RETURN 
9999  END 
