* MERGE INITIALIZATION PHASE                            HEADER  C:MRGINT0001.000
*                                                                       0002.000
*                  MERGE INITIALIZATION PHASE                           0003.000
*                                                                       0004.000
         M.PGM     C:MRGINT,MPX-32,3.6.1,00                             0005.000
         DEF       C:MRGINT                                             0006.000
         EXT       C:READWF                                             0007.000
         EXT       C:GETSI                                              0008.000
         EXT       C:MOVREC                                             0009.000
         EXT       C:INSTFR                                             0010.000
         EXT       C:INSTLR                                             0011.000
SRTCOM3  COMMON    SRTC3(70)                                            0012.000
         ORG       SRTC3                                                0013.000
RECSZ    DATAW     X'0'                                                 0014.000
BUFSZS   DATAW     X'0'                                                 0015.000
RECSPB   DATAW     X'0'                                                 0016.000
SISZ     DATAW     X'0'                                                 0017.000
PASSSZ   DATAW     X'0'                                                 0018.000
WFSIZE   DATAW     X'0'                                                 0019.000
LSTSEC   DATAW     X'0'                                                 0020.000
CURSSZ   DATAW     X'0'                                                 0021.000
SIADLO   DATAW     X'0'                                                 0022.000
MXSGIN   DATAW     X'0'                                                 0023.000
TMP1     DATAW     X'0'                                                 0024.000
RECSTB   DATAW     X'0'                                                 0025.000
MERGLV   DATAW     X'0'                                                 0026.000
INITML   DATAW     X'0'                                                 0027.000
STGMAX   DATAW     X'0'                                                 0028.000
PASMAX   DATAW     X'0'                                                 0029.000
AVLREC   DATAW     X'0'                                                 0030.000
MAXSSZ   DATAW     X'7FFFFFFF'                                          0031.000
TRVCTR   REZ       1W                                                   0032.000
SCB      REZ       1W                                                   0033.000
FIB      REZ       1W                                                   0034.000
LSTTLS   REZ       1W                                                   0035.000
LSTHDS   REZ       1W                                                   0036.000
LASTQ    REZ       1W                                                   0037.000
FIRSTQ   REZ       1W                                                   0038.000
RECPTS   REZ       1W                                                   0039.000
BUFBAS   REZ       1W                                                   0040.000
FULL     REZ       1W                                                   0041.000
ENDSTG   REZ       1W                                                   0042.000
NUSTRG   REZ       1W                                                   0043.000
RMDR     REZ       1W                                                   0044.000
NEXBLK   REZ       1W                                                   0045.000
SONFO    REZ       1W                                                   0046.000
SINFO    REZ       1W                                                   0047.000
CRSTRG   REZ       1W                                                   0048.000
LST      REZ       1W                                                   0049.000
RECL     REZ       1W                                                   0050.000
NXELST   REZ       1W                                                   0051.000
RECINX   REZ       1W                                                   0052.000
ONEX     REZ       1W                                                   0053.000
ZEROX    REZ       1W                                                   0054.000
BEGSTR   REZ       1W                                                   0055.000
RECBAS   REZ       1W                                                   0056.000
STRBUF   REZ       1W                                                   0057.000
BUFPTR   REZ       1W                                                   0058.000
BUFADR   REZ       1W                                                   0059.000
XLV217   REZ       1W                                                   0060.000
XLP1     REZ       1W                                                   0061.000
XLP2     REZ       1W                                                   0062.000
         REL                                                            0063.000
* DETERMINE SIZE AND NUMBER OF INPUT/OUTPUT BUFFER30002000* DETERMINE SI0064.000
* DETERMINE OPTIMAL ORDER OF MERGE LEVELS                               0065.000
* INITIALIZE INTERNAL AND EXTERNAL RECORD POINTERS30004000* INITIALIZE I0066.000
* REQUIRED FOR THE MERGE PHASE                                          0067.000
* FILL THE RECORD AREAS AND CREATE LINKED LISTS                         0068.000
* OF RECORDS WITHIN A STRING                                            0069.000
* READ ALL STRING INFO GENERATED BY SORT PHASE                          0070.000
* SORT STRING INFO BY STRING SIZE (AND ADDR?)                           0071.000
* RECOMPUTE AVAILABLE MEMORY                                            0072.000
* COMPUTE BS, BUFFER SIZE IN SECTORS, BY                                0073.000
* BS=((TA+TL)/TT+SECTORSIZE-1)                                          0074.000
* DIV SECTORSIZE                                                        0075.000
* COMPUTE BC, BUFFER SIZE IN CHARACTERS, BY                             0076.000
* BC=BS*SECTORSIZE                                                      0077.000
* COMPUTE P, THE MERGE LEVEL, BY                                        0078.000
* P=(SCB(SCBRL)*(M-STRINGMAX                                            0079.000
* *STRINGINFOENTRYSIZE                                                  0080.000
* -BC*NUMBEROFBUFFERS)) DIV                                             0081.000
* (BC*(SCB(SCBRL)-1)+H*SCB(SCBRL))                                      0082.000
* ALLOCATE MEMORY                                                       0083.000
* LOOP READING FIRST BLOCK OF EACH OF P STRINGS                         0084.000
* AND LINKING RECORDS                                                   0085.000
         M.REQS                                                         0086.000
