* SORT INITIALIZATION PHASE                             HEADER  C:SRTINT0001.000
*                                                                       0002.000
*                  SORT INITIALIZATION PHASE                            0003.000
*                                                                       0004.000
         M.PGM     C:SRTINT,MPX-32,3.6.1,00                             0005.000
         DEF       C:SRTINT                                             0006.000
         EXT       C:MOVREC                                             0007.000
         EXT       C:CMPREC                                             0008.000
         EXT       C:OPENWF                                             0009.000
         EXT       C:GETWFS                                             0010.000
         EXT       CR.GOSG                                              0011.000
         EXT       SORTERR                                              0012.000
SMCOMMON COMMON    SMCOM(2)                                             0013.000
         ORG       SMCOM                                                0014.000
         RES       1W                                                   0015.000
SEGSORT  RES       1W                                                   0016.000
         REL                                                            0017.000
SRTCOM1  COMMON    SRTC1(50)                                            0018.000
         ORG       SRTC1                                                0019.000
TMP1     DATAW     X'0'                                                 0020.000
TRKSEC   DATAW     X'0'                                                 0021.000
SECTWD   DATAW     X'0'                                                 0022.000
SISZ     DATAW     X'0'                                                 0023.000
WFSIZE   DATAW     X'0'                                                 0024.000
MERGLV   DATAW     X'0'                                                 0025.000
AVLMEM   DATAW     X'0'                                                 0026.000
PCNT     DATAW     X'0'                                                 0027.000
BUFSZW   DATAW     X'0'                                                 0028.000
BUFSZS   DATAW     X'0'                                                 0029.000
DATSZ    DATAW     X'0'                                                 0030.000
KEYSZ    DATAW     X'0'                                                 0031.000
RECSZ    DATAW     X'0'                                                 0032.000
RECSPB   DATAW     X'0'                                                 0033.000
TRVCTR   REZ       1W                                                   0034.000
SCB      REZ       1W                                                   0035.000
FIB      REZ       1W                                                   0036.000
SONFO    REZ       1W                                                   0037.000
BUFADR   REZ       1W                                                   0038.000
BUFBAS   REZ       1W                                                   0039.000
ENDSTR   REZ       1W                                                   0040.000
BEGSTR   REZ       1W                                                   0041.000
LSTKEY   REZ       1W                                                   0042.000
LOSER    REZ       1W                                                   0043.000
RUN      REZ       1W                                                   0044.000
STRGNO   REZ       1W                                                   0045.000
RECPTS   REZ       1W                                                   0046.000
RECBAS   REZ       1W                                                   0047.000
RECINX   REZ       1W                                                   0048.000
KEYINX   REZ       1W                                                   0049.000
ONEX     REZ       1W                                                   0050.000
ZEROX    REZ       1W                                                   0051.000
WTMP1    REZ       1W                                                   0052.000
RGTSON   REZ       1W                                                   0053.000
LFTSON   REZ       1W                                                   0054.000
FATHER   REZ       1W                                                   0055.000
XTMP3    REZ       1W                                                   0056.000
XTMP2    REZ       1W                                                   0057.000
XTMP1    REZ       1W                                                   0058.000
XLV201   REZ       1W                                                   0059.000
XLP1     REZ       1W                                                   0060.000
         REL                                                            0061.000
