1  REM  ****  HP BASIC PROGRAM LIBRARY  ********************************2  REM
3  REM        W2FORM:  CTC PAYROLL PROGRAM, PART 21 OF 34
4  REM
5  REM        36213  REV B  6/73
6  REM
7  REM ****  CONTRIBUTED PROGRAM **************************************
8  H$='29'31'13'26'30
9  DIM T$[15]
10  DIM E$[22],A$[20],H$[5],S$[10],F$[10],X$[20],Y$[10],Z$[20]
11  DIM F[32],E[17],C[6]
12  DIM P[100,2]
50  Y$="0123456789"
100  FILES E1,E2,EP1,EP2,E0,EAUX
200  READ E9,E7
210  DATA 2,17
220  N1=2*E9+1
230  MAT  READ #(N1+1),2;C
240  PRINT "WHICH PRINTER: (1) ACCOUNTING (2) ABDICK";
250  INPUT P5
260  IF P5=1 OR P5=2 THEN 300
265  PRINT '7'7'7'7'7"WHAT";
270  GOTO 250
300  PRINT H$[1,2]"ENTER EMP# AND COMPENSATIONS"
310  C=0
320  GOSUB 500
330  IF  NOT B2 THEN 370
340  C=C+1
345  P[C,1]=Z
347  T$="COMPENSATION"
350  GOSUB 550
355  P[C,2]=Z
360  PRINT 
365  GOTO 320
370  PRINT "ANY ERRORS";
375  INPUT A$
380  IF A$[1,1]#"Y" THEN 600
382  Q=C
385  GOSUB 3500
390  IF B3 THEN 600
395  P[C1,C2]=Z
397  GOTO 385
500  B2=0
502  PRINT "EMP#";
505  INPUT A$
510  IF A$="END" THEN 540
515  GOSUB 4200
520  IF B1 THEN 502
521  U6=Z
522  GOSUB 4000
523  IF B1 THEN 502
525  GOSUB 4085
530  IF  NOT B1 THEN 502
535  B2=1
540  RETURN 
550  PRINT T$;
555  INPUT X$
560  GOSUB 4300
565  IF B1 THEN 550
570  RETURN 
600  PRINT H$[1,2]"ENTER BEGINNING EMP#";
605  INPUT U7
607  PRINT "LOAD PRINTER WITH W-2 FORMS"
610  PRINT "READY";
615  INPUT A$
620  IF A$[1,1]#"Y" THEN 610
625  GOSUB 7000
630  F3=0
1000  IF  END #N1 THEN 1067
1010  READ #N1;G
1020  IF SGN(G)=-1 THEN 1035
1025  PRINT '7'7"ERROR IN STATE/DPT FILE"
1030  STOP 
1035  G1=INT(ABS(G)/100)
1040  READ #N1;G
1045  IF SGN(G)=-1 THEN 1035
1050  IF G<1001 THEN 1040
1051  IF F3 THEN 1055
1052  IF U7=-1 THEN 1054
1053  IF G#U7 THEN 1040
1054  F3=1
1055  U6=G
1060  GOSUB 2000
1065  GOTO 1040
1067  IF F3 THEN 9998
1070  PRINT "BEGINNING EMP# NOT ON ST/DPT FILE"
1075  STOP 
2000  REM
2005  GOSUB 4000
2010  IF  NOT B1 THEN 2035
2015  K=12
2020  GOSUB 9900
2025  PRINT U6;"INVALID EMP#";
2030  GOTO 2325
2035  GOSUB 4085
2040  IF  NOT B1 THEN 2015
2045  IF  NOT F[31] THEN 2335
2047  GOSUB 8000
2050  X=F[24]
2060  GOSUB 2600
2065  PRINT TAB(13);
2070  X=F[31]
2075  GOSUB 2600
2080  FOR I=1 TO C
2085  IF U6=P[I,1] THEN 2100
2090  NEXT I
2095  GOTO 2115
2100  PRINT TAB(26);
2105  X=P[I,2]
2110  GOSUB 2600
2115  PRINT TAB(49);
2120  X=F[23]
2125  GOSUB 2600
2130  X=F[31]
2135  IF X <= C[1] THEN 2145
2140  X=C[1]
2145  PRINT TAB(62);
2150  GOSUB 2600
2155  PRINT TAB(71);
2160  A$="S"
2165  IF S9 THEN 2175
2170  A$="M"
2175  PRINT A$;
2180  K=2
2185  GOSUB 9900
2190  PRINT TAB(20);
2195  X$="0"
2200  Z$="### ## ####"
2205  Z[1]=S5
2210  Z[2]=S6
2215  Z[3]=S7
2220  GOSUB 9000
2225  IF  NOT F[25] THEN 2245
2227  IF  END #(N1+1) THEN 2245
2228  READ #(N1+1),8
2230  READ #(N1+1);S,S$,F$
2235  IF S#G1 THEN 2230
2240  PRINT TAB(35);S$;TAB(45);F$;
2245  PRINT TAB(71);
2250  X=F[25]
2255  GOSUB 2600
2260  K=2
2265  GOSUB 9900
2270  PRINT E$;
2275  X=0
2280  IF G1#31 THEN 2315
2300  PRINT TAB(35)"NEW YORK";TAB(45);"FORM#";
2310  X=E[13]
2315  PRINT TAB(71);
2320  GOSUB 2600
2325  K=10
2330  GOSUB 9900
2335  RETURN 
2600  X$=" "
2605  Z$="##### "
2607  X8=X*100
2610  Z[1]=INT(X8/100)
2615  GOSUB 9000
2620  X$="0"
2625  Z$="##"
2635  Z[1]=X8-INT(X8/100)*100
2655  GOSUB 9000
2660  RETURN 
3500  B3=0
3505  PRINT "ENTER ITEM# AND CODE";
3510  INPUT X$
3515  IF X$#"END" THEN 3525
3520  B3=1
3522  RETURN 
3525  L=LEN(X$)
3526  IF L<2 THEN 3600
3530  A$=X$[1,L-1]
3535  GOSUB 4200
3536  IF B1 THEN 3505
3540  IF Z<1 OR Z>Q THEN 3600
3545  C1=Z
3550  IF X$[L]#"E" THEN 3570
3555  GOSUB 500
3560  IF  NOT B2 THEN 3500
3565  C2=1
3567  RETURN 
3570  IF X$[L]#T$[1,1] THEN 3600
3575  GOSUB 550
3580  C2=2
3585  RETURN 
3600  PRINT '7'7"INVALID DATA";H$[3,5];
3605  GOTO 3500
4000  B1=0
4005  IF U6<1001 THEN 4240
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;U6;
4043  GOSUB 6000
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 4180
4120  B1=1
4130  X=INT(E[2]/1000)
4145  S5=E[2]-X*1000
4150  S6=INT(E[3]/10^4)
4155  S7=E[3]-S6*10^4
4160  X=INT(E[4]/10^5)
4165  S9=INT((E[4]-X*10^5)/10^4)
4173  MAT  READ #(N+E9),R1;F
4175  RETURN 
4180  PRINT "EMPLOYEE NUMBER NOT IN USE";
4183  GOSUB 6000
4185  RETURN 
4200  B1=Z=0
4210  FOR I1=1 TO LEN(A$)
4215  FOR I2=1 TO 10
4230  IF A$[I1,I1]=Y$[I2,I2] THEN 4270
4235  NEXT I2
4240  PRINT '7'7'7'7"INVALID DATA";H$[3,5];
4245  B1=1
4250  RETURN 
4270  Z=Z*10+I2-1
4275  NEXT I1
4280  RETURN 
4300  B1=0
4305  L=LEN(X$)
4310  IF L>3 AND L<9 THEN 4330
4315  PRINT '7'7'7'7"INVALID DATA";H$[3,5];
4320  B1=1
4325  RETURN 
4330  IF X$[L-2,L-2]#"." THEN 4315
4335  A$=X$[1,L-3]
4340  GOSUB 4200
4345  IF B1 THEN 4325
4350  X=Z
4355  A$=X$[L-1]
4360  GOSUB 4200
4365  IF B1 THEN 4325
4370  Z=X+Z*.01
4375  RETURN 
6000  GOTO P5 OF 6010,6030
6010  PRINT '13;
6020  RETURN 
6030  PRINT 
6040  RETURN 
7000  GOTO P5 OF 7010,7050
7010  PRINT " ";
7020  FOR I=1 TO 60
7030  PRINT '18;
7040  NEXT I
7050  RETURN 
8000  K=2
8010  GOSUB 9910
8020  PRINT "74-1605174";TAB(26)"272,873";
8075  GOSUB 6000
8085  PRINT "COMPUTER TERMINAL";
8095  GOSUB 6000
8100  PRINT "9725 DATA POINT DRIVE";
8105  GOSUB 6000
8110  PRINT "SAN ANTONIO, TEXAS   78284";
8120  K=4
8130  GOSUB 9900
8150  RETURN 
9000  REM
9003  LET Z2=Z3=Z4=Z5=Z7=Z8=Z9=1
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 
9998  GOSUB 7000
9999  END 