FQHD     EQU       X'0'            FIRST-RECORD QUEUE HEAD              0087.000
LQHD     EQU       X'0'            LAST-RECORD QUEUE HEAD               0088.000
TRUE     EQU       1               TRUTH                                0089.000
FALSE    EQU       X'0'            FALSEHOOD                            0090.000
NSRTOH   EQU       3               OVERHEAD PER TREE ENTRY DURING SORT  0091.000
NMRGOH   EQU       17              OVERHEAD PER MERGE LEVEL DURING MERGE0092.000
FIBSZ    EQU       8               FILE IDENTIFICATION BLOCK WORD SIZE  0093.000
IOWSSZ   EQU       X'0'            REQUIRED WORKING SPACE FOR I/O       0094.000
AREAOF   EQU       2               G.A. OFFSET FOR AREA DESCRIPTOR      0095.000
BUFBLK   EQU       1               RECORD OFFSET OF LOW ORDER PART OF BL0096.000
BUFRCT   EQU       2               RECORD OFFSET OF RECORD COUNT        0097.000
BLNKSZ   EQU       3               SIZE OF BLOCK INFO                   0098.000
SISZF    EQU       1               STRINGINFO LOW ORDER OF STRING LENGTH0099.000
SIADRF   EQU       3               STRINGINFO LOW ORDER OF STRING ADDRES0100.000
SIESZ    EQU       4               STRINGINFO ENTRY SIZE                0101.000
MAXSTG   EQU       32767           MAXIMUM NUMBER OF STRINGS            0102.000
FQLSTF   EQU       X'0'            FIRST QUEUE LOCATION LIST POINTER    0103.000
FQRECF   EQU       1               FIRST QUEUE LOCATION OF RECORD POINTE0104.000
FQLNKF   EQU       3               FIRST QUEUE LOCATION OF LINK         0105.000
FQESZ    EQU       4               FIRST QUEUE ENTRY SIZE               0106.000
LQLSTF   EQU       X'0'            LAST QUEUE LOCATION OF LIST POINTER  0107.000
LQRECF   EQU       1               LAST QUEUE LOCATION OF RECORD POINTER0108.000
LQLNKF   EQU       3               LAST QUEUE LOCATION OF LINK          0109.000
LQESZ    EQU       4               LAST QUEUE ENTRY SIZE                0110.000
RCADRF   EQU       X'0'            RECORD POINTER LOCATION OF RECORD ADD0111.000
RCEOSF   EQU       1               RECORD POINTER LOCATION OF END-OF-STR0112.000
RCLNKF   EQU       3               RECORDPOINTER LOCATION OF LINK       0113.000
RCESZ    EQU       4               RECORD POINTER ENTRY SIZE            0114.000
MRGLST   EQU       X'0'            LOCATION OF MERGE-LIST HEAD          0115.000
DUMPOL   EQU       1               LOCATION OF DUMMYPOOL-LIST HEAD      0116.000
MINTSZ   EQU       4               MINIMUM TREE SIZE                    0117.000
MAXTSZ   EQU       X'7FFE'         MAXIMUM TREE SIZE                    0118.000
STARTL   EQU       2               FIRST LIST ENTRY                     0119.000
MINMLV   EQU       2               MINIMUM MERGE LEVEL                  0120.000
MAXMLV   EQU       8               MAXIMUM MERGE LEVEL                  0121.000
NOTNS    EQU       X'0'            NOT NEW STRING                       0122.000
READNS   EQU       -1              READ NEW STRING                      0123.000
ATTCHD   EQU       1               NEW STRING READ AND ATTACHED         0124.000
NOSTRG   EQU       2               NO STRING AVAILABLE                  0125.000
LTV      EQU       X'0'            LESS THAN VALUE                      0126.000
EQV      EQU       1               EQUAL VALUE                          0127.000
GTV      EQU       2               GREATER THAN VALUE                   0128.000
SPERB    EQU       48              STRINGS PER BLOCK OF STRING INFO     0129.000
* SORT CONTROL BLOCK LAYOUT                                             0130.000
SCBWID   EQU       X'0'            WORK FILE ID                         0131.000
SCBIN    EQU       1               INPUT PROCEDURE                      0132.000
SCBOUT   EQU       2               OUTPUT PROCEDURE                     0133.000
SCBRA    EQU       3               RECORD ADDRESS                       0134.000
SCBRL    EQU       4               RECORD LENGTH                        0135.000
SCBKA    EQU       5               KEY ADDRESS                          0136.000
SCBKL    EQU       6               KEY LENGTH                           0137.000
SCBOPT   EQU       7               OPTIONS                              0138.000
* OPTION VALUES                                                         0139.000
MAPPED   EQU       1               USER PROVIDES MEMORY BOUNDS          0140.000
WRTCMP   EQU       2               USER WANTS OUTPUT I/O VERIFIED       0141.000
DIAGNO   EQU       4               USER WANTS SOME INFO MESSAGES        0142.000
SCBSTS   EQU       8               STATUS                               0143.000
* STATUS VALUES                                                         0144.000
EOS      EQU       1               END-OF-SORT                          0145.000
MEMERR   EQU       3               INSUFFICIENT MEMORY                  0146.000
WFSERR   EQU       5               INSUFFICIENT WORKFILE SPACE          0147.000
WFIOER   EQU       9               IRRECOVERABLE I/O ERROR              0148.000
WFRCER   EQU       17              WORKFILE RECORD COUNT ERROR          0149.000
SCBINF   EQU       9               INFO PROCEDURE                       0150.000
SCBBGM   EQU       10              BEGINNING OF MEMORY                  0151.000
SCBEDM   EQU       11              END OF MEMORY                        0152.000
* TRANSFER VECTOR LAYOUT                                                0153.000
TVKSZ    EQU       X'0'            KEYSZ                                0154.000
TVDSZ    EQU       1               DATSZ                                0155.000
TVFIB    EQU       2               FIB                                  0156.000
TVNREC   EQU       3               NRECS                                0157.000
TVSECW   EQU       4               SECTWD                               0158.000
TVTRKS   EQU       5               TRKSEC                               0159.000
TVMRGL   EQU       6               MERGLV                               0160.000
TVPCNT   EQU       7               PCNT                                 0161.000
TVBBAS   EQU       8               BUFBAS                               0162.000
TVSONF   EQU       9               SONFO                                0163.000
TVSINF   EQU       10              SINFO                                0164.000
TVLSSI   EQU       11              LASTSI                               0165.000
TVSGMX   EQU       12              STGMAX                               0166.000
TVRPTS   EQU       13              RECPTS                               0167.000
TVBSZS   EQU       14              BUFSZS                               0168.000
TVRPB    EQU       15              RECSPB                               0169.000
TVRUN    EQU       16              RUN                                  0170.000
TVNXEL   EQU       16              NXELST                               0171.000
TVLOSR   EQU       17              LOSER                                0172.000
TVLKEY   EQU       18              LSTKEY                               0173.000
TVLHDS   EQU       19              LSTHDS                               0174.000
TVLTLS   EQU       20              LSTTLS                               0175.000
TVFQ     EQU       21              FIRSTQ                               0176.000
TVLQ     EQU       22              LASTQ                                0177.000
TVWFSZ   EQU       23              WFSIZE                               0178.000
TVLSEC   EQU       24              LSTSEC                               0179.000
TVMXSG   EQU       25              MXSGIN                               0180.000
TVNBLK   EQU       26              NEXBLK                               0181.000
TVRMDR   EQU       27              RMDR                                 0182.000
TVESTG   EQU       28              ENDSTG                               0183.000
TVNSTG   EQU       29              NUSTRG                               0184.000
TVFULL   EQU       30              FULL                                 0185.000
TVPASZ   EQU       31              PASSSZ                               0186.000
TVPASM   EQU       32              PASMAX                               0187.000
TVSISZ   EQU       33              SISZ                                 0188.000
C:MRGINT EQU       $                                                    0189.000
         STW       R0,XLV217                                            0190.000
         STW       R2,SCB                                               0191.000
         STW       R3,TRVCTR                                            0192.000
