REMARK *******************************************\ * P/R210.BAS HISTORY FILE MAINTENANCE *\ * 5/17/79 11:26 PM *\ ******************************************* %INCLUDE CURSOR DIM H1(3),H2(9),I1(3),I2(9),G2$(5),G3(5) DEF FNEXACT(X0,X1)=X0*1000000+X1 REMARK FUNCTION TO FORM SEARCH KEY WRITTEN=999999 YES=1 GOTO 6000 %INCLUDE GENINFO %INCLUDE SUBS1 %INCLUDE HISTORY 1000 H=0:Y2=1:RECORD.COUNT=HISTORY.RECORDS:GOSUB 1060 REMARK ROUTINE TO SEARCH HISTORY FILE AND HISTORY INPUT FILE IF H <>-1 OR FINDNEXT=YES THEN RETURN 1010 H=0:Y2=2:RECORD.COUNT=NEW.RECORDS% SEARCH.FAILURE%=0 GOSUB 1060 IF VAR1 <> INT(K/1000000) THEN SEARCH.FAILURE%=YES RETURN %INCLUDE PR-SEARCH 5300 X1=341:X2=6:X3=1:X4=999999:GOSUB 345 REMARK ENTER CHECK NUMBER H1(3)=X0 RETURN 5310 X1=274+F*64:X2=9:X3=0:X4=999999.99:GOSUB 345 REMARK ENTER HOURS AND PAY SUMMARY FIELDS H2(F-1)=X0 RETURN 5320 X1=274+F*64:X2=9:X3=0:X4=999999.99:GOSUB 345 REMARK ENTER DEDUCTION AMOUNT 5325 H2(9)=H2(9)-H2(F-1)+X0 REMARK ACCUMULATE TO TOTAL DEDUCTIONS 5330 H2(F-1)=X0 5335 X1=914:GOSUB 210 REMARK RE-DISPLAY TOTAL DEDUCTIONS AFTER FIELD ENTRY PRINT USING A1$; H2(9) 5340 RETURN 6000 A1$="######.##" B$="######" Y2=1 Y9=4 OPEN "P/R0F120.DAT" RECL 102 AS 1 REMARK OPEN PAYROLL HISTORY AND HISTORY INPUT FILES CREATE "HISTORY.DAT" RECL 102 AS 2 OPEN "CRT" RECL 1100 AS 19 REMARK OPEN CRT MASK FILE OPEN "G/I0F010.DAT" RECL 200 AS Y9:GOSUB 700 REMARK OPEN AND LOAD GENERAL INFORMATION FILE X0=9:GOSUB 260 REMARK LOAD HISTORY FILE MAINTENANCE CRT MASK 6015 X2=1:X3=0:X4=2 REMARK ENTER OPERATION CODE X2$="ENTER OPERATION(0=EXIT;1=ADD;2=INQUIRE,CHANGE OR DELETE)" GOSUB 665 IF X0 = 0 THEN\ REMARK IF ZERO ENTERED, BRANCH TO WRAPUP ROUTINES X1=64:GOSUB 210:PRINT "WORKING... DO NOT INTERRUPT!";TAB(70):\ GOTO 9000 IF X0=1 THEN 6200 REMARK BRANCH TO ADD ROUTINE IF CODE =1 REMARK CHANGE HISTORY RECORD ROUTINE 6025 X1=265:X2=3:X3=0:X4=999:GOSUB 345 REMARK ENTER EMPLOYEE NUMBER IF X0>0 THEN EMPL.NO=X0 ELSE GOTO 6015 FINDNEXT=YES K=FNEXACT(EMPL.NO,0):GOSUB 1000 REMARK SEARCH HISTORY FILE FOR FIRST RECORD WHICH\ CORRESPONDS TO EMPLOYEE ENTERED 6055 IF VAR1 <> EMPL.NO AND SEARCH.FAILURE% <> YES\ THEN GOSUB 1010 IF VAR1 > EMPL.NO OR L>RECORD.COUNT THEN X2$="NOT ON FILE":\ REMARK IF RECORD NOT FOUND, FLASH BULLETIN TO OPERATOR GOSUB 615:GOTO 6025 READ #Y2,L;VAR1,VAR2,VAR3 IF VAR3=9999999 THEN\ REMARK IF RECORD HAS BEEN LOGICALLY DELETED, SKIP IT L=L+1:GOTO 6055 IF VAR1 > EMPL.NO THEN\ X2$="NOT ON FILE":GOSUB 615:GOTO 6025 6060 Y6=Y2:EMPL.RECORD%=L X0=EMPL.RECORD% GOSUB 905 6065 X1=265:GOSUB 210 REMARK DISPLAY RECORD ON CRT GOSUB 7015 6070 X2=2 REMARK ENTER FIELD TO CHANGE ON RECORD X3=0 X4=99 X2$="ENTER FIELD TO CHANGE (0=NONE; 99=DELETE)" GOSUB 665 IF X0 > 10 AND X0<99 THEN GOTO 6070 REMARK REJECT INVALID FIELD NUMBER IF X0=0 THEN 6090 REMARK SAVE RECORD IF CODE=0 IF X0=99 THEN 6150 REMARK BRANCH TO DELETE ROUTINE IF CODE=99 F=X0 ON F GOSUB 5300,5310,5310,5310,5310,5320,5320,5320,5320,5320 REMARK CHANGE FIELD INDICATED BY FIELD NUMBER ENTERED GOTO 6070 6090 X0=EMPL.RECORD%:GOSUB 910 FINDNEXT=YES 6095 H1(2)=H1(2)+1 K=FNEXACT(H1(1),H1(2)) GOSUB 1000 REMARK FIND NEXT EMPLOYEE HISTORY RECORD 6100 IF VAR1 <> H1(1) OR L > RECORD.COUNT\ AND SEARCH.FAILURE=0 THEN GOSUB 1010 REMARK SEARCH FOR NEXT RECORD ON HISTORY FILE IF VAR1 <> H1(1) OR L > RECORD.COUNT THEN GOTO 6025 REMARK IF NO MORE RECORDS FOR THIS EMPLOYEE, GET NEW NUMBER READ #Y2,L;VAR1,VAR2,VAR3 IF VAR3=9999999 THEN GOTO 6095 ELSE GOTO 6060 REMARK IGNORE LOGICALLY DELETED HISTORY RECORDS 6150 X2=3:X3=0:X4=0 REMARK IF VERIFY THE DELETE OPERATION BY ENTERING CODE X2$="ENTER DELETE CODE" GOSUB 665 IF X0$ = "DEL" THEN H1(3)=9999999:\ X0=EMPL.RECORD%:GOSUB 910:\ X2$="RECORD DELETED":GOSUB 615:\ GOTO 6095\ ELSE GOTO 6070 REMARK REJECT IMPROPER CODE AND RE-PROMPT FOR EMPLOYEE NUMBER 6200 GOSUB 265 X1=265:X2=3:X3=0:X4=999:GOSUB 345 REMARK ENTER EMPLOYEE NUMBER TO ADD TO HISTORY FILE FINDNEXT=0 6210 IF X0=0 THEN GOTO 6015 REMARK REQUEST OPERATION CODE IF ZERO EMPLOYEE NUMBER DIM H1(3),H2(9) REMARK RE-INITIALIZE HISTORY RECORD ARRAY H1(1)=X0 X1=290 GOSUB 673 REMARK INPUT CHECK DATE H1(2)=X0 H1(2)=INT(X0/100)*100 REMARK CONVERT DATE TO YYMMDD FROM MMDDYY H1(2)=(X0-H1(2))*10000+H1(2)/100 K=FNEXACT(H1(1),H1(2)) GOSUB 1000 REMARK CHECK FOR DUPLICATE RECORD ON FILE IF H=-1 THEN GOTO 6230 READ #Y2,L;VAR1,VAR2,VAR3 IF VAR3 <> 9999999 THEN\ REMARK IF 'NEW' RECORD WAS FOUND ON THE FILE AND IT X2$="ALREADY ON FILE":GOSUB 615:GOTO 6200\ REMARK HASN'T BEEN DELETED, FLASH ERROR AND RE-PROMPT; ELSE\ REMARK OTHERWISE, REUSE THE LOGICALLY DELETED RECORD RE.USE.DELETED.RECORD=YES:Y6=Y2:EMPL.RECORD%=L:GOTO 6240 REMARK TO MAINTAIN PERFECT ORDER IN THE FILE 6230 EMPL.RECORD%=L:Y6=2 6240 GOSUB 5300 REMARK INPUT CHECK NUMBER 6245 FOR F=2 TO 5 REMARK ENTER HOURS AND PAY GOSUB 5310 NEXT F 6250 FOR F=6 TO 9 REMARK ENTER DEDUCTION AMOUNTS GOSUB 5320 NEXT F 6255 X2=2:X3=0:X4=99 X2$="ENTER FIELD TO CHANGE (0=NONE, 99=CANCEL)":GOSUB 665 REMARK ALLOW CHANGES TO ENTERED FIELDS IF X0=0 THEN 6275 REMARK BRANCH IF NO CHANGES IF X0=99 THEN X2$="CANCEL":GOSUB 615:GOTO 6200 REMARK RESTART DATA ENTRY IF CANCEL CODE WAS ENTERED IF X0 > 10 AND X0 < 99 THEN GOTO 6255 REMARK REJECT INVALID FIELD NUMBERS F=X0 ON F GOSUB 5300,5310,5310,5310,5310,5320,5320,5320,5320,5320 REMARK CHANGE FIELDS SPECIFIED BY OPERATOR GOTO 6255 6275 IF RE.USE.DELETED.RECORD=YES THEN GOTO 6285 IF EMPL.RECORD% > NEW.RECORDS% THEN GOTO 6280 REMARK INSERT OR APPEND NEW RECORD INTO HISTORY INPUT FILE FOR I%=NEW.RECORDS% TO EMPL.RECORD% STEP -1 READ #2,I%;LINE X0$ PRINT USING "&";#2,I%+1;X0$ NEXT I% 6280 NEW.RECORDS%=NEW.RECORDS%+1 6285 X0=EMPL.RECORD%:GOSUB 910 REMARK WRITE THE NEW RECORD CLOSE 2:OPEN "HISTORY.DAT" RECL 102 AS 2 REMARK CLOSE AND RE-OPEN FILE TO SAVE FCB CONTENTS RE.USE.DELETED.RECORD=0 GOTO 6200 7015 X1=265:GOSUB 210 REMARK DISPLAY PAYROLL HISTORY RECORD ON CRT PRINT USING "###"; H1(1); REMARK DISPLAY EMPLOYEE NUMBER X1=23:GOSUB 215 REMARK DISLPAY DATE IN MMDDYY FORMAT X0=H1(2)*100-INT(H1(2)/10000)*(1000000-1) GOSUB 680.5 PRINT X1=22:GOSUB 215 REMARK DISPLAY CHECK NUMBER PRINT USING B$; H1(3) FOR I%=1 TO 9 REMARK DISPLAY REMAINING PAYROLL HISTORY FIELDS X1=19:GOSUB 215 PRINT USING A1$; H2(I%) NEXT I% RETURN 9000 CLOSE 1,19 REMARK CLOSE ALL OPENED FILES... IF NEW.RECORDS% = 0 THEN DELETE 2:GOTO 9910 CLOSE 2 9005 OPEN "P/R0F120.DAT" RECL 102 AS 1,"HISTORY.DAT" RECL 102 AS 2 REMARK REOPEN FILES NEEDED FOR MERGE CREATE "WORKFILE.DAT" RECL 102 AS 3 BUFF 40 RECS 128 GOSUB 9010 REMARK READ FIRST HISTORY RECORD GOSUB 9020 REMARK READ FIRST HISTORY INPUT RECORD 9007 IF H1(1)=WRITTEN AND I1(1)=WRITTEN THEN GOTO 9900 IF I1(1) = WRITTEN THEN GOTO 9008 REMARK WRITE REMAINING HISTORY RECORDS IF EOF MASTER IF FNEXACT(H1(1),H1(2)) >= FNEXACT(I1(1),I1(2)) THEN\ REMARK WRITE THE NEW HISTORY RECORD IF IT IS LOWER OUTPUT.COUNT%=OUTPUT.COUNT%+1:\ PRINT #3;I1(1),I1(2),I1(3),I2(1),I2(2),I2(3),I2(4),\ I2(5),I2(6),I2(7),I2(8),I2(9):I1(1)=WRITTEN:GOSUB 9020 IF H1(1)=WRITTEN THEN GOTO 9007 9008 IF FNEXACT(I1(1),I1(2)) >= FNEXACT(H1(1),H1(2)) THEN\ REMARK WRITE PAYROLL HISTORY RECORD IF IT IS LOWER GOSUB 9030:H1(1)=WRITTEN:GOSUB 9010 GOTO 9007 9010 IF END #1 THEN 9011 REMARK READ SEQUENTIALLY FROM PAYROLL HISTORY FILE READ #1;H1(1),H1(2),H1(3),H2(1),H2(2),H2(3),H2(4),\ H2(5),H2(6),H2(7),H2(8),H2(9) IF H1(3)=9999999 THEN GOTO 9010 RETURN 9011 H1(1)=WRITTEN RETURN 9020 IF END #2 THEN 9021 REMARK READ FROM PAYROLL HISTORY INPUT FILE READ #2;I1(1),I1(2),I1(3),I2(1),I2(2),I2(3),I2(4),\ I2(5),I2(6),I2(7),I2(8),I2(9) IF I1(3)=9999999 THEN GOTO 9020 RETURN 9021 I1(1)=WRITTEN RETURN 9030 PRINT #3;H1(1),H1(2),H1(3),H2(1),H2(2),H2(3),H2(4),\ REMARK WRITE PAYROLL HISTORY RECORD TO WORKFILE H2(5),H2(6),H2(7),H2(8),H2(9) OUTPUT.COUNT%=OUTPUT.COUNT%+1 RETURN 9900 DELETE 1,2 REMARK REPLACE HISTORY FILE WITH WORKFILE CLOSE 3 A%=RENAME("P/R0F120.DAT","WORKFILE.DAT") HISTORY.RECORDS=OUTPUT.COUNT% GOSUB 720 REMARK WRITE OUT NEW FILE LENGTH 9910 PRINT CLEAR.SCREEN$;\ "P/R HISTORY FILE MAINTENANCE LOADING MENU" REMARK DISPLAY EXIT MESSAGE CHAIN "P/R000"