* FINAL MERGE PASS                                      HEADER  C:LASPAS0001.000
*                                                                       0002.000
*                                                                       0003.000
*                  FINAL MERGE PASS                                     0004.000
         M.PGM     C:LASPAS,MPX-32,3.6.1,00                             0005.000
         DEF       C:LASPAS                                             0006.000
*                                                                       0007.000
*        REVISION HISTORY:                                              0008.000
*                                                                       0009.000
* VERSION          3.3.12                                       S860396 0010.000
* 05/27/86  9068   ADD CODE TO VERIFY THE NUMBER OF RECORDS PER S860396 0011.000
* S860396          BLOCK, IF IT IS IN THE RANGE THEN CONTINUES  S860396 0012.000
*                  ELSE OUTPUT A SORT ERROR MESSAGE AND BACK TO S860396 0013.000
*                  THE VOLMGR PROMPT. WITHOUT THE VERIFICATION, S860396 0014.000
*                  VOLMGR ABORTS WITH 'PV01' ON A WILDCARD SAVE S860396 0015.000
*                  OR LOG OPERATIONS IN SOME CASES.             S860396 0016.000
*                                                                       0017.000
         EXT       C:READWF                                             0018.000
         EXT       C:CLOZWF                                             0019.000
         EXT       C:MOVREC                                             0020.000
         EXT       C:INSTFR                                             0021.000
         EXT       CR.GOSG                                              0022.000
         EXT       SORTERR                                              0023.000
SMCOMMON COMMON    SMCOM(2)                                             0024.000
         ORG       SMCOM                                                0025.000
         RES       1W                                                   0026.000
SEGSORT  RES       1W                                                   0027.000
         REL                                                            0028.000
SRTCOM5  COMMON    SRTC5(40)                                            0029.000
         ORG       SRTC5                                                0030.000
TMP1     DATAW     X'0'                                                 0031.000
NRECS    DATAW     X'0'                                                 0032.000
RECSZ    DATAW     X'0'                                                 0033.000
KEYSZ    DATAW     X'0'                                                 0034.000
DATSZ    DATAW     X'0'                                                 0035.000
MERGLV   DATAW     X'0'                                                 0036.000
RECSTB   DATAW     X'0'                                                 0037.000
TRVCTR   REZ       1W                                                   0038.000
SCB      REZ       1W                                                   0039.000
RECPTS   REZ       1W                                                   0040.000
FIRSTQ   REZ       1W                                                   0041.000
LSTTLS   REZ       1W                                                   0042.000
LSTHDS   REZ       1W                                                   0043.000
FIB      REZ       1W                                                   0044.000
BUFBAS   REZ       1W                                                   0045.000
NEXBLK   REZ       1W                                                   0046.000
RMDR     REZ       1W                                                   0047.000
TMPB     REZ       1W                                                   0048.000
TMPA     REZ       1W                                                   0049.000
BUFPTR   REZ       1W                                                   0050.000
STRBUF   REZ       1W                                                   0051.000
BUFADR   REZ       1W                                                   0052.000
NEXLST   REZ       1W                                                   0053.000
KEYINX   REZ       1W                                                   0054.000
RECINX   REZ       1W                                                   0055.000
RECL     REZ       1W                                                   0056.000
LST      REZ       1W                                                   0057.000
ONEX     REZ       1W                                                   0058.000
ZEROX    REZ       1W                                                   0059.000
XTMP1    REZ       1W                                                   0060.000
XLV190   REZ       1W                                                   0061.000
XLP1     REZ       1W                                                   0062.000
         REL                                                            0063.000