* INITIALIZE FROM TRANSFER VECTOR                                       0193.000
         LW        R0,TVFIB*4,X3                                        0194.000
         STW       R0,FIB                                               0195.000
         LW        R0,TVSGMX*4,X3                                       0196.000
         STW       R0,STGMAX                                            0197.000
         LW        R0,TVSONF*4,X3                                       0198.000
         STW       R0,SONFO                                             0199.000
         LW        R0,TVBBAS*4,X3                                       0200.000
         STW       R0,BUFBAS                                            0201.000
         LW        R0,TVMRGL*4,X3                                       0202.000
         STW       R0,MERGLV                                            0203.000
         LW        R0,TVLSEC*4,X3                                       0204.000
         STW       R0,LSTSEC                                            0205.000
         LW        R0,TVWFSZ*4,X3                                       0206.000
         STW       R0,WFSIZE                                            0207.000
         LW        R0,TVRUN*4,X3                                        0208.000
         STW       R0,BEGSTR       RESETS MEMORY FENCE                  0209.000
         LW        R0,TVBSZS*4,X3                                       0210.000
         STW       R0,BUFSZS                                            0211.000
         LW        R0,TVSISZ*4,X3                                       0212.000
         STW       R0,SISZ                                              0213.000
         LW        R0,TVRPB*4,X3                                        0214.000
         STW       R0,RECSPB                                            0215.000
         LW        R0,TVKSZ*4,X3                                        0216.000
         ADMW      R0,TVDSZ*4,X3                                        0217.000
* RECSZ:=KEYSZ+DATSZ;                                                   0218.000
         STW       R0,RECSZ                                             0219.000
         SLL       R0,2                                                 0220.000
         STW       R0,RECINX       AVOID REDUNDANT CONVERSIONS          0221.000
* INITIALIZE ZEROX & ONEX                                               0222.000
         ZMW       ZEROX                                                0223.000
         LI        R0,1*4                                               0224.000
         STW       R0,ONEX                                              0225.000
* DETERMINE MERGE LEVEL AND NUMBER OF                                   0226.000
* PASSES REQUIRED                                                       0227.000
* IF MERGELEVEL GEQ STRINGMAX THEN                                      0228.000
         LW        R0,MERGLV                                            0229.000
         CAMW      R0,STGMAX                                            0230.000
         BCT       LT,MRI004                                            0231.000
* BEGIN SETTING UP FOR 1 PASS                                           0232.000
* MERGELEVEL:=STRINGMAX;                                                0233.000
         LW        R0,STGMAX                                            0234.000
         STW       R0,MERGLV                                            0235.000
* INITIALMERGELEVEL:=MERGELEVEL;                                        0236.000
         STW       R0,INITML                                            0237.000
* PASSMAXIMUM:=1;                                                       0238.000
         LI        R0,1                                                 0239.000
         STW       R0,PASMAX                                            0240.000
* END                                                                   0241.000
         BU        MRI005                                               0242.000
* ELSE                                                                  0243.000
MRI004   EQU       $                                                    0244.000
* BEGIN                                                                 0245.000
* PASSMAXIMUM:=(STRINGMAX-1)/(MERGELEVEL-1);                            0246.000
* INITIALMERGELEVEL:=(STRINGMAX-1)MOD(MERGELEVEL-1)+1                   0247.000
         LW        R7,STGMAX                                            0248.000
         SUI       R7,1                                                 0249.000
         LW        R5,MERGLV                                            0250.000
         SUI       R5,1                                                 0251.000
         ES        R6                                                   0252.000
         DVR       R5,R6                                                0253.000
         STW       R7,PASMAX                                            0254.000
         ADI       R6,1                                                 0255.000
         STW       R6,INITML                                            0256.000
