* INTERNAL SORT PHASE                                   HEADER  C:SRT   0001.000
*                                                                       0002.000
*                  INTERNAL SORT PHASE                                  0003.000
*                                                                       0004.000
         M.PGM     C:SRT,MPX-32,3.6.1,00                                0005.000
         DEF       C:SRT                                                0006.000
         EXT       C:MOVREC                                             0007.000
         EXT       C:CMPREC                                             0008.000
         EXT       C:WRYTWF                                             0009.000
         EXT       C:EXCHNG                                             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
         M.REQS                                                         0018.000
SRTCOM2  COMMON    SRTC2(50)                                            0019.000
         ORG       SRTC2                                                0020.000
TRKSEC   DATAW     X'0'                                                 0021.000
KEYSZ    DATAW     X'0'                                                 0022.000
DATSZ    DATAW     X'0'                                                 0023.000
RECSZ    DATAW     X'0'                                                 0024.000
PCNT     DATAW     X'0'                                                 0025.000
NBLK     DATAW     X'0'                                                 0026.000
NRECS    DATAW     X'0'                                                 0027.000
LSTSEC   DATAW     X'0'                                                 0028.000
BUFSZS   DATAW     X'0'                                                 0029.000
RECSPB   DATAW     X'0'                                                 0030.000
RECSTB   DATAW     X'0'                                                 0031.000
RECYCL   DATAW     X'0'                                                 0032.000
CYCCNT   DATAW     X'0'                                                 0033.000
STGMAX   DATAW     X'0'                                                 0034.000
EOI      DATAW     X'0'                                                 0035.000
SISZ     DATAW     X'0'                                                 0036.000
MAXSSZ   DATAW     X'7FFFFFFF'                                          0037.000
TRVCTR   REZ       1W                                                   0038.000
SCB      REZ       1W                                                   0039.000
LOSER    REZ       1W                                                   0040.000
RUN      REZ       1W                                                   0041.000
RECPTS   REZ       1W                                                   0042.000
SONFO    REZ       1W                                                   0043.000
FIB      REZ       1W                                                   0044.000
BUFADR   REZ       1W                                                   0045.000
BUFBAS   REZ       1W                                                   0046.000
TMPB     REZ       1W                                                   0047.000
TMPA     REZ       1W                                                   0048.000
XTMP     REZ       1W                                                   0049.000
SOINDX   REZ       1W                                                   0050.000
FATHER   REZ       1W                                                   0051.000
LOSE     REZ       1W                                                   0052.000
WIN      REZ       1W                                                   0053.000
PDIV2    REZ       1W                                                   0054.000
RECINX   REZ       1W                                                   0055.000
KEYINX   REZ       1W                                                   0056.000
ONEX     REZ       1W                                                   0057.000
*ZEROX   REZ       1W                                                   0058.000
BUFPTR   REZ       1W                                                   0059.000
STRBUF   REZ       1W                                                   0060.000
LSTKEY   REZ       1W                                                   0061.000
XLV205   REZ       1W                                                   0062.000
         REL                                                            0063.000
* CREATES INITIAL STRINGS OF SORTED RECORDS AND                         0064.000
* PLACES THEM IN WORKFILE                                               0065.000
* THE REPLACEMENT-SELECTION TECHNIQUE IS USED AS                        0066.000
* FOLLOWS:                                                              0067.000
* A: OUTPUT TOP OF TREE                                                 0068.000
* B: GET NEW RECORD                                                     0069.000
* C: IF END-OF-FILE THEN FLUSH TREE AND EXIT 20008000* C: IF END-OF-FILE0070.000
* D: INSERT IN TREE AND FILTER UP AS FAR AS                             0071.000
* POSSIBLE                                                              0072.000
* E: CONTINUE UP TREE UNTIL NEXT OUTPUT                                 0073.000
* RECORD IS AT TOP                                                      0074.000
* F: IF NEXT RECORD CAN NOT BE PLACED IN                                0075.000
* CURRENT STRING THEN TERMINATE CURRENT                                 0076.000
* STRING AND BEGIN NEW ONE.                                             0077.000
* G: GO TO A                                                            0078.000
* TREE INITIALLY SET UP BY SRTINT                                       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
INFWTN   EQU       1030                                                 0181.000
TRETOP   EQU       X'0'                                                 0182.000
C:SRT    EQU       $                                                    0183.000
         STW       R0,XLV205                                            0184.000
         STW       R2,SCB                                               0185.000
         STW       R3,TRVCTR                                            0186.000
