* MERGE PHASE                                           HEADER  C:MERGER0001.000
*                                                                       0002.000
*                                                                       0003.000
*                  MERGE PHASE                                          0004.000
         M.PGM     C:MERGER,MPX-32,3.6.1,00                             0005.000
         DEF       C:MERGER                                             0006.000
         EXT       C:INSTLR                                             0007.000
         EXT       C:DLNKLR                                             0008.000
         EXT       C:INSTFR                                             0009.000
         EXT       C:READWF                                             0010.000
         EXT       C:WRYTWF                                             0011.000
         EXT       C:GETSI                                              0012.000
         EXT       C:MOVREC                                             0013.000
         EXT       C:EXCHNG                                             0014.000
         EXT       SORTERR                                              0015.000
SRTCOM4  COMMON    SRTC4(75)                                            0016.000
         ORG       SRTC4                                                0017.000
RECSPB   DATAW     X'0'                                                 0018.000
RECSTB   DATAW     X'0'                                                 0019.000
RECSLB   DATAW     X'0'                                                 0020.000
RECSZ    DATAW     X'0'                                                 0021.000
TMP1     DATAW     X'0'                                                 0022.000
PASSSZ   DATAW     X'0'                                                 0023.000
NBLK     DATAW     X'0'                                                 0024.000
MERGLV   DATAW     X'0'                                                 0025.000
INITML   DATAW     X'0'                                                 0026.000
ENDOCS   DATAW     X'0'                                                 0027.000
STAT     DATAW     X'0'                                                 0028.000
OLSTAT   DATAW     X'0'                                                 0029.000
POWERS   REZ       16W                                                  0030.000
PASMAX   DATAW     X'0'                                                 0031.000
PASCNT   DATAW     X'0'                                                 0032.000
AVLCNT   DATAW     X'0'                                                 0033.000
LSTFLG   DATAW     X'0'                                                 0034.000
STGMAX   DATAW     X'0'                                                 0035.000
MAXSSZ   DATAW     X'7FFFFFFF'                                          0036.000
TRVCTR   REZ       1W                                                   0037.000
SCB      REZ       1W                                                   0038.000
FIRSTQ   REZ       1W                                                   0039.000
LASTQ    REZ       1W                                                   0040.000
LSTTLS   REZ       1W                                                   0041.000
LSTHDS   REZ       1W                                                   0042.000
RECPTS   REZ       1W                                                   0043.000
SINFO    REZ       1W                                                   0044.000
BUFADR   REZ       1W                                                   0045.000
BUFBAS   REZ       1W                                                   0046.000
FIB      REZ       1W                                                   0047.000
RMDR     REZ       1W                                                   0048.000
FULL     REZ       1W                                                   0049.000
ENDSTG   REZ       1W                                                   0050.000
NUSTRG   REZ       1W                                                   0051.000
NEXBLK   REZ       1W                                                   0052.000
STRBUF   REZ       1W                                                   0053.000
BUFPTR   REZ       1W                                                   0054.000
ONEX     REZ       1W                                                   0055.000
ZEROX    REZ       1W                                                   0056.000
NXELST   REZ       1W                                                   0057.000
NEXLST   REZ       1W                                                   0058.000
RECINX   REZ       1W                                                   0059.000
LSTREC   REZ       1W                                                   0060.000
RECL     REZ       1W                                                   0061.000
LST      REZ       1W                                                   0062.000
LASTSI   REZ       1W                                                   0063.000
TMPB     REZ       1W                                                   0064.000
TMPA     REZ       1W                                                   0065.000
LIST     REZ       1W                                                   0066.000
XLV222   REZ       1W                                                   0067.000
XLV230   REZ       1W                                                   0068.000
XLP1     REZ       1W                                                   0069.000
         REL                                                            0070.000
* MERGE STRINGS FROM WORKFILE UNTIL ONLY ONE                            0071.000
* STRING IS LEFT                                                        0072.000
* TAKE FIRST RECORD OF LISTS IN ORDER OF POSITION 40004000* TAKE FIRST R0073.000
* IN FIRSTRECQ FROM NEXTLISTPTR UNTIL ENOUGH 40005000* IN FIRSTRECQ FROM0074.000
* RECORDS ARE SELECTED TO FILL A BLOCK                                  0075.000
*                                                                       0076.000
* IF THE END OF FIRSTRECQ IS REACHED THEN COMPLETE40008000* IF THE END O0077.000
* SELECTION WITH DUMMY RECORDS AND TERMINATE 40009000* SELECTION WITH DU0078.000
* CURRENT OUTPUT STRING                                                 0079.000
* AS RECORDS ARE SELECTED LINK TOGETHER TO FORM A 40011000* AS RECORDS A0080.000
* MERGED LIST                                                           0081.000
* READ THE NEXTBLOCK OF LIST NEXT TO BE EXHAUSTED 40013000* READ THE NEX0082.000
* EXCHANGE RECORDS IN MERGE LIST WITH RECORDS IN                        0083.000
* BLOCK JUST READ                                                       0084.000
* WRITE BLOCK TO WORKFILE                                               0085.000
* REPEAT UNTIL ONLY ONE STRING LEFT                                     0086.000
         M.REQS                                                         0087.000
