1  REM  ****  HP BASIC PROGRAM LIBRARY  ******************************
2  REM
3  REM        EADD:  CTC PAYROLL PROGRAM, PART 2 OF 34
4  REM
5  REM        36213  REV B  6/73
6  REM
7  REM  ****  CONTRIBUTED PROGRAM  ***********************************
8  H$=""
9  REM H$=(HU,EOF,CR,^,EOL)
10  DIM E$[30],B$[20],X$[20],A$[20],C$[10]
11  DIM E[20]
13  DIM H$[5],D$[10]
50  C$="0123456789"
100  FILES E1,E2,ETRAN,EAUX
200  READ E9,E7
210  DATA 2,17
220  READ #(E9+2),1;A9,M9
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  GOSUB 3000
420  IF B1 THEN 400
430  D1=Z
460  GOTO 530
470  PRINT #(E9+1);E$[1,22],U6,T1,D$,T2,T3,T4,T5,T6,D1,T7
475  IF TYP(-(E9+1))=3 THEN 340
480  PRINT #(E9+1); END 
530  D$="A"
540  T1=1
550  L0=2
1000  REM *ADD EMPLOYEE*
1005  U6=A9
1015  GOSUB 4015
1020  IF  NOT B1 THEN 1050
1030  PRINT "ERROR IN A9";A9
1040  STOP 
1050  GOSUB 4085
1060  IF B1 THEN 1030
1070  MAT E=ZER
1075  PRINT H$[1,2]"**EMPLOYEE NUMBER**";A9
1125  PRINT "EMPLOYEE NAME";
1130  INPUT E$
1132  IF E$="END" THEN 9999
1134  IF LEN(E$)<23 THEN 1140
1136  PRINT "EMPLOYEE NAME >22 CHARACTERS";H$[3,5];
1138  GOTO 1125
1140  PRINT "TITLE";
1145  K1=1
1147  K2=100
1149  K3=99
1150  GOSUB 1900
1155  IF B1 THEN 1140
1160  PRINT "DEPARTMENT";
1165  GOSUB 1900
1175  IF B1 THEN 1160
1180  PRINT "DEPENDENTS";
1190  K3=19
1195  GOSUB 1900
1200  IF B1 THEN 1180
1205  PRINT "STATE CODE";
1210  INPUT A$
1215  GOSUB 4200
1220  IF Z<51 THEN 1225
1222  GOSUB 1920
1224  GOTO 1205
1225  E[2]=Z
1240  PRINT "SOCIAL SECURITY#";
1242  INPUT B$
1244  IF LEN(B$)=11 THEN 1247
1245  GOSUB 1920
1246  GOTO 1240
1247  IF B$[4,4]#"-" THEN 1245
1248  IF B$[7,7]#"-" THEN 1245
1250  A$=B$[1,3]
1251  GOSUB 4200
1252  IF B1 THEN 1245
1253  E[2]=E[2]*1000+Z
1254  A$[1,2]=B$[5,6]
1255  A$[3,6]=B$[8,11]
1256  A$=A$[1,6]
1257  GOSUB 4200
1258  IF B1 THEN 1245
1260  E[3]=Z
1265  K1=4
1270  K2=10
1275  K3=1
1280  PRINT "EXEMPT/NONEXEMPT (0/1)";
1285  GOSUB 1900
1290  IF B1 THEN 1280
1295  PRINT "MARRIED/SINGLE (0/1)";
1300  GOSUB 1900
1305  IF B1 THEN 1295
1310  PRINT "WORK STATUS";
1312  K3=9
1315  GOSUB 1900
1320  IF B1 THEN 1310
1325  PRINT "MALE/FEMALE (0/1)";
1327  K3=1
1330  GOSUB 1900
1335  IF B1 THEN 1325
1340  PRINT "RACE";
1345  K3=9
1350  GOSUB 1900
1355  IF B1 THEN 1340
1356  PRINT "WORKMAN'S COMP";
1357  GOSUB 1900
1358  IF B1 THEN 1356
1360  PRINT "HOURLY RATE";
1365  K=6
1367  L0=3
1370  GOSUB 1930
1375  IF B1 THEN 1360
1377  K=5
1380  GOSUB 2000
1382  L0=2
1385  IF B1 THEN 1360
1390  PRINT "AMOUNT OF LAST SALARY INCREASE";
1395  K=7
1400  GOSUB 1930
1405  IF B1 THEN 1390
1410  K=6
1415  GOSUB 2000
1420  IF B1 THEN 1390
1425  X$="DATE OF "
1430  FOR I=1 TO 4
1435  GOTO I OF 1440,1450,1460,1470
1440  B$="LAST SALARY INCREASE"
1445  GOTO 1480
1450  B$="HIRE"
1455  GOTO 1480
1460  B$="TERMINATION"
1465  GOTO 1480
1470  B$="BIRTH"
1480  PRINT X$;B$;
1485  GOSUB 3000
1490  IF B1 THEN 1480
1491  IF Z=0 THEN 1497
1495  E[I+6]=X2*10^4+X*100+X1
1496  GOTO 1498
1497  E[I+6]=Z
1498  NEXT I
1500  FOR I=1 TO 6
1501  GOTO I OF 1502,1504,1506,1508,1510,1512
1502  A$="STATE TAX"
1503  GOTO 1515
1504  A$="DISABILITY"
1505  GOTO 1515
1506  A$="CITY TAX"
1507  GOTO 1515
1508  A$="ADVANCE"
1509  GOTO 1515
1510  A$="AUTO"
1511  GOTO 1515
1512  A$="INSURANCE"
1515  PRINT A$;
1517  K=6
1520  GOSUB 1930
1525  IF B1 THEN 1505
1527  K=I+10
1530  GOSUB 2000
1535  IF B1 THEN 1505
1540  NEXT I
1541  PRINT "FICA NON-EXEMPT/EXEMPT (0/1)";
1542  INPUT A$
1543  GOSUB 4200
1544  IF  NOT B1 THEN 1550
1545  GOSUB 1920
1546  GOTO 1541
1550  IF Z<0 OR Z>1 THEN 1545
1552  E[17]=Z
1556  PRINT 
1557  PRINT "IS THE ABOVE ALL RIGHT";
1558  INPUT X$
1559  IF X$[1,1]#"Y" THEN 1070
1560  GOSUB 1700
1570  REM
1572  IF A9<M9 THEN 1575
1573  M9=A9
1575  A9=A8
1577  PRINT #(E9+2),1;A9,M9
1580  GOTO 470
1700  PRINT #N,R1;E$
1710  FOR I=1 TO E7
1720  PRINT #N;E[I]
1730  NEXT I
1740  RETURN 
1900  INPUT A$
1905  GOSUB 4200
1907  IF B1 THEN 1920
1910  IF Z>K3 THEN 1920
1915  E[K1]=E[K1]*K2+Z
1917  RETURN 
1920  PRINT '7'7'7'7'7'7'7'7"INVALID DATA"'7'7'7'7'7'7;H$[3,5];
1922  B1=1
1925  RETURN 
1930  B1=0
1935  INPUT B$
1940  IF LEN(B$)>K THEN 1920
1942  IF LEN(B$)<L0+2 THEN 1920
1945  IF B$[LEN(B$)-L0,LEN(B$)-L0]#"." THEN 1920
1950  RETURN 
2000  A$=B$[1,LEN(B$)-L0-1]
2010  GOSUB 4200
2020  IF B1 THEN 1920
2030  E[K]=Z
2040  A$=B$[LEN(B$)-L0+1]
2050  GOSUB 4200
2060  IF B1 THEN 1920
2070  E[K]=E[K]+Z/10^L0
2080  RETURN 
3000  B1=0
3005  INPUT A$
3010  L=LEN(A$)
3020  IF L<7 AND L>4 THEN 3060
3030  PRINT '7'7'7"INVALID DATE";H$[3,5];
3040  B1=1
3050  RETURN 
3060  GOSUB 4200
3070  IF B1 THEN 3030
3075  IF Z=0 THEN 3140
3080  X=INT(Z/10^4)
3090  IF X>12 OR X<1 THEN 3030
3100  X1=INT((Z-X*10^4)/100)
3110  IF X1>31 OR X1<1 THEN 3030
3120  X2=Z-X*10^4-X1*100
3130  IF X2<1 THEN 3030
3140  RETURN 
4000  REM *FIND LOGICAL LOCATION AND READ RECORD*
4015  B1=0
4020  R=A9-1000
4050  FOR I=1 TO E9
4055  IF R <= I*200 THEN 4080
4060  NEXT I
4065  PRINT "NEXT EMP# >";E9*200;" FILE SPACE LIMIT"
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
4105  IF E[1]=-1 THEN 4140
4110  B1=1
4130  RETURN 
4140  A8=E[2]
4150  RETURN 
4200  Z=0
4205  B1=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 
9999  END 