* READS THE WORKFILE FOLLOWING LINKED BLOCKS                            0064.000
* AND PASSES EACH RECORD TO THE OUTPUT PROCEDURE                        0065.000
* READ WORKFILE AT FIRST BLOCK OF FINAL STRING                          0066.000
* LOOP FOR RECORDS/BLOCK CALLING OUTPUT PROCEDURE 50005000* LOOP FOR REC0067.000
* PASSING CURRENT RECORD. IF END OF STRING THEN                         0068.000
* 1) SET EOF IN SCB 2) CALL OUTPUT PROCEDURE AND                        0069.000
* 3) RETURN TO CONTROL SECTION; OTHERWISE,READ                          0070.000
* NEXT BLOCK AND GO BACK TO LOOP.                                       0071.000
         M.REQS                                                         0072.000
FQHD     EQU       X'0'            FIRST-RECORD QUEUE HEAD              0073.000
LQHD     EQU       X'0'            LAST-RECORD QUEUE HEAD               0074.000
TRUE     EQU       1               TRUTH                                0075.000
FALSE    EQU       X'0'            FALSEHOOD                            0076.000
NSRTOH   EQU       3               OVERHEAD PER TREE ENTRY DURING SORT  0077.000
NMRGOH   EQU       17              OVERHEAD PER MERGE LEVEL DURING MERGE0078.000
FIBSZ    EQU       8                                                    0079.000
IOWSSZ   EQU       X'0'            REQUIRED WORKING SPACE FOR I/O       0080.000
AREAOF   EQU       2               G.A. OFFSET FOR AREA DESCRIPTOR      0081.000
BUFBLK   EQU       1               RECORD OFFSET OF LOW ORDER PART OF BL0082.000
BUFRCT   EQU       2               RECORD OFFSET OF RECORD COUNT        0083.000
BLNKSZ   EQU       3               SIZE OF BLOCK INFO                   0084.000
SISZF    EQU       1               STRINGINFO LOW ORDER OF STRING LENGTH0085.000
SIADRF   EQU       3               STRINGINFO LOW ORDER OF STRING ADDRES0086.000
SIESZ    EQU       4               STRINGINFO ENTRY SIZE                0087.000
MAXSTG   EQU       32767           MAXIMUM NUMBER OF STRINGS            0088.000
FQLSTF   EQU       X'0'            FIRST QUEUE LOCATION LIST POINTER    0089.000
FQRECF   EQU       1               FIRST QUEUE LOCATION OF RECORD POINTE0090.000
FQLNKF   EQU       3               FIRST QUEUE LOCATION OF LINK         0091.000
FQESZ    EQU       4               FIRST QUEUE ENTRY SIZE               0092.000
LQLSTF   EQU       X'0'            LAST QUEUE LOCATION OF LIST POINTER  0093.000
LQRECF   EQU       1               LAST QUEUE LOCATION OF RECORD POINTER0094.000
LQLNKF   EQU       3               LAST QUEUE LOCATION OF LINK          0095.000
LQESZ    EQU       4               LAST QUEUE ENTRY SIZE                0096.000
RCADRF   EQU       X'0'            RECORD POINTER LOCATION OF RECORD ADD0097.000
RCEOSF   EQU       1               RECORD POINTER LOCATION OF END-OF-STR0098.000
RCLNKF   EQU       3               RECORDPOINTER LOCATION OF LINK       0099.000
RCESZ    EQU       4               RECORD POINTER ENTRY SIZE            0100.000
MRGLST   EQU       X'0'            LOCATION OF MERGE-LIST HEAD          0101.000
DUMPOL   EQU       1               LOCATION OF DUMMYPOOL-LIST HEAD      0102.000
MINTSZ   EQU       4               MINIMUM TREE SIZE                    0103.000
MAXTSZ   EQU       X'7FFE'         MAXIMUM TREE SIZE                    0104.000
STARTL   EQU       2               FIRST LIST ENTRY                     0105.000
MINMLV   EQU       2               MINIMUM MERGE LEVEL                  0106.000
MAXMLV   EQU       8               MAXIMUM MERGE LEVEL                  0107.000
NOTNS    EQU       X'0'            NOT NEW STRING                       0108.000
READNS   EQU       -1              READ NEW STRING                      0109.000
ATTCHD   EQU       1               NEW STRING READ AND ATTACHED         0110.000
NOSTRG   EQU       2               NO STRING AVAILABLE                  0111.000
LTV      EQU       X'0'            LESS THAN VALUE                      0112.000
EQV      EQU       1               EQUAL VALUE                          0113.000
GTV      EQU       2               GREATER THAN VALUE                   0114.000
SPERB    EQU       48              STRINGS PER BLOCK OF STRING INFO     0115.000
* SORT CONTROL BLOCK LAYOUT                                             0116.000
SCBWID   EQU       X'0'            WORK FILE ID                         0117.000
SCBRA    EQU       3               RECORD ADDRESS                       0118.000
SCBRL    EQU       4               RECORD LENGTH                        0119.000
SCBKA    EQU       5               KEY ADDRESS                          0120.000
SCBKL    EQU       6               KEY LENGTH                           0121.000
SCBOPT   EQU       7               OPTIONS                              0122.000
SCBINF   EQU       9               INFO PROCEDURE                       0123.000
SCBBGM   EQU       10              BEGINNING OF MEMORY                  0124.000
SCBEDM   EQU       11              END OF MEMORY                        0125.000
SCBOSIT  EQU       15W             OUTPUT PROCEDURE SEGMENT ADDRESS     0126.000
SCBRTN   EQU       20              RLSE/RETN EXIT ADDRS                 0127.000
* OPTION VALUES                                                         0128.000
MAPPED   EQU       1               USER PROVIDES MEMORY BOUNDS          0129.000
WRTCMP   EQU       2               USER WANTS OUTPUT I/O VERIFIED       0130.000
DIAGNO   EQU       4               USER WANTS SOME INFO MESSAGES        0131.000
SCBSTS   EQU       8               STATUS                               0132.000
* STATUS VALUES                                                         0133.000
EOS      EQU       1               END-OF-SORT                          0134.000
MEMERR   EQU       3               INSUFFICIENT MEMORY                  0135.000
WFSERR   EQU       5               INSUFFICIENT WORKFILE SPACE          0136.000
WFIOER   EQU       9               IRRECOVERABLE I/O ERROR              0137.000
WFRCER   EQU       17              WORKFILE RECORD COUNT ERROR          0138.000
* TRANSFER VECTOR LAYOUT                                                0139.000
TVKSZ    EQU       X'0'            KEYSZ                                0140.000
TVDSZ    EQU       1               DATSZ                                0141.000
TVFIB    EQU       2               FIB                                  0142.000
TVNREC   EQU       3               NRECS                                0143.000
TVSECW   EQU       4               SECTWD                               0144.000
TVTRKS   EQU       5               TRKSEC                               0145.000
TVMRGL   EQU       6               MERGLV                               0146.000
TVPCNT   EQU       7               PCNT                                 0147.000
TVBBAS   EQU       8               BUFBAS                               0148.000
TVSONF   EQU       9               SONFO                                0149.000
TVSINF   EQU       10              SINFO                                0150.000
TVLSSI   EQU       11              LASTSI                               0151.000
TVSGMX   EQU       12              STGMAX                               0152.000
TVRPTS   EQU       13              RECPTS                               0153.000
TVBSZS   EQU       14              BUFSZS                               0154.000
TVRPB    EQU       15              RECSPB                               0155.000
TVRUN    EQU       16              RUN                                  0156.000
TVNXEL   EQU       16              NXELST                               0157.000
TVLOSR   EQU       17              LOSER                                0158.000
TVLKEY   EQU       18              LSTKEY                               0159.000
TVLHDS   EQU       19              LSTHDS                               0160.000
TVLTLS   EQU       20              LSTTLS                               0161.000
TVFQ     EQU       21              FIRSTQ                               0162.000
TVLQ     EQU       22              LASTQ                                0163.000
TVWFSZ   EQU       23              WFSIZE                               0164.000
TVLSEC   EQU       24              LSTSEC                               0165.000
TVMXSG   EQU       25              MXSGIN                               0166.000
TVNBLK   EQU       26              NEXBLK                               0167.000
TVRMDR   EQU       27              RMDR                                 0168.000
TVESTG   EQU       28              ENDSTG                               0169.000
TVNSTG   EQU       29              NUSTRG                               0170.000
TVFULL   EQU       30              FULL                                 0171.000
TVPASZ   EQU       31              PASSSZ                               0172.000
TVPASM   EQU       32              PASMAX                               0173.000
TVSISZ   EQU       33              SISZ                                 0174.000
INFLPB   EQU       1025                                                 0175.000
INFLPE   EQU       1026                                                 0176.000
C:LASPAS EQU       $                                                    0177.000
         STW       R0,XLV190                                            0178.000
         STW       R2,SCB                                               0179.000
         STW       R3,TRVCTR                                            0180.000
