1  REM  ****  HP BASIC PROGRAM LIBRARY  *******************************
2  REM
3  REM        EMOD:  CTC PAYROLL PROGRAM, PART 3 OF 34
4  REM
5  REM        36213  REV B  6/73
6  REM
7  REM  ****  CONTRIBUTED PROGRAM  ************************************
8  REM
9  H$=""
10  DIM E$[30],B$[20],X$[20],A$[30],C$[10]
11  DIM E[20],S[15]
13  DIM H$[7],D$[10]
50  C$="0123456789"
100  FILES E1,E2,ETRAN,EAUX
200  READ E9,E7
210  DATA 2,17
220  READ #(E9+2);A9
300  IF  END #(E9+1) THEN 350
310  FOR I=1 TO 200
325  READ #(E9+1),I;E$,U6,T1,D$,T2,T3,T4,T5,T6,D1,T7
330  READ #(E9+1);E$,U6,T1,D$,T2,T3,T4,T5,T6,D1,T7
335  NEXT I
340  PRINT "TRANSACTION FILE FULL--PLEASE EMPTY"
345  STOP 
350  IF  END #(E9+1) THEN 360
352  T2=T3=T4=T5=T6=T7=0
355  GOTO 400
360  PRINT "ERROR--TRAN FILE AT EOF"
365  STOP 
400  PRINT H$[1,2]"ENTER TODAY'S DATE (MDDYY)";
410  INPUT D1
420  IF D1>9999 AND D1<10^6 THEN 435
425  PRINT "INVALID DATE"
430  GOTO 400
435  X=INT(D1/10^4)
440  IF X<1 OR X>12 THEN 425
445  X1=INT((D1-X*10^4)/100)
450  IF X1<1 OR X1>31 THEN 425
455  X2=D1-X*10^4-X1*100
530  D$="M"
540  T1=1
550  L0=2
2000  REM
2010  PRINT H$[1,2];"ENTER EMPLOYEE NUMBER";
2015  INPUT A$
2017  IF A$="END" THEN 9999
2020  GOSUB 4000
2030  IF B1 THEN 2010
2032  U6=Z
2035  GOSUB 4085
2040  IF B1 THEN 2062
2050  PRINT '7'7'7"EMP# NOT IN USE";
2055  GOTO 2010
2062  GOSUB 4480
2065  X=24
2067  X1=47
2070  PRINT H$[1,2]" 1) EMPLOYEE#: ";
2072  X$=" "
2074  Z$="####"
2075  Z[1]=U6
2076  GOSUB 9000
2078  PRINT TAB(X)" 2) EMPLOYEE NAME: ";E$
2080  PRINT 
2082  PRINT " 3) TITLE: ";
2084  Z$="##"
2085  I=1
2086  GOSUB 6140
2088  PRINT TAB(X)" 4) DEPARTMENT: ";
2090  GOSUB 6140
2094  PRINT TAB(X1)" 5) DEPENDENTS: ";
2096  GOSUB 6140
2100  PRINT 
2102  PRINT 
2104  PRINT " 6) STATE: ";
2106  GOSUB 6140
2110  PRINT TAB(X)" 7) S.S: ";
2112  Z$="###-##-####"
2114  X$="0"
2116  FOR I=5 TO 7
2118  Z[I-4]=S[I]
2120  NEXT I
2122  GOSUB 9000
2124  PRINT TAB(X1)" 8) EXEMPTION: ";
2126  Z$="#"
2128  X$=" "
2130  I=8
2132  GOSUB 6140
2134  PRINT 
2136  PRINT 
2138  PRINT " 9) MARITAL STATUS: ";
2140  GOSUB 6140
2144  PRINT TAB(X)"10) WORK STATUS: ";
2146  GOSUB 6140
2150  PRINT TAB(X1)"11) SEX: ";
2152  GOSUB 6140
2154  PRINT 
2155  PRINT 
2156  PRINT "12) RACE: ";
2158  GOSUB 6140
2162  PRINT TAB(X)"13) RATE: $";
2164  Z$="##.###"
2166  I=5
2168  GOSUB 6100
2169  Z$="####.##"
2172  PRINT TAB(X1)"14) AMT RAISE: $";
2174  GOSUB 6100
2178  PRINT 
2180  PRINT 
2182  PRINT "15) RAISE DT: ";
2184  Z$="##/##/##"
2186  X3=E[7]
2188  GOSUB 6000
2190  PRINT TAB(X)"16) HIRED: ";
2192  X3=E[8]
2194  GOSUB 6000
2196  PRINT TAB(X1)"17) TERMINATED: ";
2198  X3=E[9]
2200  GOSUB 6000
2202  PRINT 
2204  PRINT 
2206  PRINT "18) BIRTH DT: ";
2208  X3=E[10]
2210  GOSUB 6000
2211  I=11
2212  PRINT TAB(X)"19) STATE: ";
2214  Z$="$###.##"
2216  GOSUB 6100
2218  PRINT TAB(X1)"20) DISB: ";
2220  GOSUB 6100
2222  PRINT 
2224  PRINT 
2226  PRINT "21) CITY: ";
2228  GOSUB 6100
2230  PRINT TAB(X)"22) ADV.: ";
2232  GOSUB 6100
2234  PRINT TAB(X1)"23) AUTO: ";
2236  GOSUB 6100
2240  PRINT 
2242  PRINT 
2244  PRINT "24) INS.: ";
2246  GOSUB 6100
2248  PRINT TAB(X)"25) WORKMAN'S COMP: ";
2257  Z$="#"
2258  Z[1]=S[13]
2259  GOSUB 9000
2262  PRINT TAB(X1)"26) FICA STATUS:";L8
2263  PRINT 
2264  PRINT "27) NO CHANGE"
2265  PRINT 
2266  PRINT "MODIFY NUMBER";
2268  INPUT A$
2270  GOSUB 4200
2272  IF  NOT B1 THEN 2290
2280  PRINT '7'7'7'7'7"INVALID DATA"'7'7;H$[3,5];
2285  GOTO 2266
2290  IF Z<1 OR Z>27 THEN 2280
2295  T2=Z
2300  GOTO Z OF 2315,2440,2485,2500,2520,2535,2575,2690,2705,2720
2305  GOTO Z-10 OF 2735,2750,2770,2800,2825,2845,2860,2875,2885,2905
2310  GOTO Z-20 OF 2920,2935,2945,2955,2985,2990,2010
2315  PRINT '7'7'7"EMPLOYEE# CANNOT BE CHANGED";H$[3,5];
2320  GOTO 2266
2440  J1=21
2445  J2=42
2450  GOSUB 3850
2455  IF LEN(A$)>22 THEN 2280
2460  E$=A$
2465  T3=T5=0
2470  GOSUB 5000
2475  GOSUB 3950
2480  GOTO 2266
2485  J1=19
2490  J2=10
2492  X3=99
2495  GOTO 2545
2500  J1=19
2505  J2=39
2507  X3=99
2510  GOTO 2545
2520  J1=19
2522  X3=19
2525  J2=62
2530  GOTO 2545
2535  J1=17
2540  J2=10
2542  X3=50
2545  X4=2
2547  GOSUB 3850
2550  GOSUB 4200
2555  IF B1 OR Z>X3 THEN 2280
2560  T3=S[T2-X4]
2565  T5=S[T2-X4]=Z
2570  GOSUB 4700
2572  GOTO 2470
2575  J1=17
2580  J2=32
2585  GOSUB 3850
2590  B$=A$
2595  IF LEN(B$)#11 THEN 2280
2600  IF B$[4,4]#"-" THEN 2280
2605  IF B$[7,7]#"-" THEN 2280
2610  A$=B$[1,3]
2615  GOSUB 4200
2620  IF B1 THEN 2280
2625  X=Z
2630  A$=B$[5,6]
2635  GOSUB 4200
2640  IF B1 THEN 2280
2645  X1=Z
2650  A$=B$[8,11]
2655  GOSUB 4200
2660  IF B1 THEN 2280
2662  T3=S[5]
2664  T4=S[6]*10^4+S[7]
2665  T5=S[5]=X
2670  S[6]=X1
2675  S[7]=Z
2680  T6=X1*10^4+Z
2685  GOSUB 4700
2686  GOSUB 5000
2687  GOSUB 3955
2688  GOTO 2266
2690  J1=17
2695  J2=61
2697  X3=1
2700  GOTO 2760
2705  J1=15
2710  J2=19
2712  X3=1
2715  GOTO 2760
2720  J1=15
2725  J2=40
2727  X3=9
2730  GOTO 2760
2735  J1=15
2740  J2=55
2742  X3=1
2745  GOTO 2760
2750  J1=13
2755  J2=X3=9
2760  X4=0
2765  GOTO 2547
2770  J1=13
2775  J2=34
2780  X3=6
2782  L0=3
2785  GOSUB 3000
2787  L0=2
2790  IF B1 THEN 2280
2795  GOTO 2470
2800  J1=13
2805  J2=62
2810  X3=7
2815  GOTO 2785
2825  J1=11
2830  J2=13
2835  GOSUB 3200
2840  GOTO 2790
2845  J1=11
2850  J2=34
2855  GOTO 2835
2860  J1=11
2865  J2=62
2870  GOTO 2835
2875  J1=9
2880  GOTO 2830
2885  J1=9
2890  J2=34
2895  X3=6
2900  GOTO 2785
2905  J1=9
2910  J2=57
2915  GOTO 2895
2920  J1=7
2925  J2=10
2930  GOTO 2895
2935  J1=7
2940  GOTO 2890
2945  J1=7
2950  GOTO 2910
2955  J1=5
2960  GOTO 2925
2985  J1=5
2986  J2=43
2987  X4=12
2988  X3=9
2989  GOTO 2547
2990  J1=5
2991  J2=63
2992  GOSUB 3850
2993  GOSUB 4200
2994  IF B1 OR Z>1 THEN 2280
2995  T3=L8
2996  T5=L8=Z
2997  GOTO 2570
3000  B1=0
3010  GOSUB 3850
3020  B$=A$
3030  L=LEN(B$)
3040  IF L<L0+2 OR L>X3 THEN 3150
3050  IF B$[L-L0,L-L0]#"." THEN 3150
3060  A$=B$[1,L-L0-1]
3070  GOSUB 4200
3080  IF B1 THEN 3140
3090  X=Z
3100  A$=B$[L-L0+1]
3110  GOSUB 4200
3120  IF B1 THEN 3140
3130  T3=E[T2-8]
3135  T5=E[T2-8]=X+Z/10^L0
3140  RETURN 
3150  B1=1
3160  RETURN 
3200  B1=0
3205  GOSUB 3850
3210  B$=A$
3215  IF LEN(B$)#8 THEN 3320
3220  IF B$[3,3]#"/" THEN 3320
3225  IF B$[6,6]#"/" THEN 3320
3230  A$=B$[1,2]
3235  GOSUB 4200
3240  IF B1 THEN 3330
3245  IF Z>12 THEN 3320
3250  X=Z
3255  A$=B$[4,5]
3260  GOSUB 4200
3265  IF B1 THEN 3330
3270  IF Z>31 THEN 3320
3275  X1=Z
3280  A$=B$[7,8]
3285  GOSUB 4200
3290  IF B1 THEN 3330
3300  T3=E[T2-8]
3302  IF X=0 AND X1=0 AND Z=0 THEN 3312
3305  E[T2-8]=T5=Z*10^4+X*100+X1
3310  RETURN 
3312  E[T2-8]=T5=0
3314  RETURN 
3320  B1=1
3330  RETURN 
3850  FOR I1=1 TO J1
3855  PRINT H$[4,4];
3860  NEXT I1
3865  FOR I1=1 TO J2
3870  PRINT H$[6,6];
3875  NEXT I1
3880  INPUT A$
3885  J1=J1-1
3890  FOR I1=1 TO J1
3895  PRINT ""
3900  NEXT I1
3910  RETURN 
3950  T4=T6=0
3955  PRINT #(E9+1);E$[1,22],U6,T1,D$,T2,T3,T4,T5,T6,D1,T7
3960  IF TYP(-(E9+1))=3 THEN 340
3965  PRINT #(E9+1); END 
3970  PRINT H$[3,5];
3975  RETURN 
4000  REM
4002  GOSUB 4200
4005  IF  NOT B1 THEN 4015
4010  PRINT '7'7'7'7"INVALID DATA";H$[3,5];
4011  B1=1
4012  RETURN 
4015  IF Z<1001 THEN 4010
4020  R=Z-1000
4050  FOR I=1 TO E9
4055  IF R <= I*200 THEN 4080
4060  NEXT I
4065  PRINT "EMP#>";1000+E9*200;" FILE SPACE LIMIT";H$[3,5];
4070  B1=1
4075  RETURN 
4080  N=I
4081  R1=R-(I-1)*200
4082  RETURN 
4085  B1=0
4087  READ #N,R1;E$
4090  FOR I=1 TO E7
4095  READ #N;E[I]
4100  NEXT I
4130  IF E[1]=-1 THEN 4155
4150  B1=1
4155  RETURN 
4200  B1=Z=0
4210  FOR I1=1 TO LEN(A$)
4220  FOR I2=1 TO 10
4225  IF A$[I1,I1]=C$[I2,I2] THEN 4245
4230  NEXT I2
4240  B1=1
4242  RETURN 
4245  Z=Z*10+I2-1
4250  NEXT I1
4255  RETURN 
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 
4700  E[1]=S[1]*10^4+S[2]*100+S[3]
4710  E[2]=S[4]*1000+S[5]
4720  E[3]=S[6]*10^4+S[7]
4730  X=5
4735  E[4]=0
4740  FOR I=8 TO 13
4745  E[4]=E[4]+S[I]*10^X
4750  X=X-1
4755  NEXT I
4757  E[17]=L7*10+L8
4760  RETURN 
5000  PRINT #N,R1;E$
5010  FOR I1=1 TO E7
5020  PRINT #N;E[I1]
5030  NEXT I1
5040  RETURN 
6000  Z[3]=INT(X3/10^4)
6005  Z[1]=INT((X3-Z[3]*10^4)/100)
6010  Z[2]=X3-Z[3]*10^4-Z[1]*100
6020  GOSUB 9000
6030  RETURN 
6100  Z[1]=E[I]
6110  GOSUB 9000
6120  I=I+1
6130  RETURN 
6140  Z[1]=S[I]
6150  GOTO 6110
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 
9999  END 
