1  REM  ****  HP BASIC PROGRAM LIBRARY  ******************************
3  REM        941A:  CTC PAYROLL PROGRAM, PART 20 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[12,2],V[51],C[6],E[20],F[32],U[3]
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
310  MAT U=ZER
315  P=T=T1=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  REM
620  PRINT "BEGINNING STATE#";
625  INPUT G2
630  IF INT(G2)=G2 AND G2 >= -1 AND G2<51 THEN 650
635  PRINT "INVALID STATE#"
640  GOTO 620
650  PRINT "BEGINNING PAGE#";
652  INPUT P
655  P=P-1
660  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'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18;
665  GOSUB 8000
670  L0=1
1000  IF  END #N1 THEN 1067
1010  READ #N1;G
1020  IF SGN(G)=-1 THEN 1032
1025  PRINT '7'7"ERROR IN STATE/DPT FILE"
1030  STOP 
1032  REM
1035  G1=INT(ABS(G)/100)
1036  GOTO L0 OF 1037,1040
1037  IF G2=-1 THEN 1039
1038  IF G2#G1 THEN 1040
1039  L0=2
1040  READ #N1;G
1045  IF SGN(G)=-1 THEN 1070
1050  IF G<1001 THEN 1040
1055  U6=G
1060  GOSUB 2000
1065  GOTO 1040
1067  IF L0=1 THEN 1500
1068  F1=2
1069  GOTO 1073
1070  IF U[1]=0 THEN 1035
1071  GOTO L0 OF 1086,1072
1072  F1=1
1073  GOSUB 7000
1075  A$="STATE"
1076  J1=1
1078  J2=7
1079  F2=2
1080  GOSUB 1200
1082  GOSUB 7000
1085  GOTO F1 OF 1090,1140
1086  U[1]=T=T1=0
1090  U[2]=0
1100  FOR I=1 TO 7
1110  FOR J=1 TO 2
1120  T[I,J]=0
1125  NEXT J
1130  NEXT I
1135  GOTO 1035
1140  A$="COMPANY"
1146  J1=8
1147  J2=12
1148  F2=3
1150  GOSUB 1200
1155  END 
1200  PRINT TAB(24);A$;" TOTALS";
1201  K=1
1202  GOSUB 9900
1203  P9=P9+2
1204  FOR I=J1 TO J2
1205  IF T[I,1]=0 AND T[I,2]=0 THEN 1335
1207  P9=P9+1
1210  GOTO I OF 1230,1240,1250,1260,1270,1280,1290
1220  GOTO I-7 OF 1230,1250,1270,1280,1290
1230  X=C[1]
1235  GOTO 1305
1240  X=C[3]
1245  GOTO 1305
1250  X=C[5]
1255  GOTO 1305
1260  X=V[G1+1]
1265  GOTO 1305
1270  A$="TOTAL GROSS"
1275  GOTO 1295
1280  A$="FICA TAX"
1285  GOTO 1295
1290  A$="FED. WITHHOLDING TAX"
1295  PRINT TAB(24);A$;
1300  GOTO 1310
1305  PRINT TAB(24)"WAGES TO";X;
1310  X=T[I,1]
1320  X1=T[I,2]
1330  GOSUB 3300
1335  NEXT I
1340  PRINT TAB(24)"NO. OF EMPLOYEES";TAB(69);
1345  X$=" "
1350  Z$="###"
1355  Z[1]=U[F2]
1360  GOSUB 9000
1365  GOSUB 6000
1370  P9=P9+1
1375  RETURN 
1500  PRINT '7'7'7"STATE# NOT ON ST/DPT FILE"
1510  STOP 
2000  GOSUB 4000
2010  IF  NOT B1 THEN 2045
2015  PRINT U6;"INVALID EMP#"
2020  GOSUB 2315
2025  RETURN 
2045  GOSUB 4085
2050  IF  NOT B1 THEN 2015
2051  IF F[21]=0 THEN 2250
2052  GOTO L0 OF 2070,2053
2053  Z$="###-##-####    "
2054  X$="0"
2056  Z[1]=S5
2058  Z[2]=S6
2060  Z[3]=S7
2061  PRINT TAB(9);
2062  GOSUB 9000
2064  PRINT E$",";U6;
2070  MAT W=ZER
2072  X1=C[1]
2075  GOSUB 3100
2080  W[1]=W
2083  GOSUB 2300
2085  IF G1#4 THEN 2110
2090  X1=C[3]
2095  GOSUB 3100
2100  W[2]=W
2110  X1=C[5]
2115  GOSUB 3100
2117  W[3]=W
2120  X1=V[G1+1]
2125  GOSUB 3100
2150  W[4]=W
2160  FOR J=1 TO 4
2165  X1=W[J]
2170  GOSUB 2400
2180  NEXT J
2190  J=5
2195  X1=F[21]
2200  GOSUB 2400
2210  FOR J=6 TO 7
2215  X1=F[13+J-6]
2220  GOSUB 2400
2225  NEXT J
2230  FOR I=1 TO 3
2235  U[I]=U[I]+1
2240  NEXT I
2250  RETURN 
2300  REM
2310  IF W[1] THEN 2350
2312  GOTO L0 OF 2340,2315
2315  GOSUB 6000
2320  K=1
2325  GOSUB 9910
2330  P9=P9+2
2335  IF P9<58 THEN 2340
2337  GOSUB 7000
2340  RETURN 
2350  X=W[1]*100
2351  Y=T+INT(X/100)
2352  Y1=T1+X-INT(X/100)*100
2354  GOSUB 3200
2356  T=Y
2358  T1=Y1
2359  GOTO L0 OF 2340,2360
2360  X=W[1]*100
2361  Y=INT(X/100)
2362  Y1=X-INT(X/100)*100
2364  GOSUB 3200
2366  X=Y
2368  X1=Y1
2370  GOSUB 3300
2380  GOTO 2320
2400  X=X1*100
2401  W=INT(X/100)
2402  W1=X-INT(X/100)*100
2405  Y=T[J,1]+W
2410  Y1=T[J,2]+W1
2412  GOSUB 3200
2415  T[J,1]=Y
2417  T[J,2]=Y1
2420  GOTO J OF 2425,2470,2430,2470
2422  I=5
2423  GOTO 2445
2425  I=7
2428  GOTO 2445
2430  I=6
2445  Y=T[J+I,1]+W
2450  Y1=T[J+I,2]+W1
2455  GOSUB 3200
2460  T[J+I,1]=Y
2465  T[J+I,2]=Y1
2470  RETURN 
3100  W=0
3102  IF Q#1 THEN 3130
3105  W=F[21]
3110  IF F[21] <= X1 THEN 3120
3115  W=X1
3120  RETURN 
3130  Y=F[31]-F[21]
3135  IF Y>X1 THEN 3155
3140  W=F[21]
3145  IF F[31] <= X1 THEN 3155
3150  W=W-(F[31]-X1)
3155  RETURN 
3200  IF Y1<100 THEN 3230
3210  Y=Y+1
3220  Y1=Y1-100
3230  REM
3290  RETURN 
3300  PRINT TAB(62);
3302  Z$="#######."
3305  X$=" "
3310  Z[1]=X
3320  GOSUB 9000
3330  Z$="##"
3340  X$="0"
3350  Z[1]=X1
3360  GOSUB 9000
3370  GOSUB 6000
3380  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[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  K=61-P9
7010  GOSUB 9910
7020  PRINT TAB(22);G1;
7030  IF U[1]=0 THEN 7080
7040  PRINT TAB(46);U[1];
7050  X=T
7060  X1=T1
7065  GOSUB 3300
7070  GOTO 7090
7080  PRINT 
7090  GOTO P5 OF 7095,7110
7095  PRINT " ";
7100  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'18;
7105  GOTO 7130
7110  K=4
7120  GOSUB 9910
7130  U[1]=T=T1=0
7135  GOSUB 8000
7140  RETURN 
8000  K=5
8010  GOSUB 9910
8020  PRINT TAB(9)"74-1605174";TAB(35)"272,873"TAB(59);
8025  X$=" "
8030  Z$="##/##/##"
8040  Z[1]=D1
8050  Z[2]=D2
8055  Z[3]=D3
8060  GOSUB 9000
8065  P=P+1
8070  PRINT TAB(71)"     ";
8071  Z$="###"
8072  Z[1]=P
8073  GOSUB 9000
8075  K=1
8080  GOSUB 9900
8085  PRINT TAB(9)"COMPUTER TERMINAL";
8095  GOSUB 6000
8100  PRINT TAB(9)"9725 DATA POINT DRIVE";
8105  GOSUB 6000
8110  PRINT TAB(9)"SAN ANTONIO, TEXAS   78284";
8120  K=6
8130  GOSUB 9900
8140  P9=16
8150  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 