FQHD     EQU       X'0'            FIRST-RECORD QUEUE HEAD              0088.000
LQHD     EQU       X'0'            LAST-RECORD QUEUE HEAD               0089.000
TRUE     EQU       1               TRUTH                                0090.000
FALSE    EQU       X'0'            FALSEHOOD                            0091.000
NSRTOH   EQU       3               OVERHEAD PER TREE ENTRY DURING SORT  0092.000
NMRGOH   EQU       17              OVERHEAD PER MERGE LEVEL DURING MERGE0093.000
FIBSZ    EQU       8               FILE IDENTIFICATION BLOCK WORD SIZE  0094.000
IOWSSZ   EQU       X'0'            REQUIRED WORKING SPACE FOR I/O       0095.000
AREAOF   EQU       2               G.A. OFFSET FOR AREA DESCRIPTOR      0096.000
BUFBLK   EQU       1               RECORD OFFSET OF LOW ORDER PART OF BL0097.000
BUFRCT   EQU       2               RECORD OFFSET OF RECORD COUNT        0098.000
BLNKSZ   EQU       3               SIZE OF BLOCK INFO                   0099.000
SISZF    EQU       1               STRINGINFO LOW ORDER OF STRING LENGTH0100.000
SIADRF   EQU       3               STRINGINFO LOW ORDER OF STRING ADDRES0101.000
SIESZ    EQU       4               STRINGINFO ENTRY SIZE                0102.000
MAXSTG   EQU       32767           MAXIMUM NUMBER OF STRINGS            0103.000
FQLSTF   EQU       X'0'            FIRST QUEUE LOCATION LIST POINTER    0104.000
FQRECF   EQU       1               FIRST QUEUE LOCATION OF RECORD POINTE0105.000
FQLNKF   EQU       3               FIRST QUEUE LOCATION OF LINK         0106.000
FQESZ    EQU       4               FIRST QUEUE ENTRY SIZE               0107.000
LQLSTF   EQU       X'0'            LAST QUEUE LOCATION OF LIST POINTER  0108.000
LQRECF   EQU       1               LAST QUEUE LOCATION OF RECORD POINTER0109.000
LQLNKF   EQU       3               LAST QUEUE LOCATION OF LINK          0110.000
LQESZ    EQU       4               LAST QUEUE ENTRY SIZE                0111.000
RCADRF   EQU       X'0'            RECORD POINTER LOCATION OF RECORD ADD0112.000
RCEOSF   EQU       1               RECORD POINTER LOCATION OF END-OF-STR0113.000
RCLNKF   EQU       3               RECORDPOINTER LOCATION OF LINK       0114.000
RCESZ    EQU       4               RECORD POINTER ENTRY SIZE            0115.000
MRGLST   EQU       X'0'            LOCATION OF MERGE-LIST HEAD          0116.000
DUMPOL   EQU       1               LOCATION OF DUMMYPOOL-LIST HEAD      0117.000
MINTSZ   EQU       4               MINIMUM TREE SIZE                    0118.000
MAXTSZ   EQU       X'7FFE'         MAXIMUM TREE SIZE                    0119.000
STARTL   EQU       2               FIRST LIST ENTRY                     0120.000
MINMLV   EQU       2               MINIMUM MERGE LEVEL                  0121.000
MAXMLV   EQU       8               MAXIMUM MERGE LEVEL                  0122.000
NOTNS    EQU       X'0'            NOT NEW STRING                       0123.000
READNS   EQU       -1              READ NEW STRING                      0124.000
ATTCHD   EQU       1               NEW STRING READ AND ATTACHED         0125.000
NOSTRG   EQU       2               NO STRING AVAILABLE                  0126.000
LTV      EQU       X'0'            LESS THAN VALUE                      0127.000
EQV      EQU       1               EQUAL VALUE                          0128.000
GTV      EQU       2               GREATER THAN VALUE                   0129.000
SPERB    EQU       48              STRINGS PER BLOCK OF STRING INFO     0130.000
* SORT CONTROL BLOCK LAYOUT                                             0131.000
SCBWID   EQU       X'0'            WORK FILE ID                         0132.000
SCBIN    EQU       1               INPUT PROCEDURE                      0133.000
SCBOUT   EQU       2               OUTPUT PROCEDURE                     0134.000
SCBRA    EQU       3               RECORD ADDRESS                       0135.000
SCBRL    EQU       4               RECORD LENGTH                        0136.000
SCBKA    EQU       5               KEY ADDRESS                          0137.000
SCBKL    EQU       6               KEY LENGTH                           0138.000
SCBOPT   EQU       7               OPTIONS                              0139.000
* OPTION VALUES                                                         0140.000
MAPPED   EQU       1               USER PROVIDES MEMORY BOUNDS          0141.000
WRTCMP   EQU       2               USER WANTS OUTPUT I/O VERIFIED       0142.000
DIAGNO   EQU       4               USER WANTS SOME INFO MESSAGES        0143.000
SCBSTS   EQU       8               STATUS                               0144.000
* STATUS VALUES                                                         0145.000
EOS      EQU       1               END-OF-SORT                          0146.000
MEMERR   EQU       3               INSUFFICIENT MEMORY                  0147.000
WFSERR   EQU       5               INSUFFICIENT WORKFILE SPACE          0148.000
WFIOER   EQU       9               IRRECOVERABLE I/O ERROR              0149.000
WFRCER   EQU       17              WORKFILE RECORD COUNT ERROR          0150.000
SCBINF   EQU       9               INFO PROCEDURE                       0151.000
SCBBGM   EQU       10              BEGINNING OF MEMORY                  0152.000
SCBEDM   EQU       11              END OF MEMORY                        0153.000
* TRANSFER VECTOR LAYOUT                                                0154.000
TVKSZ    EQU       X'0'            KEYSZ                                0155.000
TVDSZ    EQU       1               DATSZ                                0156.000
TVFIB    EQU       2               FIB                                  0157.000
TVNREC   EQU       3               NRECS                                0158.000
TVSECW   EQU       4               SECTWD                               0159.000
TVTRKS   EQU       5               TRKSEC                               0160.000
TVMRGL   EQU       6               MERGLV                               0161.000
TVPCNT   EQU       7               PCNT                                 0162.000
TVBBAS   EQU       8               BUFBAS                               0163.000
TVSONF   EQU       9               SONFO                                0164.000
TVSINF   EQU       10              SINFO                                0165.000
TVLSSI   EQU       11              LASTSI                               0166.000
TVSGMX   EQU       12              STGMAX                               0167.000
TVRPTS   EQU       13              RECPTS                               0168.000
TVBSZS   EQU       14              BUFSZS                               0169.000
TVRPB    EQU       15              RECSPB                               0170.000
TVRUN    EQU       16              RUN                                  0171.000
TVNXEL   EQU       16              NXELST                               0172.000
TVLOSR   EQU       17              LOSER                                0173.000
TVLKEY   EQU       18              LSTKEY                               0174.000
TVLHDS   EQU       19              LSTHDS                               0175.000
TVLTLS   EQU       20              LSTTLS                               0176.000
TVFQ     EQU       21              FIRSTQ                               0177.000
TVLQ     EQU       22              LASTQ                                0178.000
TVWFSZ   EQU       23              WFSIZE                               0179.000
TVLSEC   EQU       24              LSTSEC                               0180.000
TVMXSG   EQU       25              MXSGIN                               0181.000
TVNBLK   EQU       26              NEXBLK                               0182.000
TVRMDR   EQU       27              RMDR                                 0183.000
TVESTG   EQU       28              ENDSTG                               0184.000
TVNSTG   EQU       29              NUSTRG                               0185.000
TVFULL   EQU       30              FULL                                 0186.000
TVPASZ   EQU       31              PASSSZ                               0187.000
TVPASM   EQU       32              PASMAX                               0188.000
TVSISZ   EQU       33              SISZ                                 0189.000
INFPRN   EQU       1029                                                 0190.000
INFPE    EQU       1028                                                 0191.000
MXSTAT   EQU       31                                                   0192.000
CKSTAT   EQU       $                                                    0193.000
         STW       R0,XLV222                                            0194.000
         STW       R2,LIST                                              0195.000
* BEGIN DETERMINING NEXTEXHAUSTEDLIST                                   0196.000
* USE THE FOLLOWING PRIORITY SCHEME:                                    0197.000
* 1). NEXT BLOCK IS A CONTINUATION BLOCK & THERE 40704000* 1). NEXT BLOC0198.000
* ARE NO ACTIVE RECORDS                                                 0199.000
* 2). NEXT BLOCK IS A CONTINUATION BLOCK & LESS                         0200.000
* THAN 2 BLOCKS ARE CURRENTLY ACTIVE                                    0201.000
* 3). NEXT BLOCK IS FIRST OF NEW STRING, LIST IS 40708000* 3). NEXT BLOC0202.000
* NOT ACTIVE, & THERE ARE NO ACTIVE RECORDS                             0203.000
* 4). NEXT BLOCK IS FIRST OF NEW STRING, LIST IS 40710000* 4). NEXT BLOC0204.000
* ACTIVE, BUT THERE ARE NO ACTIVE RECORDS                               0205.000
* 5). NEXT BLOCK IS FIRST OF NEW STRING, LIST IS 40712000* 5). NEXT BLOC0206.000
* NOT ACTIVE, & LESS THAN 2 BLOCKS ARE                                  0207.000
* CURRENTLY ACTIVE                                                      0208.000
* 5). NEXT BLOCK IS FIRST OF NEW STRING, LIST IS 40715000* 5). NEXT BLOC0209.000
* ACTIVE, & LESS THAN 2 BLOCKS ARE CURRENTLY 40716000* ACTIVE, & LESS TH0210.000
* ACTIVE                                                                0211.000
* 7). NEXT BLOCK IS A CONTINUATION BLOCK & MORE                         0212.000
* THAN 2 BLOCKS ARE CURRENTLY ACTIVE                                    0213.000
* 8). NEXT BLOCK IS FIRST OF NEW STRING & MORE                          0214.000
* THAN 2 BLOCKS ARE CURRENTLY ACTIVE                                    0215.000
* 9). NEXT BLOCK IS FOR A NEW STRING BUT ITS NOT 40722000* 9). NEXT BLOC0216.000
* THE FIRST BLOCK                                                       0217.000
* 10). A LIST WITH NO STRING ATTACHES IS NEVER                          0218.000
* SELECTED                                                              0219.000
* STATUS:=MAXIMUMSTATUS;                                                0220.000
         LI        R0,MXSTAT                                            0221.000
         STW       R0,STAT                                              0222.000
* IF NEWSTRING(LIST)=NOTNEWSTRING THEN                                  0223.000
         LW        R1,LIST                                              0224.000
         ADMW      R1,NUSTRG                                            0225.000
         STW       R1,TMPA                                              0226.000
         LW        R0,*TMPA                                             0227.000
         CI        R0,NOTNS                                             0228.000
         BNE       CSTAT0                                               0229.000
* STATUS:=0                                                             0230.000
         ZMW       STAT                                                 0231.000
* ELSE                                                                  0232.000
         BU        CSTAT9                                               0233.000
CSTAT0   EQU       $                                                    0234.000
* IF NEWSTRING(LIST)=READNEWSTRING THEN                                 0235.000
         LW        R0,*TMPA                                             0236.000
         CI        R0,READNS                                            0237.000
         BNE       CSTAT8                                               0238.000
* IF ATENDOFSTRING(LIST) THEN                                           0239.000
         LW        R1,LIST                                              0240.000
         ADMW      R1,ENDSTG                                            0241.000
         LW        R0,0W,X1                                             0242.000
         CI        R0,FALSE                                             0243.000
         BCT       EQ,CSTAT4                                            0244.000
* STATUS:=3                                                             0245.000
         LI        R0,3                                                 0246.000
         STW       R0,STAT                                              0247.000
* ELSE                                                                  0248.000
         BU        CSTAT9                                               0249.000
CSTAT4   EQU       $                                                    0250.000
* STATUS:=4                                                             0251.000
         LI        R0,4                                                 0252.000
         STW       R0,STAT                                              0253.000
* ELSE                                                                  0254.000
         BU        CSTAT9                                               0255.000
CSTAT8   EQU       $                                                    0256.000
* IF NEWSTRING(LIST)=ATTACHED THEN                                      0257.000
         LW        R0,*TMPA                                             0258.000
         CI        R0,ATTCHD                                            0259.000
         BNE       CSTAT9                                               0260.000
* STATUS:=16;                                                           0261.000
         LI        R0,16                                                0262.000
         STW       R0,STAT                                              0263.000
CSTAT9   EQU       $                                                    0264.000
* IF FULL(LIST)>0 THEN                                                  0265.000
         LW        R1,LIST                                              0266.000
         ADMW      R1,FULL                                              0267.000
         LW        R0,0W,X1                                             0268.000