* INITIALIZE FROM TRANSFER VECTOR                                       0187.000
         LW        R0,TVFIB*4,X3                                        0188.000
         STW       R0,FIB                                               0189.000
         LW        R0,TVBBAS*4,X3                                       0190.000
         STW       R0,BUFBAS                                            0191.000
         LW        R0,TVWFSZ*4,X3                                       0192.000
         STW       R0,LSTSEC                                            0193.000
         LW        R0,TVRPTS*4,X3                                       0194.000
         STW       R0,RECPTS                                            0195.000
         LW        R0,TVRUN*4,X3                                        0196.000
         STW       R0,RUN                                               0197.000
         LW        R0,TVLOSR*4,X3                                       0198.000
         STW       R0,LOSER                                             0199.000
         LW        R0,TVLKEY*4,X3                                       0200.000
         STW       R0,LSTKEY                                            0201.000
         LW        R0,TVSONF*4,X3                                       0202.000
         STW       R0,SONFO                                             0203.000
         LW        R0,TVSISZ*4,X3                                       0204.000
         STW       R0,SISZ                                              0205.000
         LW        R0,TVTRKS*4,X3                                       0206.000
         STW       R0,TRKSEC                                            0207.000
         LW        R0,TVBSZS*4,X3                                       0208.000
         STW       R0,BUFSZS                                            0209.000
         LW        R0,TVKSZ*4,X3                                        0210.000
         STW       R0,KEYSZ                                             0211.000
         LW        R0,TVDSZ*4,X3                                        0212.000
         STW       R0,DATSZ                                             0213.000
         LW        R0,TVRPB*4,X3                                        0214.000
         STW       R0,RECSPB                                            0215.000
         LW        R0,TVPCNT*4,X3                                       0216.000
         STW       R0,PCNT                                              0217.000
* PDIV2:=P DIV 2;                                                       0218.000
         SRA       R0,1            AVOID REDUNDANT CONVERSIONS          0219.000
         SLL       R0,2                                                 0220.000
         STW       R0,PDIV2                                             0221.000
* INITIALIZE ZEROX & ONEX                                               0222.000
*        ZMW       ZEROX                                                0223.000
         LI        R0,1*4                                               0224.000
         STW       R0,ONEX                                              0225.000
* RECSZ:=KEYSZ+DATSZ;                                                   0226.000
         LW        R0,KEYSZ                                             0227.000
         ADMW      R0,DATSZ                                             0228.000
         STW       R0,RECSZ                                             0229.000
* AVOID REDUNDANT CONVERSIONS                                           0230.000
         SLL       R0,2                                                 0231.000
         STW       R0,RECINX                                            0232.000
         LW        R0,KEYSZ                                             0233.000
         SLL       R0,2                                                 0234.000
         STW       R0,KEYINX                                            0235.000
* STARTBUFFER:=BUFFER.DATA;                                             0236.000
         LI        R0,AREAOF*4                                          0237.000
         ADMW      R0,BUFBAS                                            0238.000
         STW       R0,BUFADR                                            0239.000
         ADI       R0,BLNKSZ*4                                          0240.000
         STW       R0,STRBUF                                            0241.000
* N:=0;                                                                 0242.000
         ZMW       NRECS                                                0243.000
* CURRENTSTRING:=0;                                                     0244.000
         ZMW       STGMAX                                               0245.000
* STRINGOUTINDEX:=AREAOFFSET-STRINGINFOENTRYSIZE;                       0246.000
         LI        R0,AREAOF*4                                          0247.000
         SUI       R0,4*SIESZ                                           0248.000
         STW       R0,SOINDX                                            0249.000
