1  REM  ****  HP BASIC PROGRAM LIBRARY  *******************************
2  REM
3  REM        WKCOMP:  CTC PAYROLL PROGRAM, PART 28 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[20,2],I[16],E[17],F[32]
11  DIM H$[5],A$[20],E$[22]
100  FILES E1,E2,EP1,EP2,E0,AJ
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]"DATE OF REPORT (MDDYY)";
310  INPUT D
320  I=1
330  GOSUB 400
340  IF B1 THEN 300
350  PRINT "DATE OF PAYROLL (MDDYY)";
355  INPUT D
360  I=4
370  GOSUB 400
380  IF  NOT B1 THEN 500
390  GOTO 350
400  B1=0
405  IF D<10^6 AND D>9999 THEN 440
410  PRINT '7'7'7'7'7"INVALID DATE";H$[3,5];
420  B1=1
430  RETURN 
440  D[I]=INT(D/10^4)
450  IF D[I]>12 THEN 410
460  D[I+1]=INT((D-D[I]*10^4)/100)
470  IF D[I+1]>31 THEN 410
480  D[I+2]=D-D[I]*10^4-D[I+1]*100
490  IF D[I+2]<71 THEN 410
495  RETURN 
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
625  P9=66
630  GOSUB 8000
640  L0=1
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
1035  G1=INT(ABS(G3)/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;G3
1050  IF SGN(G3)=-1 THEN 1090
1055  IF G3<1001 THEN 1040
1060  U6=G3
1070  GOSUB 2000
1080  GOTO 1040
1085  IF L0=1 THEN 1480
1086  F1=2
1087  GOTO 1095
1090  F1=1
1092  GOTO L0 OF 1160,1095
1095  IF T[10,1]=0 AND T[10,2]=0 THEN 1230
1097  PRINT TAB(19);
1100  Z$="##"
1110  X$=" "
1120  Z[1]=G1
1130  GOSUB 9000
1140  J2=1
1150  GOSUB 3000
1160  GOSUB 3300
1230  GOTO F1 OF 1035,1300
1300  IF P9=11 THEN 1350
1310  GOSUB 8000
1350  PRINT TAB(17)"COMPANY";
1360  J2=11
1370  GOSUB 3000
1380  END 
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 2610
2040  IF L7=0 THEN 2270
2050  FOR I1=1 TO L7
2060  IF  END #(N1+1) THEN 2250
2070  MAT  READ #(N1+1);I
2080  IF I[1]#U6 THEN 2070
2090  IF I[2]=0 THEN 2220
2100  X=I[2]
2110  GOSUB 2700
2220  NEXT I1
2230  READ #(N1+1),1
2240  GOTO 2270
2250  PRINT '7'7'7'7"ERROR ON COMM/ADJ FILE"
2260  STOP 
2270  IF F[8]=0 THEN 2610
2280  X=F[8]
2600  GOSUB 2700
2610  RETURN 
2700  S=SGN(X)
2702  X=ABS(X)*100
2705  A1=INT(X/100)
2710  A2=X-A1*100
2715  A=T[S3+1,1]+A1*S
2720  B=T[S3+1,2]+A2*S
2730  GOSUB 2800
2740  T[S3+1,1]=A
2750  T[S3+1,2]=B
2755  A=T[10,1]+A1*S
2760  B=T[10,2]+A2*S
2765  GOSUB 2800
2770  T[10,1]=A
2775  T[10,2]=B
2795  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  FOR S=J2 TO J2+9
3010  IF T[S,1]=0 AND T[S,2]=0 THEN 3180
3020  IF S#J2+9 THEN 3030
3025  PRINT TAB(31)"TOTAL";
3027  GOTO 3045
3030  PRINT TAB(34);
3032  X$=" "
3034  Z$="##"
3036  Z[1]=S-1
3038  IF J2#11 THEN 3042
3040  Z[1]=S-11
3042  GOSUB 9000
3045  PRINT TAB(50);
3090  X$=" "
3100  Z$="#######."
3110  Z[1]=T[S,1]
3120  GOSUB 9000
3130  X$="0"
3140  Z$="##"
3145  Z[1]=T[S,2]
3150  GOSUB 9000
3152  GOSUB 6000
3155  P9=P9+1
3160  GOSUB 3400
3180  NEXT S
3190  K=2
3200  GOSUB 9910
3205  P9=P9+2
3207  GOSUB 3400
3210  RETURN 
3300  FOR I=1 TO 10
3310  A=T[I+10,1]+T[I,1]
3320  B=T[I+10,2]+T[I,2]
3330  GOSUB 2800
3340  T[I+10,1]=A
3350  T[I+10,2]=B
3360  T[I,1]=T[I,2]=0
3390  NEXT I
3395  RETURN 
3400  IF P9<60 THEN 3415
3410  GOSUB 8000
3415  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 4175
4120  B1=1
4130  L7=INT(E[17]/10)
4140  S3=E[4]-INT(E[4]/10)*10
4173  MAT  READ #(N+E9),R1;F
4175  RETURN 
6000  GOTO P5 OF 6010,6030
6010  PRINT '13;
6020  RETURN 
6030  PRINT 
6040  RETURN 
8000  GOTO P5 OF 8002,8005
8002  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;
8004  GOTO 8020
8005  K=66-P9
8010  GOSUB 9910
8020  K=2
8025  GOSUB 9910
8030  PRINT TAB(11)"P A Y R O L L  W O R K M A N ' S  C O M P E N S ";
8032  PRINT "A T I O N";
8035  P=P+1
8040  PRINT TAB(71)" PAGE:";
8042  X$=" "
8044  Z$=" ##"
8046  Z[1]=P
8048  GOSUB 9000
8050  GOSUB 6000
8060  PRINT TAB(28)"D I S T R I B U T I O N";
8065  K=1
8067  GOSUB 9900
8070  PRINT TAB(12)"PAYROLL DATE: ";
8075  X$=" "
8080  Z$="##/##/##"
8085  FOR I=4 TO 6
8090  Z[I-3]=D[I]
8100  NEXT I
8105  GOSUB 9000
8110  PRINT TAB(45)"REPORT DATE: ";
8120  FOR I=1 TO 3
8130  Z[I]=D[I]
8140  NEXT I
8150  GOSUB 9000
8160  K=2
8170  GOSUB 9900
8180  PRINT TAB(17)"STATE";TAB(27)"WKMAN'S COMP CODE";TAB(49);
8185  PRINT "GROSS DOLLARS";
8190  K=2
8200  GOSUB 9900
8210  P9=11
8220  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 