*        CI        R0,X'0'                                              0269.000
         BCF       GT,CSTAT7                                            0270.000
* IF FULL(LIST) LE 2*RECSPERBLK THEN                                    0271.000
         LW        R5,RECSPB                                            0272.000
         ADMW      R5,RECSPB       R5 = TMP2                            0273.000
         LW        R0,0W,X1                                             0274.000
         CAR       R5,R0                                                0275.000
         BCT       GE,CSTAT6                                            0276.000
* STATUS:=STATUS+2                                                      0277.000
         LI        R0,2                                                 0278.000
         ARMW      R0,STAT                                              0279.000
* ELSE                                                                  0280.000
         BU        CSTAT7                                               0281.000
CSTAT6   EQU       $                                                    0282.000
* STATUS:=STATUS+8;                                                     0283.000
         LI        R0,8                                                 0284.000
         ARMW      R0,STAT                                              0285.000
CSTAT7   EQU       $                                                    0286.000
* IF STATUS<OLDSTATUS THEN                                              0287.000
         LW        R0,STAT         R0 = STAT                            0288.000
         CAMW      R0,OLSTAT                                            0289.000
         BCT       GE,CSTAT1                                            0290.000
* BEGIN UPDATING NEXTEXHAUSTEDLIST                                      0291.000
* OLDSTATUS:=STATUS;                                                    0292.000
         STW       R0,OLSTAT                                            0293.000
* NEXTEXHAUSTEDLIST:=LIST;                                              0294.000
         LW        R0,LIST                                              0295.000
         STW       R0,NXELST                                            0296.000
* END;                                                                  0297.000
CSTAT1   EQU       $                                                    0298.000
* RETURN                                                                0299.000
         LW        R0,XLV222                                            0300.000
         TRSW      R0                                                   0301.000
C:MERGER EQU       $                                                    0302.000
         STW       R0,XLV230                                            0303.000
         STW       R2,SCB                                               0304.000
         STW       R3,TRVCTR                                            0305.000
* INITIALIZE FROM TRANSFER VECTOR                                       0306.000
         LW        R0,TVFIB*4,X3                                        0307.000
         STW       R0,FIB                                               0308.000
         LW        R0,TVBBAS*4,X3                                       0309.000
         STW       R0,BUFBAS                                            0310.000
         LW        R0,TVSINF*4,X3                                       0311.000
         STW       R0,SINFO                                             0312.000
         LW        R0,TVRPTS*4,X3                                       0313.000
         STW       R0,RECPTS                                            0314.000
         LW        R0,TVLHDS*4,X3                                       0315.000
         STW       R0,LSTHDS                                            0316.000
         LW        R0,TVLTLS*4,X3                                       0317.000
         STW       R0,LSTTLS                                            0318.000
         LW        R0,TVLQ*4,X3                                         0319.000
         STW       R0,LASTQ                                             0320.000
         LW        R0,TVFQ*4,X3                                         0321.000
         STW       R0,FIRSTQ                                            0322.000
         LW        R0,TVNBLK*4,X3                                       0323.000
         STW       R0,NEXBLK                                            0324.000
         LW        R0,TVPASZ*4,X3                                       0325.000
         STW       R0,PASSSZ                                            0326.000
         LW        R0,TVMRGL*4,X3                                       0327.000
         STW       R0,MERGLV                                            0328.000
         LW        R0,TVRPB*4,X3                                        0329.000
         STW       R0,RECSPB                                            0330.000
         LW        R0,TVSGMX*4,X3                                       0331.000
         STW       R0,STGMAX                                            0332.000
         LW        R0,TVPASM*4,X3                                       0333.000
         STW       R0,PASMAX                                            0334.000
         LW        R0,TVESTG*4,X3                                       0335.000
         STW       R0,ENDSTG                                            0336.000
         LW        R0,TVFULL*4,X3                                       0337.000
         STW       R0,FULL                                              0338.000
         LW        R0,TVNSTG*4,X3                                       0339.000
         STW       R0,NUSTRG                                            0340.000
         LW        R0,TVRMDR*4,X3                                       0341.000
         STW       R0,RMDR                                              0342.000
         LW        R0,TVNXEL*4,X3                                       0343.000
         STW       R0,NXELST                                            0344.000
         LW        R0,TVPCNT*4,X3                                       0345.000
         STW       R0,INITML                                            0346.000
* RECSZ:=KEYSZ+DATSZ;                                                   0347.000
         LW        R0,TVKSZ*4,X3                                        0348.000
         ADMW      R0,TVDSZ*4,X3                                        0349.000
         STW       R0,RECSZ                                             0350.000
         SLL       R0,2                                                 0351.000
         STW       R0,RECINX       AVOID REDUNDANT CONVERSIONS          0352.000
* ZEROX & ONEX                                                          0353.000
         ZMW       ZEROX                                                0354.000
         LI        R0,1*4                                               0355.000
         STW       R0,ONEX                                              0356.000
* IF MERGELEVEL > 0 THEN DO                                             0357.000
         LW        R0,MERGLV                                            0358.000
*        CI        R0,X'0'                                              0359.000
         BCF       GT,MRG020                                            0360.000
* INITIALIZE POWERS-OF-2 TABLE FOR LATER USE                            0361.000
* AND SET MAXIMUM LIST FLAG                                             0362.000
         ZMW       LSTFLG                                               0363.000
         LEA       R0,POWERS                                            0364.000
         STW       R0,TMPA                                              0365.000
         LI        R7,1                                                 0366.000
         LNW       R6,MERGLV                                            0367.000
PWRINT   EQU       $                                                    0368.000
         STW       R6,XLP1                                              0369.000
         STW       R7,*TMPA                                             0370.000
         ARMW      R7,LSTFLG       LSTFLG:=LSTFLG+(2**MERGELEVEL-1);    0371.000
         SLL       R7,1                                                 0372.000
         LW        R0,ONEX                                              0373.000
         ARMW      R0,TMPA                                              0374.000
         LW        R6,XLP1                                              0375.000
         BIB       R6,PWRINT                                            0376.000
* END                                                                   0377.000
MRG020   EQU       $                                                    0378.000
* STARTBUFFER:=BUFFER.DATA;                                             0379.000
         LI        R0,AREAOF*4                                          0380.000
         ADMW      R0,BUFBAS                                            0381.000
         STW       R0,BUFADR                                            0382.000
         LI        R0,BLNKSZ*4                                          0383.000
         ADMW      R0,BUFADR                                            0384.000
         STW       R0,STRBUF                                            0385.000
* PASSCOUNT:=0;                                                         0386.000
         ZMW       PASCNT                                               0387.000
* NBLK:=NEXTBLOCK(NEXTEXHAUSTEDLIST);                                   0388.000
         LW        R1,NXELST                                            0389.000
         ADMW      R1,NEXBLK                                            0390.000
         LW        R0,0W,X1                                             0391.000
         STW       R0,NBLK                                              0392.000
* MAKE LOOK LIKE AT END OF STRING                                       0393.000
* ENDOFCURRENTSTRING:=TRUE;                                             0394.000
         LI        R0,1                                                 0395.000
         STW       R0,ENDOCS                                            0396.000
* AVAILABLECOUNT:=INITIALMERGELEVEL                                     0397.000
         LW        R0,INITML                                            0398.000
         STW       R0,AVLCNT                                            0399.000
PICK     EQU       $                                                    0400.000
* IF ENDOFCURRENTSTRING THEN                                            0401.000
         LW        R0,ENDOCS                                            0402.000
         CI        R0,FALSE                                             0403.000
         BCT       EQ,MRG520                                            0404.000
* BEGIN                                                                 0405.000
* IF (SCB(SCBOPT) & DIAGNO)>0 THEN                                      0406.000
         LW        R2,SCB                                               0407.000
         LW        R0,SCBOPT*4,X2                                       0408.000
         LI        R4,DIAGNO                                            0409.000
         ANR       R0,R4                                                0410.000
         BZ        MRG531                                               0411.000
* BEGIN PASSING OUT                                                     0412.000
* CALL SCB(SCBINF)(INFO(PASSESLEFT),MAXIMUMPASS);                       0413.000
         LW        R0,SCBINF*4,X2                                       0414.000
         STW       R0,TMPA                                              0415.000
         LI        R4,INFPRN                                            0416.000
         LW        R5,PASMAX                                            0417.000
         BL        *TMPA                                                0418.000
* IF PASSMAXIMUM LEQ 1 THEN                                             0419.000
         LW        R0,PASMAX                                            0420.000
         CI        R0,1                                                 0421.000
         BCT       GT,MRG532                                            0422.000
* RETURN;                                                               0423.000
         LW        R0,XLV230                                            0424.000
         TRSW      R0                                                   0425.000
MRG532   EQU       $                                                    0426.000
* PASSCOUNT:=PASSCOUNT+1;                                               0427.000
         LI        R0,1                                                 0428.000
         ARMW      R0,PASCNT                                            0429.000
