home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / CPMUG / CPMUG045.ARK / P_R280.BAS < prev    next >
BASIC Source File  |  1984-04-29  |  15KB  |  480 lines

  1.     REMARK    ***************************************\
  2.         *  P/R280.BAS   JOB FILE MAINTENANCE  *\
  3.         *  5/17/79                   1:30 PM  *\
  4.         ***************************************
  5.  
  6. %INCLUDE CURSOR
  7.  
  8.     DIM S(1),R$(5),R1(2),R2(5),J(14),W(2),W1(2),W2$(2)
  9.     DIM W2(14),G2$(5),G3(5),DATA$(2),KEY$(2)
  10.  
  11.     DEF FNEXACT(X0,X1)=X0*1000+X1                    REMARK  KEY LOCATOR FUNCTION
  12.  
  13.     YES=1
  14.     GOTO 6000
  15.  
  16. %INCLUDE SUBS1
  17. %INCLUDE GENINFO
  18.  
  19. 745    READ #1,X0;R$(1),R$(2),R$(3),R$(4),R$(5),R1(1),R1(2),\        REMARK  READ FIRST PART OF EMPLOYEE MASTER RECORD
  20.     R2(1),R2(2),R2(3),R2(4),R2(5),R3$,S(1)
  21.     RETURN
  22.  
  23.  
  24. 1000    Y2=2:RECORD.COUNT=JOB.RECORDS                    REMARK  ROUTINES TO SEARCH JOB0F100.DAT AND JOBINPUT.DAT
  25.     GOSUB 1060
  26.     IF H <> -1 OR FINDNEXT%=YES THEN RETURN
  27. 1010    Y2=3:RECORD.COUNT=NEW.RECORDS%
  28.     SEARCH.FAILURE%=0
  29.     GOSUB 1060
  30.     IF VAR1 <> INT(K/1000) THEN SEARCH.FAILURE%=YES
  31.     RETURN
  32.  
  33.  
  34.  
  35. %INCLUDE PR-SEARC
  36. %INCLUDE JOBFILE
  37.  
  38. 3450    REMARK   ++++++++++++++++ALPHABETIC/NUMERIC DATA ENTRY+++++++++++++++
  39.  
  40.  
  41.     X2$="****************************************************************"
  42.     GOSUB 210:PRINT LEFT$(X2$,X2)
  43.     CHAR%=LEAD.IN%:GOSUB 801
  44.     CHAR%=ADDR.CURS%:GOSUB 801
  45.     CHAR%=HORIZONTAL.TAB%:GOSUB 801
  46.     CHAR%=NO.OF.LINEFEEDS%:GOSUB 801
  47.     X0$=""
  48.  
  49. 3500    IF CONSTAT% = 0 THEN GOTO 3500                    REMARK  WAIT FOR OPERATOR TO ENTER CHARACTER
  50.     X%=CONCHAR%
  51.     IF X% <> 3 THEN GOTO 3505                    REMARK  DISPLAY EXPLANATION MASK IF CTRL-C WAS HIT
  52.     X0=12:GOSUB 260:PRINT:PRINT
  53. 3501    IF CONSTAT% THEN\
  54.     X%=CONCHAR%:\
  55.     X0=8:GOSUB 260:XY=X1:Z=1:GOSUB 4100:Z=0:GOSUB 4100:X1=XY:\    REMARK  IF A KEY WAS HIT, DISPLAY ENTRY MASK AND RETURN
  56.     GOTO 3450\
  57.     ELSE GOTO 3501
  58.  
  59.  
  60. 3505    IF X%=9 THEN GOTO 3450                        REMARK  RESTART ENTRY IF CONTROL-I
  61.     IF X%=0DH THEN GOTO 3700                    REMARK  END DATA ENTRY IF <RETURN> WAS DEPRESSED
  62.     IF X% >= 20H AND X% <= 7AH THEN GOTO 3600            REMARK  PROCESS AND VALID ASCII CHARACTER
  63.     IF X% =7EH OR X% = 08H AND LEN(X0$) >= 1\
  64.     THEN\
  65.     CHAR%=BACKSPACE%:GOSUB 801:\
  66.     CHAR%=42:GOSUB 801:\
  67.     CHAR%=BACKSPACE%:GOSUB 801:\
  68.     Z1%=LEN(X0$)-1:X0$=LEFT$(X0$,Z1%)                REMARK  TRUNCATE ENTRY STRING
  69.     GOTO 3500
  70. 3600    IF LEN(X0$) < X2 THEN X0$=X0$+CHR$(X%)\                REMARK  IF ENTRY LENGTH WITHIN LIMITS, CONCATENATE
  71.     ELSE\
  72.     CHAR%=BACKSPACE%:GOSUB 801:\
  73.     CHAR%=32:GOSUB 801:\
  74.     CHAR%=BACKSPACE%:GOSUB 801
  75.     GOTO 3500
  76. 3700    IF X3=0 AND X4=0 THEN RETURN
  77.     X0 = VAL(X0$)
  78.     IF MATCH("!",X0$,1) = 0 AND X0 >= X3 AND X0 <= X4 THEN RETURN    REMARK  PERFORM RANGE CHECKING:IF INVALID, REJECT
  79.  3950    X2$="OUT OF RANGE"
  80.     L1=X1
  81.     GOSUB 615
  82.     X1=L1
  83.     GOTO 3450
  84.  
  85.  
  86.  
  87. 4100    REMARK DISPLAY HEADER AND DETAIL RECORD VALUES
  88.  
  89.     IF Z=1\                                REMARK  DISPLAY HEADER RECORD DATA IF Z IS SET TO 1
  90.     THEN\
  91.     X1=260:GOSUB 210:PRINT USING MASK6$;W(1):\            REMARK  DISPLAY JOB NUMBER
  92.     X1=328:GOSUB 210:\
  93.     PRINT W1$;TAB(64):\                        REMARK  DISPLAY JOB DESCRIPTION
  94.     X0=W1(1):X1=398:GOSUB 680:\                    REMARK  DISPLAY JOB START AND END DATES
  95.     X0=W1(2):X1=462:GOSUB 680:\
  96.     PRINT:\
  97.     X1=15:GOSUB 215:\
  98.     PRINT W2$(1):\                            REMARK  DISPLAY JOB STATUS AND TYPE CODES
  99.     X1=15:GOSUB 215:\
  100.     PRINT W2$(2):\
  101.     RETURN
  102.  
  103.  
  104.     IF Z=2 THEN\                            REMARK  DISPLAY JOB TOTALS AFTER READING LAST DETAIL RECORD
  105.     X1=277:GOSUB 210:\
  106.     PRINT TAB(23);"JOB TOTALS";TAB(42):\
  107.     PRINT:\
  108.     FOR I1%=1 TO 7:\                        REMARK  DISPLAY M-T-D AND J-T-D TOTALS FOR JOB DETAIL RECORDS
  109.     Z2=J(I1%):\
  110.     Z3=J(I1%+7):\
  111.     GOSUB 4200:\
  112.     NEXT I1%:\
  113.     Z2=J(4)+J(5)+J(6)+J(7):\                    REMARK  DISPLAY M-T-D AND J-T-D TOTAL OVERHEAD 
  114.     Z3=J(11)+J(12)+J(13)+J(14):\
  115.     GOSUB 4200:\
  116.     Z2=Z2+J(3):\                            REMARK  DISPLAY M-T-D AND J-T-D TOTAL COST-2
  117.     Z3=Z3+J(10):\
  118.     GOSUB 4200:\
  119.     RETURN
  120.  
  121.  
  122.     X1=277:GOSUB 210                        REMARK  DISPLAY DETAIL RECORD DATA ON CRT
  123.  
  124.     X0=W(2):GOSUB 5460                        REMARK  GET CORRESPONDING EMPLOYEE MASTER RECORD
  125.  
  126.     PRINT USING MASK6$;W(2);                    REMARK  DISPLAY JOB NUMBER AND EMPLOYEE NAME
  127.     PRINT "  ";R$(1);TAB(42)
  128.     PRINT
  129.  
  130.     FOR I1%=1 TO 7                            REMARK  DISPLAY M-T-D AND J-T-D COSTS AND OVERHEAD
  131.     Z2=W2(I1%)
  132.     Z3=W2(I1%+7)
  133.     GOSUB 4200
  134.     NEXT I1%
  135.  
  136. 4120    Z2=W2(4)+W2(5)+W2(6)+W2(7)                    REMARK  DISPLAY M-T-D AND J-T-D TOTAL OVERHEAD
  137.     Z3=W2(11)+W2(12)+W2(13)+W2(14)
  138.     GOSUB 4200
  139.     Z2=Z2+W2(3)                            REMARK DISPLAY M-T-D AND J-T-D TOTAL COST-2
  140.     Z3=Z3+W2(10)
  141.     GOSUB 4200
  142.     RETURN
  143.  
  144.  
  145. 4200    PRINT                                REMARK  DISPLAY A PAIR OF M-T-D AND J-T-D TOTALS ON CRT
  146.     X1=40
  147.     GOSUB 215
  148.     PRINT USING MASKA$; Z2;
  149.     X1=8:GOSUB 215
  150.     PRINT USING MASKA$;Z3;
  151.     RETURN
  152.  
  153.  
  154. 5300    X1=328:X2=56:X3=0:X4=0:GOSUB 3450                REMARK  ENTER JOB DESCRIPTION
  155.     W1$=X0$
  156.     GOTO 5350
  157.  
  158. 5310    X1=270+C%*64:GOSUB 673                        REMARK  ENTER START OR DUE DATES
  159.     W1(C%-1) = X0
  160.     GOTO 5350
  161.  
  162. 5320    X1=270+C%*64:X2=1:X3=0:X4=9:GOSUB 3450                REMARK  CHANGE JOB STATUS OR TYPE CODES
  163.     W2$(C%-3)=STR$(X0)
  164.     GOTO 5350
  165.  
  166. 5330    X1=103+C%*64:X2=9:X3=0:X4=999999.99:GOSUB 3450            REMARK  CHANGE M-T-D FIELDS ON DETAIL RECORDS
  167.     W2(C%-5)=X0
  168.     GOTO 5345
  169.  
  170. 5340    X1=C%*64-329:X2=9:X3=0:X4=999999.99:GOSUB 3450            REMARK  CHANGE J-T-D FIELDS ON DETAIL RECORDS
  171.     W2(C%-5)=X0
  172.  
  173. 5345    X1=871:GOSUB 210                        REMARK  DISPLAY NEW JOB DETAIL TOTALS ON CRT
  174.     GOTO 4120
  175.  
  176. 5350    IF O=1 THEN RETURN                        REMARK  IF ANY HEADER FIELDS WERE CHANGED,
  177.     X0=HEADER.LOCATION                        REMARK  WRITE THE HEADER RECORD WITH CHANGES
  178.     Y6=HEADER.FILE.ASSIGNMENT
  179.     X9=W(2)
  180.     W(2)=0
  181.     GOSUB 1110
  182.     W(2)=X9
  183.     RETURN
  184.  
  185.  
  186. 5400    IF C% > 5 AND C% <= 12 THEN GOTO 5330                REMARK  THIS ROUTINE CALLS FIELD CHANGE ROUTINES
  187.     IF C% > 12 AND C% <= 19 THEN GOTO 5340
  188.     ON C% GOTO 5300,5310,5310,5320,5320
  189.  
  190. 5460    IF X0=0 OR X0 > MSTR.RECORDS THEN S(1)=0:GOTO 5500        REMARK  READ EMPLOYEE MASTER FILE
  191.     GOSUB 745
  192. 5500    IF S(1)=0 THEN R$(1)="NOT ON P/R MASTER"
  193.     RETURN
  194.  
  195.  
  196. 6000    MASKA$="######.##"                        REMARK  SET UP DISPLAY MASKS
  197.     MASK6$="######"
  198.     Y6=2
  199.     Y8=3
  200.     Y9=4
  201.     OPEN "P/R0F110.DAT" RECL 1150 AS 1                REMARK  OPEN EMPLOYEE MASTER FILE
  202.     OPEN "JOB0F100.DAT" RECL 160 AS Y6                REMARK  OPEN JOB FILE
  203.     OPEN "G/I0F010.DAT" RECL 200 AS Y9:GOSUB 700            REMARK  OPEN AND LOAD GENERAL INFORMATION FILE
  204.     OPEN "CRT" RECL 1100 AS 19
  205.  
  206.     CREATE "JOBINPUT.DAT" RECL 160 AS 3                REMARK  CREATE JOB INPUT FILE (FOR NEW JOBS)
  207.  
  208. 6020    Z=3
  209.     X0=8:GOSUB 260                            REMARK  LOAD AND DISPLAY CRT MASK 9
  210.  
  211.     X2=1:X3=0:X4=2                            REMARK  ENTER OPERATION CODE
  212.     X2$="ENTER OPERATION (0=EXIT; 1=ADD; 2=CHANGE OR DELETE)":\
  213.     GOSUB 665
  214.  
  215.     IF X0 = 0\                            REMARK  IF OPERATION CODE=0, BRANCH TO MERGE ROUTINES
  216.     THEN X1=64:GOSUB 210:\
  217.     PRINT "WORKING... DO NOT INTERRUPT!";TAB(70):\
  218.     GOTO 9000
  219.  
  220.     O=X0
  221.     IF O=1 THEN GOTO 6200
  222. 6030    W(2)=0                                REMARK  CHANGE OR DELETE JOBS IN THIS ROUTINE
  223.     DIM J(14)
  224.     X1=260:X2=6:X3=0:X4=999999:GOSUB 3450                REMARK  ENTER JOB NUMBER;IF ZERO, GET NEW OPERATION CODE
  225.     IF X0=0 THEN GOTO 6020
  226.  
  227.     W2$(1)=""
  228.     JOB.NO=X0                            REMARK  SEARCH JOB FILE FOR HEADER RECORD
  229.     EMP.NO=0
  230.     K=FNEXACT(JOB.NO,0)
  231.     GOSUB 1000
  232.     IF H<>-1 THEN\
  233.     HEADER.FILE.ASSIGNMENT=Y2:\
  234.     HEADER.LOCATION=L:\
  235.     Y6=Y2:X0=L:\
  236.     GOSUB 1100
  237.  
  238.     IF H=-1 OR W2$(1)="D"\                        REMARK  IF RECORD IS DELETED OR NONEXISTENT, FLASH ERROR
  239.     THEN X2$="NOT ON FILE":GOSUB 615:GOTO 6030
  240.     Z=1
  241.     GOSUB 265
  242.     GOSUB 4100                            REMARK  DISPLAY JOB HEADER DATA
  243.  
  244.     DIM W2(14)                            REMARK  INITIALIZE JOB TOTALS
  245.  
  246.  
  247. 6070    EMP.NO=EMP.NO+1                            REMARK  SEARCH FOR THE NEXT LOGICALLY SEQUENTIAL RECORD
  248.     FINDNEXT%=YES
  249.     K=FNEXACT(JOB.NO,EMP.NO)
  250.     GOSUB 1000
  251.  
  252.     IF VAR1 <> JOB.NO\                        REMARK  SEARCH JOB INPUT FILE IF NOTHING FOUND ON JOB0F100
  253.     AND SEARCH.FAILURE% <> YES\
  254.     THEN GOSUB 1010
  255.  
  256.     IF VAR1 <> JOB.NO OR L>RECORD.COUNT THEN GOTO 6150        REMARK  IF NO MORE RECORDS FOR THIS JOB, BRANCH
  257.  
  258.     Y6=Y2:X0=L:GOSUB 1100                        REMARK  READ THE DETAIL RECORD FROM DISK
  259.  
  260.     IF W2(3)=-1 THEN GOTO 6070                    REMARK  SEARCH AGAIN IF DETAIL WAS LOGICALLY DELETED
  261.     EMP.NO=W(2)
  262.     DETAIL.LOCATION=L
  263.     Z=0:GOSUB 4100                            REMARK  DISPLAY DETAIL RECORD ON CRT
  264.     LAST.FIELD%=19
  265.  
  266. 6100    X2=2:X3=0:X4=99
  267.     X2$="ENTER FIELD TO CHANGE(0=NONE;98=CHANGE JOB;99=DELETE)"    REMARK  PROMPT OPERATOR TO CHANGE DISPLAYED DATA
  268.     GOSUB 665
  269.     C%=X0
  270.     IF C%=0 THEN 6130                        REMARK  BRANCH BASED ON FIELD TO CHANGE
  271.     IF C%=99 THEN 6160
  272.     IF C%=98 THEN 6030
  273.     IF C%>LAST.FIELD% THEN 6100
  274.     GOSUB 5400
  275.     GOTO 6100
  276.  
  277.  
  278. 6130    IF W(2)>0 THEN X0=DETAIL.LOCATION:GOSUB 1110            REMARK  SAVE DETAIL RECORD
  279.     FOR I%=1 TO 14                            REMARK  ACCUMULATE DETAIL FIELDS TO JOB TOTALS
  280.     J(I%)=J(I%)+W2(I%)
  281.     NEXT I%
  282.     IF Z=2 THEN GOTO 6030 ELSE GOTO 6070
  283.  
  284.  
  285. 6150    Z=2:GOSUB 4100                            REMARK  ALLOW CHANGES TO HEADER RECORD FIELDS
  286.     LAST.FIELD%=5
  287.     GOTO 6100
  288.  
  289. 6160    IF Z<>0 THEN X2$="NOT ALLOWED":GOSUB 615:GOTO 6100        REMARK  DELETE A JOB DETAIL RECORD ONLY
  290.  
  291.     X2=3:X3=0:X4=0:X2$="ENTER DELETE CODE":GOSUB 665        REMARK  ENTER DELETE CODE
  292.     IF X0$="DEL" THEN W2(3)=-1:X0=DETAIL.LOCATION:GOSUB 1110:\    REMARK  DELETE DETAIL RECORD IF CODE IS VALID
  293.     X2$="RECORD DELETED":\
  294.     GOSUB 615                            REMARK  FLASH 'DELETED' BULLETIN TO OPERATOR
  295.     GOTO 6070
  296.  
  297.  
  298. 6200    GOSUB 265                            REMARK  ADD A JOB RECORD TO JOB INPUT FILE
  299.     Z=3
  300.     X1=260:X2=6:X3=0:X4=999999:GOSUB 3450                REMARK  ENTER JOB NUMBER
  301.     IF X0=0 THEN 6020
  302.     JOB.NO=X0
  303.     FINDNEXT%=0
  304.     K=FNEXACT(JOB.NO,0):GOSUB 1000                    REMARK  SEARCH FOR A HEADER RECORD
  305.  
  306.     IF H =-1 THEN GOTO 6225                        REMARK  CREATE HEADER RECORD IF NOT ALREADY ON FILE
  307.     HEADER.FILE.ASSIGNMENT=Y2
  308.     HEADER.LOCATION=L
  309.     X0=L:Y6=Y2
  310.     GOSUB 1100                            REMARK  READ THE HEADER RECORD FROM DISK
  311.     IF W2$(1)="D" THEN RE.USE.DELETED.RECORD=YES\
  312.     ELSE Z=1:GOSUB 4100:GOTO 6232
  313.  
  314. 6225    W(1)=JOB.NO:W(2)=0                        REMARK  ENTER HEADER INFORMATION FOR NEW RECORD
  315.     Z=1
  316.     FOR C%=1 TO 5
  317.     GOSUB 5400
  318.     NEXT C%
  319.     GOTO 6240                            REMARK  ALLOW CHANGES TO ANY NEWLY-CREATED HEADERS
  320.  
  321.  
  322. 6230    GOSUB 265:Z=1:GOSUB 4100                    REMARK  RE-DISPLAY HEADER INFORMATION ON CRT
  323.  
  324. 6232    X1=280:X2=3:X3=0:X4=999:GOSUB 3450                REMARK  ENTER EMPLOYEE NUMBER FOR DETAIL RECORD
  325.  
  326.     IF X0=0 THEN 6200                        REMARK  IF EMPLOYEE NUMBER=0, PROMPT FOR NEW JOB NUMBER
  327.     W(2)=X0
  328.     FINDNEXT%=0
  329.     K=FNEXACT(W(1),X0):GOSUB 1000                    REMARK  SEARCH JOB FILE FOR DUPLICATE DETAIL RECORD
  330.     IF H=-1 THEN 6235
  331.     X0=L
  332.     Y6=Y2
  333.     GOSUB 1100                            REMARK  READ THE DETAIL RECORD & CHECK FOR DELETE CODE
  334.  
  335.     IF W2(3) <> -1 THEN X2$="ALREADY ON FILE":GOSUB 615:\        REMARK  IF RECORD WAS NOT DELETED, FLASH ERROR MESSAGE
  336.     GOTO 6232
  337.  
  338.     DETAIL.LOCATION=L
  339.     RE.USE.DELETED.RECORD=YES
  340.     DETAIL.FILE.ASSIGNMENT=Y2
  341.     
  342.     
  343. 6235    X0=W(2)                                REMARK  READ EMPLOYEE MASTER FOR THIS DETAIL RECORD
  344.     GOSUB 5460
  345.     X1=286:GOSUB 210
  346.     PRINT R$(1)                            REMARK  DISPLAY EMPLOYEE NAME
  347.     Z=0
  348.     C%=13
  349.     DIM W2(14)                            REMARK  INITIALIZE DETAIL AMOUNT FIELDS
  350.     GOSUB 5400
  351.  
  352. 6240    X2=2:X3=0:X4=99:\                        REMARK  PROMPT OPERATOR TO CHANGE ENTERED DATA
  353.     X2$="ENTER FIELD TO CHANGE(0=NONE; 99=CANCEL)":GOSUB 665
  354.     C%=X0
  355.  
  356.     IF C%=99 THEN 6200                        REMARK  IF 'CANCEL' SELECTED, GET A NEW JOB NUMBER
  357.     IF C%=0 THEN GOTO 6250                        REMARK  SAVE THE JOB RECORD IF NO CHANGES
  358.     IF W(2) = 0 AND C% <= 5 THEN GOSUB 5400
  359.     IF W(2) <> 0 AND C% >= 6 AND C% <= 19 THEN GOSUB 5400
  360.     GOTO 6240
  361.  
  362.  
  363.  
  364. 6250    X1=192:GOSUB 210:PRINT"WORKING... DO NOT INTERRUPT"
  365.     IF RE.USE.DELETED.RECORD=YES AND W(2)=0\            REMARK  RE-USE DELETED RECORD SPACE IN ORDER TO KEEP
  366.     THEN Y6=HEADER.FILE.ASSIGNMENT:\                REMARK  THE JOB FILE IN PERFECT ORDER FOR SEARCHING.
  367.     X0=HEADER.LOCATION                        REMARK  THIS PROCESS IS PERFORMED WHEN A DELETED
  368.     IF RE.USE.DELETED.RECORD=YES AND W(2)<>0\            REMARK  RECORD WITH THE SAME RELATIVE POSITION AS THE
  369.     THEN Y6=DETAIL.FILE.ASSIGNMENT:\                REMARK  'NEW' RECORD IS FOUND ON THE FILE.
  370.     X0=DETAIL.LOCATION
  371.  
  372.     IF RE.USE.DELETED.RECORD=YES THEN\
  373.     GOSUB 1110:\
  374.     RE.USE.DELETED.RECORD=0:\
  375.     GOTO 6230
  376.  
  377.  
  378. 6255    K=FNEXACT(W(1),W(2))                        REMARK  FOR NEW RECORDS, FIND THE INSERTION POINT
  379.     GOSUB 1000
  380.     IF L>NEW.RECORDS% THEN GOTO 6274
  381.     X%=L
  382.     FOR I%=NEW.RECORDS% TO X% STEP -1                REMARK  EXPAND THE JOB INPUT FILE AT INSERTION POINT
  383.     READ #3,I%;LINE X0$                        REMARK  BY WRITING SUBSEQUENT RECORDS AT I+1,
  384.     PRINT USING "&";#3,I%+1;X0$                    REMARK  WHERE I IS THE ORIGINAL LOCATION OF THE RECORD.
  385.     NEXT I%
  386.  
  387. 6274    NEW.RECORDS%=NEW.RECORDS%+1                    REMARK  INCREMENT NEW RECORD COUNT; WRITE NEWEST RECORD
  388.     Y6=3:X0=L:GOSUB 1110
  389.  
  390.     CLOSE 3                                REMARK  CLOSE AND RE-OPEN FILE TO SAVE FCB
  391.     OPEN "JOBINPUT.DAT" RECL 160 AS 3
  392.  
  393.     GOTO 6230                            REMARK  BRANCH BACK FOR ANOTHER DETAIL RECORD
  394.  
  395.  
  396. 9000    CLOSE 1,4,19                            REMARK  START OF MERGE ROUTINE FOR JOB FILES
  397.     IF JOB.RECORDS=0 THEN CLOSE 3:DELETE 2:\            REMARK  SKIP MERGE IF ONLY 'NEW' RECORDS EXIST
  398.     OUTPUT.COUNT=NEW.RECORDS%:\
  399.     A=RENAME("JOB0F100.DAT","JOBINPUT.DAT"):\
  400.     GOTO 9550
  401.  
  402.  
  403.     IF NEW.RECORDS% = 0 THEN\                    REMARK  IF NO NEW RECORDS WERE ENTERED, SKIP MERGING
  404.     DELETE 3:GOTO 9600
  405.  
  406.  
  407. 9035    CLOSE 2,3                            REMARK  CLOSE JOB0F100.DAT AND JOBINPUT.DAT
  408.     OPEN "JOB0F100.DAT" RECL 160 AS 1
  409.     OPEN "JOBINPUT.DAT" RECL 160 AS 2
  410.  
  411.     CREATE "WORKFILE.DAT" RECL 160 AS 3                REMARK  CREATE WORK FILE FOR MERGE
  412.  
  413.     WRITTEN$=CHR$(0FFH)
  414.     FOR I%=1 TO 6:WRITTEN$=WRITTEN$+WRITTEN$:NEXT I%        REMARK  SET UP A DEFAULT ABSOLUTE HIGH KEY
  415.  
  416.     ZERO$="000000"                            REMARK  SET UP A ZERO-FILL STRING
  417.  
  418.     GOSUB 9100                            REMARK  READ FIRST RECORDS FROM JOB0F100 AND JOBINPUT
  419.     GOSUB 9110
  420.  
  421. 9040    IF KEY$(1)=WRITTEN$ AND KEY$(2)=WRITTEN$\            REMARK  BRANCH TO WRAPUP ROUTINE IF NO MORE RECORDS
  422.     THEN GOTO 9500
  423.  
  424.     IF KEY$(1)=WRITTEN$ THEN GOTO 9050                REMARK  SKIP COMPARISON IF JOB0F100.DAT IS LOWER
  425.  
  426.     IF KEY$(1) <= KEY$(2) THEN\                    REMARK  WRITE JOB0F100.DAT RECORD IF IT IS LOWER
  427.     PRINT USING "&";#3;DATA$(1):\
  428.     OUTPUT.COUNT=OUTPUT.COUNT+1:\
  429.     KEY$(1)=WRITTEN$:GOSUB 9100
  430.  
  431. 9050    IF KEY$(2)=WRITTEN$ THEN GOTO 9040                REMARK  SKIP COMPARISON IF JOBINPUT.DAT IS EXHAUSTED
  432.  
  433.     IF KEY$(2) <= KEY$(1) THEN\                    REMARK  WRITE JOBINPUT.DAT RECORD IF IT IS LOWER
  434.     PRINT USING "&";#3;DATA$(2):\
  435.     OUTPUT.COUNT=OUTPUT.COUNT+1:\
  436.     KEY$(2)=WRITTEN$:GOSUB 9110
  437.  
  438.     GOTO 9040
  439.  
  440. 9100    IF END #1 THEN 9101                        REMARK  READ SEQUENTIALLY THROUGH JOB0F100.DAT
  441.     READ #1;LINE DATA$(1)
  442.  
  443.     A%=MATCH(",",DATA$(1),1):B%=A%                    REMARK  FORM A KEY FOR COMPARISON WITH JOBINPUT.DAT
  444.     KEY$(1)=ZERO$+LEFT$(DATA$(1),(A%-1)):KEY$(1)=RIGHT$(KEY$(1),6)
  445.     A%=MATCH(",",DATA$(1),B%+1)
  446.     X0$=ZERO$+MID$(DATA$(1),B%+1,A%-B%-1):X0$=RIGHT$(X0$,3)
  447.     KEY$(1)=KEY$(1)+X0$
  448.     RETURN
  449.  
  450. 9101    KEY$(1)=WRITTEN$                        REMARK  SET 'RECORDS WRITTEN' FLAG
  451.     RETURN
  452.  
  453.  
  454. 9110    IF END #2 THEN 9111                        REMARK  READ SEQUENTIALLY THROUGH JOBINPUT.DAT
  455.     READ #2;LINE DATA$(2)
  456.  
  457.     A%=MATCH(",",DATA$(2),1):B%=A%                    REMARK  FORM A KEY FOR COMPARISON WITH JOB0F100.DAT
  458.     KEY$(2)=ZERO$+LEFT$(DATA$(2),(A%-1)):KEY$(2)=RIGHT$(KEY$(2),6)
  459.     A%=MATCH(",",DATA$(2),B%+1)
  460.     X0$=ZERO$+MID$(DATA$(2),B%+1,A%-B%-1):X0$=RIGHT$(X0$,3)
  461.     KEY$(2)=KEY$(2)+X0$
  462.     RETURN
  463.  
  464. 9111    KEY$(2)=WRITTEN$
  465.     RETURN
  466.  
  467.  
  468.  
  469. 9500    DELETE 1,2                            REMARK  DELETE JOB0F100.DAT AND JOBINPUT.DAT
  470.     CLOSE 3                                REMARK  CLOSE THE WORK FILE
  471.     A%=RENAME("JOB0F100.DAT","WORKFILE.DAT")            REMARK  CHANGE FILENAME TO NEW JOB0F100.DAT
  472. 9550    OPEN "G/I0F010.DAT" RECL 200 AS Y9                REMARK  UPDATE JOB FILE EXTENT ON G/I FILE
  473.     JOB.RECORDS=OUTPUT.COUNT
  474.     GOSUB 720
  475.  
  476. 9600    PRINT CLEAR.SCREEN$;"JOB F/M LOADING MENU"            REMARK  TERMINATE PROGRAM AND LOAD MENU
  477.     CHAIN "P/R000"
  478.  
  479.  
  480.