1  REM  ****  HP BASIC PROGRAM LIBRARY  *******************************
2  REM
3  REM        SALREV:  CTC PAYROLL PROGRAM, PART 30 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 A$[20],E$[22],H$[5]
11  DIM E[17],D[3],Z[3],S[20]
12  DIM T[100]
100  FILES E1,E2,E0
200  READ E9,E7
210  DATA 2,17
220  N1=E9+1
300  PRINT H$[1,2]"WHICH PRINTER: (1) ACCOUNTING (2) ABDICK";
310  INPUT P5
320  IF P5=1 OR P5=2 THEN 400
330  PRINT '7'7'7'7"INVALID DATA";H$[3,5];
340  GOTO 300
400  PRINT "ENTER TODAY'S DATE (MDDYY)";
410  INPUT D1
420  IF D1<10^6 AND D1>9999 THEN 440
425  PRINT '7'7'7"INVALID DATE";H$[3,5];
430  GOTO 400
440  D[1]=INT(D1/10^4)
450  IF D[1]<1 OR D[1]>12 THEN 425
460  D[2]=INT((D1-D[1]*10^4)/100)
470  IF D[2]<1 OR D[2]>31 THEN 425
480  D[3]=D1-D[1]*10^4-D[2]*100
490  IF D[3]<72 THEN 425
495  GOSUB 3000
500  P=0
505  P9=66
510  GOSUB 8000
520  READ #N1;G2
530  IF SGN(G2)=-1 THEN 560
540  PRINT '7'7'7"ERROR IN STATE/DEPT FILE"
550  STOP 
560  REM
1000  FOR Q5=1 TO I5
1003  I1=T[Q5]
1005  READ #N1,1
1010  IF  END #N1 THEN 1160
1020  READ #N1;G2
1030  IF G2>99 THEN 1020
1035  IF SGN(G2)#-1 THEN 1040
1037  G2=ABS(G2)-INT(ABS(G2)/100)*100
1040  IF G2#I1 THEN 1020
1050  READ #N1;U6
1060  IF U6>1000 THEN 1070
1065  G2=U6
1067  GOTO 1035
1070  GOSUB 4000
1080  IF B1 THEN 1050
1090  GOSUB 4085
1100  IF  NOT B1 THEN 1050
1110  GOSUB 2000
1150  GOTO 1050
1160  NEXT Q5
1170  END 
2000  PRINT TAB(4);
2005  Z$="##"
2010  X$=" "
2015  Z[1]=S[2]
2020  GOSUB 9000
2025  PRINT TAB(11);
2030  Z[1]=S[4]
2035  GOSUB 9000
2040  PRINT TAB(16);
2045  Z$="####  "
2050  Z[1]=U6
2055  GOSUB 9000
2060  PRINT E$;TAB(48);
2065  Z$="##"
2070  Z[1]=S[1]
2075  GOSUB 9000
2080  A$="  ACTIVE"
2085  IF  NOT S[10] THEN 2095
2090  A$[1,2]="IN"
2095  PRINT TAB(54);A$;"";
2100  A$="SALARIED"
2105  IF  NOT S[8] THEN 2115
2110  A$="  HOURLY"
2115  PRINT TAB(5);A$"  ";
2125  GOSUB 3200
2132  IF E[6]#0 THEN 2135
2133  PRINT "          ";
2134  GOTO 2150
2135  Z$="$####.##  "
2140  Z[1]=E[6]
2145  GOSUB 9000
2150  FOR I=7 TO 9
2152  IF E[I]#0 THEN 2158
2154  PRINT "          ";
2156  GOTO 2175
2158  Z$="  ##/##/##"
2159  Z[3]=INT(E[I]/10^4)
2160  Z[1]=INT((E[I]-Z[3]*10^4)/100)
2165  Z[2]=E[I]-Z[3]*10^4-Z[1]*100
2170  GOSUB 9000
2175  NEXT I
2180  K=1
2185  GOSUB 9900
2190  P9=P9+2
2195  IF P9<60 THEN 2210
2200  GOSUB 8000
2210  RETURN 
3000  I5=0
3010  PRINT "ENTER DEPT#S TO BE PRINTED ('-1' ENDS INPUT LOOP)"
3020  PRINT "DEPT#";
3025  INPUT X
3030  IF X=-1 THEN 3100
3035  IF INT(X)=X AND X >= 0 AND X<100 THEN 3045
3040  PRINT '7'7'7"INVALID DEPT#";H$[3,5];
3042  GOTO 3020
3045  I5=I5+1
3050  T[I5]=X
3060  GOTO 3020
3100  RETURN 
3200  X1=E[5]*2080*100
3210  X=INT(X1)
3220  IF X1-X<.5 THEN 3240
3230  X=X+1
3240  Z$="$#####."
3245  Z[1]=INT(X/100)
3250  GOSUB 9000
3255  Z$="##   "
3260  X$="0"
3265  Z[1]=X-INT(X/100)*100
3270  GOSUB 9000
3275  X$=" "
3280  RETURN 
4000  REM * READ E *
4005  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#>";E9*200+1000;"FILE SPACE LIMIT";U6;
4043  GOSUB 6000
4044  P9=P9+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  GOSUB 4480
4140  RETURN 
4175  PRINT "EMP# ON ST/DPT FILE BUT NOT ON PAYROLL FILES";U6;
4180  GOTO 2180
4480  S[1]=INT(E[1]/10^4)
4490  S[2]=INT((E[1]-S[1]*10^4)/100)
4495  S[3]=E[1]-S[1]*10^4-S[2]*100
4500  S[4]=INT(E[2]/1000)
4505  S[5]=E[2]-S[4]*1000
4510  S[6]=INT(E[3]/10^4)
4515  S[7]=E[3]-S[6]*10^4
4520  X1=5
4525  FOR I=8 TO 13
4530  X=0
4535  X2=5
4540  FOR J=1 TO (I-8)
4545  X=X+S[J+7]*10^X2
4550  X2=X2-1
4555  NEXT J
4560  S[I]=INT((E[4]-X)/10^X1)
4565  X1=X1-1
4570  NEXT I
4571  L7=INT(E[17]/10)
4572  L8=E[17]-L7*10
4575  RETURN 
6000  GOTO P5 OF 6010,6030
6010  PRINT '13;
6020  RETURN 
6030  PRINT 
6040  RETURN 
8000  GOTO P5 OF 8010,8030
8010  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;
8020  GOTO 8050
8030  K=66-P9
8040  GOSUB 9910
8050  K=4
8060  GOSUB 9910
8070  MAT Z=D
8080  Z$="##/##/##"
8090  X$=" "
8100  PRINT TAB(3)"DATE: ";
8110  GOSUB 9000
8120  PRINT TAB(45)"E M P L O Y E E  S A L A R Y  R E V I E W";
8130  PRINT TAB(37);"PAGE: ";
8135  P=P+1
8140  Z$="##"
8150  Z[1]=P
8160  GOSUB 9000
8170  K=2
8180  GOSUB 9900
8182  PRINT TAB(3)"DEPT  STATE  EMP#  EMPLOYEE NAME";TAB(46);
8184  PRINT "TITLE  WORK STATUS  EXEMPTION     YEARLY  AMOUNT OF     ";
8186  PRINT "DATE OF    DATE      DATE";
8188  GOSUB 6000
8190  PRINT TAB(71);"";
8195  PRINT TAB(10)"RATE   LAST RAISE  LAST RAISE  HIRED      TERM";
8210  K=2
8220  GOSUB 9900
8230  P9=11
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 
9900  GOSUB 6000
9910  FOR I=1 TO K
9920  PRINT "      ";
9930  GOSUB 6000
9940  NEXT I
9945  RETURN 
9999  END 