* CALL SCB(SCBINF)(INFO(CURRENTPASS,PASSCOUNT))F                        0430.000
         LI        R4,INFPE                                             0431.000
         LW        R5,PASCNT                                            0432.000
         BL        *TMPA                                                0433.000
* END                                                                   0434.000
         BU        MRG533                                               0435.000
* ELSE                                                                  0436.000
MRG531   EQU       $                                                    0437.000
* IF PASSMAXIMUM LEQ 1 THEN                                             0438.000
         LW        R0,PASMAX                                            0439.000
         CI        R0,1                                                 0440.000
         BCT       GT,MRG533                                            0441.000
* RETURN;                                                               0442.000
         LW        R0,XLV230                                            0443.000
         TRSW      R0                                                   0444.000
MRG533   EQU       $                                                    0445.000
* PASSMAXIMUM:=PASSMAXIMUM-1;                                           0446.000
         LW        R0,PASMAX                                            0447.000
         SUI       R0,1                                                 0448.000
         STW       R0,PASMAX                                            0449.000
* STRINGMAX:=STRINGMAX+1;                                               0450.000
         LI        R0,1                                                 0451.000
         ARMW      R0,STGMAX                                            0452.000
* LASTSTRINGINDEX:=TRANSVECTOR(TVLSSI);                                 0453.000
         LW        R3,TRVCTR                                            0454.000
         LW        R0,TVLSSI*4,X3                                       0455.000
         STW       R0,LASTSI                                            0456.000
* STRINGINFO(LASTSTRINGINDEX).ADDR:=NBLK;                               0457.000
         LW        R1,LASTSI                                            0458.000
         ADMW      R1,SINFO        R1 = TMPA                            0459.000
         LW        R0,NBLK                                              0460.000
         STW       R0,SIADRF*4,X1                                       0461.000
* STRINGINFO(LASTSTRINGINDEX).SIZE:=PASSSIZE;                           0462.000
         LW        R0,PASSSZ                                            0463.000
         STW       R0,SISZF*4,X1                                        0464.000
* ENDOFCURRENTSTRING:=FALSE;                                            0465.000
         LI        R0,FALSE                                             0466.000
         STW       R0,ENDOCS                                            0467.000
* END;                                                                  0468.000
MRG520   EQU       $                                                    0469.000
* NEXTLISTPTR:=FIRSTRECQ(FIRSTRECQHD).FIRSTLNK;                         0470.000
         LI        R3,FQHD*4                                            0471.000
         ADMW      R3,FIRSTQ                                            0472.000
         LW        R1,FQLNKF*4,X3                                       0473.000
         STW       R1,NEXLST                                            0474.000
* LST:=FIRSTRECQ(NEXTLSTPTR).LIST;                                      0475.000
         ADMW      R1,FIRSTQ                                            0476.000
         LW        R0,FQLSTF*4,X1                                       0477.000
         STW       R0,LST                                               0478.000
* LISTHEADS(MERGELIST):=RECL:=LISTHEADS(LST);                           0479.000
         LW        R1,LST                                               0480.000
         ADMW      R1,LSTHDS                                            0481.000
         LW        R0,0W,X1                                             0482.000
         STW       R0,RECL                                              0483.000
         LW        R1,LSTHDS                                            0484.000
         STW       R0,MRGLST*4,X1                                       0485.000
* RECSLASTBLK:=0;                                                       0486.000
         ZMW       RECSLB                                               0487.000
* WHILE RECSLASTBLK<RECSPERBLK DO                                       0488.000
PICLOP   EQU       $                                                    0489.000
         LW        R0,RECSLB                                            0490.000
         CAMW      R0,RECSPB                                            0491.000
         BCT       GE,READ                                              0492.000
* BEGIN                                                                 0493.000
* LASTREC:=RECL;                                                        0494.000
         LW        R0,RECL                                              0495.000
         STW       R0,LSTREC                                            0496.000
* RECSLASTBLK:=RECSLASTBLK+1;                                           0497.000
         LI        R0,1                                                 0498.000
         ARMW      R0,RECSLB                                            0499.000
* FULL(LST):=FULL(LST)-1;                                               0500.000
         LW        R1,LST                                               0501.000
         ADMW      R1,FULL                                              0502.000
         LW        R0,0W,X1                                             0503.000
         SUI       R0,1                                                 0504.000
         STW       R0,0W,X1                                             0505.000
* LISTHEADS(LST):=RECLNK(RECL);                                         0506.000
         LW        R1,RECL                                              0507.000
         ADMW      R1,RECPTS       R1 = TMPB                            0508.000
         LW        R3,LST                                               0509.000
         ADMW      R3,LSTHDS       R3 = TMPA                            0510.000
         LW        R0,RCLNKF*4,X1                                       0511.000
         STW       R0,0W,X3                                             0512.000
* DELINK FIRSTRECQ                                                      0513.000
* FIRSTRECQ(FIRSTRECQHD).FIRSTLNK:=                                     0514.000
* FIRSTRECQ(NEXTLISTPTR).FIRSTLNK;                                      0515.000
         LI        R3,FQHD*4                                            0516.000
         ADMW      R3,FIRSTQ       R3 = TMPA                            0517.000
         LW        R1,NEXLST                                            0518.000
         ADMW      R1,FIRSTQ       R1 = TMPB                            0519.000
         LW        R0,FQLNKF*4,X1                                       0520.000
         STW       R0,FQLNKF*4,X3                                       0521.000
* IF ENDOFSTRING(RECL) THEN                                             0522.000
         LW        R1,RECL                                              0523.000
         ADMW      R1,RECPTS       R1 = TMPB                            0524.000
         LW        R0,RCEOSF*4,X1                                       0525.000
         CI        R0,TRUE                                              0526.000
         BNE       MRG021                                               0527.000
* BEGIN                                                                 0528.000
* ENDOFSTRING(RECL):=FALSE;                                             0529.000
         ZMW       RCEOSF*4,X1                                          0530.000
* AVAILABLECOUNT:=AVAILABLECOUNT-1;                                     0531.000
         LW        R0,AVLCNT                                            0532.000
         SUI       R0,1                                                 0533.000
         STW       R0,AVLCNT                                            0534.000
* DELINKLASTRECQ(LST);                                                  0535.000
         LW        R2,LST                                               0536.000
         LW        R3,LASTQ                                             0537.000
         BL        C:DLNKLR                                             0538.000
* ATENDOFSTRING(LST):=TRUE;                                             0539.000
         LW        R1,LST                                               0540.000
         ADMW      R1,ENDSTG                                            0541.000
         LI        R0,TRUE                                              0542.000
         STW       R0,0W,X1                                             0543.000
* END ELSE                                                              0544.000
         BU        MRG002                                               0545.000
MRG021   EQU       $                                                    0546.000
* IF RECLNK(RECL)=0 THEN                                                0547.000
         LW        R0,RCLNKF*4,X1  (R1 = TMPB)                          0548.000
*        CAMW      R0,ZEROX                                             0549.000
         BNE       MRG000                                               0550.000
* BEGIN                                                                 0551.000
* DELINKLASTRECQ(LST);                                                  0552.000
         LW        R2,LST                                               0553.000
         LW        R3,LASTQ                                             0554.000
         BL        C:DLNKLR                                             0555.000
* LISTTAILS(LST):=0;                                                    0556.000
         LW        R1,LST                                               0557.000
         ADMW      R1,LSTTLS                                            0558.000
         LW        R0,ZEROX                                             0559.000
         STW       R0,0W,X1                                             0560.000
* END ELSE                                                              0561.000
         BU        MRG002                                               0562.000
MRG000   EQU       $                                                    0563.000
* INSERTFIRSTRECQ(LST);                                                 0564.000
         LW        R2,LST                                               0565.000
         BL        C:INSTFR                                             0566.000
         ACW       FIRSTQ                                               0567.000
         ACW       LSTHDS                                               0568.000
         ACW       RECPTS                                               0569.000
MRG002   EQU       $                                                    0570.000
* IF AVAILABLECOUNT LEQ 0 THEN                                          0571.000
         LW        R0,AVLCNT                                            0572.000
*        CI        R0,X'0'                                              0573.000
         BCT       GT,MRG001                                            0574.000
* BEGIN                                                                 0575.000
* ENDOFCURRENTSTRING:=TRUE;                                             0576.000
         LI        R0,TRUE                                              0577.000
         STW       R0,ENDOCS                                            0578.000
* GO READ;                                                              0579.000
         BU        READ                                                 0580.000
* END;                                                                  0581.000
MRG001   EQU       $               CONTINUE                             0582.000
* NEXTLISTPTR:=FIRSTRECQ(FIRSTRECQHD).FIRSTLNK;                         0583.000
         LI        R1,FQHD*4                                            0584.000
         ADMW      R1,FIRSTQ                                            0585.000
         LW        R3,FQLNKF*4,X1                                       0586.000
         STW       R3,NEXLST                                            0587.000