* IF INITIALMERGELEVEL EQ 1 THEN                                        0257.000
         CI        R6,1                                                 0258.000
         BNE       MRI200                                               0259.000
* INITIALMERGELEVEL:=MERGELEVEL;                                        0260.000
         LW        R0,MERGLV                                            0261.000
         STW       R0,INITML                                            0262.000
         BU        MRI201                                               0263.000
* ELSE                                                                  0264.000
MRI200   EQU       $                                                    0265.000
* PASSMAXIMUM:=PASSMAXIMUM+1;                                           0266.000
         LI        R0,1                                                 0267.000
         ARMW      R0,PASMAX                                            0268.000
MRI201   EQU       $                                                    0269.000
* END;                                                                  0270.000
MRI005   EQU       $                                                    0271.000
* DETERMINE MAXIMUM NUMBER OF RECORDS IN MEMORY                         0272.000
* AVAILABLERECORDS:=MERGELEVEL*RECSPERBLK;                              0273.000
         LW        R5,RECSPB                                            0274.000
         MPMW      R4,MERGLV                                            0275.000
         STW       R5,AVLREC                                            0276.000
* ALLOCATE MEMORY FOR MERGING                                           0277.000
         LW        R0,BEGSTR                                            0278.000
         STW       R0,SINFO                                             0279.000
         LI        R5,4                                                 0280.000
         MPMW      R4,SISZ         CONVERT TO BYTES FOR I/O             0281.000
         STW       R5,*SINFO                                            0282.000
         LI        R0,AREAOF                                            0283.000
         ADMW      R0,SISZ                                              0284.000
         SLL       R0,2                                                 0285.000
         ADMW      R0,SINFO        SINFO USES AREAOF+SISZ               0286.000
         STW       R0,LSTHDS                                            0287.000
         LI        R7,STARTL                                            0288.000
         ADMW      R7,MERGLV                                            0289.000
         STW       R7,TMP1                                              0290.000
         SLL       R7,2            R7 = XTMP1                           0291.000
         ADR       R7,R0           LSTHDS USE MERGLV+STARTL             0292.000
         STW       R0,LSTTLS                                            0293.000
         ADR       R7,R0           LSTTLS USES MERGLV+STARTL            0294.000
         STW       R0,FULL                                              0295.000
         ADR       R7,R0           FULL USES MERGLV+STARTL              0296.000
         STW       R0,RMDR                                              0297.000
         ADR       R7,R0           RMDR USES MERGLV+STARTL              0298.000
         STW       R0,ENDSTG                                            0299.000
         ADR       R7,R0           ENDSTG USES MERGLV+STARTL            0300.000
         STW       R0,NUSTRG                                            0301.000
         ADR       R7,R0           NUSTRG USES MERGLV+STARTL            0302.000
         STW       R0,NEXBLK                                            0303.000
         ADR       R7,R0           NEXBLK USES MERGLV+STARTL            0304.000
         STW       R0,FIRSTQ                                            0305.000
         LW        R5,TMP1                                              0306.000
         MPI       R4,FQESZ        TMP1::=MERGLV+STARTL                 0307.000
         SLL       R5,2                                                 0308.000
         ADMW      R5,FIRSTQ       FIRSTQ USES FQESZ*(MERGLV+STARTL)    0309.000
         STW       R5,LASTQ                                             0310.000
         LW        R5,TMP1                                              0311.000
         MPI       R4,LQESZ        TMP1::=MERGLV+STARTL                 0312.000
         SLL       R5,2                                                 0313.000
         ADMW      R5,LASTQ        LASTQ USES LQESZ*(MERGLV+STARTL)     0314.000
         STW       R5,RECBAS                                            0315.000
         LW        R5,RECSZ                                             0316.000
         MPMW      R4,AVLREC                                            0317.000
         SLL       R5,2                                                 0318.000
         ADMW      R5,RECBAS       RECBAS USES AVLREC*RECSZ             0319.000
         STW       R5,RECPTS                                            0320.000
* NOTE THAT RECPTS IS FINAL ALLOCATION                                  0321.000
* BEGIN INITIALIZATION                                                  0322.000
* INITIALIZE STRING INFO STUFF                                          0323.000
* 1). PREPARE TO BUBBLE DOWN THE SMALLER STRINGS 31037000* 1). PREPARE T0324.000
* MAXIMUMSTRINGINMEMORY:=0;                                             0325.000
         ZMW       MXSGIN                                               0326.000
* IF WE ONLY HAVE WHAT'S IN MEMORY THEN                                 0327.000
* "TURN OFF THE BUBBLE MACHINE]]"                                       0328.000
* IF LASTSECTOR=WORKFILESIZE THEN                                       0329.000
         LW        R0,LSTSEC                                            0330.000
         CAMW      R0,WFSIZE                                            0331.000
         BNE       MRI006                                               0332.000
* MAXIMUMSTRINGINMEMORY:=MAXIMUMSTRINGSIZE;                             0333.000
         LW        R0,MAXSSZ                                            0334.000
         STW       R0,MXSGIN                                            0335.000
MRI006   EQU       $                                                    0336.000
* 2). SWAP SINFO & SONFO                                                0337.000
         LW        R7,SINFO                                             0338.000
         LW        R5,SONFO                                             0339.000
         STW       R5,SINFO                                             0340.000
         STW       R7,SONFO                                             0341.000
