1  REM  ****  HP BASIC PROGRAM LIBRARY  ******************************
2  REM
3  REM        C/APRF:  CTC PAYROLL PROGRAM, PART 12 OF 34
4  REM
5  REM        36213  REV B  6/73
6  REM
7  REM  ****  CONTRIBUTED PROGRAM  ***********************************
8  REM
10  DIM E$[22],A$[25],B$[20],D$[10]
11  DIM E[17],F[32],T[30],I[16],J[16],K[16],C[12],P[7,6]
12  DIM S[15],U[20,2]
50  MAT T=ZER
100  FILES E1,E2,EP1,EP2,EAUX,AJ,ETRAN
155  P5=2
200  READ E9,E7
210  DATA 2,17
220  N1=2*E9+1
230  GOSUB 9200
300  MAT  READ #N1,2;C
310  MAT  READ #N1;P
400  PRINT "ENTER TODAY'S DATE";
410  INPUT D1
415  D2=INT(D1/10^4)
420  IF D2>0 AND D2<13 THEN 450
435  PRINT "INVALID DATA"
437  GOTO 400
450  D3=INT((D1-D2*10^4)/100)
455  IF D3<1 OR D3>31 THEN 435
460  D4=D1-D2*10^4-D3*100
465  IF D4<72 OR D4>99 THEN 435
500  PRINT "COM OR ADJ PROOF (C/A)";
510  INPUT A$
520  IF A$[1,1]="C" THEN 1000
530  IF A$[1,1]="A" THEN 2025
540  PRINT '7"WHAT";
550  GOTO 510
1000  I7=0
1003  PRINT "ENTER EXTRA W/H"
1005  PRINT "EMP#";
1010  INPUT Z
1015  IF Z=0 THEN 1060
1020  I7=I7+1
1022  IF I7<21 THEN 1030
1024  PRINT '7'7'7"LIMIT OF 20 EMPLOYEES"
1026  STOP 
1030  U[I7,1]=Z
1035  PRINT "EXTRA W/H";
1040  INPUT U[I7,2]
1045  PRINT 
1050  GOTO 1005
1060  PRINT "ABOVE CORRECT";
1065  INPUT A$
1070  IF A$[1,1]#"Y" THEN 1000
2000  X0=2
2003  A$="C O M M I S S I O N S"
2005  B$="COMMIS"
2010  PRINT "BEGINNING CHECK#";
2015  INPUT C5
2020  GOTO 2030
2025  A$="A D J U S T M E N T S"
2027  B$=" GROSS"
2029  X0=1
2030  PRINT " ";
2031  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'18'18'18'18'18'18'18'18'18'18'18;
2032  K=4
2034  GOSUB 9910
2035  PRINT TAB(42)"P A Y R O L L  ";A$;"  P R O O F";
2038  K=1
2040  GOSUB 9900
2042  K=62
2043  GOSUB 9100
2044  P8=7
2046  GOSUB 8100
2048  I3=0
2050  I3=I3+1
2051  IF  END #(N1+1) THEN 2200
2052  MAT  READ #(N1+1),I3;J
2053  F1=1
2054  IF  END #(N1+1) THEN 2060
2056  MAT  READ #(N1+1);K
2058  F1=2
2060  MAT I=J
2061  F2=1
2062  GOSUB 2070
2064  IF F1=1 THEN 2200
2065  MAT I=K
2066  F2=2
2067  GOSUB 2070
2068  GOTO 2050
2070  IF I[13]#X0 THEN 2160
2072  U6=I[1]
2074  GOSUB 4000
2076  GOSUB 4085
2077  GOTO X0 OF 2078,3000
2078  GOSUB 2700
2080  L1=2
2090  FOR I1=2 TO 11
2092  Z$="+#####."
2095  IF I1<5 THEN 2105
2100  Z$="+####."
2105  X=I[I1]
2110  GOSUB 2600
2115  Z[1]=X1*S
2116  IF X1#0 OR X2=0 OR S=1 THEN 2120
2117  Z$=Z$[2]
2118  PRINT "-";
2120  X$=" "
2125  GOSUB 9000
2130  Z[1]=X2
2131  Z$="## "
2132  X$="0"
2133  GOSUB 9000
2134  NEXT I1
2135  Z$="#####"
2137  X$=" "
2140  Z[1]=I[12]
2145  T[22]=T[22]+I[12]
2147  GOSUB 9000
2150  REM
2152  K=1
2154  GOSUB 9900
2156  P9=P9+2
2158  GOSUB 8200
2160  RETURN 
2200  PRINT "TOT ";
2205  Z$="######"
2210  Z[1]=T[1]
2215  GOSUB 9000
2220  PRINT TAB(34);
2225  FOR I1=2 TO 20 STEP 2
2226  X$=" "
2227  Z$="+#####."
2228  IF I1<8 THEN 2230
2229  Z$="+####."
2230  Z[1]=T[I1]
2235  GOSUB 9000
2240  Z$="## "
2245  X$="0"
2250  Z[1]=T[I1+1]
2255  GOSUB 9000
2260  NEXT I1
2270  X$=" "
2275  Z$="#####"
2280  IF T[22]<10^5 THEN 2325
2295  Z$="######"
2325  Z[1]=T[22]
2330  GOSUB 9000
2335  REM
2340  K=1
2345  GOSUB 9900
2350  PRINT "ADD THESE ";A$;" TO THE QTD AND YTD TOTALS";
2355  INPUT B$
2357  GOSUB 6000
2360  IF B$[1,1]#"Y" THEN 9999
2362  PRINT "W A I T !"'13;
2365  READ #(N1+1),1
2370  IF  END #(N1+1) THEN 2440
2375  MAT  READ #(N1+1);I
2380  IF I[13]#X0 THEN 2375
2382  U6=I[1]
2385  GOSUB 4000
2390  GOSUB 4085
2395  FOR I=3 TO 10
2400  F[I+10]=F[I+10]+I[I]
2405  F[I+20]=F[I+20]+I[I]
2410  NEXT I
2415  F[21]=F[21]+I[2]
2420  F[31]=F[31]+I[2]
2425  MAT  PRINT #(N+E9),R1;F
2430  GOTO 2375
2440  E$=""
2445  T1=7
2450  D$=A$[1,1]
2455  T2=T3=T4=T5=T6=T7=U6=0
2460  PRINT #(N1+2);E$[1,22],U6,T1,D$,T2,T3,T4,T5,T6,D1,T7
2462  PRINT #(N1+2); END 
2465  END 
2600  S=SGN(X)
2602  X=ABS(X)*100
2605  X1=INT(X/100)
2607  X2=X-X1*100
2610  T[L1]=T[L1]+X1*S
2615  T[L1+1]=T[L1+1]+X2*S
2620  IF T[L1+1]>-100 THEN 2635
2625  T[L1]=T[L1]-1
2630  T[L1+1]=T[L1+1]+100
2635  IF T[L1+1]>99 THEN 2660
2640  IF SGN(T[L1])*SGN(T[L1+1]) >= 0 THEN 2680
2645  T[L1]=T[L1]-SGN(T[L1])
2650  T[L1+1]=T[L1+1]-100*SGN(T[L1+1])
2655  GOTO 2680
2660  T[L1]=T[L1]+INT(T[L1+1]*.01)
2665  T[L1+1]=(T[L1+1]*.01-INT(T[L1+1]*.01))*100
2670  IF T[L1+1]-INT(T[L1+1])<.9 THEN 2680
2675  T[L1+1]=INT(T[L1+1])+1
2680  L1=L1+2
2690  RETURN 
2700  PRINT TAB(6);
2710  X$=" "
2715  Z$="#### "
2720  Z[1]=U6
2725  T[1]=T[1]+U6
2730  GOSUB 9000
2735  PRINT E$;TAB(34);
2740  RETURN 
3000  H1=I[2]
3002  H4=0
3004  IF L8 THEN 3025
3010  I=1
3020  GOSUB 7000
3025  I[3]=H4
3030  I=11
3040  GOSUB 7200
3045  I[4]=W
3046  FOR I=1 TO I7
3047  IF U6#U[I,1] THEN 3049
3048  I[4]=I[4]+U[I,2]
3049  NEXT I
3050  IF S[4]#4 THEN 3067
3055  I=3
3060  GOSUB 7000
3065  I[6]=H4
3067  GOSUB 3200
3070  GOTO F2 OF 3075,3085
3075  MAT J=I
3080  GOTO 3090
3085  MAT K=I
3090  MAT  PRINT #(N1+1),I3;J
3095  IF F1=1 THEN 3110
3100  MAT  PRINT #(N1+1);K
3105  GOTO 2078
3110  PRINT #(N1+1); END 
3115  GOTO 2078
3200  I[11]=I[2]
3205  FOR I=3 TO 10
3210  X=I[I]*100
3220  X1=INT(X)
3230  IF X-X1<.5 THEN 3245
3240  X1=X1+1
3245  I[I]=X1*.01
3247  I[11]=I[11]-I[I]
3250  NEXT I
3252  I[12]=C5
3253  C5=C5+1
3255  RETURN 
4000  B1=0
4010  IF U6<1001 THEN 4070
4015  R=U6-1000
4020  FOR I=1 TO E9
4025  IF R <= I*200 THEN 4080
4030  NEXT I
4035  PRINT "EMP#>FILE LIMIT";
4040  GOSUB 6000
4070  B1=1
4075  RETURN 
4080  N=I
4081  R1=R-(I-1)*200
4082  RETURN 
4085  B1=0
4090  READ #N,R1;E$
4095  MAT  READ #N;E
4100  IF E[1]=-1 THEN 4180
4110  B1=1
4112  S[1]=INT(E[1]/10^4)
4114  S[2]=INT((E[1]-S[1]*10^4)/100)
4116  S[3]=E[1]-S[1]*10^4-S[2]*100
4120  S[4]=INT(E[2]/1000)
4125  X1=5
4130  FOR I=8 TO 13
4135  X=0
4140  X2=5
4145  FOR J=1 TO (I-8)
4150  X=X+S[J+7]*10^X2
4155  X2=X2-1
4157  NEXT J
4160  S[I]=INT((E[4]-X)/10^X1)
4165  X1=X1-1
4170  NEXT I
4172  L7=INT(E[17]/10)
4173  L8=E[17]-L7*10
4175  MAT  READ #(N+E9),R1;F
4180  RETURN 
6000  GOTO P5 OF 6010,6030
6010  PRINT '13;
6020  RETURN 
6030  PRINT 
6040  RETURN 
7000  H4=0
7010  IF F[31] >= C[I] THEN 7065
7012  H7=H1
7015  H5=F[31]+H1
7020  IF H5 <= C[I] THEN 7030
7025  H7=H7-(H5-C[I])
7030  H4=H7*C[I+1]
7032  IF H4=0 THEN 7065
7034  X=H4*100
7036  H4=INT(X)
7038  IF X-H4<.5 THEN 7041
7040  H4=H4+1
7041  H4=H4*.01
7042  IF H5<C[I] THEN 7065
7044  IF I#1 THEN 7050
7046  X=F[23]
7048  GOTO 7052
7050  X=F[26]
7052  X=X+H4
7054  X1=C[I]*C[I+1]
7056  IF X=X1 THEN 7065
7058  H4=H4+(X1-X)
7060  IF SGN(H4)>-1 THEN 7065
7062  H4=0
7065  RETURN 
7200  E4=H1-S[3]*C[I]
7210  IF S[9] THEN 7225
7215  I2=4
7220  GOTO 7230
7225  I2=1
7230  W=0
7235  IF E4 <= P[1,I2] THEN 7260
7240  FOR I1=1 TO 6
7245  IF P[I1,I2]<E4 AND E4 <= P[I1+1,I2] THEN 7255
7250  NEXT I1
7255  W=P[I1,I2+1]+P[I1,I2+2]*(E4-P[I1,I2])
7260  RETURN 
8100  K=4
8110  GOSUB 9910
8120  PRINT TAB(6)"EMP# EMPLOYEE NAME";TAB(37);B$;"  F.I.C.A.   FEDERAL";
8125  PRINT "    STATE    DISAB     CITY  ADVANCE     AUTO     INS.  ";
8130  PRINT "NET PAY   CK#";
8140  K=2
8145  GOSUB 9900
8150  P9=7+P8
8155  P8=0
8160  RETURN 
8200  IF P9<60 THEN 8240
8210  GOTO P5 OF 8215,8225
8215  PRINT " ";
8216  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;
8220  GOTO 8235
8225  K=66-P9
8230  GOSUB 9910
8235  GOSUB 8100
8240  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 
9100  PRINT TAB(K);
9110  X$=" "
9115  Z$="##/##/##"
9120  Z[1]=D2
9125  Z[2]=D3
9130  Z[3]=D4
9135  GOSUB 9000
9145  GOSUB 6000
9150  RETURN 
9200  IF  END #(N1+2) THEN 9240
9210  FOR I=1 TO 200
9220  READ #(N1+2),I;E$,U6,T1,D$,T2,T3,T4,T5,T6,D1,T7
9225  READ #(N1+2);E$,U6,T1,D$,T2,T3,T4,T5,T6,D1,T7
9230  NEXT I
9235  PRINT "TRANS FILE FULL"
9237  STOP 
9240  RETURN 
9900  GOSUB 6000
9910  FOR I=1 TO K
9920  PRINT "       ";
9930  GOSUB 6000
9940  NEXT I
9945  RETURN 
9950  FOR I=1 TO K
9955  PRINT " ";
9960  NEXT I
9970  RETURN 
9999  END 
