1 REM **** HP BASIC PROGRAM LIBRARY ******************************* 3 REM EDIT: CTC PAYROLL PROGRAM, PART 23 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 T[4,12],I[16],E[17],F[32] 11 DIM H$[5],A$[20],E$[22] 100 FILES E1,E2,EP1,EP2,E0,AJ 150 PRINT H$[1,2]"WHICH PRINTER: (1) ACCOUNTING (2) ABDICK"; 160 INPUT P5 170 IF P5=1 OR P5=2 THEN 191 180 PRINT '7'7'7'7'7"WHAT"; 190 GOTO 160 191 PRINT "ALL DEDUCTIONS"; 192 INPUT A$ 193 P6=0 194 IF A$="YES" THEN 200 195 P6=1 196 IF A$="NO" THEN 200 197 PRINT '7'7'7"INVALID DATA" 198 GOTO 191 200 READ E9,E7 210 DATA 2,17 220 N1=2*E9+1 230 MAT T=ZER 240 P=0 300 PRINT H$[1,2]"DATE OF REPORT (MDDYY)"; 310 INPUT D 320 I=1 330 GOSUB 400 340 IF B1 THEN 300 350 PRINT "DATE OF PAYROLL (MDDYY)"; 355 INPUT D 360 I=4 370 GOSUB 400 380 IF NOT B1 THEN 500 390 GOTO 350 400 B1=0 405 IF D<10^6 AND D>9999 THEN 440 410 PRINT '7'7'7'7'7"INVALID DATE";H$[3,5]; 420 B1=1 430 RETURN 440 D[I]=INT(D/10^4) 450 IF D[I]>12 THEN 410 460 D[I+1]=INT((D-D[I]*10^4)/100) 470 IF D[I+1]>31 THEN 410 480 D[I+2]=D-D[I]*10^4-D[I+1]*100 490 IF D[I+2]<71 THEN 410 495 RETURN 500 PRINT "BEGINNING STATE#"; 510 INPUT G2 520 IF INT(G2)=G2 AND G2 >= -1 AND G2<51 THEN 600 530 PRINT '7'7'7'7"INVALID STATE#";H$[3,5]; 540 GOTO 500 600 PRINT "BEGINNING PAGE#"; 610 INPUT P 620 P=P-1 630 GOSUB 8000 640 L0=1 1000 IF END #N1 THEN 1085 1010 READ #N1;G3 1020 IF SGN(G3)=-1 THEN 1032 1025 PRINT '7'7'7'7"ERROR IN STATE/DEPT FILE" 1030 STOP 1032 REM 1035 G1=INT(ABS(G3)/100) 1036 GOTO L0 OF 1037,1040 1037 IF G2=-1 THEN 1039 1038 IF G2#G1 THEN 1040 1039 L0=2 1040 READ #N1;G3 1050 IF SGN(G3)=-1 THEN 1090 1055 IF G3<1001 THEN 1040 1060 U6=G3 1070 GOSUB 2000 1080 GOTO 1040 1085 IF L0=1 THEN 1480 1086 F1=2 1087 GOTO 1095 1090 F1=1 1092 GOTO L0 OF 1160,1095 1095 PRINT TAB(7); 1100 Z$="##" 1110 X$=" " 1120 Z[1]=G1 1130 GOSUB 9000 1140 J2=1 1150 GOSUB 3000 1160 GOSUB 3300 1165 GOTO L0 OF 1230,1170 1170 P9=P9+6 1180 IF P9<59 THEN 1230 1190 GOTO P5 OF 1220,1200 1200 K=66-P9 1210 GOSUB 9910 1220 GOSUB 8000 1230 GOTO F1 OF 1035,1300 1300 IF P9=10 THEN 1350 1310 GOTO P5 OF 1340,1320 1320 K=66-P9 1330 GOSUB 9900 1340 GOSUB 8000 1350 PRINT TAB(6)"COMPANY"; 1360 J2=7 1370 GOSUB 3000 1380 END 1480 PRINT '7'7'7'7'7"BEGINNING STATE# NOT ON ST/DPT FILE" 1490 STOP 2000 GOSUB 4000 2010 IF B1 THEN 9999 2020 GOSUB 4085 2030 IF NOT B1 THEN 2610 2040 IF L7=0 THEN 2270 2050 FOR I1=1 TO L7 2060 IF END #(N1+1) THEN 2250 2070 MAT READ #(N1+1);I 2080 IF I[1]#U6 THEN 2070 2082 J=1 2085 IF I[13]=1 THEN 2100 2090 J=3 2100 FOR L=2 TO 11 2120 I=1 2130 IF L=2 THEN 2190 2140 I=2 2150 IF L<8 THEN 2190 2160 I=3 2170 IF L#11 THEN 2190 2180 I=4 2190 X=I[L] 2200 GOSUB 2700 2210 NEXT L 2220 NEXT I1 2230 READ #(N1+1),1 2240 GOTO 2270 2250 PRINT '7'7'7'7"ERROR ON COMM/ADJ FILE" 2260 STOP 2270 IF F[8]=0 THEN 2460 2280 J=3 2285 I=1 2290 C=X=F[8] 2300 GOSUB 2700 2310 I=2 2320 FOR L=9 TO 10 2330 X=F[L] 2340 C=C-F[L] 2350 GOSUB 2700 2360 NEXT L 2370 FOR L=11 TO 16 2380 IF L<14 THEN 2400 2390 I=3 2400 X=E[L] 2410 C=C-E[L] 2415 GOSUB 2700 2420 NEXT L 2430 I=4 2440 X=C 2450 GOSUB 2700 2460 J=5 2470 I=1 2480 X=C=F[31] 2490 GOSUB 2700 2500 I=2 2510 FOR L=23 TO 30 2520 IF L<28 THEN 2540 2530 I=3 2540 X=F[L] 2550 C=C-F[L] 2560 GOSUB 2700 2570 NEXT L 2580 I=4 2590 X=C 2600 GOSUB 2700 2610 RETURN 2700 S=SGN(X) 2702 X=ABS(X)*100 2705 A1=INT(X/100) 2710 A2=X-A1*100 2715 A=T[I,J]+A1*S 2720 B=T[I,J+1]+A2*S 2730 GOSUB 2800 2740 T[I,J]=A 2750 T[I,J+1]=B 2795 RETURN 2800 IF B>-100 THEN 2830 2815 A=A-1 2820 B=B+100 2830 IF B>99 THEN 2860 2835 IF SGN(A)*SGN(B) >= 0 THEN 2850 2840 A=A-SGN(A) 2845 B=B-100*SGN(B) 2850 RETURN 2860 A=A+INT(B*.01) 2865 B=(B*.01-INT(B*.01))*100 2867 IF B-INT(B)<.8 THEN 2880 2870 B=INT(B)+1 2880 RETURN 3000 FOR S=1 TO 4 3020 GOTO S OF 3030,3040,3050,3060 3030 A$=" GROSS" 3035 GOTO 3070 3040 A$=" TAXES" 3045 GOTO 3070 3050 A$="DEDUCTIONS" 3055 GOTO 3070 3060 A$=" NET PAY" 3070 PRINT TAB(14);A$;TAB(30); 3080 FOR T=J2 TO J2+4 STEP 2 3090 X$=" " 3100 Z$="+#######." 3110 Z[1]=T[S,T] 3120 GOSUB 9000 3130 X$="0" 3140 Z$="## " 3150 Z[1]=T[S,T+1] 3160 GOSUB 9000 3170 NEXT T 3175 GOSUB 6000 3180 NEXT S 3190 K=2 3200 GOSUB 9910 3210 RETURN 3300 FOR I=1 TO 4 3310 FOR J=1 TO 5 STEP 2 3320 A=T[I,J+6]+T[I,J] 3330 B=T[I,J+7]+T[I,J+1] 3340 GOSUB 2800 3350 T[I,J+6]=A 3360 T[I,J+7]=B 3370 T[I,J]=T[I,J+1]=0 3380 NEXT J 3390 NEXT I 3395 RETURN 4000 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#>";1000+200*E9;"FILE SPACE LIMIT";U6 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 L7=INT(E[17]/10) 4160 IF NOT P6 THEN 4173 4165 E[14]=E[15]=E[16]=0 4173 MAT READ #(N+E9),R1;F 4175 RETURN 6000 GOTO P5 OF 6010,6030 6010 PRINT '13; 6020 RETURN 6030 PRINT 6040 RETURN 8000 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'18'18'18'18'18'18'18'18'18'18; 8010 K=2 8020 GOSUB 9910 8030 PRINT TAB(17)"P A Y R O L L C A L C U L A T I O N E D I T"; 8035 P=P+1 8040 PRINT TAB(71)"PAGE:"; 8042 X$=" " 8044 Z$=" ###" 8046 Z[1]=P 8048 GOSUB 9000 8050 K=1 8060 GOSUB 9900 8070 PRINT TAB(13)"PAYROLL DATE: "; 8075 X$=" " 8080 Z$="##/##/##" 8085 FOR I=4 TO 6 8090 Z[I-3]=D[I] 8100 NEXT I 8105 GOSUB 9000 8110 PRINT TAB(45)"REPORT DATE: "; 8120 FOR I=1 TO 3 8130 Z[I]=D[I] 8140 NEXT I 8150 GOSUB 9000 8160 K=2 8170 GOSUB 9900 8180 PRINT TAB(6)"STATE";TAB(28)"CURR QUARTER CURR PERIOD "; 8185 PRINT "YEAR-TO-DATE"; 8190 K=2 8200 GOSUB 9900 8210 P9=10 8220 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 K5=1 TO K 9915 PRINT " "; 9920 GOSUB 6000 9930 NEXT K5 9940 RETURN 9950 FOR K5=1 TO K 9960 PRINT " "; 9970 NEXT K5 9980 RETURN 9999 END