* INITIALIZE FROM TRANSFER VECTOR                                       0181.000
         LW        R0,TVFIB*4,X3                                        0182.000
         STW       R0,FIB                                               0183.000
         LW        R0,TVBBAS*4,X3                                       0184.000
         STW       R0,BUFBAS                                            0185.000
         LW        R0,TVLHDS*4,X3                                       0186.000
         STW       R0,LSTHDS                                            0187.000
         LW        R0,TVLTLS*4,X3                                       0188.000
         STW       R0,LSTTLS                                            0189.000
         LW        R0,TVFQ*4,X3                                         0190.000
         STW       R0,FIRSTQ                                            0191.000
         LW        R0,TVRPTS*4,X3                                       0192.000
         STW       R0,RECPTS                                            0193.000
         LW        R0,TVNREC*4,X3                                       0194.000
         STW       R0,NRECS                                             0195.000
         LW        R0,TVMRGL*4,X3                                       0196.000
         STW       R0,MERGLV                                            0197.000
         LW        R0,TVNBLK*4,X3                                       0198.000
         STW       R0,NEXBLK                                            0199.000
         LW        R0,TVRMDR*4,X3                                       0200.000
         STW       R0,RMDR                                              0201.000
         LW        R0,TVKSZ*4,X3                                        0202.000
         STW       R0,KEYSZ                                             0203.000
         SLL       R0,2                                                 0204.000
         STW       R0,KEYINX       FORCE CONVERSION                     0205.000
         LW        R0,TVDSZ*4,X3                                        0206.000
         STW       R0,DATSZ                                             0207.000