* DETERMINES SIZE OF OUTPUT BUFFER DURING INTERNAL10002000* DETERMINES S0062.000
* SORTING                                                               0063.000
* DETERMINES SIZE OF SELECTION TREE                                     0064.000
* COMPUTES FIXED POINTERS                                               0065.000
* SEEDS THE TREE USING THE INPUT PROCEDURE                              0066.000
* OPENS THE WORK FILE                                                   0067.000
* SIZE OF SELECTION TREE, P, IS COMPUTED SO THAT                        0068.000
* TOTAL SORT TIME, T, IS MINIMIZED WHERE                                0069.000
* T=(TA+TL)*((L+M-P*(SCB(SCBRL)+H)-1) DIV                               0070.000
* (M-P*(SCB(SCBRL)+H)))10015000* (M-P*(SCB(SCBRL)+H)))10015000* (M-P*(SC0071.000
* +L*TT+N*(TM*SCB(SCBRL)+TC*SCB(SCBKL)                                  0072.000
* *LOG(P)+TH)                                                           0073.000
* THE BUFFER SIZE IN SECTORS, BS, IS COMPUTED BY                        0074.000
* BS=(M-P*(SCB(SCBRL)+H)-AREAOFFSET)                                    0075.000
* SECTORSIZE                                                            0076.000
* THE BUFFER SIZE IN CHARACTERS, BC, IS COMPUTED                        0077.000
* BC=BS*SECTORSIZE                                                      0078.000
         M.REQS                                                         0079.000
FQHD     EQU       X'0'            FIRST-RECORD QUEUE HEAD              0080.000
LQHD     EQU       X'0'            LAST-RECORD QUEUE HEAD               0081.000
TRUE     EQU       1               TRUTH                                0082.000
FALSE    EQU       X'0'            FALSEHOOD                            0083.000
NSRTOH   EQU       3               OVERHEAD PER TREE ENTRY DURING SORT  0084.000
NMRGOH   EQU       17              OVERHEAD PER MERGE LEVEL DURING MERGE0085.000
FIBSZ    EQU       8                                                    0086.000
IOWSSZ   EQU       X'0'            REQUIRED WORKING SPACE FOR I/O       0087.000
AREAOF   EQU       2               G.A. OFFSET FOR AREA DESCRIPTOR      0088.000
BUFBLK   EQU       1               RECORD OFFSET OF LOW ORDER PART OF BL0089.000
BUFRCT   EQU       2               RECORD OFFSET OF RECORD COUNT        0090.000
BLNKSZ   EQU       3               SIZE OF BLOCK INFO                   0091.000
SISZF    EQU       1               STRINGINFO LOW ORDER OF STRING LENGTH0092.000
SIADRF   EQU       3               STRINGINFO LOW ORDER OF STRING ADDRES0093.000
SIESZ    EQU       4               STRINGINFO ENTRY SIZE                0094.000
MAXSTG   EQU       32767           MAXIMUM NUMBER OF STRINGS            0095.000
FQLSTF   EQU       X'0'            FIRST QUEUE LOCATION LIST POINTER    0096.000
FQRECF   EQU       1               FIRST QUEUE LOCATION OF RECORD POINTE0097.000
FQLNKF   EQU       3               FIRST QUEUE LOCATION OF LINK         0098.000
FQESZ    EQU       4               FIRST QUEUE ENTRY SIZE               0099.000
LQLSTF   EQU       X'0'            LAST QUEUE LOCATION OF LIST POINTER  0100.000
LQRECF   EQU       1               LAST QUEUE LOCATION OF RECORD POINTER0101.000
LQLNKF   EQU       3               LAST QUEUE LOCATION OF LINK          0102.000
LQESZ    EQU       4               LAST QUEUE ENTRY SIZE                0103.000
RCADRF   EQU       X'0'            RECORD POINTER LOCATION OF RECORD ADD0104.000
RCEOSF   EQU       1               RECORD POINTER LOCATION OF END-OF-STR0105.000
RCLNKF   EQU       3               RECORDPOINTER LOCATION OF LINK       0106.000
RCESZ    EQU       4               RECORD POINTER ENTRY SIZE            0107.000
MRGLST   EQU       X'0'            LOCATION OF MERGE-LIST HEAD          0108.000
DUMPOL   EQU       1               LOCATION OF DUMMYPOOL-LIST HEAD      0109.000
MINTSZ   EQU       4               MINIMUM TREE SIZE                    0110.000
MAXTSZ   EQU       X'7FFE'         MAXIMUM TREE SIZE                    0111.000
STARTL   EQU       2               FIRST LIST ENTRY                     0112.000
MINMLV   EQU       2               MINIMUM MERGE LEVEL                  0113.000
MAXMLV   EQU       8               MAXIMUM MERGE LEVEL                  0114.000
NOTNS    EQU       X'0'            NOT NEW STRING                       0115.000
READNS   EQU       -1              READ NEW STRING                      0116.000
ATTCHD   EQU       1               NEW STRING READ AND ATTACHED         0117.000
NOSTRG   EQU       2               NO STRING AVAILABLE                  0118.000
LTV      EQU       X'0'            LESS THAN VALUE                      0119.000
EQV      EQU       1               EQUAL VALUE                          0120.000
GTV      EQU       2               GREATER THAN VALUE                   0121.000
SPERB    EQU       48              STRINGS PER BLOCK OF STRING INFO     0122.000
* SORT CONTROL BLOCK LAYOUT                                             0123.000
SCBWID   EQU       X'0'            WORK FILE ID                         0124.000
SCBISIT  EQU       1W              INPUT PROCEDURE SEGMENT ADDRESS      0125.000
SCBRA    EQU       3               RECORD ADDRESS                       0126.000
SCBRL    EQU       4               RECORD LENGTH                        0127.000
SCBKA    EQU       5               KEY ADDRESS                          0128.000
SCBKL    EQU       6               KEY LENGTH                           0129.000
SCBOPT   EQU       7               OPTIONS                              0130.000
SCBSTS   EQU       8               STATUS                               0131.000
SCBINF   EQU       9               INFO PROCEDURE                       0132.000
SCBBGM   EQU       10              BEGINNING OF MEMORY                  0133.000
SCBEDM   EQU       11              END OF MEMORY                        0134.000
SCBRTN   EQU       20              RLSE/RETN EXIT ADDRS                 0135.000
* OPTION VALUES                                                         0136.000
MAPPED   EQU       1               USER PROVIDES MEMORY BOUNDS          0137.000
WRTCMP   EQU       2               USER WANTS OUTPUT I/O VERIFIED       0138.000
DIAGNO   EQU       4               USER WANTS SOME INFO MESSAGES        0139.000
* STATUS VALUES                                                         0140.000
EOS      EQU       1               END-OF-SORT                          0141.000
MEMERR   EQU       3               INSUFFICIENT MEMORY                  0142.000
WFSERR   EQU       5               INSUFFICIENT WORKFILE SPACE          0143.000
WFIOER   EQU       9               IRRECOVERABLE I/O ERROR              0144.000
WFRCER   EQU       17              WORKFILE RECORD COUNT ERROR          0145.000
* TRANSFER VECTOR LAYOUT                                                0146.000
TVKSZ    EQU       X'0'            KEYSZ                                0147.000
TVDSZ    EQU       1               DATSZ                                0148.000
TVFIB    EQU       2               FIB                                  0149.000
TVNREC   EQU       3               NRECS                                0150.000
TVSECW   EQU       4               SECTWD                               0151.000
TVTRKS   EQU       5               TRKSEC                               0152.000
TVMRGL   EQU       6               MERGLV                               0153.000
TVPCNT   EQU       7               PCNT                                 0154.000
TVBBAS   EQU       8               BUFBAS                               0155.000
TVSONF   EQU       9               SONFO                                0156.000
TVSINF   EQU       10              SINFO                                0157.000
TVLSSI   EQU       11              LASTSI                               0158.000
TVSGMX   EQU       12              STGMAX                               0159.000
TVRPTS   EQU       13              RECPTS                               0160.000
TVBSZS   EQU       14              BUFSZS                               0161.000
TVRPB    EQU       15              RECSPB                               0162.000
TVRUN    EQU       16              RUN                                  0163.000
TVLOSR   EQU       17              LOSER                                0164.000
TVLKEY   EQU       18              LSTKEY                               0165.000
TVLHDS   EQU       19              LSTHDS                               0166.000
TVLTLS   EQU       20              LSTTLS                               0167.000
TVFQ     EQU       21              FIRSTQ                               0168.000
TVLQ     EQU       22              LASTQ                                0169.000
TVWFSZ   EQU       23              WFSIZE                               0170.000
TVLSEC   EQU       24              LSTSEC                               0171.000
TVMXSG   EQU       25              MXSGIN                               0172.000
TVNBLK   EQU       26              NEXBLK                               0173.000
TVRMDR   EQU       27              RMDR                                 0174.000
TVESTG   EQU       28              ENDSTG                               0175.000
TVNSTG   EQU       29              NUSTRG                               0176.000
TVFULL   EQU       30              FULL                                 0177.000
TVPASZ   EQU       31              PASSSZ                               0178.000
TVPASM   EQU       32              PASMAX                               0179.000
TVSISZ   EQU       33              SISZ                                 0180.000
C:SRTINT EQU       $                                                    0181.000
         STW       R0,XLV201                                            0182.000
         STW       R2,SCB          R2 -> SCB                            0183.000
         STW       R3,TRVCTR       R3 -> TRVCTR                         0184.000
* INITIALIZE ZEROX & ONEX                                               0185.000
         ZMW       ZEROX                                                0186.000
         LI        R0,1*4                                               0187.000
         STW       R0,ONEX                                              0188.000
* DATSZ:=(SCB(SCBRL)+3) DIV 4                                           0189.000
         LI        R0,3                                                 0190.000
         ADMW      R0,SCBRL*4,X2                                        0191.000
         SRA       R0,2            TRANSLATE CHRS TO WORDS              0192.000
         STW       R0,DATSZ                                             0193.000
* KEYSZ:=(SCB(SCBKL)+3) DIV 4                                           0194.000
         LI        R0,3                                                 0195.000
         ADMW      R0,SCBKL*4,X2                                        0196.000
         SRA       R0,2            TRANSLATE CHRS TO WORDS              0197.000
         STW       R0,KEYSZ                                             0198.000
         SLL       R0,2                                                 0199.000
         STW       R0,KEYINX       FORCE CONVERSION                     0200.000
* RECSZ:=KEYSZ+DATSZ;                                                   0201.000
         LW        R0,KEYSZ                                             0202.000
         ADMW      R0,DATSZ                                             0203.000
         STW       R0,RECSZ                                             0204.000
         SLL       R0,2                                                 0205.000
         STW       R0,RECINX       FORCE CONVERSION                     0206.000
* BEGSTR:=SCB(SCBBGM);                                                  0207.000
         LW        R0,SCBBGM*4,X2                                       0208.000
         STW       R0,BEGSTR                                            0209.000
* ENDSTR:=SCB(SCBEDM);                                                  0210.000
         LW        R0,SCBEDM*4,X2                                       0211.000
         STW       R0,ENDSTR                                            0212.000
* AVLMEM:=ENDSTR-BEGSTR                                                 0213.000
         LW        R0,ENDSTR                                            0214.000
         SUMW      R0,BEGSTR       FORCE CONVERSION                     0215.000
         SRL       R0,2                                                 0216.000
         STW       R0,AVLMEM                                            0217.000
SIT004   EQU       $                                                    0218.000
* GET WORKFILE SIZE AND OTHER DISK CHARACTERISTICS                      0219.000
         LW        R4,SCBWID*4,X2                                       0220.000
         BL        C:GETWFS                                             0221.000
         STW       R4,WFSIZE                                            0222.000
         STW       R5,TRKSEC                                            0223.000
         STW       R6,SECTWD                                            0224.000
* STRINGINFOSIZE:=SECTORSIZEINWORDS;                                    0225.000
         STW       R6,SISZ                                              0226.000
* COMPUTE BS, BUFFER SIZE IN SECTORS,                                   0227.000
* BUT FIRST ESTIMATE THE MERGE LEVEL AND                                0228.000
* ATTEMPT TO USE THE MAXIMUM -- IF THAT'S A BUMP                        0229.000
* WE'LL COME BACK TO LEVEL IT OUT                                       0230.000
* MERGLV:=MAXMLV;                                                       0231.000
         LI        R0,MAXMLV                                            0232.000
         STW       R0,MERGLV                                            0233.000
RELEVL   EQU       $                                                    0234.000
* TMP1:=MERGLV+STARTL;                                                  0235.000
         LI        R7,STARTL                                            0236.000
         ADMW      R7,MERGLV       R7 = TMP1                            0237.000
* TMP2:=IF CHCKIO THEN 2 ELSE 1;                                        0238.000
         LI        R5,1                                                 0239.000
* BS:=(AVLMEM-(2*(STRINGINFOSIZE+AREAOFFSET)                            0240.000
* +FIBSZ+TMP1*MERGEOVERHEAD+TMP2*AREAOFFSET))                           0241.000
* /                                                                     0242.000
* ((MERGLV+TMP2)*SECTORSIZE                                             0243.000
* +(SECTORSIZE*MERGLV*RCESZ)/RECSZ));                                   0244.000
         LI        R1,AREAOF       R1 = TMP3                            0245.000
         ADMW      R1,SISZ         TMP3:=AREAOF+SISZ                    0246.000
         ADR       R1,R1           TMP3:=2*TMP3                         0247.000
         MPI       R6,NMRGOH       TMP1:=NMRGOH*TMP1                    0248.000
         ADR       R1,R7           TMP1:=TMP1+TMP3                      0249.000
         ADI       R7,FIBSZ        TMP1:=TMP1+FIBSZ                     0250.000
         LI        R1,AREAOF                                            0251.000
         MPR       R5,R0           TMP3:=AREAOF*TMP2                    0252.000
         ADR       R1,R7           TMP1:=TMP1+TMP3                      0253.000
         LW        R1,AVLMEM                                            0254.000
         SUR       R7,R1           TMP3:=AVLMEM-TMP1                    0255.000
         ADMW      R5,MERGLV       TMP2:=TMP2+MERGLV                    0256.000
         MPMW      R4,SECTWD       TMP2:=TMP2*SECTWD                    0257.000
         LW        R7,MERGLV                                            0258.000
         MPI       R6,RCESZ        TMP1:=RCESZ*MERGLV                   0259.000
         MPMW      R6,SECTWD       TMP1:=TMP1*SECTWD;                   0260.000
         ES        R6                                                   0261.000
         DVMW      R6,RECSZ        TMP1:=TMP1 DIV RECSZ;                0262.000
         ADR       R7,R5           TMP2:=TMP2+TMP1;                     0263.000
         ES        R0                                                   0264.000
         DVR       R5,R0           BUFSZS:=TMP3 DIV TMP2;               0265.000
         STW       R1,BUFSZS                                            0266.000
* DETERMINE BEST FIT FRACTION OF A TRACK                                0267.000
* USING THE CURRENT ESTIMATE OF BUFFER SIZE                             0268.000
* TMP1:=SECTORSPERTRACK;                                                0269.000
         LW        R7,TRKSEC                                            0270.000
         STW       R7,TMP1                                              0271.000
RESIZE   EQU       $                                                    0272.000
* IF BS<TMP1 THEN                                                       0273.000
         LW        R7,TMP1                                              0274.000
         LW        R4,BUFSZS                                            0275.000
         ABR       R7,0            LOGICAL COMPARE                      0276.000
         ABR       R4,0            LOGICAL COMPARE                      0277.000
         CAR       R4,R7                                                0278.000
         BCT       LE,SIT006                                            0279.000
* BEGIN REVISING (DOWNWARD) OUR BEST FIT                                0280.000
* TMP1:=TMP1/2;                                                         0281.000
         LW        R7,TMP1                                              0282.000
         SRA       R7,1                                                 0283.000
         STW       R7,TMP1                                              0284.000
* IF TMP1>0 THEN GO RESIZE;                                             0285.000
*        CI        R7,X'0'                                              0286.000
         BCT       GT,RESIZE                                            0287.000
* END;                                                                  0288.000
SIT006   EQU       $                                                    0289.000
* BS:=TMP1;                                                             0290.000
         LW        R0,TMP1                                              0291.000
         STW       R0,BUFSZS                                            0292.000
* DETERMINE THE MAXIMUM TREE SIZE WITH THIS BUFFER                      0293.000
* SIZE -- IF THAT'S NOT A PLUM THEN WE'LL BE BACK                       0294.000
* TO PRUNE                                                              0295.000
PRUNE    EQU       $                                                    0296.000
* IF BS=0 THEN                                                          0297.000
         LW        R0,BUFSZS                                            0298.000
*        CI        R0,X'0'                                              0299.000
         BCT       GT,RECOMP                                            0300.000
* BEGIN                                                                 0301.000
* SCB(SCBSTS):=ERR(INSUFFICIENT MEMORY);                                0302.000
         LI        R0,MEMERR                                            0303.000
         LW        R2,SCB                                               0304.000
         STW       R0,SCBSTS*4,X2                                       0305.000
* GO XIT;                                                               0306.000
         LW        R5,=G'SZ01'                                          0307.000
         BL        SORTERR                                              0308.000
* END;                                                                  0309.000
RECOMP   EQU       $                                                    0310.000
* BW:=BS*SECTORSIZE;                                                    0311.000
         LW        R5,BUFSZS                                            0312.000
         MPMW      R4,SECTWD                                            0313.000
         STW       R5,BUFSZW                                            0314.000
* RECSPERBLOCK:=(BW-BLOCKLINKSIZE) DIV RECSZ;                           0315.000
         SUI       R5,BLNKSZ                                            0316.000
         ES        R4                                                   0317.000
         DVMW      R4,RECSZ                                             0318.000
         STW       R5,RECSPB                                            0319.000
* COMPUTE TREE SIZE AND, ALTHOUGH IT DOESN'T HAVE                       0320.000
* TO BE A POWER, IT MUST BE A MULTIPLE, OF 2                            0321.000
* TMP1:=IF CHCKIO THEN 2 ELSE 1;                                        0322.000
         LI        R7,1                                                 0323.000
* P:=(AVLMEM-(TMP1*(BW+AREAOFFSET)+KEYSZ                                0324.000
* +FIBSZ+(STRINGINFOSIZE+AREAOFFSET))                                   0325.000
* /(RECSZ+SORTOVERHEAD);                                                0326.000
         LI        R5,AREAOF                                            0327.000
         ADMW      R5,BUFSZW       TMP2:=AREAOF+BUFSZW                  0328.000
         MPR       R5,R6           TMP1:=TMP1*TMP2                      0329.000
         ADMW      R7,KEYSZ        TMP1:=TMP1+KEYSZ                     0330.000
         ADI       R7,FIBSZ        TMP1:=TMP1+FIBSZ;                    0331.000
         ADI       R7,AREAOF       TMP1:=TMP1+AREAOF                    0332.000
         ADMW      R7,SISZ         TMP1:=TMP1+SISZ                      0333.000
         LW        R5,AVLMEM                                            0334.000
         SUR       R7,R5           TMP2:=AVLMEM-TMP1                    0335.000
         LI        R7,NSRTOH                                            0336.000
         ADMW      R7,RECSZ        TMP1:=RECSZ+NSRTOH;                  0337.000
         ES        R4                                                   0338.000
         DVR       R7,R4           PCNT:=TMP2/TMP1                      0339.000
         ANMW      R5,=X'7FFFFFFE' MAKE PCNT EVEN & POSITIVE            0340.000
         STW       R5,PCNT                                              0341.000
* IF PCNT<MINIMUMTREESIZE THEN                                          0342.000
         CI        R5,MINTSZ                                            0343.000
         BCT       GE,SIT008                                            0344.000
* BEGIN                                                                 0345.000
* SCB(SCBSTS):=ERR(INSUFFICIENT MEMORY);                                0346.000
         LI        R0,MEMERR                                            0347.000
         LW        R2,SCB                                               0348.000
         STW       R0,SCBSTS*4,X2                                       0349.000
* GO XIT;                                                               0350.000
         LW        R5,=G'SZ01'                                          0351.000
         BL        SORTERR                                              0352.000
* END;                                                                  0353.000
SIT008   EQU       $                                                    0354.000
* IF PCNT<RECSPERBLK OR RECSPERBLK < 1 THEN                             0355.000
         CAMW      R5,RECSPB      R5 = PCNT                             0356.000
         BCT       GE,SIT009                                            0357.000
         LW        R0,RECSPB                                            0358.000
         CI        R0,1                                                 0359.000
         BCT       GE,SIT009                                            0360.000
* BEGIN                                                                 0361.000
* IF MERGELEVEL=MINIMUMMERGELEVEL THEN                                  0362.000
         LW        R0,MERGLV                                            0363.000
         CI        R0,MINMLV                                            0364.000
         BNE       SIT010                                               0365.000
* BEGIN                                                                 0366.000
* BS:=BS/2;                                                             0367.000
         LW        R0,BUFSZS                                            0368.000
         SRA       R0,1                                                 0369.000
         STW       R0,BUFSZS                                            0370.000
* GO PRUNE;                                                             0371.000
         BU        PRUNE                                                0372.000
* END;                                                                  0373.000
SIT010   EQU       $                                                    0374.000
* MERGELEVEL:=MERGELEVEL-1;                                             0375.000
         LW        R0,MERGLV                                            0376.000
         SUI       R0,1                                                 0377.000
         STW       R0,MERGLV                                            0378.000
* GO RELEVL;                                                            0379.000
         BU        RELEVL                                               0380.000
* END;                                                                  0381.000
SIT009   EQU       $                                                    0382.000
* SET UP MEMORY                                                         0383.000
* ALLOCATE FIB                                                          0384.000
         LW        R0,BEGSTR                                            0385.000
         STW       R0,FIB                                               0386.000
         LI        R0,FIBSZ*4                                           0387.000
         ARMW      R0,BEGSTR                                            0388.000
SIT003   EQU       $                                                    0389.000
* ALLOCATE REST OF MEMORY--PERMANENT STUFF FIRST                        0390.000
         LW        R0,BEGSTR                                            0391.000
         STW       R0,BUFBAS                                            0392.000
         LI        R0,AREAOF*4                                          0393.000
         ADMW      R0,BUFBAS                                            0394.000
         STW       R0,BUFADR                                            0395.000
* COMPUTE BUFFER SIZE IN CHRS. FOR GA I/O                               0396.000
         LW        R5,BUFSZW                                            0397.000
         MPI       R4,4            FOR I/O                              0398.000
         STW       R5,*BUFBAS                                           0399.000
         ADMW      R5,BUFADR                                            0400.000
         STW       R5,SONFO                                             0401.000
         LW        R5,SISZ                                              0402.000
         MPI       R4,4                                                 0403.000
         STW       R5,*SONFO                                            0404.000
         LI        R0,AREAOF*4                                          0405.000
         ADR       R0,R5                                                0406.000
         ADMW      R5,SONFO                                             0407.000
         STW       R5,RUN                                               0408.000
         LW        R7,PCNT                                              0409.000
         SLL       R7,2                                                 0410.000
         ADR       R7,R5           (R5 = RUN)                           0411.000
         STW       R5,LOSER                                             0412.000
         ADR       R7,R5                                                0413.000
         STW       R5,RECPTS                                            0414.000
         ADR       R7,R5                                                0415.000
         STW       R5,LSTKEY                                            0416.000
         ADMW      R5,KEYINX                                            0417.000
         STW       R5,RECBAS                                            0418.000
* INITIALIZE EXTERNAL POINTERS AND RECORD AREAS                         0419.000
* INPROC:=SCB(SCBIN);                                                   0420.000
         LW        R2,SCB                                               0421.000
*        LW        R0,SCIN*4,X2                                         0422.000
*        STW       R0,INPROC                                            0423.000
* STRINGNUM:=0;                                                         0424.000
         ZMW       STRGNO                                               0425.000
* FOR I:=0 STEP 1 UNTIL P-1 DO                                          0426.000
* BEGIN GENERATING RECORD ADDRESSES                                     0427.000
* & SETTING UP 'RUN'                                                    0428.000
         LW        R1,RECPTS                                            0429.000
         STW       R1,WTMP1                                             0430.000
         ZMW       XTMP2                                                0431.000
         LNW       R6,PCNT                                              0432.000
RECLP    EQU       $                                                    0433.000
         STW       R6,XLP1                                              0434.000
* BEGIN                                                                 0435.000
* RECPTS(I):=RECBAS;                                                    0436.000
         LW        R0,RECBAS                                            0437.000
         LW        R1,WTMP1                                             0438.000
         STW       R0,0W,X1                                             0439.000
* IF STRINGNUM=0 THEN                                                   0440.000
         LW        R0,STRGNO                                            0441.000
*        CAMW      R0,ZEROX                                             0442.000
         BNE       SIT000                                               0443.000
* BEGIN INPUTTING A RECORD                                              0444.000
* CALL INPROC(SCB);                                                     0445.000
         LW        R2,SCB                                               0446.000
         LEA       R7,RLSRTN       SET C:RLSE EXIT                      0447.000
         STW       R7,SCBRTN*4,X2                                       0448.000
         SBM       0,SEGSORT       NOTIFY SEGMENTATION                  0449.000
         LW        R1,SCBISIT,X2   R1,R2 -> INPUT PROC SEGMENT ADDRS    0450.000
         LW        R2,SCBISIT+1W,X2                                     0451.000
         BL        CR.GOSG                                              0452.000
RLSRTN   EQU       $                                                    0453.000
         ZBM       0,SEGSORT       RESET SEGMENTATION FLAG              0454.000
* CHECK FOR SHORT FILE                                                  0455.000
         LW        R2,SCB                                               0456.000
         LW        R0,SCBSTS*4,X2                                       0457.000
*        CI        R0,X'0'                                              0458.000
         BCT       EQ,NORMFI                                            0459.000
* BEGIN                                                                 0460.000
* IF SCB(SCBSTS) NE EOS THEN GO XIT;                                    0461.000
         CI        R0,EOS                                               0462.000
         BNE       XIT                                                  0463.000
* PREPARE TO SET REMAINDER OF 'RUN' TO 'MAXSTRING'                      0464.000
* STRINGNUM:=-(MAXTREESIZE+1);                                          0465.000
         LI        R0,X'0'                                              0466.000
         SUI       R0,MAXTSZ+1                                          0467.000
         SLL       R0,2                                                 0468.000
         STW       R0,STRGNO                                            0469.000
* END                                                                   0470.000
* ELSE                                                                  0471.000
         BU        SIT000                                               0472.000
NORMFI   EQU       $                                                    0473.000
* SET UP WORKFILE RECORD AS FOLLOWS:                                    0474.000
* THE KEY FOR KEYSZ WORDS                                               0475.000
* THE DATA FOR DATSZ WORDS                                              0476.000
         LW        R1,SCB                                               0477.000
         LW        R2,SCBKA*4,X1                                        0478.000
         LW        R3,RECBAS                                            0479.000
         LW        R4,KEYSZ                                             0480.000
         BL        C:MOVREC                                             0481.000
         LW        R3,KEYINX                                            0482.000
         ADMW      R3,RECBAS                                            0483.000
         LW        R1,SCB                                               0484.000
         LW        R2,SCBRA*4,X1                                        0485.000
         LW        R4,DATSZ                                             0486.000
         BL        C:MOVREC                                             0487.000
* END;                                                                  0488.000
SIT000   EQU       $                                                    0489.000
* RUN(I):=STRINGNUM;                                                    0490.000
         LW        R1,XTMP2                                             0491.000
         ADMW      R1,RUN                                               0492.000
         LW        R0,STRGNO                                            0493.000
         STW       R0,0W,X1                                             0494.000
* RECBAS:=RECBAS+RECSZ;                                                 0495.000
         LW        R0,RECINX                                            0496.000
         ARMW      R0,RECBAS                                            0497.000
* BUMP EXTERNAL NODE INDEX                                              0498.000
         LW        R0,ONEX                                              0499.000
         ARMW      R0,WTMP1                                             0500.000
         ARMW      R0,XTMP2                                             0501.000
* END;                                                                  0502.000
         LW        R6,XLP1                                              0503.000
         BIB       R6,RECLP                                             0504.000
TREEIT   EQU       $                                                    0505.000
* BEGIN LOOP TO DETERMINE RELATIONS WITHIN RECORD 11066000* BEGIN LOOP T0506.000
* PAIRS 11067000* PAIRS 11067000* PAIRS 11067000* PAIRS 11067000* PAIRS 0507.000
* XTMP1::=I. XTMP2::=2. XTMP3::=PCNT DIV 2.                             0508.000
         LI        R0,2*4                                               0509.000
         STW       R0,XTMP2        AVOID REDUNDANT CONVERSIONS          0510.000
         LW        R1,PCNT                                              0511.000
         SRA       R1,1                                                 0512.000
         STW       R1,TMP1                                              0513.000
         SLL       R1,2                                                 0514.000
         STW       R1,XTMP3                                             0515.000
* I:=P-1;                                                               0516.000
         LW        R3,PCNT                                              0517.000
         SUI       R3,1                                                 0518.000
         SLL       R3,2                                                 0519.000
         STW       R3,XTMP1                                             0520.000
         LNW       R6,TMP1         TMP1::=PCNT DIV 2.                   0521.000
TREELP   EQU       $                                                    0522.000
         STW       R6,XLP1                                              0523.000
* RIGHTSON:=I;                                                          0524.000
         LW        R3,XTMP1                                             0525.000
         STW       R3,RGTSON                                            0526.000
* LEFTSON:=I-1;                                                         0527.000
         TRR       R3,R1                                                0528.000
         SUMW      R1,ONEX                                              0529.000
         STW       R1,LFTSON                                            0530.000
* IF RUN(LEFTSON)<0 OR                                                  0531.000
* (RUN(RIGHTSON)>=0 AND                                                 0532.000
* KEY(RIGHTSON)<KEY(LEFTSON)) THEN 11077020* KEY(RIGHTSON)<KEY(LEFTSON))0533.000
         ADMW      R1,RUN                                               0534.000
         LW        R0,0W,X1                                             0535.000
*        CAMW      R0,ZEROX                                             0536.000
         BCT       LT,EXCH1                                             0537.000
         ADMW      R3,RUN                                               0538.000
         LW        R0,0W,X3                                             0539.000
*        CAMW      R0,ZEROX                                             0540.000
         BCT       LT,SIT001                                            0541.000
         LW        R1,RGTSON                                            0542.000
         ADMW      R1,RECPTS                                            0543.000
         LW        R2,0W,X1                                             0544.000
         LW        R1,LFTSON                                            0545.000
         ADMW      R1,RECPTS                                            0546.000
         LW        R3,0W,X1                                             0547.000
         LW        R4,KEYSZ                                             0548.000
         BL        C:CMPREC                                             0549.000
         CI        R4,LTV          R4 = RELVAL                          0550.000
         BNE       SIT001                                               0551.000
* INTERCHANGE WINNER AND LOSER                                          0552.000
EXCH1    EQU       $                                                    0553.000
         LW        R0,LFTSON                                            0554.000
         STW       R0,RGTSON       RIGHTSON:=LEFTSON;                   0555.000
         LW        R0,XTMP1                                             0556.000
         STW       R0,LFTSON       LEFTSON:=I; (I=RIGHTSON)             0557.000
SIT001   EQU       $                                                    0558.000
* FATHER:=I DIV 2 + P DIV 2;                                            0559.000
         LW        R1,XTMP1                                             0560.000
         SRA       R1,3                                                 0561.000
         SLL       R1,2                                                 0562.000
         ADMW      R1,XTMP3                                             0563.000
         STW       R1,FATHER                                            0564.000
* SET LOSER                                                             0565.000
         ADMW      R1,LOSER                                             0566.000
         LW        R0,RGTSON                                            0567.000
         STW       R0,0W,X1                                             0568.000
* REMEMBER WINNER -- TEMPORARILY                                        0569.000
         LW        R1,FATHER                                            0570.000
         ADMW      R1,RUN                                               0571.000
         LW        R0,LFTSON                                            0572.000
         ARMW      R0,0W,X1                                             0573.000
* REDUCE LOOP INDEX BY 2                                                0574.000
         LW        R0,XTMP1                                             0575.000
         SUMW      R0,XTMP2                                             0576.000
         STW       R0,XTMP1                                             0577.000
* TERMINATE INITIAL TREE LOOP                                           0578.000
         LW        R6,XLP1                                              0579.000
         BIB       R6,TREELP                                            0580.000
* AT THIS POINT THE WINNERS AND LOSERS OF THE                           0581.000
* ORIGINAL PAIRS ARE KNOWN                                              0582.000
* BEGIN LOOP TO COMPLETELY CLIMB TREE                                   0583.000
         LW        R7,PCNT                                              0584.000
         SUI       R7,2                                                 0585.000
         SRA       R7,1                                                 0586.000
* I:=P-1;                                                               0587.000
         LW        R0,PCNT                                              0588.000
         SLL       R0,2                                                 0589.000
         SUMW      R0,ONEX                                              0590.000
         STW       R0,XTMP1                                             0591.000
         TRN       R7,R6                                                0592.000
CLYMLP   EQU       $                                                    0593.000
         STW       R6,XLP1                                              0594.000
* RIGHTSON:=WINNER(I);                                                  0595.000
         LW        R1,XTMP1                                             0596.000
         ADMW      R1,RUN                                               0597.000
         LW        R0,0W,X1                                             0598.000
         STW       R0,RGTSON                                            0599.000
* RUN(I):=1;                                                            0600.000
         LI        R7,1                                                 0601.000
         STW       R7,0W,X1                                             0602.000
* IF RIGHTSON LGT MAXTREESIZE THEN                                      0603.000
         LI        R4,MAXTSZ                                            0604.000
         SLL       R4,2                                                 0605.000
         ABR       R0,0            LOGICAL COMPARE                      0606.000
         ABR       R4,0            LOGICAL COMPARE                      0607.000
         CAR       R4,R0                                                0608.000
         BCT       LE,SIT200                                            0609.000
* BEGIN                                                                 0610.000
* RUN(I):=MAXSTRING;                                                    0611.000
         LI        R0,MAXSTG                                            0612.000
         STW       R0,0W,X1                                             0613.000
* RIGHTSON:=RIGHTSON+(MAXTREESIZE+1);                                   0614.000
         LI        R0,MAXTSZ+1                                          0615.000
         SLL       R0,2                                                 0616.000
         ARMW      R0,RGTSON                                            0617.000
* END;                                                                  0618.000
SIT200   EQU       $                                                    0619.000
* LEFTSON:=WINNER(I-1);                                                 0620.000
         SUMW      R1,ONEX                                              0621.000
         LW        R0,0W,X1                                             0622.000
         STW       R0,LFTSON                                            0623.000
* RUN(I-1):=1;                                                          0624.000
         LI        R7,1                                                 0625.000
         STW       R7,0W,X1                                             0626.000
* IF LEFTSON LGT MAXTREESIZE THEN                                       0627.000
         LI        R4,MAXTSZ                                            0628.000
         SLL       R4,2                                                 0629.000
         ABR       R0,0            LOGICAL COMPARE                      0630.000
         ABR       R4,0            LOGICAL COMPARE                      0631.000
         CAR       R4,R0                                                0632.000
         BCT       LE,SIT201                                            0633.000
* BEGIN                                                                 0634.000
* RUN(I-1):=MAXSTRING;                                                  0635.000
         LI        R0,MAXSTG                                            0636.000
         STW       R0,0W,X1                                             0637.000
* LEFTSON:=LEFTSON+(MAXTREESIZE+1);                                     0638.000
         LI        R0,MAXTSZ+1                                          0639.000
         SLL       R0,2                                                 0640.000
         ARMW      R0,LFTSON                                            0641.000
* END;                                                                  0642.000
SIT201   EQU       $                                                    0643.000
* IF RUN(LEFTSON) LGT MAXTREESIZE OR                                    0644.000
* (RUN(RIGHTSON) LLE MAXTREESIZE AND                                    0645.000
* KEY(RIGHTSON)<KEY(LEFTSON)) THEN                                      0646.000
         LW        R3,LFTSON                                            0647.000
         ADMW      R3,RUN                                               0648.000
         LW        R0,0W,X3                                             0649.000
         LI        R4,MAXTSZ                                            0650.000
         ABR       R0,0            LOGICAL COMPARE                      0651.000
         ABR       R4,0            LOGICAL COMPARE                      0652.000
         CAR       R4,R0                                                0653.000
         BCT       GT,EXCH2                                             0654.000
         LW        R1,RGTSON                                            0655.000
         ADMW      R1,RUN                                               0656.000
         LW        R0,0W,X1                                             0657.000
         LI        R4,MAXTSZ                                            0658.000
         ABR       R0,0            LOGICAL COMPARE                      0659.000
         ABR       R4,0            LOGICAL COMPARE                      0660.000
         CAR       R4,R0                                                0661.000
         BCT       GT,SIT002                                            0662.000
         LW        R3,RGTSON                                            0663.000
         ADMW      R3,RECPTS                                            0664.000
         LW        R2,0W,X3                                             0665.000
         LW        R1,LFTSON                                            0666.000
         ADMW      R1,RECPTS                                            0667.000
         LW        R3,0W,X1                                             0668.000
         LW        R4,KEYSZ                                             0669.000
         BL        C:CMPREC                                             0670.000
         CI        R4,LTV                                               0671.000
         BNE       SIT002                                               0672.000
* EXCHANGE WINNER AND LOSER                                             0673.000
EXCH2    EQU       $                                                    0674.000
* BEGIN EXCHANGING WINNER & LOSER                                       0675.000
* TMP3:=RIGHTSON;                                                       0676.000
         LW        R1,RGTSON                                            0677.000
         LW        R2,LFTSON                                            0678.000
* RIGHTSON:=LEFTSON                                                     0679.000
         STW       R2,RGTSON                                            0680.000
* LEFTSON:=TMP3;                                                        0681.000
         STW       R1,LFTSON                                            0682.000
SIT002   EQU       $                                                    0683.000
* SET LOSER                                                             0684.000
* FATHER:=I DIV 2;                                                      0685.000
         LW        R1,XTMP1                                             0686.000
         SRA       R1,3                                                 0687.000
         SLL       R1,2                                                 0688.000
         STW       R1,FATHER                                            0689.000
         ADMW      R1,LOSER                                             0690.000
         LW        R0,RGTSON                                            0691.000
         STW       R0,0W,X1                                             0692.000
* REMEMBER WINNER -- TEMPORARILY                                        0693.000
         LW        R1,FATHER                                            0694.000
         ADMW      R1,RUN                                               0695.000
         LW        R0,LFTSON                                            0696.000
         ARMW      R0,0W,X1                                             0697.000
* REDUCE LOOP INDEX BY 2                                                0698.000
         LW        R0,XTMP1                                             0699.000
         SUMW      R0,XTMP2                                             0700.000
         STW       R0,XTMP1                                             0701.000
* TERMINATE THE CLIMBING LOOP                                           0702.000
         LW        R6,XLP1                                              0703.000
         BIB       R6,CLYMLP                                            0704.000
* LOSER(0):=WINNER(1);                                                  0705.000
         LW        R3,ONEX                                              0706.000
         ADMW      R3,RUN                                               0707.000
         LW        R0,0W,X3                                             0708.000
         STW       R0,*LOSER                                            0709.000
* IF WINNER(0) LGT MAXTREESIZE THEN                                     0710.000
         LW        R1,RUN                                               0711.000
         LW        R0,0W,X1                                             0712.000
         LI        R4,MAXTSZ                                            0713.000
         SLL       R4,2                                                 0714.000
         ABR       R0,0            LOGICAL COMPARE                      0715.000
         ABR       R4,0            LOGICAL COMPARE                      0716.000
         CAR       R4,R0                                                0717.000
         BCT       LE,SIT202                                            0718.000
* RUN(0):=MAXSTRING;                                                    0719.000
         LI        R0,MAXSTG                                            0720.000
         STW       R0,*RUN                                              0721.000
* ELSE                                                                  0722.000
         BU        SIT203                                               0723.000
SIT202   EQU       $                                                    0724.000
* RUN(0):=1;                                                            0725.000
         LI        R0,1                                                 0726.000
         STW       R0,*RUN                                              0727.000
SIT203   EQU       $                                                    0728.000
* IF WINNER(1) LGT MAXTREESIZE THEN                                     0729.000
         LW        R0,0W,X3                                             0730.000
         LI        R4,MAXTSZ                                            0731.000
         SLL       R4,2                                                 0732.000
         ABR       R0,0            LOGICAL COMPARE                      0733.000
         ABR       R4,0            LOGICAL COMPARE                      0734.000
         CAR       R4,R0                                                0735.000
         BCT       LE,SIT204                                            0736.000
* BEGIN                                                                 0737.000
* LOSER(0):=LOSER(0)+(MAXTREESIZE+1);                                   0738.000
         LI        R0,MAXTSZ+1                                          0739.000
         SLL       R0,2                                                 0740.000
         ARMW      R0,*LOSER                                            0741.000
* RUN(1):=MAXSTRING;                                                    0742.000
         LI        R0,MAXSTG                                            0743.000
         LW        R1,RUN                                               0744.000
         STW       R0,1W,X1                                             0745.000
* END                                                                   0746.000
* ELSE                                                                  0747.000
         BU        SIT205                                               0748.000
SIT204   EQU       $                                                    0749.000
* RUN(1):=1;                                                            0750.000
         LI        R0,1                                                 0751.000
         LW        R1,RUN                                               0752.000
         STW       R0,1W,X1                                             0753.000
SIT205   EQU       $                                                    0754.000
* INITIALIZE BUFFER INFO                                                0755.000
         LW        R1,BUFADR                                            0756.000
         ZMW       BUFBLK*4,X1                                          0757.000
         LW        R0,RECSPB                                            0758.000
         STW       R0,BUFRCT*4,X1                                       0759.000
* INITIALIZE FIRST STRINGINFO SLOT                                      0760.000
         LI        R1,AREAOF*4                                          0761.000
         ADMW      R1,SONFO                                             0762.000
         SUI       R1,4*SIESZ                                           0763.000
         ZMW       SISZF*4,X1                                           0764.000
* OPEN THE WORKFILE *11126000* OPEN THE WORKFILE *11126000* OPEN THE WOR0765.000
         LW        R1,SCB                                               0766.000
         LW        R2,FIB                                               0767.000
         LW        R4,SCBWID*4,X1                                       0768.000
         LW        R3,BUFBAS                                            0769.000
         BL        C:OPENWF                                             0770.000
XIT      EQU       $                                                    0771.000
* UPDATE TRANSFER VECTOR                                                0772.000
         LW        R0,BUFBAS                                            0773.000
         LW        R3,TRVCTR                                            0774.000
         STW       R0,TVBBAS*4,X3                                       0775.000
         LW        R0,FIB                                               0776.000
         STW       R0,TVFIB*4,X3                                        0777.000
         LW        R0,RUN                                               0778.000
         STW       R0,TVRUN*4,X3                                        0779.000
         LW        R0,LOSER                                             0780.000
         STW       R0,TVLOSR*4,X3                                       0781.000
         LW        R0,RECPTS                                            0782.000
         STW       R0,TVRPTS*4,X3                                       0783.000
         LW        R0,LSTKEY                                            0784.000
         STW       R0,TVLKEY*4,X3                                       0785.000
         LW        R0,RECSPB                                            0786.000
         STW       R0,TVRPB*4,X3                                        0787.000
         LW        R0,BUFSZS                                            0788.000
         STW       R0,TVBSZS*4,X3                                       0789.000
         LW        R0,MERGLV                                            0790.000
         STW       R0,TVMRGL*4,X3                                       0791.000
         LW        R0,PCNT                                              0792.000
         STW       R0,TVPCNT*4,X3                                       0793.000
         LW        R0,KEYSZ                                             0794.000
         STW       R0,TVKSZ*4,X3                                        0795.000
         LW        R0,DATSZ                                             0796.000
         STW       R0,TVDSZ*4,X3                                        0797.000
         LW        R0,WFSIZE                                            0798.000
         STW       R0,TVWFSZ*4,X3                                       0799.000
         LW        R0,TRKSEC                                            0800.000
         STW       R0,TVTRKS*4,X3                                       0801.000
         LW        R0,SECTWD                                            0802.000
         STW       R0,TVSECW*4,X3                                       0803.000
         LW        R0,SISZ                                              0804.000
         STW       R0,TVSISZ*4,X3                                       0805.000
         LW        R0,SONFO                                             0806.000
         STW       R0,TVSONF*4,X3                                       0807.000
         LW        R0,XLV201                                            0808.000
         TRSW      R0                                                   0809.000
         END                                                            0810.000