* WIN:=LOSER(0);                                                        0250.000
         LW        R1,LOSER                                             0251.000
         LW        R0,0W,X1                                             0252.000
         STW       R0,WIN                                               0253.000
* BUFPTR:=STARTBUFFER;                                                  0254.000
         LW        R0,STRBUF                                            0255.000
         STW       R0,BUFPTR                                            0256.000
* RECSTHISBLK:=0;                                                       0257.000
         ZMW       RECSTB                                               0258.000
* RECYCLE:=FALSE;                                                       0259.000
         ZMW       RECYCL                                               0260.000
* EOI:=SCB(SCBSTS) & EOS;                                               0261.000
         LW        R0,SCBSTS*4,X2                                       0262.000
         ANMW      R0,=EOS                                              0263.000
         STW       R0,EOI                                               0264.000
WINOUT   EQU       $                                                    0265.000
* OUTPUT TREE TOP                                                       0266.000
* IF RECSTHISBLK> OR =RECSPERBLK THEN                                   0267.000
         LW        R0,RECSTB                                            0268.000
         CAMW      R0,RECSPB                                            0269.000
         BCT       LT,SRT003                                            0270.000
* BEGIN FLUSH OUT BUFFER                                                0271.000
* NBLK:=BUFFER.BLKLINK                                                  0272.000
         LW        R1,BUFADR       R1 -> BUFADR                         0273.000
         LW        R0,BUFBLK*4,X1                                       0274.000
         STW       R0,NBLK                                              0275.000
* BUFFER.BLKLINK:=BUFFER.BLKLINK+BS;                                    0276.000
         LW        R1,BUFSZS                                            0277.000
         ADMW      R1,NBLK                                              0278.000
         LW        R3,BUFADR                                            0279.000
         STW       R1,BUFBLK*4,X3                                       0280.000
* IF BUFFER.BLKLINK>LASTSECTOR THEN                                     0281.000
         SUMW      R1,LSTSEC                                            0282.000
*        CI        R1,X'0'                                              0283.000
         BCF       GT,SRT012                                            0284.000
* BEGIN 2055110                                                         0285.000
* SCB(SCBSTS):=ERR(INSUFFICIENT WORKFILE SPACE);                        0286.000
         LI        R0,WFSERR                                            0287.000
         LW        R2,SCB                                               0288.000
         STW       R0,SCBSTS*4,X2                                       0289.000
* RETURN;                                                               0290.000
         LW        R5,SZ02                                              0291.000
         BL        SORTERR                                              0292.000
* END;                                                                  0293.000
SZ02     DATAW     G'SZ02'                                              0294.000
*                                                                       0295.000
SRT012   EQU       $                                                    0296.000
* WRITE(WORKFILE@NBLK,BUFFER);                                          0297.000
         LW        R2,FIB                                               0298.000
         LW        R4,NBLK                                              0299.000
         LW        R3,BUFBAS                                            0300.000
         BL        C:WRYTWF                                             0301.000
* STRINGOUT(STRINGOUTINDEX).SIZE:=                                      0302.000
* STRINGOUT(STRINGOUTINDEX).SIZE+RECSTHISBLK;                           0303.000
         LW        R1,SOINDX                                            0304.000
         ADMW      R1,SONFO                                             0305.000
         LW        R0,RECSTB                                            0306.000
         ARMW      R0,SISZF*4,X1                                        0307.000
* RECSTHISBLK:=0;                                                       0308.000
         ZMW       RECSTB                                               0309.000
* BUFPTR:=STARTBUFFER;                                                  0310.000
         LW        R0,STRBUF                                            0311.000
         STW       R0,BUFPTR                                            0312.000
* END;                                                                  0313.000
SRT003   EQU       $               CONTINUE                             0314.000
* IF CURRENTSTRING<RUN(WIN) THEN                                        0315.000
         LW        R1,WIN                                               0316.000
         ADMW      R1,RUN                                               0317.000
         LW        R0,STGMAX                                            0318.000
         CAMW      R0,0W,X1                                             0319.000
         BCT       GE,SRT001                                            0320.000