* RECSZ:=KEYSZ+DATSZ;                                                   0208.000
         ADMW      R0,KEYSZ                                             0209.000
         STW       R0,RECSZ                                             0210.000
         SLL       R0,2                                                 0211.000
         STW       R0,RECINX       AVOID REDUNDANT CONVERSIONS          0212.000
* INITIALIZE ZEROX & ONEX                                               0213.000
         LI        R0,1*4                                               0214.000
         STW       R0,ONEX                                              0215.000
         ZMW       ZEROX                                                0216.000
* RESET END-OF-SORT                                                     0217.000
* SCB(SCBSTS):=0;                                                       0218.000
         ZMW       SCBSTS*4,X2                                          0219.000
* IF (SCB(SCBOPT) & DIAGNO)>0 THEN                                      0220.000
         LW        R0,SCBOPT*4,X2                                       0221.000
         LI        R4,DIAGNO                                            0222.000
         ANR       R0,R4                                                0223.000
         BZ        LP000                                                0224.000
* TELL 'EM WE'RE STARTING THE LAST PASS                                 0225.000
* INFO(LAST PASS BEGINS);                                               0226.000
         LW        R0,SCBINF*4,X2                                       0227.000
         STW       R0,TMPA                                              0228.000
         LI        R4,INFLPB                                            0229.000
         BL        *TMPA                                                0230.000