* STUFF AS MUCH AS WE KNOW INTO THE TRANSFER VECTOR                     0342.000
         LW        R3,TRVCTR                                            0343.000
         STW       R5,TVSINF*4,X3                                       0344.000
         STW       R7,TVSONF*4,X3                                       0345.000
         LW        R0,RECPTS                                            0346.000
         STW       R0,TVRPTS*4,X3                                       0347.000
         LW        R0,LSTHDS                                            0348.000
         STW       R0,TVLHDS*4,X3                                       0349.000
         LW        R0,LSTTLS                                            0350.000
         STW       R0,TVLTLS*4,X3  3/50V0                               0351.000
         LW        R0,LASTQ                                             0352.000
         STW       R0,TVLQ*4,X3                                         0353.000
         LW        R0,FIRSTQ                                            0354.000
         STW       R0,TVFQ*4,X3                                         0355.000
         LW        R0,NEXBLK                                            0356.000
         STW       R0,TVNBLK*4,X3                                       0357.000
         LW        R0,RMDR                                              0358.000
         STW       R0,TVRMDR*4,X3                                       0359.000
         LW        R0,NUSTRG                                            0360.000
         STW       R0,TVNSTG*4,X3                                       0361.000
         LW        R0,FULL                                              0362.000
         STW       R0,TVFULL*4,X3                                       0363.000
         LW        R0,ENDSTG                                            0364.000
         STW       R0,TVESTG*4,X3                                       0365.000
         LW        R0,MXSGIN                                            0366.000
         STW       R0,TVMXSG*4,X3                                       0367.000
         LW        R0,LSTSEC                                            0368.000
         STW       R0,TVLSEC*4,X3                                       0369.000
         LW        R0,PASMAX                                            0370.000
         STW       R0,TVPASM*4,X3                                       0371.000
         LW        R0,MERGLV                                            0372.000
         STW       R0,TVMRGL*4,X3                                       0373.000
         LW        R0,INITML                                            0374.000
         STW       R0,TVPCNT*4,X3                                       0375.000
* INITIALIZE LIST STUFF                                                 0376.000
* PASSSIZE:=0;                                                          0377.000
         ZMW       PASSSZ                                               0378.000
* RECL:=1; NOTE THAT RECPTS(0) IS NOT USED                              0379.000
         LW        R0,ONEX                                              0380.000
         STW       R0,RECL                                              0381.000
* STARTBUFFER:=BUFFER.DATA                                              0382.000
         LI        R0,AREAOF*4                                          0383.000
         ADMW      R0,BUFBAS                                            0384.000
         STW       R0,BUFADR                                            0385.000
         LI        R0,BLNKSZ*4                                          0386.000
         ADMW      R0,BUFADR                                            0387.000
         STW       R0,STRBUF                                            0388.000
* FIRSTRECQ(FIRSTRECQHEAD).FIRSTLNK:=FIRSTRECQHEAD;                     0389.000
         LI        R1,FQHD*4                                            0390.000
         ADMW      R1,FIRSTQ                                            0391.000
         LI        R0,FQHD                                              0392.000
         STW       R0,FQLNKF*4,X1                                       0393.000
* FIRSTRECQ(FIRSTRECQHEAD).LIST:=0;                                     0394.000
         ZMW       FQLSTF*4,X1                                          0395.000
* FIRSTRECQ(FIRSTRECQHEAD).REC:=KEYSIZE;                                0396.000
         LW        R0,TVKSZ*4,X3                                        0397.000
         STW       R0,FQRECF*4,X1                                       0398.000
* LASTRECQ(LASTRECQHEAD).LASTLNK:=LASTRECQHEAD;                         0399.000
         LI        R1,LQHD*4                                            0400.000
         ADMW      R1,LASTQ                                             0401.000
         LI        R0,LQHD                                              0402.000
         STW       R0,LQLNKF*4,X1                                       0403.000
* LASTRECQ(LASTRECQHEAD).LASTLST:=0;                                    0404.000
         LW        R0,ZEROX                                             0405.000
         STW       R0,LQLSTF*4,X1                                       0406.000
* LASTRECQ(LASTRECQHEAD).LASTREC:=KEYSIZE;                              0407.000
         LW        R0,TVKSZ*4,X3                                        0408.000
         STW       R0,LQRECF*4,X1                                       0409.000
* IF MERGLV > 0 THEN DO                                                 0410.000
         LW        R0,MERGLV                                            0411.000
*        CI        R0,X'0'                                              0412.000
         BCF       GT,ENDGB                                             0413.000
* FOR LST:=STARTLIST STEP 1 UNTIL MERGELEVEL                            0414.000
* +STARTLIST-1 DO                                                       0415.000
         LI        R0,STARTL*4                                          0416.000
         STW       R0,LST                                               0417.000
         LNW       R6,MERGLV                                            0418.000
GETBLK   EQU       $                                                    0419.000
         STW       R6,XLP1                                              0420.000
* BEGIN READING A BLOCK & LINKING ITS RECORDS TO LST                    0421.000
* LASTRECQ(LST*LASTRECQENTRYSIZE).LIST:=LST;                            0422.000
         LW        R1,LST                                               0423.000
         MPI       R0,LQESZ                                             0424.000
         ADMW      R1,LASTQ                                             0425.000
         LW        R0,LST                                               0426.000
         STW       R0,LQLSTF*4,X1                                       0427.000
* FIRSTRECQ(LST*FIRSTRECQENTRYSIZE).LIST:=LST;                          0428.000
         LW        R1,LST                                               0429.000
         MPI       R0,FQESZ                                             0430.000
         ADMW      R1,FIRSTQ                                            0431.000
         LW        R0,LST                                               0432.000
         STW       R0,FQLSTF*4,X1                                       0433.000