* BEGIN                                                                 0321.000
* IF RUN(WIN)=MAXSTRING THEN                                            0322.000
         LW        R0,0W,X1                                             0323.000
         CI        R0,MAXSTG                                            0324.000
         BNE       SRT002                                               0325.000
* BEGIN                                                                 0326.000
* IF RECSTHISBLK>0 THEN                                                 0327.000
         LW        R0,RECSTB                                            0328.000
*        CI        R0,X'0'                                              0329.000
         BCF       GT,SRT008                                            0330.000
* BEGIN                                                                 0331.000
* NBLK:=BUFFER.BLKLINK;                                                 0332.000
         LW        R1,BUFADR                                            0333.000
         LW        R0,BUFBLK*4,X1                                       0334.000
         STW       R0,NBLK                                              0335.000
* IF NBLK+BS GEQ LASTSECTOR THEN                                        0336.000
         ADMW      R0,BUFSZS                                            0337.000
         SUMW      R0,LSTSEC                                            0338.000
*        CI        R0,X'0'                                              0339.000
         BCT       LT,SRT013                                            0340.000
* BEGIN                                                                 0341.000
* SCB(SCBSTS):=ERR(INSUFFICIENT WORKFILE SPACE);                        0342.000
         LI        R0,WFSERR                                            0343.000
         LW        R2,SCB                                               0344.000
         STW       R0,SCBSTS*4,X2                                       0345.000
* RETURN;                                                               0346.000
         LW        R5,SZ02                                              0347.000
         BL        SORTERR                                              0348.000
* END;                                                                  0349.000
SRT013   EQU       $                                                    0350.000
* BUFFER.RECCNT:=RECSTHISBLK;                                           0351.000
         LW        R0,RECSTB                                            0352.000
         LW        R1,BUFADR                                            0353.000
         STW       R0,BUFRCT*4,X1                                       0354.000
* WRITE(WORKFILE@NBLK,BUFFER);                                          0355.000
         LW        R2,FIB                                               0356.000
         LW        R4,NBLK                                              0357.000
         LW        R3,BUFBAS                                            0358.000
         BL        C:WRYTWF                                             0359.000
* STRINGOUT(STRINGOUTINDEX).SIZE:=                                      0360.000
* STRINGOUT(STRINGOUTINDEX).SIZE+RECSTHISBLK;                           0361.000
         LW        R1,SOINDX                                            0362.000
         ADMW      R1,SONFO                                             0363.000
         LW        R0,SISZF*4,X1                                        0364.000
         ADMW      R0,RECSTB                                            0365.000
         STW       R0,SISZF*4,X1                                        0366.000
* END;                                                                  0367.000
SRT008   EQU       $                                                    0368.000
XIT      EQU       $                                                    0369.000
* N:=N+STRINGOUT(STRINGOUTINDEX).SIZE;                                  0370.000
         LW        R1,SOINDX                                            0371.000
         ADMW      R1,SONFO                                             0372.000
         LW        R5,SISZF*4,X1                                        0373.000
         ARMW      R5,NRECS                                             0374.000
* IF (SCB(SCBOPT) & DIAGNO)>0 THEN                                      0375.000
         LW        R2,SCB                                               0376.000
         LW        R0,SCBOPT*4,X2                                       0377.000
         LI        R4,DIAGNO                                            0378.000
         ANR       R0,R4                                                0379.000
         BZ        SRT014                                               0380.000