* LST:=FIRSTRECQ(NEXTLISTPTR).LIST;                                     0588.000
         ADMW      R3,FIRSTQ                                            0589.000
         LW        R1,FQLSTF*4,X3                                       0590.000
         STW       R1,LST                                               0591.000
* RECL:=LISTHEADS(LST);                                                 0592.000
         ADMW      R1,LSTHDS                                            0593.000
         LW        R0,0W,X1                                             0594.000
         STW       R0,RECL                                              0595.000
* RECLNK(LASTREC):=RECL;                                                0596.000
         LW        R1,LSTREC                                            0597.000
         ADMW      R1,RECPTS                                            0598.000
         STW       R0,RCLNKF*4,X1                                       0599.000
* END;                                                                  0600.000
         BU        PICLOP                                               0601.000
READ     EQU       $                                                    0602.000
* PASSIZE:=PASSIZE-RECSLASTBLK;                                         0603.000
         LW        R0,PASSSZ                                            0604.000
         SUMW      R0,RECSLB                                            0605.000
         STW       R0,PASSSZ                                            0606.000
* READ(WORKFILE@NBLK,BUFFER);                                           0607.000
         LW        R2,FIB                                               0608.000
         LW        R4,NBLK                                              0609.000
         LW        R3,BUFBAS                                            0610.000
         BL        C:READWF                                             0611.000
* RECSTHISBLK:=BUFFER.RECCNT;                                           0612.000
         LW        R1,BUFADR                                            0613.000
         LW        R0,BUFRCT*4,X1                                       0614.000
         STW       R0,RECSTB                                            0615.000
* FULL(NEXTEXHAUSTEDLIST):=                                             0616.000
* FULL(NEXTEXHAUSTEDLIST)+RECSTHISBLK;                                  0617.000
         LW        R1,NXELST                                            0618.000
         ADMW      R1,FULL                                              0619.000
         LW        R0,RECSTB                                            0620.000
         ARMW      R0,0W,X1                                             0621.000
* REMAINDER(NEXTEXHAUSTEDLIST):=                                        0622.000
* REMAINDER(NEXTEXHAUSTEDLIST)-RECSTHISBLK;                             0623.000
         LW        R2,NXELST                                            0624.000
         ADMW      R2,RMDR                                              0625.000
         LW        R0,0W,X2                                             0626.000
         SUMW      R0,RECSTB                                            0627.000
         STW       R0,0W,X2                                             0628.000
* IF NEWSTRING(NEXTEXHAUSTEDLIST)=READNEWSTRING THEN                    0629.000
         LW        R1,NXELST                                            0630.000
         ADMW      R1,NUSTRG       R1 = TMPA                            0631.000
         LW        R0,0W,X1                                             0632.000
         CI        R0,READNS                                            0633.000
         BNE       MRG150                                               0634.000
* NEWSTRING(NEXTEXHAUSTEDLIST):=ATTACHED;                               0635.000
         LI        R0,ATTCHD                                            0636.000
         STW       R0,0W,X1                                             0637.000
MRG150   EQU       $                                                    0638.000
* BUFPTR:=STARTBUFFER;                                                  0639.000
         LW        R0,STRBUF                                            0640.000
         STW       R0,BUFPTR                                            0641.000
* LISTTAILS(MERGELIST):=LASTREC;                                        0642.000
         LW        R0,LSTREC                                            0643.000
         LW        R1,LSTTLS                                            0644.000
         STW       R0,MRGLST*4,X1                                       0645.000
* RECLNK(LASTREC):=0;                                                   0646.000
* THIS IS FOR THE MERGED LIST.                                          0647.000
         LW        R1,LSTREC                                            0648.000
         ADMW      R1,RECPTS                                            0649.000
         LW        R0,ZEROX                                             0650.000
         STW       R0,RCLNKF*4,X1                                       0651.000
* RECL:=LISTHEADS(MERGELIST);                                           0652.000
         LW        R1,LSTHDS                                            0653.000
         LW        R0,MRGLST*4,X1                                       0654.000
         STW       R0,RECL                                              0655.000
* IF RECSLASTBLK=RECSPERBLK THEN                                        0656.000
         LW        R0,RECSLB                                            0657.000
         CAMW      R0,RECSPB                                            0658.000
         BNE       MRG003                                               0659.000
* IF RECSTHISBLK=RECSPERBLK THEN                                        0660.000
         LW        R0,RECSTB                                            0661.000
         CAMW      R0,RECSPB                                            0662.000
         BNE       MRG004                                               0663.000
* BEGIN                                                                 0664.000
* CASE: RECSLASTBLK=RECSTHISBLK=RECSPERBLK                              0665.000
* THRU RECSPERBLK DO                                                    0666.000
         LNW       R6,RECSPB                                            0667.000
MRG005   EQU       $                                                    0668.000
         STW       R6,XLP1                                              0669.000
* EXCHANGE(RECADR(RECL),BUFPTR,RECINX);                                 0670.000
         LW        R1,RECL                                              0671.000
         ADMW      R1,RECPTS                                            0672.000
         STW       R1,TMPA                                              0673.000
         LW        R2,RCADRF*4,X1                                       0674.000
         LW        R3,BUFPTR                                            0675.000
         LW        R4,RECSZ                                             0676.000
         BL        C:EXCHNG                                             0677.000
* BUFPTR:=BUFPTR+RECINX;                                                0678.000
         LW        R0,RECINX                                            0679.000
         ARMW      R0,BUFPTR                                            0680.000
* RECL:=RECLNK(RECL);                                                   0681.000
         LW        R1,TMPA                                              0682.000
         LW        R0,RCLNKF*4,X1                                       0683.000
         STW       R0,RECL                                              0684.000
         LW        R6,XLP1                                              0685.000
         BIB       R6,MRG005                                            0686.000
* JUMP OUT TO END OF LIST MERGING                                       0687.000
* END ELSE                                                              0688.000
         BU        ENDMRG                                               0689.000
MRG004   EQU       $                                                    0690.000
* BEGIN                                                                 0691.000
* CASE: RECSTHISBLK<RECSLASTBLK=RECSPERBLK                              0692.000
* THRU RECSTHISBLK DO                                                   0693.000
         LW        R0,RECSTB                                            0694.000
         STW       R0,TMP1                                              0695.000
MRG006   EQU       $                                                    0696.000
         CI        R0,X'0'         R0 = TMP1                            0697.000
         BCT       LE,END006                                            0698.000
* EXCHANGE(RECADR(RECL),BUFPTR,RECINX);                                 0699.000
         LW        R1,RECL                                              0700.000
         ADMW      R1,RECPTS                                            0701.000
         STW       R1,TMPA                                              0702.000
         LW        R2,RCADRF*4,X1                                       0703.000
         LW        R3,BUFPTR                                            0704.000
         LW        R4,RECSZ                                             0705.000
         BL        C:EXCHNG                                             0706.000
* BUFPTR:=BUFPTR+RECINX;                                                0707.000
         LW        R0,RECINX                                            0708.000
         ARMW      R0,BUFPTR                                            0709.000
* LASTREC:=RECL;                                                        0710.000
         LW        R0,RECL                                              0711.000
         STW       R0,LSTREC                                            0712.000
* RECL:=RECLNK(RECL);                                                   0713.000
         LW        R1,TMPA                                              0714.000
         LW        R0,RCLNKF*4,X1                                       0715.000
         STW       R0,RECL                                              0716.000
         LW        R0,TMP1                                              0717.000
         SUI       R0,1                                                 0718.000
         STW       R0,TMP1                                              0719.000
         BU        MRG006                                               0720.000
END006   EQU       $                                                    0721.000
* LINK REMAINING AREAS TO THE DUMMY POOL                                0722.000
* IF LISTTAILS(DUMMYPOOL)=0 THEN                                        0723.000
         LW        R1,LSTTLS                                            0724.000
         LW        R0,DUMPOL*4,X1                                       0725.000
*        CAMW      R0,ZEROX                                             0726.000
         BNE       MRG708                                               0727.000
* LISTHEADS(DUMMYPOOL):=RECL                                            0728.000
         LW        R0,RECL                                              0729.000
         LW        R1,LSTHDS                                            0730.000
         STW       R0,DUMPOL*4,X1                                       0731.000
* ELSE                                                                  0732.000
         BU        MRG707                                               0733.000
MRG708   EQU       $                                                    0734.000
* RECLNK(LISTTAILS(DUMMYPOOL)):=RECL;                                   0735.000
         LW        R1,LSTTLS                                            0736.000
         LW        R3,DUMPOL*4,X1                                       0737.000
         ADMW      R3,RECPTS                                            0738.000
         LW        R0,RECL                                              0739.000
         STW       R0,RCLNKF*4,X3                                       0740.000
MRG707   EQU       $                                                    0741.000
* LISTTAILS(DUMMYPOOL):=LISTTAILS(MERGELIST);                           0742.000
         LW        R1,LSTTLS                                            0743.000
         LW        R0,MRGLST*4,X1                                       0744.000
         STW       R0,DUMPOL*4,X1                                       0745.000
