1  REM  ****  HP BASIC PROGRAM LIBRARY  *******************************
2  REM
3  REM        CKPRT:  CTC PAYROLL PROGRAM, PART 27 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 F[32],E[17],I[16],L[40]
11  DIM A$[20],H$[5]
12  DIM E$[22]
100  FILES E1,E2,EP1,EP2,E0,AJ
150  PRINT H$[1,2]"WHICH PRINTER: (1) ACCOUNTING (2) ABDICK";
155  INPUT P5
160  IF P5=1 OR P5=2 THEN 200
165  PRINT '7'7'7"WHAT";
170  GOTO 155
200  READ E9,E7
210  DATA 2,17
220  N1=E9*2+1
225  PRINT "CHECK TYPE: (1) REGULAR (2) COMMISSIONS (3) BOTH";
230  INPUT P6
235  IF P6=1 OR P6=2 OR P6=3 THEN 270
250  PRINT '7'7'7'7'7"WHAT";
255  GOTO 230
270  PRINT "BEGINNING EMP#";
280  INPUT U7
290  PRINT "CHECK DATE";
300  I=1
310  GOSUB 8500
320  PRINT "PERIOD ENDING";
325  I=2
330  GOSUB 8500
335  GOTO P6 OF 340,370,340
340  PRINT "BEGINNING REG. CHECK#";
350  INPUT C9
360  F1=1
361  PRINT "ALL DEDUCTIONS";
362  INPUT A$
363  P7=0
364  IF A$[1,1]="Y" THEN 370
365  P7=1
370  PRINT "CHECK FORMS IN PRINTER";
375  INPUT A$
380  IF A$[1,1]#"Y" THEN 370
385  FOR J=1 TO 3
390  FOR I=1 TO 21
395  PRINT I;'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18'18;
400  GOSUB 6000
410  NEXT I
415  FOR I=1 TO 200
420  PRINT '18'18;
425  NEXT I
430  NEXT J
435  GOTO P6 OF 1000,2000,2000
1000  IF  END #N1 THEN 1110
1010  READ #N1;U6
1020  IF SGN(U6)=-1 THEN 1050
1030  PRINT '7'7'7'7'7"ERROR IN ST/DPT FILE"
1040  STOP 
1050  READ #N1;U6
1060  IF U6<1001 THEN 1050
1070  GOTO F1 OF 1075,1100
1075  IF U7=-1 THEN 1090
1080  IF U6#U7 THEN 1050
1090  F1=2
1100  GOSUB 1200
1105  GOTO 1050
1110  GOTO F1 OF 1120,9999
1120  PRINT '7'7'7'7"BEGINNING EMP# NOT ON ST/DPT FILE"
1130  STOP 
1200  GOSUB 4000
1210  IF B1 THEN 1445
1220  GOSUB 4085
1230  IF  NOT B1 THEN 1445
1235  IF F[8]=0 THEN 1445
1237  MAT L=ZER
1240  L[1]=C9
1245  L[2]=F[8]-F[9]-F[10]
1250  FOR I=11 TO 16
1255  L[2]=L[2]-E[I]
1260  NEXT I
1265  F2=F3=0
1267  F4=3
1268  F5=14
1270  IF F[1]=0 THEN 1305
1287  IF  NOT S8 THEN 1300
1290  L[F4]=F[1]
1295  L[F4+1]=E[5]
1300  L[F4+2]=F[5]
1305  F4=F4+3
1310  IF F[2]=0 THEN 1340
1325  L[F4]=F[2]
1330  GOSUB 5700
1335  L[F4+2]=F[6]
1340  F4=F4+3
1345  IF F[3]=0 AND F[4]=0 THEN 1372
1360  L[F4]=F[3]+F[4]
1365  L[F4+1]=E[5]
1370  L[F4+2]=F[7]
1372  I1=12
1375  FOR I=14 TO 16
1380  IF E[I]=0 THEN 1405
1397  L[F5]=E[I]
1400  L[F5+1]=F[I+14]
1402  L[21]=L[21]+E[I]
1405  F5=F5+2
1410  NEXT I
1415  L[20]=F[8]
1420  L[22]=F[10]
1422  L[23]=F[9]
1425  L[24]=E[11]
1430  L[25]=E[12]
1432  L[26]=E[13]
1435  GOSUB 3000
1440  C9=C9+1
1445  RETURN 
2000  F1=0
2005  IF  END #(N1+1) THEN 2170
2010  MAT  READ #(N1+1);I
2012  IF F1 THEN 2025
2013  IF U7=-1 THEN 2020
2015  IF I[13]#2 OR I[1]#U7 THEN 2010
2020  F1=1
2025  IF I[13]#2 THEN 2010
2030  U6=I[1]
2035  GOSUB 4000
2040  IF B1 THEN 2010
2045  GOSUB 4085
2050  IF  NOT B1 THEN 2010
2052  MAT L=ZER
2055  L[1]=I[12]
2060  L[2]=I[11]
2065  L[5]=L[20]=I[2]
2080  F3=0
2082  F5=14
2085  I1=6
2090  FOR I=8 TO 10
2095  IF I[I]=0 THEN 2125
2110  L[F5]=I[I]
2115  L[F5+1]=F[I+20]
2120  L[21]=L[21]+I[I]
2125  F5=F5+2
2130  NEXT I
2135  L[22]=I[4]
2140  L[23]=I[3]
2145  L[24]=I[5]
2150  L[25]=I[6]
2152  L[26]=I[7]
2155  GOSUB 3000
2160  GOTO 2010
2170  IF F1 THEN 2190
2175  PRINT '7'7'7"BEGINNING EMP# NOT ON COM/ADJ FILE"
2180  STOP 
2190  IF P6#3 THEN 9999
2195  U7=-1
2197  GOTO 1000
3000  K=1
3002  GOSUB 9910
3004  A$="COMPUTER TERMINAL"
3005  PRINT TAB(18);A$;
3010  K=53
3015  GOSUB 9950
3020  PRINT A$;
3025  GOSUB 6000
3027  READ A$
3030  DATA "9725 DATA POINT DR","SAN ANTONIO, TEXAS"
3032  PRINT TAB(7);A$;
3035  READ A$
3037  PRINT TAB(29);A$;TAB(69);
3038  GOSUB 5000
3039  PRINT "     ";
3040  GOSUB 5100
3041  RESTORE 3030
3042  READ A$
3045  PRINT "  ";
3050  PRINT A$;"   SA, TX    ";
3055  GOSUB 5200
3060  PRINT " ";
3065  I=2
3070  GOSUB 5400
3072  PRINT " ";
3075  I=1
3080  GOSUB 5400
3085  K=2
3090  GOSUB 9900
3095  PRINT TAB(3);
3100  Z$="########"
3105  GOSUB 5300
3110  PRINT TAB(21);
3115  GOSUB 5350
3120  PRINT TAB(33);
3125  GOSUB 5100
3130  PRINT TAB(41);
3135  GOSUB 5000
3140  PRINT TAB(48);
3145  I=1
3150  GOSUB 5400
3155  PRINT "   ";
3160  GOSUB 5200
3164  F4=F5=F2=P0=P=0
3166  F3=12
3168  IF F4 THEN 3197
3170  F2=F2+3
3175  IF F2<12 THEN 3190
3180  F4=1
3185  GOTO 3197
3190  IF L[F2+2]=0 THEN 3170
3192  P0=1
3195  GOSUB 3300
3197  IF F5 THEN 3225
3200  F3=F3+2
3205  IF F3<20 THEN 3220
3210  F5=1
3215  GOTO 3225
3220  IF L[F3]=0 THEN 3200
3222  P0=1
3224  GOSUB 3360
3225  IF  NOT P0 THEN 3240
3227  P=P+1
3230  GOSUB 6000
3232  P0=0
3235  IF  NOT F4 OR  NOT F5 THEN 3168
3240  K=5-P
3245  GOSUB 9910
3250  GOTO 3505
3300  IF F2#3 THEN 3306
3302  A$="REGULAR"
3304  GOTO 3315
3306  IF F2#6 THEN 3314
3308  A$="OVERTIME"
3310  GOTO 3315
3314  A$="OTHER"
3315  PRINT TAB(67);A$;
3317  K=14-LEN(A$)
3318  GOSUB 9950
3319  L=F2
3320  IF L[F2]#0 THEN 3345
3325  K=12
3330  GOSUB 9950
3335  GOSUB 5535
3340  GOTO 3350
3345  GOSUB 5500
3350  RETURN 
3360  REM
3366  IF F3#14 THEN 3372
3368  A$="ADVANCE"
3370  GOTO 3380
3372  IF F3#16 THEN 3378
3374  A$="AUTO"
3376  GOTO 3380
3378  A$="INSURANCE"
3380  IF F4 THEN 3396
3382  PRINT "    ";A$;
3384  K=15-LEN(A$)
3386  GOSUB 9950
3388  L=F3
3390  GOSUB 5600
3392  RETURN 
3396  K=99
3398  GOSUB 9950
3399  GOTO 3382
3505  Z$="#########."
3507  PRINT TAB(50);
3510  GOSUB 5300
3520  GOSUB 5350
3522  GOSUB 6000
3523  PRINT TAB(3)'9;E$;
3525  K=2
3530  GOSUB 9900
3535  K=93
3540  GOSUB 9950
3545  L=18
3547  X$=" "
3550  GOSUB 5535
3555  K=19
3560  GOSUB 9950
3562  L=19
3565  GOSUB 5535
3570  K=1
3575  GOSUB 9900
3580  PRINT TAB(3)"FROST NATIONAL BANK";TAB(25)"083 658";TAB(67);
3585  L=18
3590  GOSUB 5535
3595  PRINT "   ";
3597  Z$="#####  "
3600  FOR I=22 TO 26
3605  Z[1]=L[I]*100
3610  GOSUB 9000
3615  NEXT I
3620  GOSUB 6000
3625  READ A$
3630  RESTORE 3030
3635  PRINT TAB(3);A$;TAB(66);
3640  Z$="#######  "
3645  Z[1]=F[31]*100
3650  GOSUB 9000
3655  Z$="######  "
3660  Z[1]=F[24]*100
3665  GOSUB 9000
3670  Z$="#####  "
3675  Z[1]=F[23]*100
3680  GOSUB 9000
3685  FOR I=25 TO 27
3690  Z[1]=F[I]*100
3695  GOSUB 9000
3700  NEXT I
3705  K=15
3710  GOSUB 9950
3715  L=0
3720  GOSUB 5535
3725  K=3
3730  GOSUB 9900
3740  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[1]/10^4)
4140  S2=INT((E[1]-X*10^4)/100)
4150  S8=INT(E[4]/10^5)
4160  IF  NOT P7 THEN 4173
4165  E[14]=E[15]=E[16]=0
4173  MAT  READ #(N+E9),R1;F
4175  RETURN 
5000  Z$="####"
5005  Z[1]=U6
5007  X$=" "
5010  GOSUB 9000
5020  RETURN 
5100  Z$="##"
5105  Z[1]=S2
5110  GOTO 5007
5200  Z$="#####"
5205  Z[1]=L[1]
5210  GOTO 5007
5300  X1=L[2]*100
5310  Z[1]=INT(X1/100)
5315  X$="*"
5320  GOTO 5010
5350  Z[1]=X1-INT(X1/100)*100
5355  Z$="##"
5360  X$="0"
5365  GOTO 5010
5400  Z$="######"
5405  X$="0"
5410  Z[1]=D[I]
5415  GOTO 5010
5500  Z$="#### "
5505  X$=" "
5510  Z[1]=L[L]*100
5515  GOSUB 9000
5520  Z$[5,7]="#  "
5525  Z[1]=L[L+1]*1000
5530  GOSUB 9000
5535  Z$="######"
5540  Z[1]=L[L+2]*100
5545  GOSUB 9000
5550  RETURN 
5600  Z$="######"
5605  X$=" "
5610  Z[1]=L[L]*100
5615  GOSUB 9000
5620  PRINT "  ";
5625  Z[1]=L[L+1]*100
5630  GOSUB 9000
5640  RETURN 
5700  X=E[5]*1.5
5710  X1=INT(X)
5715  X2=(X-INT(X))*1000
5725  IF X2-INT(X2)<.5 THEN 5740
5730  X2=INT(X2)+1
5735  GOTO 5750
5740  X2=INT(X2)
5750  L[F4+1]=X1+X2*.001
5760  RETURN 
6000  GOTO P5 OF 6010,6030
6010  PRINT '13;
6020  RETURN 
6030  PRINT 
6040  RETURN 
8500  REM
8505  INPUT D[I]
8510  IF D[I]<10^6 AND D[I]>9999 THEN 8520
8515  PRINT '7'7'7'7"INVALID DATE"
8517  GOTO 8505
8520  D1=INT(D[I]/10^4)
8525  IF D1<1 OR D1>12 THEN 8515
8530  D2=INT((D[I]-D1*10^4)/100)
8535  IF D2<1 OR D2>31 THEN 8515
8540  D3=D[I]-D1*10^4-D2*100
8545  IF D3<71 THEN 8515
9000  Z2=Z3=Z4=Z5=Z7=Z8=Z9=1
9004  DIM Y$[10],Z$[15]
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 I=1 TO K
9915  PRINT "     ";
9920  GOSUB 6000
9930  NEXT I
9940  RETURN 
9950  FOR I=1 TO K
9960  PRINT " ";
9970  NEXT I
9980  RETURN 
9999  END 