LP000    EQU       $                                                    0231.000
* THE FOLLOWING AVOIDS REDUNDANT COMPUTATION                            0232.000
* STARTBUFFER:=BUFFER.BUFDATA;                                          0233.000
         LI        R0,AREAOF*4                                          0234.000
         ADMW      R0,BUFBAS                                            0235.000
         STW       R0,BUFADR                                            0236.000
         LI        R0,BLNKSZ*4                                          0237.000
         ADMW      R0,BUFADR                                            0238.000
         STW       R0,STRBUF                                            0239.000
* SAVE LISTHEADS FOR LATER REPETIVE USE                                 0240.000
* NOTE THAT LIST TAILS ARE NO LONGER NEEDED                             0241.000
* SINCE THE RECORD LINKS PRESERVE THE TERMINUS                          0242.000
* INFO                                                                  0243.000
* IF MERGELEVEL > 0 THEN                                                0244.000
* DO                                                                    0245.000
         LW        R0,MERGLV                                            0246.000
*        CI        R0,X'0'                                              0247.000
         BCF       GT,LP002                                             0248.000
* FOR I:=STARTLIST STEP 1 UNTIL STARTLIST+MERGELEVEL-1 51024000* FOR I:=0249.000
         LI        R3,STARTL*4                                          0250.000
         LNW       R6,MERGLV                                            0251.000
SAVHDS   EQU       $                                                    0252.000
         STW       R6,XLP1                                              0253.000
* LISTTAILS(I):=LISTHEADS(I);                                           0254.000
         LW        R2,LSTTLS                                            0255.000
         ADR       R3,R2                                                0256.000
         LW        R1,LSTHDS                                            0257.000
         ADR       R3,R1                                                0258.000
         LW        R0,0W,X1                                             0259.000
         STW       R0,0W,X2                                             0260.000
         ADMW      R3,ONEX                                              0261.000
         LW        R6,XLP1                                              0262.000
         BIB       R6,SAVHDS                                            0263.000
* END                                                                   0264.000
         BU        LP002                                                0265.000
* GET FIRST LIST LINK                                                   0266.000
* DO                                                                    0267.000
RECOUT   EQU       $                                                    0268.000
* BEGIN                                                                 0269.000
* GET NEXT RECORD LINK                                                  0270.000
* LST:=FIRSTRECQ(NEXTLISTPTR).LIST;                                     0271.000
         LW        R2,NEXLST                                            0272.000
         ADMW      R2,FIRSTQ                                            0273.000
         LW        R3,FQLSTF*4,X2                                       0274.000
         STW       R3,LST          R3 = LST                             0275.000
* DELINK THIS LIST FROM FIRSTRECQ                                       0276.000
         LW        R1,FIRSTQ                                            0277.000
*        ADI       R1,FQHD*4                                            0278.000
         LW        R0,FQLNKF*4,X2                                       0279.000
         STW       R0,FQLNKF*4,X1                                       0280.000
* RECL:=LISTHEADS(LST);                                                 0281.000
         ADMW      R3,LSTHDS                                            0282.000
         LW        R0,0W,X3                                             0283.000
         STW       R0,RECL                                              0284.000
* SHOW THE WORLD THE RECORD & KEY ADDRESSES                             0285.000
* SCB(SCBKA):=RECADR(RECL);                                             0286.000
         LW        R3,RECL                                              0287.000
         ADMW      R3,RECPTS                                            0288.000
         STW       R3,TMPA                                              0289.000
         LW        R0,RCADRF*4,X3                                       0290.000
         LW        R2,SCB                                               0291.000
         STW       R0,SCBKA*4,X2                                        0292.000
* SCB(SCBRA):=RECADR(RECL)+KEYSZ;                                       0293.000
         LW        R0,KEYINX                                            0294.000
         ADMW      R0,RCADRF*4,X3                                       0295.000
         STW       R0,SCBRA*4,X2                                        0296.000