* CURRENTSTRING:=GETSTRING;                                             0434.000
         LW        R2,TRVCTR                                            0435.000
         BL        C:GETSI                                              0436.000
         STW       R2,CRSTRG                                            0437.000
* STRINGMAX:=STRINGMAX-1;                                               0438.000
         LW        R0,STGMAX                                            0439.000
         SUI       R0,1                                                 0440.000
         STW       R0,STGMAX                                            0441.000
* CURSTRINGSIZE:=STRINGINFO(CURRENTSTRING).SIZE;                        0442.000
         ADMW      R2,SINFO                                             0443.000
         LW        R0,SISZF*4,X2                                        0444.000
         STW       R0,CURSSZ                                            0445.000
* ZOT THE SIZE -- IT HAS BEEN USED                                      0446.000
* STRINGINFO(CURRENTSTRING).SIZE:=MAXSTRINGSIZE;                        0447.000
         LW        R0,MAXSSZ                                            0448.000
         STW       R0,SISZF*4,X2                                        0449.000
* CURSTRINGADDR:=STRINGINFO(CURRENTSTRING).ADDR;                        0450.000
         LW        R4,SIADRF*4,X2                                       0451.000
         STW       R4,SIADLO                                            0452.000
* READ(WORKFILE@CURSTRINGADDR,BUFFER);                                  0453.000
         LW        R2,FIB                                               0454.000
*                                  R4 = SIADLO                          0455.000
         LW        R3,BUFBAS                                            0456.000
         BL        C:READWF                                             0457.000
* RECSTHISBLK:=BUFFER.RECCNT;                                           0458.000
         LW        R1,BUFADR                                            0459.000
         LW        R5,BUFRCT*4,X1                                       0460.000
         STW       R5,RECSTB                                            0461.000
* REMAINDER(LST):=CURSTRINGSIZE-RECSTHISBLK                             0462.000
         LW        R0,CURSSZ                                            0463.000
         LW        R2,LST                                               0464.000
         ADMW      R2,RMDR                                              0465.000
         SUMW      R0,RECSTB                                            0466.000
         STW       R0,0W,X2                                             0467.000
* NEXTBLOCK(LST):=BUFFER.BLKLINK;                                       0468.000
         LW        R3,BUFADR                                            0469.000
         LW        R1,LST                                               0470.000
         ADMW      R1,NEXBLK                                            0471.000
         LW        R0,BUFBLK*4,X3                                       0472.000
         STW       R0,0W,X1                                             0473.000
* FULL(LST):=RECSTHISBLK;                                               0474.000
         LW        R1,LST                                               0475.000
         ADMW      R1,FULL                                              0476.000
         LW        R0,RECSTB                                            0477.000
         STW       R0,0W,X1                                             0478.000
* AVAILABLERECORDS:=AVAILABLERECORDS-RECSTHISBLK;                       0479.000
         LW        R0,AVLREC                                            0480.000
         SUMW      R0,RECSTB                                            0481.000
         STW       R0,AVLREC                                            0482.000
* BUFPTR:=STARTBUFFER;                                                  0483.000
         LW        R0,STRBUF                                            0484.000
         STW       R0,BUFPTR                                            0485.000
* LISTHEADS(LST):=RECL;                                                 0486.000
         LW        R1,LST                                               0487.000
         ADMW      R1,LSTHDS                                            0488.000
         LW        R0,RECL                                              0489.000
         STW       R0,0W,X1                                             0490.000
* LOOP LINKING RECORDS FROM BLOCK JUST READ                             0491.000
         LNW       R6,RECSTB                                            0492.000
LINKIT   EQU       $                                                    0493.000
         STW       R6,XLP2                                              0494.000
* MOVEREC(BUFPTR,RECBAS,RECSIZE);                                       0495.000
         LW        R2,BUFPTR                                            0496.000
         LW        R3,RECBAS                                            0497.000
         LW        R4,RECSZ                                             0498.000
         BL        C:MOVREC                                             0499.000
* RECADR(RECL):=RECBAS;                                                 0500.000
         LW        R1,RECL                                              0501.000
         ADMW      R1,RECPTS                                            0502.000
         LW        R0,RECBAS                                            0503.000
         STW       R0,RCADRF*4,X1                                       0504.000
* ENDOFSTRING(RECL):=FALSE;                                             0505.000
         ZMW       RCEOSF*4,X1                                          0506.000
* RECLNK(RECL):=RECL:=RECL+RECPTRSENTRYSIZE;                            0507.000
         LI        R0,RCESZ*4                                           0508.000
         ARMW      R0,RECL                                              0509.000
         LW        R0,RECL                                              0510.000
         STW       R0,RCLNKF*4,X1                                       0511.000
* BUFPTR:=BUFPTR+RECINX;                                                0512.000
         LW        R0,RECINX                                            0513.000
         ARMW      R0,BUFPTR                                            0514.000
* RECBAS:=RECBAS+RECSIZE;                                               0515.000
         ARMW      R0,RECBAS                                            0516.000
         LW        R6,XLP2                                              0517.000
         BIB       R6,LINKIT                                            0518.000
* K:=LISTTAILS(LST):=RECL-RECPTSENTRYSIZE;                              0519.000
         LW        R7,RECL                                              0520.000
         SUI       R7,4*RCESZ                                           0521.000
         LW        R1,LST                                               0522.000
         ADMW      R1,LSTTLS                                            0523.000
         STW       R7,0W,X1                                             0524.000
* RECLNK(K):=0;                                                         0525.000
         LW        R1,RECPTS                                            0526.000
         ADR       R7,R1                                                0527.000
         LW        R0,ZEROX                                             0528.000
         STW       R0,RCLNKF*4,X1                                       0529.000