* THRU RECSPERBLK-RECSTHISBLK DO                                        0746.000
         LW        R0,RECSPB                                            0747.000
         SUMW      R0,RECSTB                                            0748.000
         STW       R0,TMP1                                              0749.000
MRG007   EQU       $                                                    0750.000
         CI        R0,X'0'         R0 = TMP1                            0751.000
         BCT       LE,END007                                            0752.000
* MOVEREC(RECADR(RECL),BUFPTR,RECINX);                                  0753.000
         LW        R1,RECL                                              0754.000
         ADMW      R1,RECPTS                                            0755.000
         STW       R1,TMPA                                              0756.000
         LW        R2,RCADRF*4,X1                                       0757.000
         LW        R3,BUFPTR                                            0758.000
         LW        R4,RECSZ                                             0759.000
         BL        C:MOVREC                                             0760.000
* BUFPTR:=BUFPTR+RECINX;                                                0761.000
         LW        R0,RECINX                                            0762.000
         ARMW      R0,BUFPTR                                            0763.000
* RECL:=RECLNK(RECL);                                                   0764.000
         LW        R1,TMPA                                              0765.000
         LW        R0,RCLNKF*4,X1                                       0766.000
         STW       R0,RECL                                              0767.000
         LW        R0,TMP1                                              0768.000
         SUI       R0,1                                                 0769.000
         STW       R0,TMP1                                              0770.000
         BU        MRG007                                               0771.000
END007   EQU       $                                                    0772.000
* RECL=0 SINCE NOTHING IS LEFT                                          0773.000
* END ELSE                                                              0774.000
         BU        ENDMRG                                               0775.000
MRG003   EQU       $                                                    0776.000
* BEGIN                                                                 0777.000
* CASE: RECSLASTBLK<RECSTHISBLK=RECSPERBLK                              0778.000
* THRU RECSLASTBLK DO                                                   0779.000
         LW        R0,RECSLB                                            0780.000
         STW       R0,TMP1                                              0781.000
MRG009   EQU       $                                                    0782.000
         CI        R0,X'0'         R0 = TMP1                            0783.000
         BCT       LE,END009                                            0784.000
* EXCHANGE(RECADR(RECL),BUFPTR,RECINX);                                 0785.000
         LW        R1,RECL                                              0786.000
         ADMW      R1,RECPTS                                            0787.000
         STW       R1,TMPA                                              0788.000
         LW        R2,RCADRF*4,X1                                       0789.000
         LW        R3,BUFPTR                                            0790.000
         LW        R4,RECSZ                                             0791.000
         BL        C:EXCHNG                                             0792.000
* BUFPTR:=BUFPTR+RECINX;                                                0793.000
         LW        R0,RECINX                                            0794.000
         ARMW      R0,BUFPTR                                            0795.000
* RECL:=RECLNK(RECL);                                                   0796.000
         LW        R1,TMPA                                              0797.000
         LW        R0,RCLNKF*4,X1                                       0798.000
         STW       R0,RECL                                              0799.000
         LW        R0,TMP1                                              0800.000
         SUI       R0,1                                                 0801.000
         STW       R0,TMP1                                              0802.000
         BU        MRG009                                               0803.000
END009   EQU       $                                                    0804.000
* END OF LAST BLOCK'S VALID DATA -- USE SOME DUMMY                      0805.000
* AREAS FOR REST OF BLOCK                                               0806.000
* RECL:=LISTHEADS(DUMMYPOOL);                                           0807.000
         LW        R1,LSTHDS                                            0808.000
         LW        R0,DUMPOL*4,X1                                       0809.000
         STW       R0,RECL                                              0810.000
* RECLNK(LASTREC):=RECL;                                                0811.000
         LW        R1,LSTREC                                            0812.000
         ADMW      R1,RECPTS                                            0813.000
         STW       R0,RCLNKF*4,X1                                       0814.000
* THRU RECSPERBLK-RECSLASTBLK DO                                        0815.000
         LW        R0,RECSPB                                            0816.000
         SUMW      R0,RECSLB                                            0817.000
         STW       R0,TMP1                                              0818.000
MRG010   EQU       $                                                    0819.000
         CI        R0,X'0'         R0 = TMP1                            0820.000
         BCT       LE,END010                                            0821.000
* MOVEREC(BUFPTR,RECADR(RECL),RECINX);                                  0822.000
         LW        R1,RECL                                              0823.000
         ADMW      R1,RECPTS                                            0824.000
         STW       R1,TMPA                                              0825.000
         LW        R3,RCADRF*4,X1                                       0826.000
         LW        R2,BUFPTR                                            0827.000
         LW        R4,RECSZ                                             0828.000
         BL        C:MOVREC                                             0829.000
* BUFPTR:=BUFPTR+RECINX;                                                0830.000
         LW        R0,RECINX                                            0831.000
         ARMW      R0,BUFPTR                                            0832.000
* RECL:=RECLNK(LASTREC:=RECL);                                          0833.000
         LW        R0,RECL                                              0834.000
         STW       R0,LSTREC                                            0835.000
         LW        R1,TMPA                                              0836.000
         LW        R0,RCLNKF*4,X1                                       0837.000
         STW       R0,RECL                                              0838.000
         LW        R0,TMP1                                              0839.000
         SUI       R0,1                                                 0840.000
         STW       R0,TMP1                                              0841.000
         BU        MRG010                                               0842.000
END010   EQU       $                                                    0843.000
* LISTHEADS(DUMMYPOOL):=RECL;                                           0844.000
         LW        R0,RECL                                              0845.000
         LW        R1,LSTHDS                                            0846.000
         STW       R0,DUMPOL*4,X1                                       0847.000
* IF RECL=0 THEN                                                        0848.000
         LW        R0,RECL                                              0849.000
*        CAMW      R0,ZEROX                                             0850.000
         BNE       MRG011                                               0851.000
* LISTTAILS(DUMMYPOOL):=0;                                              0852.000
         LW        R0,ZEROX                                             0853.000
         LW        R1,LSTTLS                                            0854.000
         STW       R0,DUMPOL*4,X1                                       0855.000
MRG011   EQU       $                                                    0856.000
ENDMRG   EQU       $                                                    0857.000
* THE FOLLOWING ASSUMES LASTREC IS TAIL OF NEW BLOCK                    0858.000
* RECLNK(LASTREC):=0;                                                   0859.000
         LW        R1,LSTREC                                            0860.000
         ADMW      R1,RECPTS                                            0861.000
         LW        R0,ZEROX                                             0862.000
         STW       R0,RCLNKF*4,X1                                       0863.000
* IF LISTHEADS(NEXTEXHAUSTEDLIST)=0 THEN                                0864.000
         LW        R1,NXELST                                            0865.000
         ADMW      R1,LSTHDS                                            0866.000
         STW       R1,TMPA                                              0867.000
         LW        R1,NXELST                                            0868.000
         ADMW      R1,LSTTLS                                            0869.000
         STW       R1,TMPB                                              0870.000
         LW        R0,*TMPA                                             0871.000
         CAMW      R0,ZEROX                                             0872.000
         BNE       MRG041                                               0873.000
* LISTHEADS(NEXTEXHAUSTEDLIST):=LISTHEADS(MERGELIST);                   0874.000
         LW        R1,LSTHDS                                            0875.000
         LW        R0,MRGLST*4,X1                                       0876.000
         STW       R0,*TMPA                                             0877.000
* ELSE                                                                  0878.000
         BU        MRG042                                               0879.000
* RECLNK(LISTTAILS(NEXTEXHAUSTEDLIST)):=                                0880.000
* LISTHEADS(MERGELIST);                                                 0881.000
MRG041   EQU       $                                                    0882.000
         LW        R3,*TMPB                                             0883.000
         ADMW      R3,RECPTS                                            0884.000
         LW        R1,LSTHDS                                            0885.000
         LW        R0,MRGLST*4,X1                                       0886.000
         STW       R0,RCLNKF*4,X3                                       0887.000
MRG042   EQU       $                                                    0888.000
* LISTTAILS(NEXTEXHAUSTEDLIST):=LASTREC;                                0889.000
         LW        R0,LSTREC                                            0890.000
         LW        R1,TMPB                                              0891.000
         STW       R0,0W,X1                                             0892.000
* UPDATE RECORD INDEX IN LASTRECQ ENTRY                                 0893.000
* LASTRECQ(NEXTEXHAUSTEDLIST*LASTRECQENTRYSIZE).REC                     0894.000
* :=LASTREC;                                                            0895.000
         LW        R1,NXELST                                            0896.000
         MPI       R0,LQESZ                                             0897.000
         ADMW      R1,LASTQ                                             0898.000
         LW        R0,LSTREC                                            0899.000
         STW       R0,LQRECF*4,X1                                       0900.000
* IF NOT ATENDOFSTRING(NEXTEXHAUSTEDLIST) THEN                          0901.000
         LW        R1,NXELST                                            0902.000
         ADMW      R1,ENDSTG                                            0903.000
         STW       R1,TMPA                                              0904.000
         LW        R0,*TMPA                                             0905.000
         CI        R0,TRUE                                              0906.000
         BCT       EQ,MRG045                                            0907.000