* GIVE A RECORD TO THE OUTSIDE WORLD                                    0297.000
* CALL SCB(SCBOUT);                                                     0298.000
         LW        R2,SCB                                               0299.000
         LEA       R7,RETRTN       SET C:RETN EXIT                      0300.000
         STW       R7,SCBRTN*4,X2                                       0301.000
         SBM       0,SEGSORT       NOTIFY SEGMENTATION                  0302.000
         LW        R1,SCBOSIT,X2   R1,R2 -> OUTPUT PROC SEGMENT ADDRS   0303.000
         LW        R2,SCBOSIT+1W,X2                                     0304.000
         BL        CR.GOSG                                              0305.000
RETRTN   EQU       $                                                    0306.000
         ZBM       0,SEGSORT       RESET SEGMENTATION FLAG              0307.000
* CHECK VOLUNTARY END-OF-FILE                                           0308.000
         LW        R2,SCB                                               0309.000
         LI        R0,EOS                                               0310.000
         ANMW      R0,SCBSTS*4,X2                                       0311.000
         BNZ       RETRTN2                                              0312.000
* UPDATE COUNT OF RECORDS IN WORKFILE                                   0313.000
* NRECS:=NRECS-1;                                                       0314.000
         LI        R0,-1                                                0315.000
         ARMW      R0,NRECS                                             0316.000
* UPDATE LIST HEAD WITH NEXT IN THE CHAIN                               0317.000
* RECL:=RECLNK(RECL);                                                   0318.000
         LW        R1,TMPA                                              0319.000
         LW        R0,RCLNKF*4,X1                                       0320.000
         STW       R0,RECL         TMPA::=RECPTS(RECL).                 0321.000
* LISTHEADS(LST):=RECL;                                                 0322.000
         LW        R3,LST                                               0323.000
         ADMW      R3,LSTHDS                                            0324.000
         LW        R0,RECL                                              0325.000
         STW       R0,0W,X3                                             0326.000
* IF AT LIST TERMINUS THEN EITHER WE HAVE                               0327.000
* EXHAUSTED THE STRING ATTACHED TO THIS LIST                            0328.000
* OR WE NEED ANOTHER BLOCK                                              0329.000
* IF RECL=0 THEN                                                        0330.000
         CAMW      R0,ZEROX        (R0 = RECL)                          0331.000
         BNE       LP001                                                0332.000
* IF REMAINDER(LST)>0 THEN                                              0333.000
         LW        R1,LST                                               0334.000
         ADMW      R1,RMDR                                              0335.000
         LW        R0,0W,X1                                             0336.000
*        CI        R0,X'0'                                              0337.000
         BCF       GT,LP002                                             0338.000
* BEGIN GETTING NEXT BLOCK FOR THIS LIST                                0339.000
* RESET LIST HEAD AND REST OF LIST WILL FOLLOW                          0340.000
* RECL:=LISTTAILS(LST);                                                 0341.000
         LW        R3,LST                                               0342.000
         ADMW      R3,LSTTLS                                            0343.000
         LW        R0,0W,X3                                             0344.000
         STW       R0,RECL                                              0345.000
* LISTHEADS(LST):=RECL;                                                 0346.000
         LW        R1,LST                                               0347.000
         ADMW      R1,LSTHDS                                            0348.000
         STW       R0,0W,X1                                             0349.000
* RESET POINTER INTO BUFFER                                             0350.000
* BUFPTR:=STARTBUFFER;                                                  0351.000
         LW        R0,STRBUF                                            0352.000
         STW       R0,BUFPTR                                            0353.000
* READ NEXT BLOCK                                                       0354.000
* READ(WORKFILE@NEXTBLOCK(LST),BUFFER);                                 0355.000
         LW        R1,LST                                               0356.000
         ADMW      R1,NEXBLK                                            0357.000
         STW       R1,TMPB                                              0358.000
         LW        R4,0W,X1                                             0359.000
         LW        R2,FIB          5107000                              0360.000
         LW        R3,BUFBAS                                            0361.000
         BL        C:READWF          51108000                           0362.000