* IF LIST GE STARTLIST+INITIALMERGELEVEL THEN                           0530.000
         LI        R0,STARTL                                            0531.000
         ADMW      R0,INITML                                            0532.000
         SLL       R0,2                                                 0533.000
         CAMW      R0,LST                                               0534.000
         BCT       GT,MRI100                                            0535.000
* NEWSTRING(LIST):=ATTACHED;                                            0536.000
         LW        R1,LST                                               0537.000
         ADMW      R1,NUSTRG                                            0538.000
         LI        R0,ATTCHD                                            0539.000
         STW       R0,0W,X1                                             0540.000
         BU        MRI101                                               0541.000
* ELSE                                                                  0542.000
MRI100   EQU       $                                                    0543.000
* BEGIN                                                                 0544.000
* IF CURSTRINGSIZE LE RECSTHISBLK THEN                                  0545.000
         LW        R0,CURSSZ                                            0546.000
         CAMW      R0,RECSTB                                            0547.000
         BCT       GT,MRI102                                            0548.000
* BEGIN                                                                 0549.000
* ENDOFSTRING(LISTTAILS(STARTLIST)):=TRUE;                              0550.000
         LW        R1,LSTTLS                                            0551.000
         LW        R3,STARTL*4,X1                                       0552.000
         ADMW      R3,RECPTS                                            0553.000
         LI        R0,TRUE                                              0554.000
         STW       R0,RCEOSF*4,X3                                       0555.000
* IF STRINGMAX GE MERGELEVEL THEN                                       0556.000
         LW        R0,STGMAX                                            0557.000
         CAMW      R0,MERGLV                                            0558.000
         BCT       LT,MRI103                                            0559.000
* BEGIN                                                                 0560.000
* NEWSTRING(STARTLIST):=READNEWSTRING;                                  0561.000
         LI        R0,READNS                                            0562.000
         LW        R1,NUSTRG                                            0563.000
         STW       R0,STARTL*4,X1                                       0564.000
* J:=GETSTRING;                                                         0565.000
         LW        R2,TRVCTR                                            0566.000
         BL        C:GETSI                                              0567.000
* REMAINDER(STARTLIST):=STRINGINFO(J).SIZE;                             0568.000
         ADMW      R2,SINFO        R2 = XTMP2                           0569.000
         LW        R0,SISZF*4,X2                                        0570.000
         LW        R1,RMDR                                              0571.000
         STW       R0,STARTL*4,X1                                       0572.000
* NEXTBLOCK(STARTLIST):=STRINGINFO(J).ADDR;                             0573.000
         LW        R0,SIADRF*4,X2                                       0574.000
         LW        R1,NEXBLK                                            0575.000
         STW       R0,STARTL*4,X1                                       0576.000
* ZOT THE SIZE                                                          0577.000
* STRINGINFO(J).SIZE:=MAXSTRINGSIZE;                                    0578.000
         LW        R0,MAXSSZ                                            0579.000
         STW       R0,SISZF*4,X2                                        0580.000
* STRINGMAX:=STRINGMAX-1;                                               0581.000
         LW        R0,STGMAX                                            0582.000
         SUI       R0,1                                                 0583.000
         STW       R0,STGMAX                                            0584.000
* END;                                                                  0585.000
         BU        MRI104                                               0586.000
* ELSE                                                                  0587.000
MRI103   EQU       $                                                    0588.000
*                                                                       0589.000
         LI        R0,NOSTRG                                            0590.000
         LW        R1,NUSTRG                                            0591.000
         STW       R0,STARTL*4,X1                                       0592.000
MRI104   EQU       $                                                    0593.000
* END;                                                                  0594.000
         BU        MRI105                                               0595.000
* ELSE                                                                  0596.000
MRI102   EQU       $                                                    0597.000
* NEWSTRING(LIST):=NOTNEWSTRING;                                        0598.000
         LW        R1,LST                                               0599.000
         ADMW      R1,NUSTRG                                            0600.000
         LI        R0,NOTNS                                             0601.000
         STW       R0,0W,X1                                             0602.000
MRI105   EQU       $                                                    0603.000
* PASSSIZE:=PASSSIZE+CURSTRINGSIZE;                                     0604.000
         LW        R0,CURSSZ                                            0605.000
         ARMW      R0,PASSSZ                                            0606.000
* INSERTINTOLASTRECQ(LST);                                              0607.000
         LW        R2,LST                                               0608.000
         BL        C:INSTLR                                             0609.000
         ACW       LASTQ                                                0610.000
         ACW       LSTTLS                                               0611.000
         ACW       RECPTS                                               0612.000
* INSERTINTOFIRSTRECQ(LST);                                             0613.000
         LW        R2,LST                                               0614.000
         BL        C:INSTFR                                             0615.000
         ACW       FIRSTQ                                               0616.000
         ACW       LSTHDS                                               0617.000
         ACW       RECPTS                                               0618.000
* END;                                                                  0619.000
MRI101   EQU       $                                                    0620.000
* ATENDOFSTRING(LST):=FALSE;                                            0621.000
         LW        R1,LST                                               0622.000
         ADMW      R1,ENDSTG                                            0623.000
         LI        R0,FALSE                                             0624.000
         STW       R0,0W,X1                                             0625.000
* END;                                                                  0626.000
         LW        R0,ONEX                                              0627.000
         ARMW      R0,LST                                               0628.000
         LW        R6,XLP1                                              0629.000
         BIB       R6,GETBLK                                            0630.000