* BEGIN                                                                 0908.000
* IF FULL(NEXTEXHAUSTEDLIST) LEQ RECSTHISBLK THEN                       0909.000
         LW        R1,NXELST                                            0910.000
         ADMW      R1,FULL                                              0911.000
         STW       R1,TMPA                                              0912.000
         LW        R0,*TMPA                                             0913.000
         CAMW      R0,RECSTB                                            0914.000
         BCT       GT,MRG046                                            0915.000
* CALL INSERTFIRSTRECQ(NEXTEXHAUSTEDLIST);                              0916.000
         LW        R2,NXELST                                            0917.000
         BL        C:INSTFR                                             0918.000
         ACW       FIRSTQ                                               0919.000
         ACW       LSTHDS                                               0920.000
         ACW       RECPTS                                               0921.000
MRG046   EQU       $                                                    0922.000
* IF NEWSTRING(EXTEXHAUSTEDLIST):=NOTNEWSTRING THEN                     0923.000
         LW        R0,NXELST                                            0924.000
         ADMW      R0,NUSTRG                                            0925.000
         STW       R0,TMPA                                              0926.000
         LW        R0,*TMPA                                             0927.000
         CI        R0,NOTNS                                             0928.000
         BNE       MRG048                                               0929.000
* BEGIN REPOSITIONING WITHIN LASTRECQ FOR NEXT MERGE                    0930.000
* DELINKFROMLASTRECQ(NEXTEXHAUSTEDLIST);                                0931.000
         LW        R2,NXELST                                            0932.000
         LW        R3,LASTQ                                             0933.000
         BL        C:DLNKLR                                             0934.000
* INSERTLASTRECQ(NEXTEXHAUSTEDLIST);                                    0935.000
         LW        R2,NXELST                                            0936.000
         BL        C:INSTLR                                             0937.000
         ACW       LASTQ                                                0938.000
         ACW       LSTTLS                                               0939.000
         ACW       RECPTS                                               0940.000
* END;                                                                  0941.000
MRG048   EQU       $                                                    0942.000
* END;                                                                  0943.000
MRG045   EQU       $                                                    0944.000
* IF WE JUST READ THE LAST BLOCK OF THE STRING                          0945.000
* ATTACHED TO THIS LIST THEN ATTEMPT TO ATTACH                          0946.000
* A NEW STRING.                                                         0947.000
* IF REMAINDER(NEXTEXHAUSTEDLIST)=0 THEN                                0948.000
         LW        R1,NXELST                                            0949.000
         ADMW      R1,RMDR         R1 = TMPB                            0950.000
         LW        R7,0W,X1                                             0951.000
*        CI        R7,X'0'                                              0952.000
         BNE       MRG050                                               0953.000
* BEGIN INDICATING LAST RECORD OF STRING HOOKED TO                      0954.000
* NEXTEXHAUSTEDLIST 41182100* NEXTEXHAUSTEDLIST 41182100* NEXTEXHAUSTEDL0955.000
* ENDOFSTRING(LASTREC):=TRUE;                                           0956.000
         LW        R1,LSTREC                                            0957.000
         ADMW      R1,RECPTS                                            0958.000
         LI        R0,TRUE                                              0959.000
         STW       R0,RCEOSF*4,X1                                       0960.000
* IF STRINGMAX>0 THEN                                                   0961.000
         LW        R0,STGMAX                                            0962.000
*        CI        R0,X'0'                                              0963.000
         BCF       GT,MRG051                                            0964.000
* BEGIN GETTING A NEW STRING FOR NEXTEXHAUSTEDLIST                      0965.000
* BEGIN                                                                 0966.000
* I:=C:GETSI;                                                           0967.000
         LW        R2,TRVCTR                                            0968.000
         BL        C:GETSI                                              0969.000
* SET NEWSTRING,NEXTBLOCK, & RECORD COUNTS                              0970.000
* NEWSTRING(NEXTEXHAUSTEDLIST):=READNEWSTRING;                          0971.000
         LW        R1,NXELST                                            0972.000
         ADMW      R1,NUSTRG                                            0973.000
         STW       R1,TMPA                                              0974.000
         LI        R0,READNS                                            0975.000
         STW       R0,*TMPA                                             0976.000
* NEXTBLOCK(NEXTEXHAUSTEDLIST):=STRINGINFO(I).ADDR;                     0977.000
         ADMW      R2,SINFO        R2 = XTMP1                           0978.000
         LW        R1,NXELST                                            0979.000
         ADMW      R1,NEXBLK                                            0980.000
         LW        R0,SIADRF*4,X2                                       0981.000
         STW       R0,0W,X1                                             0982.000
* REMAINDER(NEXTEXHAUSTEDLIST):=STRINGINFO(I).SIZE;                     0983.000
         LW        R1,NXELST                                            0984.000
         ADMW      R1,RMDR                                              0985.000
         LW        R0,SISZF*4,X2                                        0986.000
         STW       R0,0W,X1                                             0987.000
* NOW ZOT THE SIZE SINCE THE SLOT IS NOW AVAILABLE                      0988.000
* STRINGINFO(I).SIZE:=MAXIMUMSTRINGSIZE;                                0989.000
         LW        R0,MAXSSZ                                            0990.000
         STW       R0,SISZF*4,X2                                        0991.000
* STRINGMAX:=STRINGMAX-1;                                               0992.000
         LW        R0,STGMAX                                            0993.000
         SUI       R0,1                                                 0994.000
         STW       R0,STGMAX                                            0995.000
* END                                                                   0996.000
         BU        MRG052                                               0997.000
* ELSE                                                                  0998.000
MRG051   EQU       $                                                    0999.000
* NEWSTRING(NEXTEXHAUSTEDSTRING):=NOSTRING;                             1000.000
         LW        R1,NXELST                                            1001.000
         ADMW      R1,NUSTRG                                            1002.000
         LI        R0,NOSTRG                                            1003.000
         STW       R0,0W,X1                                             1004.000
* END                                                                   1005.000
MRG052   EQU       $                                                    1006.000
         BU        MRG053                                               1007.000
* ELSE                                                                  1008.000
MRG050   EQU       $                                                    1009.000
* BEGIN GETTING NEXT BLOCK ADDRESS FROM BUFFER LINK                     1010.000
* NEXTBLOCK(NEXTEXHAUSTEDLIST):=BUFFER.BLKLINK;                         1011.000
         LW        R1,BUFADR                                            1012.000
         LW        R3,NXELST                                            1013.000
         ADMW      R3,NEXBLK                                            1014.000
         LW        R0,BUFBLK*4,X1                                       1015.000
         STW       R0,0W,X3                                             1016.000
* ENDOFSTRING(LASTREC):=FALSE;                                          1017.000
         LW        R1,LSTREC                                            1018.000
         ADMW      R1,RECPTS                                            1019.000
         LI        R0,FALSE                                             1020.000
         STW       R0,RCEOSF*4,X1                                       1021.000
* END;                                                                  1022.000
MRG053   EQU       $                                                    1023.000
* NOW CHECK TO SEE IF WE'VE FINISHED THIS MERGE                         1024.000
* IF ENDOFCURRENTSTRING THEN                                            1025.000
         LW        R0,ENDOCS                                            1026.000
         CI        R0,FALSE                                             1027.000
         BCT       EQ,MRG055                                            1028.000
* BEGIN REINSTATING LISTS WITH NEW STRINGS                              1029.000
* BUT FIRST MAKE SURE WE MERGED ALL WE SHOULD HAVE                      1030.000
* IF PASSSIZE NE 0 THEN                                                 1031.000
         LW        R0,PASSSZ                                            1032.000
*        CI        R0,X'0'                                              1033.000
         BCT       EQ,MRG056                                            1034.000
* BEGIN INDICATING RECORD COUNT ERROR                                   1035.000
* SCB(SCBSTS):=RECORDCOUNTERR;                                          1036.000
         LI        R0,WFRCER                                            1037.000
         LW        R2,SCB                                               1038.000
         STW       R0,SCBSTS*4,X2                                       1039.000
* RETURN;                                                               1040.000
         LW        R5,=G'SZ04'                                          1041.000
         BL        SORTERR                                              1042.000
* END;                                                                  1043.000
MRG056   EQU       $                                                    1044.000
* FIRSTRECQ(FIRSTRECQHD).FIRSTLNK:=FIRSTRECQHD;                         1045.000
         LI        R1,FQHD*4                                            1046.000
         ADMW      R1,FIRSTQ                                            1047.000
         LI        R0,FQHD                                              1048.000
         STW       R0,FQLNKF*4,X1                                       1049.000
* LASTRECQ(LASTRECQHD).LASTLNK:=LASTRECQHD;                             1050.000
         LI        R1,LQHD*4                                            1051.000
         ADMW      R1,LASTQ                                             1052.000
         LI        R0,LQHD                                              1053.000
         STW       R0,LQLNKF*4,X1                                       1054.000