* UPDATE THE NEXT BLOCK FROM THE BLOCK LINK                             0363.000
* NEXTBLOCK:=BUFFER.BUFLINK;                                            0364.000
         LW        R3,BUFADR                                            0365.000
         LW        R0,BUFBLK*4,X3                                       0366.000
         LW        R1,TMPB                                              0367.000
         STW       R0,0W,X1                                             0368.000
* REDUCE THE REMAINDER COUNT                                            0369.000
* RECSTHISBLK:=BUFFER.RECCNT;                                           0370.000
         LW        R0,BUFRCT*4,X3                                       0371.000
         BEQ       LP003           IF COUNT=0 ERROR             S860396 0372.000
         CI        R0,10           IF COUNT > 10 ERROR          S860396 0373.000
         BGT       LP003                                        S860396 0374.000
         STW       R0,RECSTB                                            0375.000
* REMAINDER(LST):=REMAINDER(LST)-RECSTHISBLK;                           0376.000
         LW        R2,LST                                               0377.000
         ADMW      R2,RMDR                                              0378.000
         LW        R0,0W,X2                                             0379.000
         SUMW      R0,RECSTB                                            0380.000
         STW       R0,0W,X2                                             0381.000
* MOVE THE RECORDS INTO THE LINKED AREAS                                0382.000
* I:=RECL;                                                              0383.000
         LW        R0,RECL                                              0384.000
         STW       R0,XTMP1                                             0385.000
* REPEAT RECSTHISBLK TIMES;                                             0386.000
         LNW       R6,RECSTB                                            0387.000
LNKREC   EQU       $                                                    0388.000
         STW       R6,XLP1                                              0389.000
* BEGIN EMPTYING THE BUFFER                                             0390.000
* RECL:=I;                                                              0391.000
         LW        R1,XTMP1                                             0392.000
         STW       R1,RECL                                              0393.000
* MOVEREC(BUFPTR,RECADR(RECL),RECSIZE);                                 0394.000
         ADMW      R1,RECPTS                                            0395.000
         STW       R1,TMPA                                              0396.000
         LW        R3,RCADRF*4,X1                                       0397.000
         STW       R3,TMPB                                              0398.000
         LW        R2,BUFPTR                                            0399.000
         LW        R4,RECSZ                                             0400.000
         BL        C:MOVREC                                             0401.000
* I:=RECLNK(RECL);                                                      0402.000
         LW        R3,TMPA                                              0403.000
         LW        R0,RCLNKF*4,X3                                       0404.000
         STW       R0,XTMP1                                             0405.000
* BUFPTR:=BUFPTR+RECSIZE;                                               0406.000
         LW        R0,RECINX                                            0407.000
         ARMW      R0,BUFPTR                                            0408.000
* END;                                                                  0409.000
         LW        R6,XLP1                                              0410.000
         BIB       R6,LNKREC                                            0411.000
* SET THE TERMINUS FLAG -- REDUNDANT EXCEPT FOR                         0412.000
* THE LAST BLOCK OF THE STRING WITH THE SHORT                           0413.000
* BLOCK                                                                 0414.000
* RECLNK(RECL):=0;                                                      0415.000
         LW        R1,RECL                                              0416.000
         ADMW      R1,RECPTS                                            0417.000
         LW        R0,ZEROX                                             0418.000
         STW       R0,RCLNKF*4,X1                                       0419.000
* GO TO INSLST                                                          0420.000
* END;                                                                  0421.000
* ELSE DO NOTHING SINCE STRING IS EXHAUSTED                             0422.000
* ELSE                                                                  0423.000
INSLST   EQU       $                                                    0424.000
LP001    EQU       $                                                    0425.000
* INSERTINTOFIRSTRECQ(LST);                                             0426.000
         LW        R2,LST                                               0427.000
         BL        C:INSTFR                                             0428.000
         ACW       FIRSTQ                                               0429.000
         ACW       LSTHDS                                               0430.000
         ACW       RECPTS                                               0431.000
