1  REM  ****  HP BASIC PROGRAM LIBRARY  ********************************
2  REM
3  REM        EMPLAB:  CTC PAYROLL PROGRAM, PART 22 OF 34
4  REM
5  REM        36213  REV B  6/73
6  REM
7  REM ****  CONTRIBUTED PROGRAM **************************************
9  H$='29'31'13'10'30
10  DIM E$[22],H$[5],A$[20]
11  DIM E[17],S[20]
100  FILES E1,E2,EAUX,E0
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"WHAT";
190  GOTO 160
200  READ E9,E7
210  DATA 2,17
220  READ #(E9+1);A9,M9
240  PRINT H$[1,2]"(1) DATA BASE OR (2) TIME CARD LABELS";
250  INPUT P7
260  IF P7=1 THEN 300
265  IF P7=2 THEN 285
270  PRINT '7'7"WHAT";
280  GOTO 250
285  PRINT "ENTER CURRENT DATE (MDDYY)";
286  INPUT D
287  IF D<10^6 AND D>9999 THEN 290
288  PRINT '7'7"INVALID DATE"
289  GOTO 285
290  D1=INT(D/10^4)
291  IF D1<1 OR D1>12 THEN 288
292  D2=INT((D-D1*10^4)/100)
293  IF D2<1 OR D2>31 THEN 288
294  D3=D-D1*10^4-D2*100
295  IF D3<72 THEN 288
297  GOTO 400
300  PRINT H$[1,2]"PRINT: (1) ALL LABELS (2) PARTIAL LABELS";
310  INPUT P6
320  IF P6=1 THEN 370
330  IF P6=2 THEN 400
340  PRINT '7'7'7'7"WHAT";
350  GOTO 310
370  L1=1001
380  L2=M9
390  GOTO 500
400  PRINT "BEGINNING EMP#";
410  INPUT L1
415  IF L1=0 AND P7=2 THEN 450
420  IF INT(L1)=L1 AND L1>1000 THEN 450
430  PRINT '7'7'7"INVALID EMP#";H$[3,5];
440  GOTO 400
450  GOTO P7 OF 453,3500
453  PRINT "ENDING EMP#";
455  INPUT L2
457  IF INT(L2)=L2 AND L2>1000 AND L2 >= L1 THEN 500
460  PRINT '7'7'7'7"INVALID EMP#";H$[3,5];
470  GOTO 450
500  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;
520  K=4
530  GOSUB 9910
1000  FOR I1=L1 TO L2
1010  U6=I1
1020  GOSUB 4000
1030  IF B1 THEN 9999
1060  GOSUB 4085
1070  IF  NOT B1 THEN 1074
1072  GOSUB 1080
1074  NEXT I1
1076  END 
1080  PRINT "EMP#:";TAB(11);
1090  X$=" "
1100  Z$="####  "
1110  Z[1]=U6
1120  GOSUB 9000
1130  PRINT "EMP NM: ";E$;
1140  K=1
1150  GOSUB 9900
1160  PRINT "TITLE:";TAB(13);
1170  S=1
1180  GOSUB 2000
1190  PRINT "DEPARTMENT:   ";
1200  GOSUB 2000
1210  PRINT "DEPENDENTS:";TAB(47);
1220  GOSUB 2000
1230  K=1
1240  GOSUB 9900
1250  PRINT "STATE:";TAB(13);
1260  GOSUB 2000
1270  PRINT "S.S: ";
1280  X$="0"
1290  Z$="###-##-####  "
1300  FOR I=1 TO 3
1310  Z[I]=S[I+4]
1320  NEXT I
1330  GOSUB 9000
1340  S=S+3
1350  PRINT "EXEMPTION:  ";
1360  GOSUB 2000
1370  K=1
1380  GOSUB 9900
1390  PRINT "MARITAL STAT:";
1400  GOSUB 2000
1410  PRINT "WK STATUS:";TAB(31);
1420  GOSUB 2000
1430  PRINT "SEX:";TAB(47);
1440  GOSUB 2000
1450  K=1
1460  GOSUB 9900
1470  PRINT "RACE:";TAB(13);
1480  GOSUB 2000
1490  PRINT "RATE:";TAB(25);
1500  E=5
1505  Z$="$###.###  "
1510  GOSUB 2110
1520  PRINT "RAISE: ";
1530  GOSUB 2100
1540  K=1
1550  GOSUB 9900
1560  PRINT "RAISE: ";
1570  GOSUB 2200
1580  PRINT "HIRED:  ";
1590  GOSUB 2200
1600  PRINT "TERM: ";
1610  GOSUB 2200
1620  K=1
1630  GOSUB 9900
1640  PRINT "BIRTH: ";
1650  GOSUB 2200
1660  PRINT "ST TAX:  ";
1680  GOSUB 2100
1690  PRINT "DISAB: ";
1695  GOSUB 2100
1700  K=1
1710  GOSUB 9900
1720  PRINT "CITY:   ";
1730  GOSUB 2100
1740  PRINT "ADVANCE: ";
1750  GOSUB 2100
1760  PRINT "AUTO:  ";
1770  GOSUB 2100
1780  K=1
1790  GOSUB 9900
1800  PRINT "INS:    ";
1810  GOSUB 2100
1820  PRINT "WK COMP:";TAB(31);
1830  GOSUB 2000
1835  PRINT "FICA STATUS:";
1840  Z[1]=L8
1845  GOSUB 9000
1850  K=8
1860  GOSUB 9900
1870  RETURN 
2000  X$=" "
2010  Z$="##  "
2020  Z[1]=S[S]
2030  GOSUB 9000
2040  S=S+1
2050  RETURN 
2100  Z$="$###.##  "
2110  X$=" "
2120  Z[1]=E[E]
2130  GOSUB 9000
2140  E=E+1
2150  RETURN 
2200  X$=" "
2210  Z$="##/##/##  "
2220  Z[3]=INT(E[E]/10^4)
2230  Z[1]=INT((E[E]-Z[3]*10^4)/100)
2240  Z[2]=E[E]-Z[3]*10^4-Z[1]*100
2250  GOTO 2130
3000  IF  NOT S[8] OR S[10] THEN 3150
3010  PRINT "NM: ";E$;
3020  K=1
3030  GOSUB 9900
3040  PRINT "EMP#:";U6;TAB(17)"STATE:";S[4];
3050  GOSUB 6000
3060  PRINT "DATE: ";
3070  Z$="##/##/##"
3080  X$=" "
3090  Z[1]=D1
3100  Z[2]=D2
3110  Z[3]=D3
3120  GOSUB 9000
3130  PRINT TAB(17)"DEPT:";S[2];
3140  K=2
3145  GOSUB 9900
3150  RETURN 
3500  I1=5
3502  I2=4
3503  GOSUB 9800
3505  F1=0
3507  IF  END #(E9+2) THEN 3600
3510  READ #(E9+2);U6
3512  IF SGN(U6)=-1 THEN 3518
3514  PRINT "ERR IN ST/DPT FILE"
3516  STOP 
3518  G1=INT(ABS(U6)/100)
3520  IF G1=42 THEN 3528
3522  READ #(E9+2);U6
3524  IF SGN(U6)=-1 THEN 3518
3526  GOTO 3522
3528  READ #(E9+2);U6
3530  IF SGN(U6)=-1 THEN 3620
3532  IF U6<100 THEN 3528
3534  IF F1 THEN 3560
3536  IF L1=0 THEN 3540
3538  IF U6#L1 THEN 3528
3540  F1=1
3560  GOSUB 4000
3565  IF B1 THEN 9999
3570  GOSUB 4085
3580  IF  NOT B1 THEN 3528
3590  GOSUB 3000
3595  GOTO 3528
3600  PRINT "STATE 42 NOT ON FILE"
3610  STOP 
3620  IF F1 THEN 9999
3630  PRINT '7'7"EMP# NOT IN STATE 42"
3640  STOP 
4000  REM
4010  B1=0
4020  R=U6-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";U6
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 4575
4150  B1=1
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
4572  L7=INT(E[17]/10)
4573  L8=E[17]-L7*10
4575  RETURN 
6000  GOTO P5 OF 6010,6030
6010  PRINT '13;
6020  RETURN 
6030  PRINT 
6040  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 
9800  PRINT "LABELS IN PRINTER";
9805  INPUT A$
9810  IF A$[1,1]#"Y" THEN 9800
9815  FOR I3=1 TO I1
9820  FOR J=1 TO I2
9825  PRINT J;
9830  GOSUB 6000
9835  NEXT J
9837  K=2
9838  GOSUB 9910
9840  FOR J=1 TO 100
9845  PRINT '18'18;
9850  NEXT J
9855  NEXT I3
9860  RETURN 
9900  GOSUB 6000
9910  FOR I=1 TO K
9920  PRINT "        ";
9930  GOSUB 6000
9940  NEXT I
9950  RETURN 
9999  END 