* LST:=STARTLIST;                                                       1055.000
         LI        R0,STARTL*4                                          1056.000
         STW       R0,LST                                               1057.000
* REPEAT MERGELEVEL TIMES;                                              1058.000
         LNW       R6,MERGLV                                            1059.000
ATTACH   EQU       $                                                    1060.000
         STW       R6,XLP1                                              1061.000
* BEGIN GETTING NEXT AVAILABLE LIST                                     1062.000
* IF NEWSTRING(LST)=ATTACHED THEN                                       1063.000
         LW        R1,LST                                               1064.000
         ADMW      R1,NUSTRG                                            1065.000
         LW        R0,0W,X1                                             1066.000
         CI        R0,ATTCHD                                            1067.000
         BNE       MRG057                                               1068.000
* BEGIN RESTARTING LST                                                  1069.000
* NEWSTRING(LST):=NOTNEWSTRING;                                         1070.000
         LI        R0,NOTNS                                             1071.000
         STW       R0,0W,X1                                             1072.000
* ATENDOFSTRING(LST):=FALSE;                                            1073.000
         LW        R1,LST                                               1074.000
         ADMW      R1,ENDSTG                                            1075.000
         LI        R0,FALSE                                             1076.000
         STW       R0,0W,X1                                             1077.000
* INSERTINTOFIRSTRECQ(LST);                                             1078.000
         LW        R2,LST                                               1079.000
         BL        C:INSTFR                                             1080.000
         ACW       FIRSTQ                                               1081.000
         ACW       LSTHDS                                               1082.000
         ACW       RECPTS                                               1083.000
* INSERTINTOLASTRECQ(LST);                                              1084.000
         LW        R2,LST                                               1085.000
         BL        C:INSTLR                                             1086.000
         ACW       LASTQ                                                1087.000
         ACW       LSTTLS                                               1088.000
         ACW       RECPTS                                               1089.000
* AVAILABLECOUNT:=AVAILABLECOUNT+1;                                     1090.000
         LI        R0,1                                                 1091.000
         ARMW      R0,AVLCNT                                            1092.000
* PASSSIZE:=PASSSIZE+REMAINDER(LST)+FULL(LST);                          1093.000
         LW        R1,LST                                               1094.000
         ADMW      R1,RMDR                                              1095.000
         LW        R5,0W,X1                                             1096.000
         ARMW      R5,PASSSZ                                            1097.000
         LW        R3,LST                                               1098.000
         ADMW      R3,FULL                                              1099.000
         LW        R5,0W,X3                                             1100.000
         ARMW      R5,PASSSZ                                            1101.000
* END;                                                                  1102.000
MRG057   EQU       $                                                    1103.000
* LST:=LST+1;                                                           1104.000
         LW        R0,ONEX                                              1105.000
         ARMW      R0,LST                                               1106.000
* END;                                                                  1107.000
         LW        R6,XLP1                                              1108.000
         BIB       R6,ATTACH                                            1109.000
* END;                                                                  1110.000
MRG055   EQU       $                                                    1111.000
* NOW DETERMINE THE NEXT EXHAUSTED LIST IN THE                          1112.000
* FOLLOWING ORDER:                                                      1113.000
* 1). CHECK THOSE LISTS IN LASTRECQ AND REMEMBER                        1114.000
* WHICH LISTS WERE SEEN                                                 1115.000
* 2). CHECK THOSE LISTS NOT PREVIOUSLY SEEN                             1116.000
* I:=0;                                                                 1117.000
         ZMW       TMP1                                                 1118.000
* OLDSTATUS:=MAXSTATUS;                                                 1119.000
         LI        R0,MXSTAT                                            1120.000
         STW       R0,OLSTAT                                            1121.000
* LST:=LASTRECQ(LASTRECQHEAD).LASTLNK;                                  1122.000
         LI        R1,LQHD*4                                            1123.000
         ADMW      R1,LASTQ                                             1124.000
         LW        R0,LQLNKF*4,X1                                       1125.000
         STW       R0,LST                                               1126.000
* WHILE LST NEQ LASTRECQHEAD DO                                         1127.000
         CI        R0,4*LQHD                                            1128.000
         BCT       EQ,MRG060                                            1129.000
CKLQ     EQU       $                                                    1130.000
* BEGIN CHECKING STATUS OF LISTS IN LASTRECQ                            1131.000
* LST:=LASTRECQ(LST).LASTLST;                                           1132.000
         LW        R1,LST                                               1133.000
         ADMW      R1,LASTQ                                             1134.000
         LW        R2,LQLSTF*4,X1                                       1135.000
         STW       R2,LST                                               1136.000
* CHECKSTATUSOF(LST);                                                   1137.000
         BL        CKSTAT                                               1138.000
* IF OLDSTATUS=0 THEN GO WRITE;                                         1139.000
         LW        R0,OLSTAT                                            1140.000
*        CI        R0,X'0'                                              1141.000
         BCT       EQ,WRITE                                             1142.000
* REMEMBER THIS LIST                                                    1143.000
* I:=I+(2**(LST-STARTLIST));                                            1144.000
         LW        R1,LST                                               1145.000
         SUI       R1,4*STARTL                                          1146.000
         LW        R0,POWERS,X1                                         1147.000
         ARMW      R0,TMP1                                              1148.000
* LST:=LASTRECQ(LST*LASTRECQENTRYSIZE).LASTLNK;                         1149.000
         LW        R1,LST                                               1150.000
         MPI       R0,LQESZ                                             1151.000
         ADMW      R1,LASTQ                                             1152.000
         LW        R0,LQLNKF*4,X1                                       1153.000
         STW       R0,LST                                               1154.000
         CI        R0,4*LQHD                                            1155.000
         BNE       CKLQ                                                 1156.000
MRG060   EQU       $                                                    1157.000
* IF MISSED1LISTORMORE THEN                                             1158.000
         LW        R0,TMP1                                              1159.000
*        CAMW      R0,LSTFLG                                            1160.000
         BCT       EQ,MRG061                                            1161.000
* BEGIN                                                                 1162.000
* LST:=0;                                                               1163.000
         LW        R0,ZEROX                                             1164.000
         STW       R0,LST                                               1165.000
* REPEAT MERGELEVEL TIMES;                                              1166.000
         LNW       R6,MERGLV                                            1167.000
CKLTLS   EQU       $                                                    1168.000
         STW       R6,XLP1                                              1169.000
* BEGIN 42 250                                                          1170.000
* IF (I & 1)=0 THEN                                                     1171.000
         LW        R0,TMP1                                              1172.000
         LI        R4,X'1'                                              1173.000
         ANR       R0,R4                                                1174.000
         BNZ       MRG062                                               1175.000
* BEGIN                                                                 1176.000
* CHECKSTATUSOF(LST+STARTLIST);                                         1177.000
         LI        R2,STARTL*4                                          1178.000
         ADMW      R2,LST                                               1179.000
         BL        CKSTAT                                               1180.000
* IF OLDSTATUS=0 THEN GO WRITE;                                         1181.000
         LW        R0,OLSTAT                                            1182.000
*        CI        R0,X'0'                                              1183.000
         BCT       EQ,WRITE                                             1184.000
* END; 41229780                                                         1185.000
MRG062   EQU       $                                                    1186.000
* LST:=LST+1;                                                           1187.000
         LW        R0,ONEX                                              1188.000
         ARMW      R0,LST                                               1189.000
* I:=I DIV 2;                                                           1190.000
         LW        R0,TMP1                                              1191.000
         SRA       R0,1                                                 1192.000
         STW       R0,TMP1                                              1193.000
* END;                                                                  1194.000
         LW        R6,XLP1                                              1195.000
         BIB       R6,CKLTLS                                            1196.000
MRG061   EQU       $                                                    1197.000
WRITE    EQU       $                                                    1198.000
* BUFFER.BLKLINK:=NEXTBLOCK(NEXTEXHAUSTEDLIST);                         1199.000
         LW        R1,BUFADR       R1 = BUFADR                          1200.000
         LW        R3,NXELST                                            1201.000
         ADMW      R3,NEXBLK                                            1202.000
         LW        R0,0W,X3                                             1203.000
         STW       R0,BUFBLK*4,X1                                       1204.000
* BUFFER.RECCNT:=RECSLASTBLK;                                           1205.000
         LW        R0,RECSLB                                            1206.000
         STW       R0,BUFRCT*4,X1                                       1207.000
* WRITE(WORKFILE@NBLK,BUFFER);                                          1208.000
         LW        R2,FIB                                               1209.000
         LW        R4,NBLK                                              1210.000
         LW        R3,BUFBAS                                            1211.000
         BL        C:WRYTWF                                             1212.000
* NBLK:=BUFFER.BLKLINK;                                                 1213.000
         LW        R1,BUFADR       R1 = BUFADR                          1214.000
         LW        R0,BUFBLK*4,X1                                       1215.000
         STW       R0,NBLK                                              1216.000
* GO PICK;                                                              1217.000
         BU        PICK                                                 1218.000
         END                                                            1219.000