ENDGB    EQU       $                                                    0631.000
* NEXTEXHAUSTEDLIST:=LASTRECQ(LASTRECQ(LASTRECQHD)                      0632.000
* .LASTLNK).LASTLST);                                                   0633.000
         LI        R1,LQHD*4                                            0634.000
         ADMW      R1,LASTQ                                             0635.000
         LW        R3,LQLNKF*4,X1                                       0636.000
         ADMW      R3,LASTQ                                             0637.000
         LW        R1,LQLSTF*4,X3                                       0638.000
         STW       R1,NXELST                                            0639.000
* WHILE NUSTRG(NXELST) NE NOTNS AND NXELST NE 0 DO                      0640.000
MRI550   EQU       $                                                    0641.000
*                                  R1 = NXELST                          0642.000
         CAMW      R1,ZEROX                                             0643.000
         BCT       EQ,MRI551                                            0644.000
         ADMW      R1,NUSTRG       R1 = TMPA                            0645.000
         LW        R0,0W,X1                                             0646.000
*        CI        R0,NOTNS                                             0647.000
         BCT       EQ,MRI551                                            0648.000
* NXELST:=LASTQ(LASTQ(NXELST*LQESZ).LQLNKF).LQLSTF                      0649.000
         LW        R1,NXELST                                            0650.000
         MPI       R0,LQESZ                                             0651.000
         ADMW      R1,LASTQ                                             0652.000
         LW        R3,LQLNKF*4,X1                                       0653.000
         ADMW      R3,LASTQ                                             0654.000
         LW        R1,LQLSTF*4,X3  R1 = NXELST                          0655.000
         STW       R1,NXELST                                            0656.000
         BU        MRI550                                               0657.000
MRI551   EQU       $                                                    0658.000
* IF AVAILABLERECORDS>0 THEN                                            0659.000
         LW        R0,AVLREC                                            0660.000
*        CI        R0,X'0'                                              0661.000
         BCF       GT,MRI002                                            0662.000
* BEGIN LINKING REMAINING AREAS TO DUMMY-POOL                           0663.000
* LISTHEADS(DUMMYPOOL):=RECL                                            0664.000
         LW        R0,RECL                                              0665.000
         LW        R1,LSTHDS                                            0666.000
         STW       R0,DUMPOL*4,X1                                       0667.000
* REPEAT AVAILABLERECORDS TIMES;                                        0668.000
         LNW       R6,AVLREC                                            0669.000
LNKDUM   EQU       $                                                    0670.000
         STW       R6,XLP1                                              0671.000
* BEGIN                                                                 0672.000
* RECADR(RECL):=RECBAS;                                                 0673.000
         LW        R1,RECL                                              0674.000
         ADMW      R1,RECPTS                                            0675.000
         LW        R0,RECBAS                                            0676.000
         STW       R0,RCADRF*4,X1                                       0677.000
* ENDOFSTRING(RECL):=FALSE;                                             0678.000
         LI        R0,FALSE                                             0679.000
         STW       R0,RCEOSF*4,X1                                       0680.000
* RECL:=RECLNK(RECL):=RECL+RECPTSENTRYSIZE;                             0681.000
         LI        R0,RCESZ*4                                           0682.000
         ARMW      R0,RECL                                              0683.000
         LW        R0,RECL                                              0684.000
         STW       R0,RCLNKF*4,X1                                       0685.000
* RECBAS:=RECBAS+RECSIZE;                                               0686.000
         LW        R0,RECINX                                            0687.000
         ARMW      R0,RECBAS                                            0688.000
* END;                                                                  0689.000
         LW        R6,XLP1                                              0690.000
         BIB       R6,LNKDUM                                            0691.000
* LISTTAILS(DUMMYPOOL):=RECL                                            0692.000
* :=RECL-RECPTRSENTRYSIZE;                                              0693.000
         LW        R0,RECL                                              0694.000
         SUI       R0,4*RCESZ                                           0695.000
         STW       R0,RECL                                              0696.000
         LW        R0,RECL                                              0697.000
         LW        R1,LSTTLS                                            0698.000
         STW       R0,DUMPOL*4,X1                                       0699.000
* RECLNK(RECL):=0;                                                      0700.000
         LW        R1,RECL                                              0701.000
         ADMW      R1,RECPTS       R1 = TMPA                            0702.000
         LW        R0,ZEROX                                             0703.000
         STW       R0,RCLNKF*4,X1                                       0704.000
* END                                                                   0705.000
         BU        MRI007                                               0706.000
* ELSE                                                                  0707.000
MRI002   EQU       $                                                    0708.000
* BEGIN CLEARING DUMMYPOOL LINKS                                        0709.000
* LISTHEADS(DUMMYPOOL):=0;                                              0710.000
         LW        R0,ZEROX                                             0711.000
         LW        R1,LSTHDS                                            0712.000
         STW       R0,DUMPOL*4,X1                                       0713.000
* LISTTAILS(DUMMYPOOL):=0;                                              0714.000
         LW        R1,LSTTLS                                            0715.000
         STW       R0,DUMPOL*4,X1                                       0716.000
* END;                                                                  0717.000
MRI007   EQU       $                                                    0718.000
* UPDATE TRANSFER VECTOR                                                0719.000
         LW        R0,STGMAX                                            0720.000
         LW        R3,TRVCTR                                            0721.000
         STW       R0,TVSGMX*4,X3                                       0722.000
         LW        R0,PASSSZ                                            0723.000
         STW       R0,TVPASZ*4,X3                                       0724.000
         LW        R0,NXELST                                            0725.000
         STW       R0,TVNXEL*4,X3                                       0726.000
         LW        R0,XLV217                                            0727.000
         TRSW      R0                                                   0728.000
         END                                                            0729.000
