1  REM  ****  HP BASIC PROGRAM LIBRARY  *******************************
2  REM
3  REM        ERNHIS:  CTC PAYROLL PROGRAM, PART 29 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 E[17],F[32],U[12,2],V[8],T[4,2],I[16],W[24]
11  DIM H$[5],A$[20],E$[22]
100  FILES E1,E2,EP1,EP2,E0,EH1,EH2,ETRAN
150  PRINT H$[1,2]"WHICH PRINTER: (1) ACCOUNTING (2) ABDICK";
160  INPUT P5
170  IF P5=1 OR P5=2 THEN 200
180  PRINT '7'7'7'7'7"WHAT";
190  GOTO 160
200  READ E9,E7
210  DATA 2,17
220  N1=2*E9+1
230  MAT T=ZER
240  P=0
300  PRINT H$[1,2]"CURRENT DATE";
305  INPUT D
310  D1=INT(D/10^4)
312  IF D1>0 AND D1<13 THEN 340
315  PRINT '7'7"INVALID DATE"
320  GOTO 300
340  D2=INT((D-D1*10^4)/100)
345  IF D2<1 OR D2>31 THEN 315
350  D3=D-D1*10^4-D2*100
355  IF D3<72 OR D3>99 THEN 315
400  PRINT "ALL, ONE, OR CLEAR EMPLOYEE HISTORY (A/O/C)";
405  INPUT A$
410  U7=0
415  IF A$[1,1]="A" THEN 500
416  IF A$[1,1]="C" THEN 5000
417  IF A$[1,1]="O" THEN 420
418  PRINT '7'7'7"WHAT";
419  GOTO 400
420  PRINT "EMP#";
425  INPUT U7
430  L0=1
435  L1=0
440  GOTO 640
500  PRINT "BEGINNING STATE#";
510  INPUT G2
520  IF INT(G2)=G2 AND G2 >= -1 AND G2<51 THEN 600
530  PRINT '7'7'7'7"INVALID STATE#";H$[3,5];
540  GOTO 500
600  PRINT "BEGINNING PAGE#";
610  INPUT P
620  P=P-1
630  L0=0
635  L1=1
640  P9=66
1000  IF  END #N1 THEN 1085
1010  READ #N1;G3
1020  IF SGN(G3)=-1 THEN 1032
1025  PRINT '7'7'7'7"ERROR IN STATE/DEPT FILE"
1030  STOP 
1032  REM
1033  G1=INT(ABS(G3)/100)
1035  IF  NOT L1 THEN 1045
1036  IF L0 THEN 1040
1037  IF G2=-1 THEN 1039
1038  IF G2#G1 THEN 1045
1039  L0=1
1040  GOSUB 8000
1045  READ #N1;G3
1050  IF SGN(G3)=-1 THEN 1105
1055  IF G3<1001 THEN 1045
1060  U6=G3
1062  IF L1 THEN 1070
1064  IF U6#U7 THEN 1045
1066  L1=1
1067  GOSUB 8000
1070  GOSUB 2000
1075  IF U7 THEN 9999
1080  GOTO 1045
1085  IF  NOT L0 THEN 1480
1090  IF  NOT L1 THEN 1400
1095  F1=1
1100  GOTO 1110
1105  F1=0
1110  IF  NOT L1 OR  NOT L0 THEN 1131
1115  I=1
1125  F0=1
1127  A$="  STATE "
1130  GOSUB 2400
1131  FOR I=1 TO 2
1132  T[I,1]=T[I,2]=0
1133  NEXT I
1135  IF  NOT F1 THEN 1033
1140  I=3
1150  A$="COMPANY "
1152  K=2
1153  GOSUB 9910
1155  GOSUB 2400
1160  END 
1400  PRINT "EMP# NOT ON FILE"
1405  STOP 
1480  PRINT '7'7'7'7'7"BEGINNING STATE# NOT ON ST/DPT FILE"
1490  STOP 
2000  GOSUB 4000
2010  IF B1 THEN 9999
2020  GOSUB 4085
2030  IF  NOT B1 THEN 2230
2031  T9=0
2032  IF  NOT L0 THEN 2060
2035  PRINT TAB(7);
2040  Z$="####  "
2045  Z[1]=U6
2050  GOSUB 9000
2055  PRINT E$;
2060  J=1
2065  FOR I1=1 TO 12
2067  IF I1=1 THEN 2071
2070  IF U[I1,1]=0 THEN 2160
2071  IF  NOT L0 THEN 2100
2072  PRINT TAB(38);
2073  X$=" "
2075  Z$="##/##/##   "
2080  Z[1]=W[J]
2085  Z[2]=W[J+1]
2090  Z[3]=D3
2095  GOSUB 9000
2100  T9=T9+U[I1,1]
2101  IF  NOT L0 THEN 2150
2102  X=U[I1,1]*100
2105  GOSUB 3000
2107  GOSUB 3100
2110  PRINT TAB(65);
2115  Z$="#####"
2120  X$=" "
2125  Z[1]=U[I1,2]
2130  GOSUB 9000
2135  GOSUB 6000
2140  P9=P9+1
2145  GOSUB 3200
2150  J=J+2
2155  NEXT I1
2160  X=X3=T9*100
2165  GOSUB 3000
2170  I=1
2175  GOSUB 2300
2180  X=X4=F[31]*100
2185  GOSUB 3000
2190  I=2
2195  GOSUB 2300
2197  IF  NOT L0 THEN 2230
2200  A$="        "
2202  F0=0
2205  GOSUB 2400
2210  K=2
2215  GOSUB 9910
2220  P9=P9+2
2225  GOSUB 3200
2230  RETURN 
2300  FOR K=I TO I+2 STEP 2
2305  A=T[K,1]+X1
2310  B=T[K,2]+X2
2315  GOSUB 2800
2320  T[K,1]=A
2325  T[K,2]=B
2330  NEXT K
2340  RETURN 
2400  PRINT TAB(5);A$;"QTD TOTAL";
2402  IF F0 THEN 2410
2404  X=X3
2406  GOSUB 3000
2408  GOTO 2415
2410  X1=T[I,1]
2412  X2=T[I,2]
2415  GOSUB 3100
2417  PRINT "*";
2420  GOSUB 6000
2425  PRINT TAB(13)"YTD TOTAL";
2430  IF F0 THEN 2438
2432  X=X4
2434  GOSUB 3000
2436  GOTO 2440
2438  X1=T[I+1,1]
2439  X2=T[I+1,2]
2440  GOSUB 3100
2442  PRINT "*";
2445  GOSUB 6000
2450  P9=P9+2
2460  RETURN 
2800  IF B>-100 THEN 2830
2815  A=A-1
2820  B=B+100
2830  IF B>99 THEN 2860
2835  IF SGN(A)*SGN(B) >= 0 THEN 2850
2840  A=A-SGN(A)
2845  B=B-100*SGN(B)
2850  RETURN 
2860  A=A+INT(B*.01)
2865  B=(B*.01-INT(B*.01))*100
2867  IF B-INT(B)<.8 THEN 2880
2870  B=INT(B)+1
2880  RETURN 
3000  X1=INT(X/100)
3010  X2=X-X1*100
3020  RETURN 
3100  PRINT TAB(49);
3105  Z$="$+#######."
3110  X$=" "
3115  Z[1]=X1
3120  GOSUB 9000
3125  Z$="##"
3130  X$="0"
3135  Z[1]=X2
3140  GOSUB 9000
3150  RETURN 
3200  IF P9<58 THEN 3220
3210  GOSUB 8000
3220  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
4042  PRINT "EMP#>";1000+200*E9;"FILE SPACE LIMIT";U6
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 4210
4120  B1=1
4130  L7=INT(E[17]/10)
4173  MAT  READ #(N+E9),R1;F
4175  MAT  READ #(N1+N),R1;U
4180  MAT  READ #(N1+N);V
4185  J=1
4190  FOR I=1 TO 8
4192  W[J]=INT(V[I]/10^4)
4194  W[J+1]=INT((V[I]-W[J]*10^4)/100)
4196  W[J+2]=V[I]-W[J]*10^4-W[J+1]*100
4198  J=J+3
4200  NEXT I
4210  RETURN 
5000  MAT F=ZER
5002  PRINT '7'7'7'7"DO YOU WANT TO CLEAR EMPLOYEE EARNINGS HISTORY FILES";
5003  INPUT A$
5004  IF A$[1,1]#"Y" THEN 9999
5010  FOR I=N1+1 TO N1+E9
5015  FOR J=1 TO 200
5020  MAT  PRINT #I,J;F
5025  NEXT J
5030  NEXT I
5035  IF  END #(N1+E9+1) THEN 5070
5040  FOR I=1 TO 200
5045  READ #(N1+E9+1),I;E$,U6,T1,A$,T2,T3,T4,T5,T6,D1,T7
5050  READ #(N1+E9+1);E$,U6,T1,A$,T2,T3,T4,T5,T6,D1,T7
5055  NEXT I
5060  PRINT "TRANS FILE FULL--EMP. EARNINGS HISTORY FILES CLEARED"
5065  PRINT "BUT NOT RECORDED ON TRANS FILE"
5066  END 
5070  PRINT #(N1+E9+1);"",0,8,"C",0,0,0,0,0,D,0
5075  PRINT #(N1+E9+1); END 
5080  END 
6000  GOTO P5 OF 6010,6030
6010  PRINT '13;
6020  RETURN 
6030  PRINT 
6040  RETURN 
8000  GOTO P5 OF 8005,8010
8005  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;
8007  GOTO 8020
8010  K=66-P9
8015  GOSUB 9910
8020  K=4
8025  GOSUB 9910
8030  PRINT TAB(16)"E M P L O Y E E  E A R N I N G S  H I S T O R Y";
8035  GOSUB 6000
8040  PRINT "STATE: ";
8045  Z$="##"
8050  X$=" "
8055  Z[1]=G1
8060  GOSUB 9000
8065  PRINT TAB(32)"DATE: ";
8070  Z$="##/##/##"
8075  Z[1]=D1
8080  Z[2]=D2
8085  Z[3]=D3
8090  GOSUB 9000
8095  PRINT TAB(71)"PAGE: ";
8100  Z$="###"
8110  P=P+1
8115  Z[1]=P
8120  GOSUB 9000
8125  K=2
8130  GOSUB 9900
8135  PRINT TAB(7)"EMP#  EMPLOYEE NAME";TAB(37);
8140  PRINT "CHECK DATE  GROSS AMOUNT  CHECK NO.";
8145  K=2
8150  GOSUB 9900
8155  P9=11
8160  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 