LP002    EQU       $                                                    0432.000
* NEXTLISTPTR:=FIRSTRECQ(FIRSTRECQHEAD).FIRSTLNK;                       0433.000
         LW        R1,FIRSTQ                                            0434.000
*        ADI       R1,FQHD*4                                            0435.000
         LW        R0,FQLNKF*4,X1                                       0436.000
         STW       R0,NEXLST                                            0437.000
* END UNTIL NEXTLISTPTR=FIRSTRECQHEAD;                                  0438.000
*        CI        R0,4*FQHD                                            0439.000
         BNE       RECOUT                                               0440.000
* SINCE THERE EXISTS NO ACTIVE LIST                                     0441.000
* WE'RE THROUGH                                                         0442.000
* IF (SCB(SCBOPT) & DIAGNO)>0 THEN                                      0443.000
         LW        R2,SCB                                               0444.000
         LW        R0,SCBOPT*4,X2                                       0445.000
         LI        R4,DIAGNO                                            0446.000
         ANR       R0,R4                                                0447.000
         BZ        LP003                                                0448.000
* TELL 'EM WE'VE COMPLETED THE LAST PASS                                0449.000
* INFO(LAST PASS COMPLETED);                                            0450.000
         LW        R0,SCBINF*4,X2                                       0451.000
         STW       R0,TMPA                                              0452.000
         LI        R4,INFLPE                                            0453.000
         BL        *TMPA                                                0454.000
LP003    EQU       $                                                    0455.000
* SET END-OF-SORT                                                       0456.000
* SCB(SCBSTS):=EOS;                                                     0457.000
         LI        R0,EOS                                               0458.000
         LW        R2,SCB                                               0459.000
         STW       R0,SCBSTS*4,X2                                       0460.000
* CHECK THAT WE GOT 'EM ALL                                             0461.000
* IF NRECS NEQ 0 THEN                                                   0462.000
         LW        R0,NRECS                                             0463.000
         BCT       EQ,LP004                                             0464.000
* SCB(SCBSTS):=ERR(INCORRECT RECORD COUNT);                             0465.000
         LI        R0,WFRCER                                            0466.000
         LW        R2,SCB                                               0467.000
         STW       R0,SCBSTS*4,X2                                       0468.000
         LW        R5,=G'SZ04'                                          0469.000
         BL        SORTERR                                              0470.000
LP004    EQU       $                                                    0471.000
XIT      EQU       $                                                    0472.000
* NO ONE HERE CAN DOUBT IT NOW                                          0473.000
* SO TELL THE WORLD ABOUT IT NOW]                                       0474.000
* CALL SCB(SCBOUT); FOR LAST TIME                                       0475.000
*                                  R2 = SCB                             0476.000
         LEA       R7,RETRTN2      SET C:RETN EXIT                      0477.000
         STW       R7,SCBRTN*4,X2                                       0478.000
         SBM       0,SEGSORT       NOTIFY SEGMENTATION                  0479.000
         LW        R1,SCBOSIT,X2   R1,R2 -> OUTPUT PROC SEGMENT ADDRS   0480.000
         LW        R2,SCBOSIT+1W,X2                                     0481.000
         BL        CR.GOSG                                              0482.000
RETRTN2  EQU       $                                                    0483.000
         ZBM       0,SEGSORT       RESET SEGMENTATION FLAG              0484.000
* CLOSE(WORKFILE);                                                      0485.000
         LW        R2,FIB                                               0486.000
         LW        R3,BUFBAS                                            0487.000
         BL        C:CLOZWF                                             0488.000
* CODE TO RESET MEMORY LIMITS                                           0489.000
         LW        R0,XLV190                                            0490.000
         TRSW      R0                                                   0491.000
         END                                                            0492.000