* BEGIN TELLING 'EM THE TRACK USAGE                                     0381.000
* T:=(NBLK+BS+SECTORSPERTRACK-1)/SECTORSPERTRACK                        0382.000
* +((WORKFILESIZE-LASTSECTOR)+SECTORSPERTRACK-1) 21014800* +((WORKFILESI0383.000
* /SECTORSPERTRACK;                                                     0384.000
         LW        R5,BUFSZS                                            0385.000
         ADMW      R5,TRKSEC                                            0386.000
         SUI       R5,1            R5 = TMP1                            0387.000
         ARMW      R5,NBLK                                              0388.000
         LW        R7,NBLK                                              0389.000
         ES        R6                                                   0390.000
         DVMW      R6,TRKSEC       THIS SHOULD BE A DOUBLE LENGTH DIVIDE0391.000
         LW        R5,TRKSEC                                            0392.000
         SUI       R5,1                                                 0393.000
         LW        R3,TRVCTR                                            0394.000
         ADMW      R5,TVWFSZ*4,X3                                       0395.000
         SUMW      R5,LSTSEC                                            0396.000
         ES        R4                                                   0397.000
         DVMW      R4,TRKSEC       THIS SHOULD BE A DOUBLE LENGTH DIVIDE0398.000
         ADR       R7,R5           R7 = TMP3                            0399.000
* CALL SCB(SCBINF)(INFO(TRACKUSAGE),T);                                 0400.000
         LW        R2,SCB                                               0401.000
         LW        R0,SCBINF*4,X2                                       0402.000
         STW       R0,TMPA                                              0403.000
         LI        R4,INFWTN                                            0404.000
*                                  R5 = TMP3                            0405.000
         BL        *TMPA                                                0406.000
* END;                                                                  0407.000
SRT014   EQU       $                                                    0408.000
* SMEAR REST OF SONFO WITH MAXIMUM STRINGSIZE                           0409.000
* FOR STRINGOUTINDEX:=STRINGOUTINDEX                                    0410.000
* +STRINGINFOENTRYSIZE                                                  0411.000
* STEP STRINGINFOENTRYSIZE UNTIL                                        0412.000
* AREAOFFSET+STRINGINFOSIZE                                             0413.000
* -STRINGINFOENTRYSIZE DO                                               0414.000
         LI        R0,AREAOF                                            0415.000
         ADMW      R0,SISZ                                              0416.000
         SLL       R0,2                                                 0417.000
         STW       R0,XTMP                                              0418.000
SRT015   EQU       $                                                    0419.000
         LI        R1,SIESZ*4                                           0420.000
         ARMW      R1,SOINDX                                            0421.000
         LW        R1,SOINDX                                            0422.000
         CAMW      R1,XTMP                                              0423.000
         BCT       GE,SRT016                                            0424.000
* STRINGOUT(STRINGOUTINDEX):=MAXIMUMSTRINGSIZE;                         0425.000
         ADMW      R1,SONFO                                             0426.000
         LW        R0,MAXSSZ                                            0427.000
         STW       R0,SISZF*4,X1                                        0428.000
         BU        SRT015                                               0429.000
SRT016   EQU       $                                                    0430.000
* UPDATE TRANSFER VECTOR                                                0431.000
         LW        R3,TRVCTR                                            0432.000
         LW        R0,LSTSEC                                            0433.000
         STW       R0,TVLSEC*4,X3                                       0434.000
         LW        R0,NRECS                                             0435.000
         STW       R0,TVNREC*4,X3                                       0436.000
         LW        R0,STGMAX                                            0437.000
         STW       R0,TVSGMX*4,X3                                       0438.000
* RETURN;                                                               0439.000
         LW        R0,XLV205                                            0440.000
         TRSW      R0                                                   0441.000
* END;                                                                  0442.000
SRT002   EQU       $               CONTINUE                             0443.000
* IF RECSTHISBLK>0 THEN                                                 0444.000
         LW        R0,RECSTB                                            0445.000
*        CI        R0,X'0'                                              0446.000
         BCF       GT,SRT011                                            0447.000
* BEGIN                                                                 0448.000
* RECYCLE:=TRUE;                                                        0449.000
         LI        R0,TRUE                                              0450.000
         STW       R0,RECYCL                                            0451.000
* CYCLECOUNT:=RECSTHISBLK;                                              0452.000
         LW        R0,RECSTB                                            0453.000
         STW       R0,CYCCNT                                            0454.000
* BUFPTR:=STARTBUFFER;                                                  0455.000
         LW        R0,STRBUF                                            0456.000
         STW       R0,BUFPTR                                            0457.000
* RECSTHISBLK:=0;                                                       0458.000
         ZMW       RECSTB                                               0459.000
* END;                                                                  0460.000
SRT011   EQU       $                                                    0461.000
* N:=N+STRINGOUT(STRINGOUTINDEX).SIZE;                                  0462.000
         LW        R1,SOINDX                                            0463.000
         ADMW      R1,SONFO                                             0464.000
         LW        R5,SISZF*4,X1                                        0465.000
         ARMW      R5,NRECS                                             0466.000
* STRINGOUTINDEX:=STRINGOUTINDEX+STRINGINFOENTRYSIZE;                   0467.000
         LI        R0,SIESZ*4                                           0468.000
         ARMW      R0,SOINDX                                            0469.000
* IF STRINGOUTINDEX GEQ STRINGINFOSIZE+AREAOFFSET THEN 21019200* IF STRI0470.000
         LI        R0,AREAOF                                            0471.000
         ADMW      R0,SISZ                                              0472.000
         SLL       R0,2                                                 0473.000
         CAMW      R0,SOINDX                                            0474.000
         BCT       GT,SRT007                                            0475.000
* BEGIN UPDATING STRING INFO                                            0476.000
* LASTSECTOR:=LASTSECTOR-1;                                             0477.000
         LW        R0,LSTSEC                                            0478.000
         SUI       R0,1                                                 0479.000
         STW       R0,LSTSEC                                            0480.000
* WRITE(WORKFILE@LASTSECTOR,STRINGOUT);                                 0481.000
         LW        R2,FIB                                               0482.000
         LW        R4,LSTSEC                                            0483.000
         LW        R3,SONFO                                             0484.000
         BL        C:WRYTWF                                             0485.000
* STRINGOUTINDEX:=AREAOFFSET;                                           0486.000
         LI        R0,AREAOF*4                                          0487.000
         STW       R0,SOINDX                                            0488.000
* END;                                                                  0489.000
SRT007   EQU       $                                                    0490.000
* CURRENTSTRING:=CURRENTSTRING+1;                                       0491.000
         LI        R0,1                                                 0492.000
         ARMW      R0,STGMAX                                            0493.000
* STRINGOUT(STRINGOUTINDEX).ADDR:=BUFFER.BLKLINK;                       0494.000
         LW        R3,SOINDX                                            0495.000
         ADMW      R3,SONFO                                             0496.000
         LW        R1,BUFADR                                            0497.000
         LW        R0,BUFBLK*4,X1                                       0498.000
         STW       R0,SIADRF*4,X3                                       0499.000
* STRINGOUT(STRINGOUTINDEX).SIZE:=0;                                    0500.000
         ZMW       SISZF*4,X3                                           0501.000
* END;                                                                  0502.000
SRT001   EQU       $               CONTINUE                             0503.000
* MOVEREC(KEY(WIN),LASTKEY,KEYSZ);                                      0504.000
         LW        R1,WIN                                               0505.000
         ADMW      R1,RECPTS                                            0506.000
         LW        R2,0W,X1                                             0507.000
         STW       R2,TMPB                                              0508.000
         LW        R3,LSTKEY                                            0509.000
         LW        R4,KEYSZ                                             0510.000
         BL        C:MOVREC                                             0511.000
* IF RECYCLE THEN                                                       0512.000
         LW        R0,RECYCL                                            0513.000
         CI        R0,TRUE                                              0514.000
         BNE       SRT009                                               0515.000
* BEGIN                                                                 0516.000
* EXCHANGE(BUFPTR,RECORD(WIN),RECSZ);                                   0517.000
         LW        R2,BUFPTR                                            0518.000
         LW        R3,TMPB                                              0519.000
         LW        R4,RECSZ                                             0520.000
         BL        C:EXCHNG                                             0521.000
* CYCLECOUNT:=CYCLECOUNT-1;                                             0522.000
         LI        R0,-1                                                0523.000
         ARMW      R0,CYCCNT                                            0524.000
* IF CYCLECOUNT=0 THEN                                                  0525.000
         BNZ       SRT010                                               0526.000
* RECYCLE:=FALSE;                                                       0527.000
         ZMW       RECYCL                                               0528.000
* END ELSE                                                              0529.000
         BU        SRT010                                               0530.000
SRT009   EQU       $                                                    0531.000
* BEGIN                                                                 0532.000
* MOVEREC(RECORD(WIN),BUFPTR,RECSZ);                                    0533.000
         LW        R2,TMPB                                              0534.000
         LW        R3,BUFPTR                                            0535.000
         LW        R4,RECSZ                                             0536.000
         BL        C:MOVREC                                             0537.000
* IF EOI THEN                                                           0538.000
         LW        R0,EOI                                               0539.000
*        CI        R0,FALSE                                             0540.000
         BCT       EQ,NEWREC                                            0541.000
* BEGIN                                                                 0542.000
EOFREC   EQU       $                                                    0543.000
* RUN(WIN):=MAXSTRING                                                   0544.000
         LW        R1,WIN                                               0545.000
         ADMW      R1,RUN                                               0546.000
         LI        R0,MAXSTG                                            0547.000
         STW       R0,0W,X1                                             0548.000
* GO TO SELECT                                                          0549.000
         BU        SELECT                                               0550.000
* END;                                                                  0551.000
NEWREC   EQU       $                                                    0552.000
* CALL SCB(SCBIN);                                                      0553.000
         LW        R2,SCB                                               0554.000
         LEA       R7,RLSRTN       SET C:RLSE EXIT                      0555.000
         STW       R7,SCBRTN*4,X2                                       0556.000
         SBM       0,SEGSORT       NOTIFY SEGMENTATION                  0557.000
         LW        R1,SCBISIT,X2   R1,R2 -> INPUT PROC SEGMENT ADDRS    0558.000
         LW        R2,SCBISIT+1W,X2                                     0559.000
         BL        CR.GOSG                                              0560.000
RLSRTN   EQU       $                                                    0561.000
         ZBM       0,SEGSORT       RESET SEGMENTATION FLAG              0562.000
* IF END-OF-FILE THEN                                                   0563.000
         LW        R2,SCB                                               0564.000
         LW        R0,SCBSTS*4,X2                                       0565.000
         LI        R4,EOS                                               0566.000
         ANR       R0,R4                                                0567.000
         BZ        SRT017                                               0568.000
* BEGIN                                                                 0569.000
* EOI:=TRUE                                                             0570.000
         LI        R0,TRUE                                              0571.000
         STW       R0,EOI                                               0572.000
* GO EOFREC;                                                            0573.000
         BU        EOFREC                                               0574.000
* END;                                                                  0575.000
SRT017   EQU       $                                                    0576.000
* SET UP WORKFILE RECORD AS FOLLOWS:                                    0577.000
* KEY FOR KEYSZ WORDS                                                   0578.000
* DATA FOR DATSZ WORDS                                                  0579.000
         LW        R1,WIN                                               0580.000
         ADMW      R1,RECPTS                                            0581.000
         LW        R0,0W,X1                                             0582.000
         STW       R0,TMPB                                              0583.000
         LW        R1,SCB                                               0584.000
         LW        R2,SCBKA*4,X1                                        0585.000
         LW        R3,TMPB                                              0586.000
         LW        R4,KEYSZ                                             0587.000
         BL        C:MOVREC                                             0588.000
         LW        R0,KEYINX                                            0589.000
         ARMW      R0,TMPB                                              0590.000
         LW        R1,SCB                                               0591.000
         LW        R2,SCBRA*4,X1                                        0592.000
         LW        R3,TMPB                                              0593.000
         LW        R4,DATSZ                                             0594.000
         BL        C:MOVREC                                             0595.000
* END;                                                                  0596.000
SRT010   EQU       $                                                    0597.000
* IF KEY(WIN)<LASTKEY THEN *21058000* IF KEY(WIN)<LASTKEY THEN *210580000598.000
         LW        R1,WIN                                               0599.000
         ADMW      R1,RECPTS                                            0600.000
         LW        R2,0W,X1                                             0601.000
         LW        R3,LSTKEY                                            0602.000
         LW        R4,KEYSZ                                             0603.000
         BL        C:CMPREC                                             0604.000
         CI        R4,LTV                                               0605.000
         BNE       SRT006                                               0606.000
* RUN(WIN):=CURRENTSTRING+1                                             0607.000
         LW        R1,WIN                                               0608.000
         ADMW      R1,RUN                                               0609.000
         LI        R0,1                                                 0610.000
         ADMW      R0,STGMAX                                            0611.000
         STW       R0,0W,X1                                             0612.000
         BU        SRT000                                               0613.000
SRT006   EQU       $                                                    0614.000
* ELSE RUN(WIN):=CURRENTSTRING;                                         0615.000
         LW        R1,WIN                                               0616.000
         ADMW      R1,RUN                                               0617.000
         LW        R0,STGMAX                                            0618.000
         STW       R0,0W,X1                                             0619.000
SRT000   EQU       $               CONTINUE                             0620.000
SELECT   EQU       $                                                    0621.000
* RECSTHISBLK:=RECSTHISBLK+1;                                           0622.000
         LI        R0,1                                                 0623.000
         ARMW      R0,RECSTB                                            0624.000
* BUFPTR:=BUFPTR+RECSZ;                                                 0625.000
         LW        R0,RECINX                                            0626.000
         ARMW      R0,BUFPTR                                            0627.000
* FATHER:=P DIV 2 + WIN DIV 2;                                          0628.000
         LW        R0,WIN                                               0629.000
         SRA       R0,3                                                 0630.000
         SLL       R0,2                                                 0631.000
         ADMW      R0,PDIV2                                             0632.000
         STW       R0,FATHER                                            0633.000
STARTK   EQU       $                                                    0634.000
* TRACK THRU TREE PULLING NEXT WINNER                                   0635.000
* LOSE:=LOSER(FATHER);                                                  0636.000
         LW        R1,FATHER                                            0637.000
         ADMW      R1,LOSER                                             0638.000
         STW       R1,TMPA                                              0639.000
         LW        R0,0W,X1                                             0640.000
         STW       R0,LOSE                                              0641.000
* IF RUN(WIN)>RUN(LOSE)OR(RUN(WIN)=RUN(LOSE) AND                        0642.000
* KEY(WIN)>KEY(LOSE))THEN 21075000* KEY(WIN)>KEY(LOSE))THEN 21075000* KE0643.000
         LW        R1,WIN                                               0644.000
         ADMW      R1,RUN                                               0645.000
         LW        R7,0W,X1        R7 = TMP1                            0646.000
         LW        R1,LOSE                                              0647.000
         ADMW      R1,RUN                                               0648.000
         LW        R5,0W,X1        R5 = TMP2                            0649.000
         CAR       R5,R7                                                0650.000
         BCT       LT,SRT005                                            0651.000
         BNE       SRT004                                               0652.000
         LW        R1,WIN                                               0653.000
         ADMW      R1,RECPTS                                            0654.000
         LW        R2,0W,X1                                             0655.000
         LW        R1,LOSE                                              0656.000
         ADMW      R1,RECPTS                                            0657.000
         LW        R3,0W,X1                                             0658.000
         LW        R4,KEYSZ                                             0659.000
         BL        C:CMPREC                                             0660.000
         CI        R4,GTV                                               0661.000
         BNE       SRT005                                               0662.000
SRT004   EQU       $               CONTINUE                             0663.000
* BEGIN                                                                 0664.000
* LOSER(FATHER):=WIN;                                                   0665.000
         LW        R1,FATHER                                            0666.000
         ADMW      R1,LOSER                                             0667.000
         LW        R0,WIN                                               0668.000
         STW       R0,0W,X1                                             0669.000
* WIN:=LOSE                                                             0670.000
         LW        R0,LOSE                                              0671.000
         STW       R0,WIN                                               0672.000
* END;                                                                  0673.000
SRT005   EQU       $               CONTINUE                             0674.000
* FATHER:=FATHER DIV 2;                                                 0675.000
         LW        R0,FATHER                                            0676.000
         SRA       R0,3                                                 0677.000
         SLL       R0,2                                                 0678.000
         STW       R0,FATHER                                            0679.000
* UNTIL FATHER=TREETOP;                                                 0680.000
*        CI        R0,4*TRETOP                                          0681.000
         BCT       GT,STARTK                                            0682.000
         BU        WINOUT                                               0683.000
         END                                                            0684.000
