1  REM  ****  HP BASIC PROGRAM LIBRARY  *******************************
3  REM        EDIT:  CTC PAYROLL PROGRAM, PART 23 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[4,12],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 191
180  PRINT '7'7'7'7'7"WHAT";
190  GOTO 160
191  PRINT "ALL DEDUCTIONS";
192  INPUT A$
193  P6=0
194  IF A$="YES" THEN 200
195  P6=1
196  IF A$="NO" THEN 200
197  PRINT '7'7'7"INVALID DATA"
198  GOTO 191
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
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  PRINT TAB(7);
1100  Z$="##"
1110  X$=" "
1120  Z[1]=G1
1130  GOSUB 9000
1140  J2=1
1150  GOSUB 3000
1160  GOSUB 3300
1165  GOTO L0 OF 1230,1170
1170  P9=P9+6
1180  IF P9<59 THEN 1230
1190  GOTO P5 OF 1220,1200
1200  K=66-P9
1210  GOSUB 9910
1220  GOSUB 8000
1230  GOTO F1 OF 1035,1300
1300  IF P9=10 THEN 1350
1310  GOTO P5 OF 1340,1320
1320  K=66-P9
1330  GOSUB 9900
1340  GOSUB 8000
1350  PRINT TAB(6)"COMPANY";
1360  J2=7
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
2082  J=1
2085  IF I[13]=1 THEN 2100
2090  J=3
2100  FOR L=2 TO 11
2120  I=1
2130  IF L=2 THEN 2190
2140  I=2
2150  IF L<8 THEN 2190
2160  I=3
2170  IF L#11 THEN 2190
2180  I=4
2190  X=I[L]
2200  GOSUB 2700
2210  NEXT L
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 2460
2280  J=3
2285  I=1
2290  C=X=F[8]
2300  GOSUB 2700
2310  I=2
2320  FOR L=9 TO 10
2330  X=F[L]
2340  C=C-F[L]
2350  GOSUB 2700
2360  NEXT L
2370  FOR L=11 TO 16
2380  IF L<14 THEN 2400
2390  I=3
2400  X=E[L]
2410  C=C-E[L]
2415  GOSUB 2700
2420  NEXT L
2430  I=4
2440  X=C
2450  GOSUB 2700
2460  J=5
2470  I=1
2480  X=C=F[31]
2490  GOSUB 2700
2500  I=2
2510  FOR L=23 TO 30
2520  IF L<28 THEN 2540
2530  I=3
2540  X=F[L]
2550  C=C-F[L]
2560  GOSUB 2700
2570  NEXT L
2580  I=4
2590  X=C
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[I,J]+A1*S
2720  B=T[I,J+1]+A2*S
2730  GOSUB 2800
2740  T[I,J]=A
2750  T[I,J+1]=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=1 TO 4
3020  GOTO S OF 3030,3040,3050,3060
3030  A$="     GROSS"
3035  GOTO 3070
3040  A$="     TAXES"
3045  GOTO 3070
3050  A$="DEDUCTIONS"
3055  GOTO 3070
3060  A$="   NET PAY"
3070  PRINT TAB(14);A$;TAB(30);
3080  FOR T=J2 TO J2+4 STEP 2
3090  X$=" "
3100  Z$="+#######."
3110  Z[1]=T[S,T]
3120  GOSUB 9000
3130  X$="0"
3140  Z$="##     "
3150  Z[1]=T[S,T+1]
3160  GOSUB 9000
3170  NEXT T
3175  GOSUB 6000
3180  NEXT S
3190  K=2
3200  GOSUB 9910
3210  RETURN 
3300  FOR I=1 TO 4
3310  FOR J=1 TO 5 STEP 2
3320  A=T[I,J+6]+T[I,J]
3330  B=T[I,J+7]+T[I,J+1]
3340  GOSUB 2800
3350  T[I,J+6]=A
3360  T[I,J+7]=B
3370  T[I,J]=T[I,J+1]=0
3380  NEXT J
3390  NEXT I
3395  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)
4160  IF  NOT P6 THEN 4173
4165  E[14]=E[15]=E[16]=0
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  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;
8010  K=2
8020  GOSUB 9910
8030  PRINT TAB(17)"P A Y R O L L  C A L C U L A T I O N  E D I T";
8035  P=P+1
8040  PRINT TAB(71)"PAGE:";
8042  X$=" "
8044  Z$=" ###"
8046  Z[1]=P
8048  GOSUB 9000
8050  K=1
8060  GOSUB 9900
8070  PRINT TAB(13)"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(6)"STATE";TAB(28)"CURR QUARTER     CURR PERIOD    ";
8185  PRINT "YEAR-TO-DATE";
8190  K=2
8200  GOSUB 9900
8210  P9=10
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 
