         << LINES .001/.009 ARE RESERVED FOR SYSTEMS INTEGRATION >>     00000001
       ERR69 = 69,  <<UNABLE TO OBTAIN CSTX ENTRIES>>          <<E9153>>00392000
$page                                                          <<U1713>>00897010
<<----------------------------------------------------------->><<U1713>>00897020
<<                                                           >><<U1713>>00897030
<<   MPE-TO-MICROCODE PERFORMANCE ENHANCEMENT DEFINITIONS    >><<U1713>>00897040
<<                                                           >><<U1713>>00897050
<<----------------------------------------------------------->><<U1713>>00897060
                                                               <<U1713>>00897070
equate                                                         <<U1713>>00897080
                                                               <<U1713>>00897090
           CST'ENTRY'SIZE    = 4, << size   of the CST entry >><<U1713>>00897100
           CST'ENTRY'BANK    = 2, << word 2 of the CST entry >><<U1713>>00897110
           CST'ENTRY'OFFSET  = 3, << word 3 of the CST entry >><<U1713>>00897120
                                                               <<U1713>>00897130
           CSTB'INDEX        = 1, << CST Base index in the   >><<U1713>>00897140
                                  << System Global area      >><<U1713>>00897150
                                                               <<U1713>>00897160
           SYSGLOB'EXT'INDEX = %377;                           <<U1713>>00897170
                                  << Sys Glob extension index>><<U1713>>00897180
                                  << in the Sys Glob area    >><<U1713>>00897190
                                                               <<U1713>>00897200
                                                               <<U1713>>00897210
integer pointer                                                <<U1713>>00897220
                                                               <<U1713>>00897230
           CSTBP      = CSTB'INDEX;                            <<U1713>>00897240
                        << CST Base ptr in the System Table  >><<U1713>>00897250
                                                               <<U1713>>00897260
                                                               <<U1713>>00897270
logical pointer                                                <<U1713>>00897280
                                                               <<U1713>>00897290
           SYSGLOBEXT = SYSGLOB'EXT'INDEX;                     <<U1713>>00897300
                        << Sys Glob Ext ptr in the Sys Table >><<U1713>>00897310
                                                               <<U1713>>00897320
                                                               <<U1713>>00897330
define                                                         <<U1713>>00897340
                                                               <<U1713>>00897350
           SEGSIZE = (4:12)#, << SIZE/4 of the code segment  >><<U1713>>00897360
           STTNUM  = (1:7)#,  << STT# of the external Plabel >><<U1713>>00897370
           CSTNUM  = (8:8)#,  << SEG# of the external Plabel >><<U1713>>00897380
                                                               <<U1713>>00897390
           XPFIRMWARE = (13:1)#,                               <<U1713>>00897400
                              << During the system startup,  >><<U1713>>00897410
                              << INITIAL will invoke the     >><<U1713>>00897420
                              << "Enabled Performance" ucode >><<U1713>>00897430
                              << to set the XPFIRMWARE bit   >><<U1713>>00897440
                              << if the running system ucode >><<U1713>>00897450
                              << is for the XP.              >><<U1713>>00897460
                                                               <<U1713>>00897470
           SERIES'70'UCODE = absolute(%1220).XPFIRMWARE#,      <<U1713>>00897480
                              << %1220 is Sys Glob cell for  >><<U1713>>00897490
                              << the MAPPING FIRMWARE flag.  >><<U1713>>00897500
                              << Bit 13 of %1220 is set when >><<U1713>>00897510
                              << the XP microcode is running.>><<U1713>>00897520
                                                               <<U1713>>00897530
           XPFEATUREMASK0  = SYSGLOBEXT(%21)#,                 <<U1713>>00897540
                              << 1st XP feature mask word set>><<U1713>>00897550
                              << by the "Enabled Performance">><<U1713>>00897560
                              << microcode in the System     >><<U1713>>00897570
                              << Global Extension loc. %21   >><<U1713>>00897580
                                                               <<U1713>>00897590
           XPFEATUREMASK1  = SYSGLOBEXT(%22)#,                 <<U1713>>00897600
                              << 2nd XP feature mask word    >><<U1713>>00897610
                              << is assigned in the System   >><<U1713>>00897620
                              << Global Extension loc. %22.  >><<U1713>>00897630
                                                               <<U1713>>00897640
           XPFEATUREMASK2  = SYSGLOBEXT(%23)#,                 <<U1713>>00897650
                              << 3rd XP feature mask word    >><<U1713>>00897660
                              << is assigned in the System   >><<U1713>>00897670
                              << Globel Extension loc. %23.  >><<U1713>>00897680
                                                               <<U1713>>00897690
           XPFEATUREMASK3  = SYSGLOBEXT(%24)#,                 <<U1713>>00897700
                              << 4th XP feature mask word    >><<U1713>>00897710
                              << is assigned in the System   >><<U1713>>00897720
                              << Global Extension loc. %24,  >><<U1713>>00897730
                              << also the first one to be    >><<U1713>>00897740
                              << implemented by the microcode>><<U1713>>00897750
                              << performance enhancement team>><<U1713>>00897760
                                                               <<U1713>>00897770
           ERRORONBIT    = (15:1)#,<<bit 15 of XPFEATUREMASK3>><<U1713>>00897780
           ERROREXITBIT  = (14:1)#,<<bit 14 of XPFEATUREMASK3>><<U1713>>00897790
           EXCHANGEDBBIT = (13:1)#,<<bit 13 of XPFEATUREMASK3>><<U1713>>00897800
           TIMERBIT      = (12:1)#,<<bit 12 of XPFEATUREMASK3>><<U1713>>00897810
           TIMEREQBIT    = (11:1)#,<<bit 11 of XPFEATUREMASK3>><<U1713>>00897820
           MMSTATBIT     = (10:1)#;<<bit 10 of XPFEATUREMASK3>><<U1713>>00897830
                                                               <<U1713>>00903010
<<***********************************************************>><<U1713>>00903020
<<***********************************************************>><<U1713>>00903030
<<**************  FUTURE EXPANSION GOES HERE  ***************>><<U1713>>00903040
<<***********************************************************>><<U1713>>00903050
<<***********************************************************>><<U1713>>00903060
                                                               <<U1713>>00903070
INTEGER LOADER'AUX'INFO    = DB + 38;                          <<L2185>>01266000
DEFINE  LOADER'AUX'XDS     = LOADER'AUX'INFO.(1:15)#;          <<L2185>>01266100
DEFINE  SYS'AUTOALLOC'FLAG = LOADER'AUX'INFO.(0:1)#;           <<L2185>>01266200
INTEGER REFTABDST          = DB + 39;  << SL REFERENCE TABLE >><<L2185>>01267000
INTEGER CUR'NUM'LSTX'DSEGS = DB + 40;                          <<L2185>>01267100
INTEGER MAX'NUM'LSTX'DSEGS = DB + 41;                          <<L2185>>01267200
INTEGER PREV'LST           = DB + 42;  << LST DST # >>         <<L2185>>01267300
INTEGER THIS'LST           = DB + 43;  << LST DST # >>         <<L2185>>01267400
INTEGER NEXT'LST           = DB + 44;  << LST DST # >>         <<L2185>>01267500
INTEGER POINTER TEMP'EXT'ENTP  = DB + 45;                      <<L2185>>01267600
INTEGER POINTER TEMP'MAST'ENTP = DB + 46;                      <<L2185>>01267700
       MSEARCHDOMAIN = LCTBUF.(7:1)#, <<LOADPROC SEARCH SEQ>>  <<L1607>>01341000
                       << 0-LOGON, 1-PROGRAM  GROUP/ACCT.>>    <<L1607>>01342000
                                                               <<L2185>>01531000
<< Maximum entry sizes (excluding headers): >>                 <<L2185>>01531010
<<------------------------------------------>>                 <<L2185>>01531020
                                                               <<L2185>>01531030
EQUATE                                                         <<L2185>>01531040
                                                               <<L2185>>01534000
   << ENTP thru PLABEL                                       5 <<L2185>>01534010
   << Procedure name                                         8 <<L2185>>01534020
   << word for # SL info areas                               1 <<L2185>>01534030
   << 1 system SL info area                                 35 <<L2185>>01534040
   << 2 regular SL info areas                               38 <<L2185>>01534050
   << Word for # MCST references                             1 <<L2185>>01534060
   << MCSTREF array (1 word per MCST ref)                  255 <<L2185>>01534070
   <<                                                      --- <<L2185>>01534080
   << Total                                                343 <<L2185>>01534090
   <<----------------------------------------------------------<<L2185>>01534100
                                                               <<L2185>>01534110
   EXTENSION'MAX      = 343,                                   <<L2185>>01534120
                                                               <<L2185>>01534130
   << ENTP thru MCST index table                            35 <<L2185>>01534140
   << Referenced SL array (5 entries max, 2 words/entry)    10 <<L2185>>01534150
   << word for # entries in MCST LOGSEG array                1 <<L2185>>01534160
   << Junk word                                              1 <<L2185>>01534170
   << MCST LOGSEG array (255 entries X 2 words/entry)      510 <<L2185>>01534180
   <<                                                      --- <<L2185>>01534190
   << Total                                                557 <<L2185>>01534200
   <<----------------------------------------------------------<<L2185>>01534210
                                                               <<L2185>>01534220
   LOADPROCMASTER'MAX = 557;                                   <<L2185>>01534230
                                                               <<L2185>>01534240
DEFINE HOME'LSTX     = ENTP(-6)#;                              <<L2185>>01544000
DEFINE HOME'OFFSET   = ENTP(-5)#;                              <<L2185>>01544100
DEFINE HOME'RLENGTH  = ENTP(-4)#;                              <<L2185>>01544200
       RLENGTH  = ENTP(-1)#,    << REGION LENGTH--HEADER + >>  <<*2201>>01555000
       SL'TYPE = 2:1#,                <<SL TYPE              >><<S1945>>01561000
       EXSYS'SL=ENTP.(SL'TYPE)#,                               <<S1945>>01562000
                  <<EXTENDED SYS. SL FLAG>><<SSLEX>>           <<S1945>>01563000
       ELOGSEG = 0:9#,            <<LST LOG SEG NO.        >>  <<S1945>>01564000
EQUATE PERM'HEADER'LEN = 3;                                    <<L2185>>01567000
EQUATE TEMP'HEADER'LEN = 6;                                    <<L2185>>01567100
DEFINE                                                         <<L2185>>01567200
  TEMP'ENTRY=((ETYPE >= EXTENSION) LAND (THIS'LST=SEGTABDST))#;<<L2185>>01567300
DEFINE PERM'ENTRY = (NOT TEMP'ENTRY)#;                         <<L2185>>01567400
DEFINE HEADER'LEN = (IF PERM'ENTRY THEN PERM'HEADER'LEN        <<L2185>>01567500
                                   ELSE TEMP'HEADER'LEN)#;     <<L2185>>01567600
       EALLOCSEG'SL= ENTP(4)#,      <<# ALLOCATED SEG IN SL>>  <<S1945>>01645000
       ESLSEG'SL   = ENTP(5)#,      <<# SEG LIST ENTRIES   >>  <<S1945>>01650000
       SLLOGSEGNR  = PTEMP2.(ELOGSEG)#, <<SL LOG. SEG NUMBER>> <<S1945>>01660000
EQUATE ESLSEGLIST'ENTRY'SIZE = 3; <<SEGLIST ENTRY SIZE >>      <<S1945>>01681000
EQUATE ESLSEGLIST'INDEX=22; <<DISPLACEMENT TO SEGLIST     >>   <<S1945>>01682000
                             <<FOR GROUP AND ACCT SL'S    >>   <<S1945>>01683000
EQUATE EXSLSEGLIST'INDEX=38; << DISPLACEMENT TO SEGLIST FOR>>  <<S1945>>01684000
                              << EXPANDED SYSTEM SL       >>   <<S1945>>01684500
EQUATE ESLSEG'INDEX = 5;      << DISPLACEMENT TO ESLEG'SL>>    <<S1945>>01684600
EQUATE ESEG'ARRAY'INDEX=6;    << DISPLACEMENT TO SEG'ARRAY>>   <<S1945>>01684700
DEFINE E6'PROGKEY  = ENTDP1#;<<FILE DISC ADDR OF SHARER ENTRY>><<E2168>>01876000
DEFINE ESEARCHDOMAIN=ENTP.(3:1)#,  <<LOADPROC SEARCH DOMAIN>>  <<L1607>>01901000
       EEXT        = ENTP(2)#,     <<EXTENSION #           >>  <<L1607>>01905000
EQUATE ESLINFO'AREA'SIZE = 19;  << SIZE OF SL INFO AREA >>     <<*2201>>01926000
DEFINE ESLID'INDEX = 9:7#;           <<INDEX INTO SLID     >>  <<S1945>>01966000
<<--------------------------------------------------------->>  <<R1625>>02053000
$EDIT VOID=02054999                                            <<01960>>02053010
$page                                                          <<01960>>02053020
$EDIT VOID=02053140                                            <<L2185>>02053030
<<========================================================>>   <<01960>>02053150
<<    LOADER AUXILIARY XDS VARIABLES AND DEFINITONS       >>   <<01960>>02053160
<<========================================================>>   <<01960>>02053170
                                                               <<01960>>02053180
INTEGER ARRAY LOADER'AUX'TABLE  (*) = DB + 0;                  <<01960>>02053190
                                                               <<01960>>02053200
EQUATE  LOADER'AUX'HEADER   = 8;  <<SIZE OF HEADER>>           <<01960>>02053210
                                                               <<01960>>02053220
<<........................................................>>   <<01960>>02053230
<<EQUATES TO ACCESS THE TABLE HEADER FROM A POINTER       >>   <<01960>>02053240
<< POINTING TO THE BASE OF THE TABLE.                     >>   <<01960>>02053250
<<........................................................>>   <<01960>>02053260
EQUATE  TABLE'SIZE   =  -8 ,                                   <<01960>>02053270
        ENTRY'LEN    =  -7 ,                                   <<01960>>02053280
        NUMB'FREE    =  -6 ,                                   <<01960>>02053290
        FIRST'FREE   =  -5 ,                                   <<01960>>02053300
        NEXT'TABLE   =  -4 ; <<POINTS TO BASE OF NEXT TABLE>>  <<01960>>02053310
                                                               <<01960>>02053320
<<      UNUSED       =  -3 ,                               >>  <<01960>>02053330
<<      UNUSED       =  -2 ,                               >>  <<01960>>02053340
<<      UNUSED       =  -1 ,                               >>  <<01960>>02053350
                                                               <<01960>>02053360
                                                               <<01960>>02053370
<<--------------------------------------------------------->>  <<01960>>02053380
<< AUTOALLOCATE RELATED VARIABLES AND DEFINITIONS          >>  <<01960>>02053390
<<                                                         >>  <<01960>>02053400
<< NOTE:  WE HAVE TAKEN ADVANTAGE OF THE FACT THAT THE     >>  <<01960>>02053410
<<        AUTOALLOCATE TABLE IS THE FIRST TABLE IN THE     >>  <<01960>>02053420
<<        LOADER AUXILIARY DATA SEGMENT.                   >>  <<01960>>02053430
<<                                                         >>  <<01960>>02053440
<< AN AUTOALLOCATED PROGRAM IS SPECIFIED BY:               >>  <<01960>>02053450
<<        ALLOCATE BIT = 1                                 >>  <<01960>>02053460
<<            (EPA IN THE LST PROGRAM ENTRY)               >>  <<01960>>02053470
<<        AUTOALLOCATE BIT = 1                             >>  <<01960>>02053480
<<            (EPAUTOALLOC IN THE LST PROGRAM ENTRY)       >>  <<01960>>02053490
<<--------------------------------------------------------->>  <<01960>>02053500
                                                               <<01960>>02053510
INTEGER ARRAY AUTOALLOC'TABLE (*) = DB + LOADER'AUX'HEADER;    <<01960>>02053520
                                                               <<01960>>02053530
INTEGER AUTOALLOC'TABSIZ   = DB + 0,  <<TABLE SIZE         >>  <<01960>>02053540
        AUTOALLOC'ENTRY'LEN= DB + 1,  <<ENTRY LENGTH       >>  <<01960>>02053550
        AUTOALLOC'FREE     = DB + 2,  <<TOTAL # FREE       >>  <<01960>>02053560
        AUTOALLOC'1ST'FREE = DB + 3;                           <<01960>>02053570
                                                               <<01960>>02053580
<<--------------------------------------------------------->>  <<01960>>02053590
<< PROGRAM NAME TABLE VARIABLES AND DEFINITIONS            >>  <<01960>>02053600
<<--------------------------------------------------------->>  <<01960>>02053610
<<#########################################################>>  <<01960>>02053620
<< PROGRAM NAME TABLE OVERVIEW                             >>  <<01960>>02053630
<<                                                         >>  <<01960>>02053640
<< This table was added as a supportability data structure.>>  <<01960>>02053650
<< It enables a person analyzing a dump to find out the    >>  <<01960>>02053660
<< names of the programs which are currently running on the>>  <<01960>>02053670
<< system.                                                 >>  <<01960>>02053680
<<                                                         >>  <<01960>>02053690
<< The table will be kept in the loader auxiliary data     >>  <<01960>>02053700
<< segment.  Each entry will be 16 words long and contain  >>  <<01960>>02053710
<< the fully qualified file name and the disc address.  The>>  <<01960>>02053720
<< table will be orginized the same as the CSTX block      >>  <<01960>>02053730
<< pointer table.                                          >>  <<01960>>02053740
<<                                                         >>  <<01960>>02053750
<< That is, all programs have a CSTX block index.  This    >>  <<01960>>02053760
<< index will be used to index into the program name table.>>  <<01960>>02053770
<< Thus the table is managed indirectly by the CSTX block  >>  <<01960>>02053780
<< table.  When a program is loaded the file name will     >>  <<01960>>02053790
<< be written to entry 0 in the procedure "LOADBIT".       >>  <<01960>>02053800
<< In the procedure "LOADPROGRAM"  of the LOAD PROCESS     >>  <<01960>>02053810
<< the file name will be moved to the entry indexed by     >>  <<01960>>02053820
<< the CSTX block index.  An entry is never removed or     >>  <<01960>>02053830
<< marked free in the program name table.  When a program  >>  <<01960>>02053840
<< is unloaded the CSTX block index is released but the    >>  <<01960>>02053850
<< entry in the program name table is left untouched.      >>  <<01960>>02053860
<<#########################################################>>  <<01960>>02053870
                                                               <<01960>>02053880
INTEGER POINTER PROGNAME'TABLE = DB + 4;                       <<01960>>02053890
                                                               <<01960>>02053900
EQUATE PROGNAME'DADDR = %14;  <<OFFSET FOR HODA LODA INTO>>    <<01960>>02053910
                              << PROGRAM NAME TABLE ENTRY>>    <<01960>>02053920
                                                               <<01960>>02053930
  EQUATE XSL'MAX'NR'SEG = 512,  <<MAX NUMBER OF SEG IN XSL>>   <<S1945>>02306000
         SL'MAX'NR'SEG = 256;     <<MAX. NUMBER OF SEG. IN SL>><<S1945>>02307000
DEFINE SLFLEN   = SLREC0(1)#,   << FILE LENGTH IN RECORDS  >>  <<c1389>>02335100
       SLEXTLEN = SLREC0(2)#;   << EXTENT LENGTH           >>  <<c1389>>02335200
       SLPXD         = SLP.(2:1)#, <<EXTENDED DOMAIN BIT    >> <<S1945>>02376000
INTEGER REFTABSEG:=0;           <<REFERENCE TABLE DST NUMB >>  <<R1176>>02436000
                                                               <<L2185>>02437000
INTEGER RTSEGNR;                <<CURRENT REF. TABLE ENTRY >>  <<R1176>>02438000
EQUATE REFTABSEG'ENTRY'SIZE=48, <<SIZE OF ENTRY IN R. T. DST>> <<S1945>>02439000
      RTREC'ENTRY'SIZE = 32,    <<SIZE OF R. T. RECORD ENTRY>> <<S1945>>02439100
      RTREC'NR'ENTRIES = 4,     << NUMBER OF RT ENTRIES/ REC>> <<S1945>>02439200
      XRTREC'NR'ENTRIES = 2,    << EXPANDED SL RT ENT./REC>>   <<S1945>>02439300
      XRTREC'ENTRY'SIZE = 64;   <<SIZE OF R. T. RECORD ENTRY>> <<S1945>>02439400
EQUATE MAX'NR'REF'TAB'REC = 256; <<MAX. NO. OF R. T. REC.   >> <<S1945>>02439500
                                                               <<S1945>>02439600
EQUATE SYS'SLNR =0;                                            <<S1945>>02546000
<<                                                      >>     << 2112>>02546110
<< The LOAD module has been modified for Run Time Event >>     << 2112>>02546120
<<     Logging (RTEL).  RTEL is accomplished by LOADing >>     << 2112>>02546130
<<     through an extra SL in PUB.SYS called            >>     << 2112>>02546140
<<     RTELSL.PUB.SYS.  This extra SL is treated just   >>     << 2112>>02546150
<<     as a GROUP or PUBLIC SL is treated.  IF the      >>     << 2112>>02546160
<<     file cannot be opened, it is ignored.  IF RTEL   >>     << 2112>>02546170
<<     facility is not enabled, the LOADER will not     >>     << 2112>>02546180
<<     even attempt to open RTELSL.  The define for     >>     << 2112>>02546190
<<     MLIBSEARCH is the key to the RTEL changes for    >>     << 2112>>02546200
<<     this module.  MLIBSEARCH is only changed in this >>     << 2112>>02546210
<<     module during a LOAD.  The new values are...     >>     << 2112>>02546220
<<                                                      >>     << 2112>>02546221
<<     OLD MLIBSEARCH VALUES,     NEW MLIBSEARCH VALUES >>     << 2112>>02546230
<<       (before RTEL fixes)        (after RTEL fixes)  >>     << 2112>>02546240
<<     ---------------------      --------------------- >>     << 2112>>02546250
<<     0 = SL.PUB.SYS             0 = SL.PUB.SYS        >>     << 2112>>02546260
<<     1 = SL.PUB.ACCT            1 = RTELSL.PUB.SYS    >>     << 2112>>02546270
<<     2 = SL.GRP.ACCT            2 = SL.PUB.ACCT       >>     << 2112>>02546280
<<     3 =  NOT USED              3 = SL.GRP.ACCT       >>     << 2112>>02546290
<<                                                      >>     << 2112>>02546300
LOGICAL RTEL'FLAG;         << Is RTEL "main switch" on ?  >>   << 2112>>02546310
LOGICAL RTEL'LOAD'PUB'SYS; << Use RTEL for PUB.SYS pgms ? >>   << 2112>>02546311
BYTE ARRAY RTEL'PGM'GA(0:17); << PGM group and account    >>   << 2112>>02546312
EQUATE RTEL'SLNR = 1, << FOR MLIBSEARCH, USE EQUATES FOR  >>   << 2112>>02546320
       PUB'SLNR  = 2, <<   RTELSL.PUB.SYS and SL.PUB.ACCT >>   << 2112>>02546330
       GRP'SLNR  = 3; <<   AND SL.GRP.ACCT                >>   << 2112>>02546340
                                                               << 2112>>02546350
           RSLFNAME(0:14),      <<RTEL SL file name        >>  << 2112>>02555100
EQUATE XSL'BITMAP'SIZE =32,  <<SYS. SL BITMAP OF REF. SEG.>>   <<S1945>>02626000
        SL'BITMAP'SIZE = 16;  <<GROUP & ACCT. SL REF'ED SEG.>> <<S1945>>02627000
                                                               << 2112>>02665100
                << RTEL's master ON/OFF switch can be found >> << 2112>>02665200
                <<      in SYSGLOB EXTension cell %31 AND   >> << 2112>>02665300
                << INTERNAL FLAG for loading programs in    >> << 2112>>02665310
                << PUB.SYS (default off) with RTEL SL in %32>> << 2112>>02665320
DEFINE RTEL'ENABLED = ABS(ABS(%1377)+%1031).(0:1)#;            << 2112>>02665400
DEFINE RTEL'PUB'SYS = ABS(ABS(%1377)+%1032).(15:1)#;           << 2112>>02665500
                                                               << 2112>>02665600
EQUATE MCSTTAB'SIZE =16;        <<NUMBER OF WORD IN MCSTTAB>>  <<S1945>>02876000
       UXXD = UXP.(2:1)#,  <<EXTENDED DOMAIN BIT >>            <<S1945>>02956000
           DBMCST   = 4).(0:8#,   <<MCST>>                     <<S1945>>03045000
           DBLOGSEG = 1#,         <<LOGSEG>>                   <<S1945>>03050000
           DBLBIT   = 4).(9:1#,   <<BEING ALLOCATED>>          <<01961>>03090000
           DBREFCNT = 4).(8:1#;   <<REFERENCE COUNT ADJUSTED>> <<01961>>03091000
           DBXD = 0).(4:1#,  <<EXTEND SYS LIB BIT>>            <<S1945>>03106000
    EQUATE PROG'FILE'NR = 14;                                  <<S1945>>03116000
                                                               <<01961>>03146000
PROCEDURE ADJSEG (CSTNR);                                      <<01961>>03146500
   VALUE CSTNR;                                                <<01961>>03147000
   INTEGER CSTNR;                                              <<01961>>03148000
   OPTION EXTERNAL;                                            <<01961>>03149000
                                                               <<01961>>03149500
PROCEDURE AUTO'DEALLOCATE;                                     <<R1625>>03151200
   OPTION EXTERNAL,UNCALLABLE;                                 <<R1625>>03151300
$EDIT VOID=03152000                                            <<G1540>>03151400
PROCEDURE CLEARBIT(BITARRAY,BITNUMBER);                        <<*2201>>03261000
   VALUE BITNUMBER;                                            <<*2201>>03261100
   INTEGER ARRAY BITARRAY;                                     <<*2201>>03261200
   INTEGER BITNUMBER;                                          <<*2201>>03261300
   OPTION EXTERNAL;                                            <<*2201>>03261400
PROCEDURE CLEARBITMAP (BITMAP,MAP'LEN);                        <<S1945>>03265000
   VALUE MAP'LEN;                                              <<S1945>>03266000
   INTEGER MAP'LEN;                                            <<S1945>>03267000
PROCEDURE CREATE'LSTX;                                         <<L2185>>03303000
   OPTION EXTERNAL;                                            <<L2185>>03304000
                                                               <<U1713>>03393100
procedure ERROREXIT(INTRNEXIT,ERRWRD,PARAM);                   <<U1713>>03393200
  value   INTRNEXIT, ERRWRD, PARAM;                            <<U1713>>03393300
  logical INTRNEXIT, ERRWRD, PARAM;                            <<U1713>>03393400
  option  external;                                            <<U1713>>03393500
                                                               <<U1713>>03393600
procedure ERRORON;                                             <<U1713>>03393700
  option  external;                                            <<U1713>>03393800
                                                               <<U1713>>03393900
                                                               <<E2168>>03872000
procedure GET'PROGNAME (CSTX'BLK'INDEX, PRGNAME);              <<E2168>>03872100
   value       CSTX'BLK'INDEX;                                 <<E2168>>03872200
   integer     CSTX'BLK'INDEX;                                 <<E2168>>03872300
   byte array  PRGNAME;                                        <<E2168>>03872400
   option      external;                                       <<E2168>>03872500
                                                               <<E2168>>03872600
PROCEDURE LCREATE'TEMP (LENGTH, TYPE, PMODE, LIBRARY, KEY);    <<L2185>>04081000
   VALUE   LENGTH, TYPE, PMODE, LIBRARY, KEY;                  <<L2185>>04081100
   INTEGER LENGTH;                                             <<L2185>>04081200
   INTEGER TYPE;                                               <<L2185>>04081300
   INTEGER PMODE;                                              <<L2185>>04081400
   INTEGER LIBRARY;                                            <<L2185>>04081500
   DOUBLE  KEY;                                                <<L2185>>04081600
   OPTION  EXTERNAL;                                           <<L2185>>04081700
PROCEDURE LRELEASE;                                            <<L2185>>04222000
   OPTION EXTERNAL;                                            <<L2185>>04223000
                                                               <<U1713>>04287100
procedure MMSTAT'(EVENT,P1,P2,P3,P4,P5,P6);                    <<U1713>>04287200
  value   EVENT,P1,P2,P3,P4,P5,P6;                             <<U1713>>04287300
  integer EVENT,P1,P2,P3,P4,P5,P6;                             <<U1713>>04287400
  option  external;                                            <<U1713>>04287500
                                                               <<U1713>>04287600
PROCEDURE SETSECPTRS;                                          <<J2120>>04541000
   OPTION PRIVILEGED,UNCALLABLE,EXTERNAL;                      <<J2120>>04542000
                                                               <<U1713>>04567000
double procedure TIMER;                                        <<U1713>>04567100
  option  external;                                            <<U1713>>04567200
                                                               <<U1713>>04567300
integer procedure TIMEREQ(CODE,REQ,TIME);                      <<U1713>>04567400
  value   CODE, REQ, TIME;                                     <<U1713>>04567500
  integer CODE, REQ;                                           <<U1713>>04567600
  double  TIME;                                                <<U1713>>04567700
  option  external;                                            <<U1713>>04567800
                                                               <<U1713>>04567900
PROCEDURE LSTORE;                                              <<L2185>>04690000
INTEGER PROCEDURE FLABIO(LDEV,SECTOR,FUNC,FLAB);               <<L1607>>04776100
   VALUE LDEV,SECTOR,FUNC,FLAB;                                <<L1607>>04776200
   INTEGER LDEV,FUNC;                                          <<L1607>>04776300
   DOUBLE SECTOR;                                              <<L1607>>04776400
   LOGICAL POINTER FLAB;                                       <<L1607>>04776500
   OPTION EXTERNAL;                                            <<L1607>>04776600
PROCEDURE CLEARBITMAP (BITMAP,MAP'LEN);                        <<S1945>>05060000
  <<CLEARS A MAP'LEN WORD BIT MAP>>                            <<S1945>>05065000
  VALUE MAP'LEN;                                               <<S1945>>05066000
  INTEGER MAP'LEN;                                             <<S1945>>05067000
    ASSEMBLE(DUP,INCB); TOS := MAP'LEN-1; ASSEMBLE(MOVE 3)     <<S1945>>05090000
    IF SLNR >SYS'SLNR AND SLNR < PROG'FILE'NR THEN             <<S1945>>05211000
                                                               <<S1945>>05211100
    <<SYSTEM SL NEED 32 WORDS FOR ITS SLDB SEG ENTRIES>>       <<S1945>>05211200
    <<ACCT. SL STARTS AT 2*16 = 32 AND GROUP STARTS AT>>       <<S1945>>05211300
    << 3*16 = 48.  FOR THE SYSTEM SL, SLNR=0.  FOR THE>>       <<S1945>>05211400
    <<ACCT. SL, SLNR=1.  FOR THE GROUP SL, SLNR=2     >>       <<S1945>>05211500
    << FOR A PROGRAM SEGMENT, SLNR=14;  FOR A LOADPROC>>       <<S1945>>05211600
    << SLNR=15.                                      >>        <<S1945>>05211700
                                                               <<S1945>>05211800
                                                               <<S1945>>05211900
      INDEX:=(SLNR+1)&LSL(4)+SEGNR&LSR(4)                      <<S1945>>05212000
    ELSE                                                       <<S1945>>05213000
      INDEX:=SLNR&LSL(4)+SEGNR&LSR(4); <<DIRECTORY INDEX>>     <<S1945>>05215000
    IF SLNR >SYS'SLNR AND SLNR < PROG'FILE'NR THEN             <<S1945>>05636000
                                                               <<S1945>>05636010
    <<SYSTEM SL NEED 32 WORDS FOR ITS SLDB SEG ENTRIES>>       <<S1945>>05636100
    <<ACCT. SL STARTS AT 2*16 = 32 AND GROUP STARTS AT>>       <<S1945>>05636200
    << 3*16 = 48.  FOR THE SYSTEM SL, SLNR=0.  FOR THE>>       <<S1945>>05636300
    <<ACCT. SL, SLNR=1.  FOR THE GROUP SL, SLNR=2     >>       <<S1945>>05636400
    << FOR A PROGRAM SEGMENT, SLNR=14;  FOR A LOADPROC>>       <<S1945>>05636500
    << SLNR=15.                                      >>        <<S1945>>05636600
                                                               <<S1945>>05636700
                                                               <<S1945>>05636800
      INDEX:=(SLNR+1)&LSL(4)+SEGNR&LSR(4)                      <<S1945>>05637000
    ELSE                                                       <<S1945>>05638000
      INDEX:=SLNR&LSL(4)+SEGNR&LSR(4); <<DIRECTORY INDEX>>     <<S1945>>05640000
        IF SLFNUM(TEMP) = FNUM THEN                            << 2112>>06305000
           BEGIN                                               << 2112>>06305100
           << Error numbers are SYS, PUB and GRP.  Since  >>   << 2112>>06305200
           <<    the RTEL SL is between SYS and PUB, make >>   << 2112>>06305300
           <<    any RTEL SL error become a SYS SL error. >>   << 2112>>06305400
           IF TEMP > SYS'SLNR THEN TEMP := TEMP - 1;           << 2112>>06305500
           GO REPORTERR;                                       << 2112>>06305600
           END;                                                << 2112>>06305700
    TOS := SEGNR;                                              <<S1945>>08765000
    IF SLNR = SYS'SLNR THEN                                    <<S1945>>08766000
      BEGIN                                                    <<S1945>>08767000
        TOS:= XRTREC'NR'ENTRIES;                               <<S1945>>08768000
        ASSEMBLE(DIV);                                         <<S1945>>08769000
               <<SET ENTRY POINTER>>                           <<S1945>>08769050
        @RTP := (TOS*XRTREC'ENTRY'SIZE)+@RTBUF;                <<S1945>>08769100
       END                                                     <<S1945>>08769200
    ELSE                                                       <<S1945>>08769300
      BEGIN                                                    <<S1945>>08769400
        TOS:= RTREC'NR'ENTRIES;                                <<S1945>>08769500
        ASSEMBLE(DIV);                                         <<S1945>>08770000
        @RTP := (TOS&LSL(5))+@RTBUF;  <<SET ENTRY POINTER>>    <<S1945>>08775000
      END;                                                     <<S1945>>08776000
         SAVEREFTABBUF;                                        <<R1176>>08795100
         IF < THEN GO NFG;   <<ERROR?>>                        <<R1176>>08795200
         RTRECD := TOS;                                        <<R1176>>08795300
         IF (XREG=0) AND (REFTABSEG<>0)                        <<R1176>>08795400
             <<XREG = 0 IMPLIES SL.PUB.SYS>>                   <<R1176>>08795500
         THEN                                                  <<R1176>>08795600
           BEGIN    <<GET THE REF. TABLE RECORD FROM XDS  >>   <<R1176>>08795700
    <<RECORD CONSIST OF 48 WORDS OF DATA AND 16 WORDS OF>>     <<S1945>>08795710
    <<FILLER.  ONLY THE DATA IS KEPT IN THE XDS.        >>     <<S1945>>08795720
           MOVE RTBUF(0):=0;     <<CLEAR RTBUFF  >>            <<S1945>>08795730
           MOVE RTBUF(1):=RTBUF(0),(127);                      <<S1945>>08795740
           TOS := @RTBUF;                                      <<R1176>>08795800
           TOS := REFTABSEG;                                   <<R1176>>08795900
      << GET THE EVEN ENTRY FOR REF. TAB. REC.>>               <<S1945>>08795910
           TOS :=((SEGNR&LSR(1))&LSL(1))*REFTABSEG'ENTRY'SIZE; <<S1945>>08796000
           TOS := REFTABSEG'ENTRY'SIZE;                        <<S1945>>08796100
           ASSEMBLE(MFDS 4);                                   <<R2168>>08796200
           TOS := @RTBUF + XRTREC'ENTRY'SIZE;                  <<S1945>>08796300
           TOS := REFTABSEG;                                   <<S1945>>08797000
   << GET THE ODD ENTRY FOR THE REF. TAB. REC>>                <<S1945>>08797100
           TOS :=(((SEGNR & LSR(1)) & LSL(1)) +1) *            <<S1945>>08798000
                     REFTABSEG'ENTRY'SIZE;                     <<S1945>>08798100
           TOS := REFTABSEG'ENTRY'SIZE;                        <<S1945>>08799000
           ASSEMBLE(MFDS 4);                                   <<R2168>>08799500
           END <<THEN>>                                        <<R1176>>08800000
         ELSE                                                  <<R1176>>08805000
           BEGIN                                               <<R1176>>08810000
           FREADDIR(SLFNUM(XREG),RTBUF,128,DRTRECD);           <<R1176>>08815000
           IF <> THEN GO IOERROR  <<ERROR?>>                   <<R1176>>08820000
           END; <<ELSE>>                                       <<R1176>>08820100
    RTSEGNR := SEGNR;     <<SAVE REF. TABLE SEG. # GLOBALY >>  <<R1176>>08826000
    IF RTMODIFIED <> 0                                         <<R1176>>08925000
    THEN        <<MODIFIED>>                                   <<R1176>>08930000
       BEGIN                                                   <<R1176>>08935000
       FWRITEDIR(SLFNUM(SLNR),RTBUF,128,DRTRECD);              <<S1945>>08936000
       IF <> THEN GO IOERROR; <<ERROR?>>                       <<S1945>>08936100
                                                               <<S1945>>08936200
       IF (SLNR=SYS'SLNR) AND (REFTABSEG<>0)                   <<S1945>>08936300
           <<SLNR = SYS'SLNR = 0 => SL.PUB.SYS>>               <<S1945>>08936400
       THEN                                                    <<S1945>>08936500
         BEGIN    <<UPDATE THE REF. TABLE IN THE XDS>>         <<S1945>>08936600
    <<RECORD CONSIST OF 48 WORDS OF DATA AND 16 WORDS OF>>     <<S1945>>08936700
    <<FILLER.  ONLY THE DATA IS KEPT IN THE XDS.        >>     <<S1945>>08936800
         MOVE RTBUF(REFTABSEG'ENTRY'SIZE):=                    <<S1945>>08936900
          RTBUF(XRTREC'ENTRY'SIZE),(REFTABSEG'ENTRY'SIZE);     <<S1945>>08937000
         TOS := REFTABSEG;                                     <<S1945>>08937100
         TOS :=((RTSEGNR & LSR(1))&LSL(1)) *                   <<S1945>>08937200
                      REFTABSEG'ENTRY'SIZE;                    <<S1945>>08937300
         TOS := @RTBUF;                                        <<S1945>>08937400
      <<TWO 48 WORD ENTRIES FOR XDS     >>                     <<S1945>>08937410
         TOS := REFTABSEG'ENTRY'SIZE * 2;                      <<S1945>>08937500
         ASSEMBLE (MTDS 4);  << 2 ENTRIES PER RECORD  >>       <<R2168>>08940000
         END; <<THEN>>                                         <<S1945>>08945000
$PAGE                                                          <<L1607>>09006010
PROCEDURE GET'PROG'GRP'ACCT(PGROUP,PACCT);                     <<L1607>>09006020
   BYTE ARRAY PGROUP,PACCT;                                    <<L1607>>09006030
                                                               <<L1607>>09006040
$EDIT VOID=09010400                                            <<E2168>>09006050
                                                               <<E2168>>09006060
<<***********************************************************>><<E2168>>09006070
<<                                                           >><<E2168>>09006080
<<  LOADER PERFORMANCE ENHANCEMENTS:     4/23/86             >><<E2168>>09006090
<<  ===============================                          >><<E2168>>09006100
<<                                                           >><<E2168>>09006110
<<  The loader will NO longer need to get to the file label  >><<E2168>>09006120
<<  to obtain the file name.  Instead, it now accesses the   >><<E2168>>09006130
<<  PROGRAM NAME table in the LOADER AUXILIARY XDS to obtain >><<E2168>>09006140
<<  the file name.  As a result, many physical I/O's will be >><<E2168>>09006150
<<  saved with this new access implementation.               >><<E2168>>09006160
<<                                                           >><<E2168>>09006170
<<***********************************************************>><<E2168>>09006180
                                                               <<E2168>>09006190
                                                               <<E2168>>09006200
BEGIN                                                          <<E2168>>09006210
                                                               <<E2168>>09006220
<<!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!>><<E2168>>09006230
<<              LOCAL PROCEDURE DECLARATION                  >><<E2168>>09006240
<<!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!>><<E2168>>09006250
                                                               <<E2168>>09006260
                                                               <<E2168>>09006270
  INTEGER     SAVEDB,                                          <<E2168>>09006280
              SAVE'LSTSIR,                                     <<E2168>>09006290
              SAVE'ECSTBLK;                                    <<E2168>>09006300
                                                               <<E2168>>09006310
  DOUBLE      SHAREKEY;             << KEY USED TO FIND THE  >><<E2168>>09006320
                                    << SHARE ENTRY IN THE LST>><<E2168>>09006330
  INTEGER     SHAREKEY1 = SHAREKEY + 1;                        <<E2168>>09006340
                                                               <<E2168>>09006350
  BYTE ARRAY  PROGNAME(0:23) = Q;                              <<E2168>>09006360
                                                               <<E2168>>09006370
  EQUATE      GROUP = 8, <<OFFSET INTO THE PROGRAM NAME ARRAY>><<E2168>>09006380
              ACCT  = 16;<< FOR THE PROGRAM GROUP AND ACCOUNT>><<E2168>>09006390
                                                               <<E2168>>09006400
                                                               <<E2168>>09006410
<<!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!>><<E2168>>09006420
<<                START OF PROCEDURE BODY                    >><<E2168>>09006430
<<!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!>><<E2168>>09006440
                                                               <<E2168>>09006450
                                                               <<E2168>>09006460
  SHAREKEY := 0D;    << BUILD THE KEY USED TO FIND THE SHARE >><<E2168>>09006470
  SHAREKEY1 := MPIN; << ENTRY IN THE LST IN ORDER TO OBTAIN  >><<E2168>>09006480
                     << THE FILE DISC ADDRESS OF THE CALLING >><<E2168>>09006490
                     << PROGRAM.                             >><<E2168>>09006510
                                                               <<E2168>>09006520
  SAVE'LSTSIR := GETSIR(SEGTABSIR);                            <<E2168>>09006530
  SAVEDB :=  EXCHANGEDB(SEGTABDST);                            <<E2168>>09006540
                                                               <<E2168>>09006550
  IF  LSEARCH(SHAREKEY, ANYMODE, SHARER)  THEN                 <<E2168>>09006560
     << SHARER entry found >>                                  <<E2168>>09006570
    BEGIN                                                      <<E2168>>09006580
      IF  LSEARCH(E6'PROGKEY, ANYMODE, PROGFILE)  THEN         <<E2168>>09006590
         << PROGRAM FILE entry found >>                        <<E2168>>09006600
          SAVE'ECSTBLK := ECSTBLK   << SAVE THE CSTX BLOCK   >><<E2168>>09006610
                                    << INDEX OF PROGRAM FILE >><<E2168>>09006620
       ELSE                                                    <<E2168>>09006621
          SUDDENDEATH(349); <<COULD NOT FIND THE PROGRAM FILE>><<E2168>>09006622
                            << ENTRY WITH THE FILE DISC      >><<E2168>>09006623
                            << ADDRESS KEY                   >><<E2168>>09006624
          << END OF ELSE LSEARCH(E6'PROGKEY) >>                <<E2168>>09006625
      EXCHANGEDB(0);                                           <<E2168>>09006630
      RELSIR(SEGTABSIR, SAVE'LSTSIR);                          <<E2168>>09006640
                                                               <<E2168>>09006650
      GET'PROGNAME(SAVE'ECSTBLK, PROGNAME);                    <<E2168>>09006660
      MOVE  PGROUP := PROGNAME(GROUP), (8);                    <<E2168>>09006670
      MOVE  PACCT  := PROGNAME(ACCT),  (8);                    <<E2168>>09006680
                                                               <<E2168>>09006690
    END  << END OF IF LSEARCH(SHAREKEY) THEN >>                <<E2168>>09006700
   ELSE                                                        <<E2168>>09006710
      SUDDENDEATH(349); << COULD NOT FIND PIN'S SHARER ENTRY >><<E2168>>09006720
         << END OF ELSE LSEARCH(SHAREKEY) >>                   <<E2168>>09006730
                                                               <<E2168>>09006740
  EXCHANGEDB(SAVEDB);                                          <<E2168>>09006750
                                                               <<E2168>>09006760
END;  << END OF PROCEDURE GET'PROG'GRP'ACCT >>                 <<E2168>>09006770
        << actual RTEL SL file name in PUB.SYS >>              << 2112>>09075100
   BYTE ARRAY B3 (0:14)=PB := "RTELSL.PUB.SYS ";               << 2112>>09075200
   BYTE ARRAY PROG'GROUP(0:7); <<PROGRAM GROUP/ACCOUNT IF>>    <<L1607>>09097000
   BYTE ARRAY PROG'ACCT(0:7);  <<SPECIFIED BY LOADPROC  >>     <<L1607>>09098000
   IF (MSEARCHDOMAIN = 1) THEN                                 <<L1607>>09211000
     <<PROGRAM GROUP/ACCT INSTEAD OF LOGON GROUP/ACCT>>        <<E2168>>09211100
     GET'PROG'GRP'ACCT(PROG'GROUP,PROG'ACCT);                  <<L1607>>09211200
$EDIT VOID=09211800                                            <<E2168>>09211300
   RTEL'FLAG := RTEL'ENABLED;  << SEE IF RTEL IS ENABLED >>    << 2112>>09230100
   RTEL'LOAD'PUB'SYS := RTEL'PUB'SYS; <<PGMs in PUB.SYS too?>> << 2112>>09230110
   MOVE RSLFNAME := B3,(15);   << Move RTEL SL FILE NAME >>    << 2112>>09230200
      IF (MSEARCHDOMAIN = 1)                                   <<L1607>>09361000
        THEN MOVE GROUP := PROG'GROUP,(8)                      <<L1607>>09362000
        ELSE MOVE GROUP := MGROUP,(8);                         <<L1607>>09365000
             <<LOGON GROUP FROM LCTBUF>>                       <<L1607>>09366000
      IF (MSEARCHDOMAIN = 1)                                   <<L1607>>09383000
        THEN MOVE ACCT := PROG'ACCT,(8)                        <<L1607>>09384000
        ELSE MOVE ACCT := MACCT,(8);                           <<L1607>>09385000
             <<LOGON ACCOUNT FROM LCTBUF>>                     <<L1607>>09386000
                                                               << 2112>>09429900
      <<  OLD MLIBSEARCH VALUES,  NEW MLIBSEARCH VALUES >>     << 2112>>09430100
      <<    (before RTEL fixes)     (after RTEL fixes)  >>     << 2112>>09430200
      <<  ---------------------   --------------------- >>     << 2112>>09430300
      <<  0 = SL.PUB.SYS          0 = SL.PUB.SYS        >>     << 2112>>09430400
      <<  1 = SL.PUB.ACCT         1 = RTELSL.PUB.SYS    >>     << 2112>>09430500
      <<  2 = SL.GRP.ACCT         2 = SL.PUB.ACCT       >>     << 2112>>09430600
      <<  3 =  NOT USED           3 = SL.GRP.ACCT       >>     << 2112>>09430700
   MLIBSEARCH := MLIBSEARCH + 1;                               << 2112>>09430800
         MLIBSEARCH:=RTEL'SLNR; <<Search at least RTEL SL>>    << 2112>>09460000
     IF TOS = GRP'SLNR THEN                                    << 2112>>09480000
              MLIBSEARCH:=PUB'SLNR <<DEFAULT PUB SEARCH>>      << 2112>>09480100
                                                               << 2112>>09500100
     << IF RTEL IS ENABLED, WE MUST SET THE SLCAP TO PM    >>  << 2112>>09500200
     << ELSE RTEL IS NOT ENABLED AND IF THE SEARCH WAS ONLY>>  << 2112>>09500300
     <<         THE SYS SL, THEN JUST SEARCH THE SYS SL.   >>  << 2112>>09500400
   IF RTEL'FLAG THEN                                           << 2112>>09500500
      SLCAP(RTEL'SLNR) := 1 <<RTEL SL HAS PM CAP's>>           << 2112>>09500600
   ELSE                                                        << 2112>>09500700
      IF MLIBSEARCH = RTEL'SLNR THEN MLIBSEARCH := SYS'SLNR;   << 2112>>09500800
   WHILE LIBNO > RTEL'SLNR DO <<CAP check for PUB & GRP SL>>   << 2112>>09510000
    INTEGER RTEL'LEN;                                          << 2112>>09965100
         << Scan bline until you find the '.' in front of >>   << 2112>>10365100
         <<     the group name for the program file...... >>   << 2112>>10365200
         <<     save the program files group and account  >>   << 2112>>10365300
    SCAN BLINE UNTIL ".",1;   << scan until '.' before GRP>>   << 2112>>10365400
    ASSEMBLE ( DUP, INCB );   << dup addr & skip over '.' >>   << 2112>>10365500
    ASSEMBLE ( DUP, NOP );    << dup addr for next scan   >>   << 2112>>10365510
    SCAN * UNTIL " ",1;       << scan until ' ' after ACCT>>   << 2112>>10365600
    ASSEMBLE ( XCH, SUB );    << get length of move       >>   << 2112>>10365700
    RTEL'LEN := TOS;          << save the length of move  >>   << 2112>>10365800
    MOVE RTEL'PGM'GA := *,(RTEL'LEN);  <<save the grp.acct>>   << 2112>>10365900
         << force LOADPROC through RTEL SL >>                  << 2112>>10695100
    RTEL'PGM'GA := " ";                                        << 2112>>10695200
   INTEGER  EXTSIZE,           << SIZE OF EXTENT >>            <<c1389>>10835100
            NUMEXTS;           << NUMBER OF EXTENTS >>         <<c1389>>10835200
   DOUBLE   FLSIZE;            << SIZE OF FILE >>              <<c1389>>10835300
$EDIT VOID=10835500                                            <<G1540>>10835400
   INTEGER UNSATSEG;                                           <<S1945>>10836000
   INTEGER NR'REC'FOR'STTMAP;                                  <<S1945>>10837000
   LOGICAL ARRAY SEGS (0:31)=Q; <<SEGMENTS REFERENCED BIT MAP>><<S1945>>10880000
       << Run Time Event Logging (RTEL) uses an SL which   >>  << 2112>>11029010
       <<     is loaded before SL.PUB.SYS but after any    >>  << 2112>>11029020
       <<     group or account SL.  Therefore, UXUTYPE and >>  << 2112>>11029030
       <<     SLNR values can now be 0,1,2 or 3.  However, >>  << 2112>>11029040
       <<     the values allowed are 0,1 or 2 for SYS SL,  >>  << 2112>>11029050
       <<     PUB SL or GROUP SL.    So, to minimize code  >>  << 2112>>11029060
       <<     changes to MPE, this procedure will auto-    >>  << 2112>>11029070
       <<     matically insure that only known, expected   >>  << 2112>>11029080
       <<     values of 0,1 or 2 are returned as follows:  >>  << 2112>>11029090
       <<                                                  >>  << 2112>>11029100
       <<  Cur UXUTYPE/SLNR vals   OLD UXUTYPE/SLNR vals   >>  << 2112>>11029110
       <<    (before RTEL fixes)     (expected returns)    >>  << 2112>>11029120
       <<  ---------------------   ---------------------   >>  << 2112>>11029130
       <<  0 = SL.PUB.SYS          0 = SL.PUB.SYS          >>  << 2112>>11029140
       <<  1 = RTELSL.PUB.SYS      1 = SL.PUB.ACCT         >>  << 2112>>11029150
       <<  2 = SL.PUB.ACCT         2 = SL.GRP.ACCT         >>  << 2112>>11029160
       <<  3 = SL.GRP.ACCT         3 = unused              >>  << 2112>>11029170
        IF UXUTYPE=14 OR UXUTYPE=SYS'SLNR THEN                 << 2112>>11030000
             TYPESTRING(BLINE(16),UXUTYPE)                     << 2112>>11030010
        ELSE TYPESTRING(BLINE(16),UXUTYPE-1);                  << 2112>>11030100
        IF SLNR=SYS'SLNR THEN TYPESTRING(BLINE(31),SLNR)       << 2112>>11040000
        ELSE TYPESTRING(BLINE(31),SLNR-1);                     << 2112>>11040100
        UNSATSEG:=UXSEG;                                       <<S1945>>11156000
        UNSATSEG.(7:1) := UXXD;  <<CONCATENATE NINTH BIT>>     <<S1945>>11157000
        TOS:=BLDSEGENTRY(UXUTYPE,UNSATSEG);                    <<S1945>>11160000
        STTPTR(DBSAT):=SLNR;   <<SATISFIER TYPE>>              <<S1945>>11195000
        IF SLNR = SYS'SLNR THEN STTPTR(DBXD):=SLPXD;           <<S1945>>11196000
    IF SLNR = SYS'SLNR THEN                                    <<S1945>>11216000
       BEGIN     <<CONCATENATE NINE BIT SEG. NO. >>            <<S1945>>11216100
         SEGNR:=SLSEGNR;                                       <<S1945>>11217000
         SEGNR.(7:1):=SLPXD; <<CONCATENATE NINTH BIT>>         <<S1945>>11217100
       END                                                     <<S1945>>11217200
    ELSE                                                       <<S1945>>11218000
       SEGNR:=SLSEGNR;                                         <<S1945>>11219000
    BLDSEGENTRY(SLNR,SEGNR);                                   <<S1945>>11220000
        SETBIT(SEGS,SEGNR);    <<SET REF'ED BIT>>              <<S1945>>11260000
                IF ENTP3.(ELOGSEG) = SEGNR THEN                <<S1945>>11535000
$EDIT VOID=11655100                                            <<G1540>>11655100
  TOS:=(MLIBSEARCH+2)&LSL(4); <<16 WORDS FOR GROUP & ACCT SL,>><<S1945>>11665000
                               <<32 FOR SYS. SL >>             <<S1945>>11666000
      IF SLNR = SYS'SLNR THEN                                  <<S1945>>11696000
        BEGIN                                                  <<S1945>>11696100
          TOS:=@DLAREA1-XSL'BITMAP'SIZE;                       <<S1945>>11697000
          SLSEGS(SLNR):=S0;                                    <<S1945>>11697100
          ASSEMBLE(DUP);                                       <<S1945>>11697200
          CLEARBITMAP (*,XSL'BITMAP'SIZE);                     <<S1945>>11697300
        END                                                    <<S1945>>11697400
      ELSE                                                     <<S1945>>11698000
        BEGIN                                                  <<S1945>>11699000
          TOS:=@DLAREA1-SL'BITMAP'SIZE;                        <<S1945>>11700000
          SLSEGS(SLNR):=S0;                                    <<S1945>>11705000
          ASSEMBLE(DUP);                                       <<S1945>>11710000
          CLEARBITMAP(*,SL'BITMAP'SIZE);                       <<S1945>>11715000
        END;                                                   <<S1945>>11716000
    CLEARBITMAP(SEGS,XSL'BITMAP'SIZE);                         <<S1945>>11760000
    IF <> THEN  <<RTEL OR PUBLIC OR GROUP SL>>                 << 2112>>11875000
       IF XREG = PUB'SLNR AND PSLFNAME = SSLFNAME,(11) THEN    << 2112>>11885000
       IF XREG = RTEL'SLNR THEN                                << 2112>>11890100
          BEGIN                                                << 2112>>11890101
               <<IF RTEL main switch is off, skip RTEL SL...>> << 2112>>11890102
          IF NOT RTEL'FLAG THEN GO ENDLOOP <<IGNORE RTEL SL?>> << 2112>>11890110
               <<RTEL is on, IF pgm in PUB.SYS, use RTEL SL?>> << 2112>>11890120
          ELSE IF RTEL'PGM'GA = "PUB.SYS " AND                 << 2112>>11890200
                  NOT RTEL'LOAD'PUB'SYS THEN GO ENDLOOP;       << 2112>>11890210
          END;                                                 << 2112>>11890300
$EDIT VOID=11942000                                            <<G1540>>11941000
                 <<SLNR-1 makes error numbers work>>           << 2112>>11959900
          TOS := ERR50+SLNR-1;                                 << 2112>>11960000
    <<                                           >>            <<S9316>>11961000
$EDIT VOID=11961600                                           <<<S1945>>11961100
                                                               <<c1389>>11975100
<< * GET THE FILE LABEL INFORMATION INSIDE THE DIRECTORY. * >> <<c1389>>11975200
                                                               <<c1389>>11975300
       FGETINFO(SLFNUM(XREG),,,,,,S1,,S0,,,FLSIZE,,,,          <<c1389>>11980000
                EXTSIZE,NUMEXTS,,,DS3);                        <<c1389>>11980100
                 <<SLNR-1 makes error numbers work>>           << 2112>>11999900
          TOS := ERR28+SLNR-1;                                 << 2112>>12000000
                      <<SLNR-1 makes err numbers work>>        << 2112>>12044900
               TOS := ERR94+SLNR-1;                            << 2112>>12045000
    IF SLNR = SYS'SLNR THEN                                    <<S1945>>12095100
                                                               <<S1945>>12095110
     <<IN THE EXPANDED SYSTEM SL THE REFERENCE TABLE     >>    <<S1945>>12095120
     <<INDEX IS IN RECORDS 1 AND 2.                      >>    <<S1945>>12095130
                                                               <<S1945>>12095140
      BEGIN                                                    <<S1945>>12095200
        MAKEROOMINDL(P256);                                    <<S1945>>12096000
        IF < THEN GO NFG;                                      <<S1945>>12096100
        TOS:=@DLAREA1-P256;                                    <<S1945>>12096200
        SLREC1(XREG):=S0;                                      <<S1945>>12096300
        @DLAREA1:=TOS;                                         <<S1945>>12096400
        FREADDIR(SLFNUM(XREG),BUF1,P256,1D); <<READ REC'S 1,2>><<S1945>>12096500
        IF <> THEN GO IOERROR;  <<ERROR?>>                     <<S1945>>12096600
        TOS:=SLREC1(XREG);                                     <<S1945>>12096700
        MOVE *:=BUF1,(P256);  <<SAVE REF. TAB REC. 1 & 2>>     <<S1945>>12096800
        FREADDIR(SLFNUM(XREG),BUF1,P256,0D); <<READ REC'S 0,1>><<S1945>>12096900
        IF <> THEN GO IOERROR;  <<ERROR?>>                     <<S1945>>12097000
      END                                                      <<S1945>>12097100
    ELSE                                                       <<S1945>>12097200
      BEGIN                                                    <<S1945>>12097300
        MAKEROOMINDL(128);                                     <<S1945>>12100000
        IF < THEN GO NFG;                                      <<S1945>>12105000
        TOS:=@DLAREA1-128;                                     <<S1945>>12110000
        SLREC1(XREG):=S0;                                      <<S1945>>12115000
        @DLAREA1:=TOS;                                         <<S1945>>12120000
        FREADDIR(SLFNUM(XREG),BUF1,P256,0D); <<READ REC'S 0,1>><<S1945>>12125000
        IF <> THEN GO IOERROR;  <<ERROR?>>                     <<S1945>>12130000
        IF SLID <> SLFILEID THEN GO INVALIDSL;  <<OLD VERSION?><<S1945>>12135000
$EDIT VOID=12135120                                            <<C1433>>12135010
        TOS:=SLREC1(XREG);                                     <<S1945>>12140000
        MOVE *:=BUF2,(128);  <<SAVE RECORD 1>>                 <<S1945>>12145000
                                                               <<S1945>>12146000
       IF NUMEXTS <> 1 THEN                                    <<C1433>>12146100
<< ******************************************************** >> <<C1433>>12146200
<<   CHECK TO VERIFY THAT THE  FILE LABEL MATCHES THE LABEL >> <<C1433>>12146210
<<   INFORMATION IN RECORD 0 (RETRIEVED FROM THE FREADDIR   >> <<C1433>>12146220
<<   CALL).  IF THE FILE SIZES OR THE EXTENT SIZES DIFFER,  >> <<C1433>>12146230
<<   AN 'INVALID SL' MESSAGE IS PRINTED AND THE PROCESS     >> <<C1433>>12146240
<<   ABORTS.                                                >> <<C1433>>12146250
<<       **************  WARNING  *************             >> <<C1433>>12146260
<<  The X-REG is initialized at the beginning of the immedi->> <<C1433>>12146270
<<  ate loop, and cannot be modified.  This code fix changes>> <<C1433>>12146280
<<  the X-REG during the following condition check; there-  >> <<C1433>>12146290
<<  fore, the condition check is done after all references  >> <<C1433>>12146300
<<  to the X-REG within the loop are made.                  >> <<C1433>>12146310
<< ******************************************************** >> <<C1433>>12146320
          IF INTEGER(FLSIZE) <> SLFLEN  OR                     <<C1433>>12146900
                 EXTSIZE <> SLEXTLEN THEN                      <<C1433>>12147000
             GO INVALIDSL;                                     <<C1433>>12147100
      END;                                                     <<S1945>>12147200
    IF SLNR = SYS'SLNR THEN                                    <<S1945>>12481000
      SEGNR := XSL'MAX'NR'SEG                                  <<S1945>>12482000
    ELSE                                                       <<S1945>>12483000
      SEGNR:=SL'MAX'NR'SEG;                                    <<S1945>>12485000
          IF SLNR = SYS'SLNR THEN                              <<S1945>>12611000
            XREG := XSL'BITMAP'SIZE                            <<S1945>>12612000
          ELSE                                                 <<S1945>>12613000
            XREG:=SL'BITMAP'SIZE;                              <<S1945>>12615000
    IF SLNR = SYS'SLNR THEN                                    <<S1945>>12671000
      BEGIN                                                    <<S1945>>12672000
        SEGNR := XSL'MAX'NR'SEG;                               <<S1945>>12673000
        NR'REC'FOR'STTMAP:=2;                                  <<S1945>>12674000
      END                                                      <<S1945>>12675000
    ELSE                                                       <<S1945>>12676000
      BEGIN                                                    <<S1945>>12677000
        SEGNR:=SL'MAX'NR'SEG;                                  <<S1945>>12677500
        NR'REC'FOR'STTMAP:=1;                                  <<S1945>>12678000
      END;                                                     <<S1945>>12679000
                                                               <<S1945>>12751000
  << CALCULATE NUMBER OF WORDS FOR SEGMENT'S EXTERNAL >>       <<S1945>>12752000
  << TABLE.                                           >>       <<S1945>>12753000
                                                               <<S1945>>12754000
              TOS := (SLNRRECS-SLSLD.(2:7)                     <<S1945>>12755000
                    -NR'REC'FOR'STTMAP)&LSL(7);                <<S1945>>12756000
              TOS := SLSLD.(2:7)+SLSA  <<EXTERNAL TABLE>>      <<S1945>>12790000
                    +NR'REC'FOR'STTMAP;  <<REC. NR.>>          <<S1945>>12791000
$EDIT VOID=13113000                                            <<G1540>>13111000
    DEFINE SEGLOGSEG = 0).(ELOGSEG#,  <<LOGSEG>>               <<S1945>>13970000
            IF TESTBIT(WORKAREA(ESEG'ARRAY'INDEX),             <<S1945>>14035000
                         SEGPTR(DBLOGSEG)) THEN                <<S1945>>14036000
                TEMP:=WORKAREA(ESLSEG'INDEX); <<# SEGLIST ENT>><<S1945>>14055000
    IF MCSTLSPTR(TEMP).(ESLID'INDEX) < PROG'FILE'NR THEN       <<S1945>>14175000
        DTEMP:=SLIDPTR(MCSTLSPTR(TEMP).(ESLID'INDEX));<<SLID>><<SSLEX>> 14185000
    TOS:=@WORKAREA; <<SEGLISTPTR>>                             <<S1945>>14270000
    CLEARBITMAP(*,MCSTTAB'SIZE);                               <<S1945>>14470000
                LRELEASE;  << LOADPROCMASTER >>                <<L2185>>14677000
                               MCSTLSPTR(TEMP).(ELOGSEG));     <<S1945>>14775000
            IF LOGICAL(WORKAREA.(SL'TYPE))  THEN               <<S1945>>15016000
                @SEGLISTPTR:=@WORKAREA(EXSLSEGLIST'INDEX)      <<S1945>>15017000
            ELSE                                               <<S1945>>15018000
                @SEGLISTPTR:=@WORKAREA(ESLSEGLIST'INDEX);      <<S1945>>15019000
                                                               <<01961>>15046000
    <<INORDER TO KEEP AUTO'DEALLOCATE FROM REMOVING THIS >>    <<01961>>15046100
    <<CST, WE MUST INCREMENT THE REFERENCE COUNT NOW.    >>    <<01961>>15046200
    <<WE SET THE DBREFCNT BIT TO ONE SO THAT WE WILL KNOW>>    <<01961>>15046300
    <<WHICH ENTRIES MUST HAVE THEIR REFERENCE COUNT      >>    <<01961>>15046400
    <<DECREMENTED.  WE WILL DECREMENT AFTER THE CALL TO  >>    <<01961>>15046500
    <<ADJREFCOUNTS IN UPDATESEGTAB PROCEDURE AND IN      >>    <<01961>>15046600
    <<REL'RESOURCES.                                     >>    <<01961>>15046700
                                                               <<01961>>15046800
                    TOS:=SEGPTR(DBLOGSEG);                     <<01961>>15046900
                    EXCHANGEDB(SEGTABDST);                     <<01961>>15047000
                    SI:=1;                                     <<01961>>15047010
                    ADJSEG(*);                                 <<01961>>15047100
                    EXCHANGEDB(0);       <<DB BACK TO STACK>>  <<01961>>15047200
                    SEGPTR(DBREFCNT):=1;                       <<01961>>15047300
                                                               <<01961>>15049000
                                                               <<R1625>>15145000
                     IF LOGICALMAPPING AND                     <<R1625>>15150000
                        LOADDOMAIN = PHYDOMAIN AND             <<R1625>>15155000
                        PROCLOAD THEN                          <<R1625>>15160000
                                     TOS := GET'PHY'CST        <<R1625>>15165000
                       ELSE                                    <<R1625>>15170000
                          TOS := GETENTRY(1);                  <<R1625>>15175000
                     IF S0 = 0 THEN                            <<R1625>>15180000
                       BEGIN        <<INSUFFICIENT CST'S>>     <<R1625>>15185000
                       DEL; <<REMOVE THE 0 ON TOS>>            <<R1625>>15186000
                       AUTO'DEALLOCATE;                        <<R1625>>15190000
                                <<TRY TO FREE UP SOME SPACE>>  <<R1625>>15195000
                       IF <> THEN                              <<R1625>>15195100
                         BEGIN <<NO PROG. FOUND TO DEALLOCATE>><<R1625>>15195200
                         TOS := ERR65;                         <<R1625>>15195300
                         GO ABORT;                             <<R1625>>15195400
                         END;<<THEN>>                          <<R1625>>15195500
                      <<TRY GETTING THE CST AGAIN>>            <<R1625>>15195600
                       IF LOGICALMAPPING AND                   <<R1625>>15195700
                          LOADDOMAIN = PHYDOMAIN AND           <<R1625>>15195800
                          PROCLOAD THEN                        <<R1625>>15195900
                                       TOS := GET'PHY'CST      <<R1625>>15196000
                         ELSE                                  <<R1625>>15196100
                            TOS := GETENTRY(1);                <<R1625>>15196200
                       IF S0 = 0 THEN                          <<R1625>>15196300
                         BEGIN        <<INSUFFICIENT CST'S>>   <<R1625>>15196400
                         TOS := ERR65;                         <<R1625>>15196500
                         GO ABORT;                             <<R1625>>15196600
                         END;<<THEN S0 = 0>>                   <<R1625>>15196700
                                                               <<R1625>>15196800
             << WE MUST REFRESH OUR LOCAL COPY OF THE SL>>     <<J2120>>15196810
             << LST ENTRY                               >>     <<J2120>>15196820
                                                               <<J2120>>15196830
            <<FIND SL ENTRY IN LST>>                           <<J2120>>15196900
                       TOS:=0;    <<LSEARCH RESULT>>           <<J2120>>15196901
                       TOS:=SLKEY(SLNR);    <<SLFILE ID>>      <<J2120>>15196902
                       EXCHANGEDB(SEGTABDST);                  <<J2120>>15196903
                       IF LSEARCH(*,NORMAL,SLFILE) THEN        <<J2120>>15196904
                         BEGIN   <<SL ENTRY EXISTS>>           <<J2120>>15196905
                           SLEXISTS:=TRUE;                     <<J2120>>15196906
                           SR:=ENTRYLENGTH;                    <<J2120>>15196907
                <<MOVE SL ENTRY TO STACK>>                     <<J2120>>15196914
                           TOS:=WORKAREA'DL;  <<TARGET>>       <<J2120>>15196915
                           TOS:=@ENTP;          <<SOURCE>>     <<J2120>>15196916
                           TOS:=SR;             <<COUNT>>      <<J2120>>15196917
                           ASSEMBLE(MVBL 3); <<MOVE DB TO DL>> <<J2120>>15196918
                <<SL ENTRY NOW EXISTS ON STACK>>               <<J2120>>15196919
                         END                                   <<J2120>>15196920
                        ELSE                                   <<J2120>>15196921
                         BEGIN   <<SL ENTRY NON-EXISTENT>>     <<J2120>>15196922
                            SLEXISTS:=FALSE;                   <<J2120>>15196923
                          END;                                 <<J2120>>15196924
                       EXCHANGEDB(0);    <<DB BACK TO STACK>>  <<J2120>>15196925
                       END;<<THEN S0 = 0>>                     <<R1625>>15197000
                                                               <<R1625>>15197100
                                                               <<R1625>>15197200
                    SEGPTR(DBREFCNT):=0;                       <<01961>>15221000
    INTEGER INDX;                                              <<L1454>>15531000
    DEFINE MAX'MAPPED'CST = SEGMAP(0).(8:8)#;                  <<L1454>>15532000
    EQUATE ENTRY'SIZE =2;                                      <<L1454>>15533000
   IF SEGMAPDST <> 0 THEN                                      <<L1454>>15830500
   BEGIN                                                       <<L1454>>15831000
   <<CLEAN UP THE LSTT IF WE HAVE PARTIALLY LOADED PROCEDURES>><<L1454>>15831300
   <<BY REMOVING THEIR STT POINTERS .                        >><<L1454>>15831600
     EXCHANGEDB(SEGMAPDST);                                    <<L1454>>15832000
     INDX:=0;                                                  <<L1454>>15832500
     WHILE (INDX:=INDX+1)<=MAX'MAPPED'CST DO                   <<L1454>>15833000
       IF SEGMAP((INDX*ENTRY'SIZE)+1)> SEGMAP(1)               <<L1454>>15833500
                       THEN SEGMAP((INDX*ENTRY'SIZE)+1):=0;    <<L1454>>15833600
     EXCHANGEDB(0);                                            <<L1454>>15834000
   END;                                                        <<L1454>>15834500
                    SYS'STTMAP,                                <<S1945>>15986000
    LOGICAL STTMODIFIED;                                       <<S1176>>16006000
           SYS'SL = SEGTYPE = 0#,                              <<S1945>>16041000
        IF SYS'SL THEN                                         <<S1945>>17116000
          SAT'LOGSEGNR:=SYS'STTMAP(STTNR)                      <<S1945>>17117000
        ELSE                                                   <<S1945>>17118000
          SAT'LOGSEGNR:=STTMAP(STTNR);                         <<S1945>>17120000
        IF SAT'LOGSEGNR = -1 THEN SAT'LOGSEGNR:=255;           <<S1945>>17121000
    IF SAT'LOGSEGNR <> 255 THEN                                <<S1945>>17225000
            TOS:=ERR28+(IF SEGTYPE=14 THEN 3                   << 2112>>17290000
                          <<SEGTYPE-1 makes error nums work>>  << 2112>>17290100
                       ELSE IF SEGTYPE>SYS'SLNR THEN SEGTYPE-1 << 2112>>17290200
                       ELSE SEGTYPE);                          << 2112>>17290300
        SAT'LOGSEGNR:=SAT'PLABEL.CSTNUM;                       <<S1945>>17311000
           <<CONCATENATE NINTH BIT OF SEG. NO.>>               <<S1945>>17311100
        SAT'LOGSEGNR.(7:1) := STTPTR (DBXD);                   <<S1945>>17312000
    IF SYS'SL THEN                                             <<S1945>>17366000
     @STTSEC:=@STTBUF+640   <<STTMAP ARRAY( 256 WORDS) >>      <<S1945>>17367000
          << + STT (256 WORDS) + 128 WORDS IN CASE STT  >>     <<S1945>>17367100
          << CROSS A RECORD BOUNDRY.                    >>     <<S1945>>17367200
    ELSE                                                       <<S1945>>17368000
      @STTSEC:=@STTBUF+512; <<STT+128+STTMAP ARRAY(128) >>     <<S1945>>17370000
    @SYS'STTMAP:=@STT+1;                                       <<S1945>>17376000
    IF SYS'SL THEN                                             <<S1945>>17381000
       TOS:= 896  <<SPACE FOR STT, STTMAP(256 WORD),STTSEC>>   <<S1945>>17382000
    ELSE                                                       <<S1945>>17383000
      TOS:=768;             <<SPACE FOR STT,STTMAP,STTSEC>>    <<S1945>>17385000
    IF SLSEG THEN TOS:=TOS+128; <<SL SEG>>                     <<S1945>>17440000
    IF SYS'SL THEN TOS:=TOS+128; <<STTMAP ARRAY IS 256 WORDS>> <<S1945>>17441000
    STTMODIFIED := FALSE; <<IF FALSE AFTER THE COMPLETE STT>>  <<S1176>>17561000
                          <<TABLE IS CALCULATED THEN ALL   >>  <<S1176>>17562000
                          <<ELEMENTS ARE THE SAME AS IS ON >>  <<S1176>>17563000
                          <<DISK. THEREFOR NO I/O NEEDED   >>  <<S1176>>17564000
        @SAT'SEGPTR:=FINDSEGENTRY(SAT'SLNR,                    <<S1945>>17615000
                           SAT'LOGSEGNR);                      <<S1945>>17620000
            TOS:=ERR28+(IF SEGTYPE=14 THEN 3                   << 2112>>17635000
                          <<SEGTYPE-1 makes error nums work>>  << 2112>>17635100
                       ELSE IF SEGTYPE>SYS'SLNR THEN SEGTYPE-1 << 2112>>17635200
                       ELSE SEGTYPE);                          << 2112>>17635300
      IF STT2 <> STTWORK1  <<IS CALCULATED STT ENTRY       >>  <<S1176>>17875000
                           <<DIFFERENT THEN WHAT WAS IN THE >> <<S1176>>17875010
        THEN               <<TABLE READ IN FROM DISK        >> <<S1176>>17875100
        BEGIN                                                  <<S1176>>17875200
          STT2 := STTWORK1;  <<SATISFIED EXTERNAL STT>>        <<S1176>>17875300
          STTMODIFIED := TRUE;                                 <<S1176>>17875400
        END;<<THEN>>                                           <<S1176>>17875500
                                                               <<S1176>>17885100
                                                               <<S1176>>17886000
                                                               <<S1176>>17887000
    IF (SEGPTR(DBNEWFLAG) = 1) AND STTMODIFIED                 <<S1176>>17895000
      THEN STORESTT;                                           <<S1176>>17896000
    LOGICAL CST'OBTAINED := FALSE;                             <<R1625>>18271000
                                                               <<R1625>>18272000
                                                               <<R1625>>18366000
    WHILE (NOT CST'OBTAINED) DO                                <<R1625>>18375000
    BEGIN                                                      <<R1625>>18380000
      CSTBX := ALCSTBLOCK(NPA);                                <<R1625>>18385000
      IF < THEN                                                <<R1625>>18390000
      BEGIN                                                    <<R1625>>18395000
        AUTO'DEALLOCATE;    <<TRY TO FREE UP SOME SPACE>>      <<R1625>>18400000
        IF <> THEN          <<NO FILES FOUND TO DEALLOCATE>>   <<R1625>>18405000
        BEGIN                                                  <<R1625>>18405100
          MERROR := ERR69;  <<INSUFFICIENT CSTBX SPACE>>       <<R1625>>18405200
          CONDCODE := CCL;                                     <<R1625>>18405300
          RETURN;                                              <<R1625>>18405400
        END; << THEN <> >>                                     <<R1625>>18405500
      END  <<THEN>>                                            <<R1625>>18405600
      ELSE CST'OBTAINED := TRUE;                               <<R1625>>18405700
    END; <<WHILE>>                                             <<R1625>>18405800
                                                               <<R1625>>18405900
     INTEGER SAVEDB,                                           <<01960>>18511000
             CSTB'INDEX, <<LOCAL COPY OF THE INDEX INTO CSTXB>><<01960>>18512000
             AUX'XDS;      <<LOCAL COPY OF AUX XDS NUMBER    >><<01960>>18513000
                                                               <<01960>>18514000
                                                               <<01960>>19191000
     <<--------------------------------------------------->>   <<01960>>19191100
     << MOVE PROGRAM NAME FROM ENTRY 0 OF PROGRAM NAME    >>   <<01960>>19191200
     << TABLE TO THE ENTRY INDEXED BY THE INDEX INTO THE  >>   <<01960>>19191300
     << CST BLOCK POINTER TABLE.                          >>   <<01960>>19191400
     <<--------------------------------------------------->>   <<01960>>19191500
     CSTB'INDEX := CSTBX;  <<SAVE LOCAL COPY>>                 <<01960>>19191600
     SAVEDB := EXCHANGEDB(SEGTABDST);                          <<01960>>19191700
     AUX'XDS := LOADER'AUX'XDS;                                <<01960>>19191800
                                                               <<01960>>19191900
     IF (AUX'XDS <> 0) THEN                                    <<01960>>19192000
       BEGIN                                                   <<01960>>19192100
       EXCHANGEDB(AUX'XDS);                                    <<01960>>19192200
                                                               <<01960>>19192300
       MOVE PROGNAME'TABLE(CSTB'INDEX *                        <<01960>>19192400
                          PROGNAME'TABLE(ENTRY'LEN))           <<01960>>19192500
            := PROGNAME'TABLE(0),(PROGNAME'TABLE(ENTRY'LEN));  <<01960>>19192600
                                                               <<01960>>19192700
       TOS := AUX'XDS;                                         <<01960>>19192800
       TOS := @PROGNAME'TABLE(CSTB'INDEX *                     <<01960>>19192900
                 PROGNAME'TABLE(ENTRY'LEN)+PROGNAME'DADDR);    <<01960>>19193000
              <<COMES FROM AUX'XDS>>                           <<01960>>19193100
                                                               <<01960>>19193200
       EXCHANGEDB(0);  <<BACK TO STACK>>                       <<01960>>19193300
                                                               <<01960>>19193400
       TOS := @PROGKEY;  <<HODA LODA OF PROGRAM FILE>>         <<01960>>19193500
                         <<COMES FROM STACK>>                  <<01960>>19193600
       TOS := 2;                                               <<01960>>19193700
       ASSEMBLE (MTDS 4);                                      <<R2168>>19193800
     END; <<THEN>>                                             <<01960>>19193900
                                                               <<01960>>19194000
     EXCHANGEDB(SAVEDB);                                       <<01960>>19194100
     LOGICAL SLXTYPE = Q+21;                                   <<S1945>>19384000
     INTEGER ARRAY WORKAREA(*)=Q+22;                           <<S1945>>19385000
     DEFINE SEARCHDOMAIN' = COMWORD.(7:1)#;                             19401000
    IF SLNR = SYS'SLNR THEN                                    <<S1945>>19476000
      BEGIN                                                    <<S1945>>19477000
       WORKAREA(POSIT).(0:1):=1;                               <<S1945>>19478000
       SLXTYPE:=TRUE;                                          <<S1945>>19479000
     END;                                                      <<S1945>>19479500
         <<MOVE SLSEGS TO WORKAREA>>                           <<S1945>>19485500
    IF SLNR = SYS'SLNR THEN                                    <<S1945>>19486000
      BEGIN                                                    <<S1945>>19486100
        MOVE WORKAREA(POSIT):=*,(XSL'BITMAP'SIZE);             <<S1945>>19487000
        POSIT:=POSIT+XSL'BITMAP'SIZE;                          <<S1945>>19488000
      END                                                      <<S1945>>19489000
    ELSE                                                       <<S1945>>19489100
      BEGIN                                                    <<S1945>>19489200
        MOVE WORKAREA(POSIT):=*,(SL'BITMAP'SIZE);              <<S1945>>19490000
        POSIT:=POSIT+SL'BITMAP'SIZE;                           <<S1945>>19495000
      END;                                                     <<S1945>>19496000
                    TOS.(ELOGSEG):=SEGPTR(DBLOGSEG);           <<S1945>>19635000
                        TOS.(ELOGSEG):=SEGPTR(DBLOGSEG);       <<S1945>>19710000
    SETSECPTRS;       <<RESET SECONDARY POINTERS>>             <<J2120>>19951000
        ENTP3(0):=%177600; <<FREE>>                            <<S1945>>19985000
    BUILDGARBAGE(SL - HEADER'LEN, SQ);                         <<L2185>>20025000
  ASSEMBLE(ADDS 21);  <<SPACE FOR LOCALS>>                     <<S1945>>20045000
      LOGSEGNR:=STTPTR(DBPLABEL).CSTNUM;                       <<S1945>>20116000
      LOGSEGNR.(7:1):=STTPTR(DBXD); <<CONCATENATE 9TH BIT>>    <<S1945>>20117000
      @SEGPTR:=FINDSEGENTRY(STTPTR(DBSAT),                     <<S1945>>20120000
                            LOGSEGNR);                         <<S1945>>20125000
        THEN WORKAREA(3):=LOGSEGNR               <<LOGSEG #>>  <<S1945>>20170000
          <<FIND SATISFIER>>                                   <<S1945>>20355000
          LOGSEGNR:=STTPTR(DBPLABEL).CSTNUM;                   <<S1945>>20356000
          LOGSEGNR.(7:1):=STTPTR(DBXD); <<CONCATENATE 9TH BIT>><<S1945>>20357000
          @SEGPTR:=FINDSEGENTRY(STTPTR(DBSAT),                 <<S1945>>20360000
                            LOGSEGNR);                         <<S1945>>20365000
                                                               <<S1945>>20481000
 << MOVE PROGRAM SEGMENT NUMBER TO BITS 0 TO 8 AND  >>         <<S1945>>20482000
 << PUT PROGRAM SEGMENT TYPE IN BITS 9 TO 15        >>         <<S1945>>20483000
                                                               <<S1945>>20484000
              PSEGMAP(TEMP):=(TEMP-1)&LSL(7)+PROG'FILE'NR;     <<S1945>>20485000
       << MLIBSEARCH-1 makes any warning messages correct >>   << 2112>>20539900
  TOS:=IF MLIBSEARCH>SYS'SLNR THEN MLIBSEARCH-1  <<LIB>>       << 2112>>20540000
       ELSE MLIBSEARCH;                                        << 2112>>20540100
  IF TEMPTYPE = EXTENSION THEN ESEARCHDOMAIN := SEARCHDOMAIN'; <<S1945>>20561000
  EXSYS'SL:=SLXTYPE;                                           <<S1945>>20562000
              TOS.(ELOGSEG):=SEGPTR(DBLOGSEG); <<LOG SEG #>>   <<S1945>>20755000
                   <<LENGTH OF ENTRY>>                         <<S1945>>20889000
            TOS:=TOS*ESLSEGLIST'ENTRY'SIZE+ESLSEGLIST'INDEX;   <<S1945>>20890000
                ESLSEG'SL:=TOS;                                <<S1945>>21015000
            TOS:=@ENTP+ESEG'ARRAY'INDEX;  <<PTR TO SEG ARRAY>> <<S1945>>21025000
            CLEARBITMAP(*,SL'BITMAP'SIZE); <<CLEAR SEG ARRAY>> <<S1945>>21030000
            TEMP:=ESLSEG'SL*ESLSEGLIST'ENTRY'SIZE;             <<S1945>>21040000
                ENTP3(TEMP):=%177600;                          <<S1945>>21055000
            IF SLNR = SYS'SLNR THEN                            <<S1945>>21106000
              IF ESLSEG'SL+TEMP+10 > 510                       <<S1945>>21107000
                THEN TEMP:=510-ESLSEG'SL                       <<S1945>>21108000
              ELSE TEMP:=TEMP+10                               <<S1945>>21109000
            ELSE                                               <<S1945>>21109100
              IF ESLSEG'SL+TEMP+10 > 255                       <<S1945>>21110000
                THEN TEMP:=255-ESLSEG'SL                       <<S1945>>21115000
              ELSE TEMP:=TEMP+10;                              <<S1945>>21120000
            WHILE ENTP3.(ELOGSEG) <> 511                       <<S1945>>21195000
            TOS:=@ENTP+ESEG'ARRAY'INDEX; <<PTR TO SEG ARRAY>>  <<S1945>>21225000
            TOS:=WORKAREA(TEMP).(ELOGSEG); <<LOG SEG #>>       <<S1945>>21230000
            WHILE ENTP3.(ELOGSEG) <> SAVEALLOCSEG.(7:9)        <<S1945>>21285000
          TEMP := 0;  << Means LOADPROCMASTER not expanded >>  <<L2185>>21417000
          IF RLENGTH < LPROCLEN + HEADER'LEN THEN              <<L2185>>21420000
                  @ENTP := TEMP;                               <<L2185>>21451000
                  LRELEASE;  << LOADPROCMASTER >>              <<L2185>>21452000
$EDIT VOID=21490000                                            <<L2185>>21475000
          LSTORE;  << New LOADPROCMASTER >>                    <<L2185>>21533000
          IF <> THEN                                           <<L2185>>21533100
             BEGIN                                             <<L2185>>21533200
             LDELETE;  << New, expanded LOADPROCMASTER >>      <<L2185>>21533300
             @ENTP := TEMP;                                    <<L2185>>21533400
             LRELEASE;  << Original LOADPROCMASTER >>          <<L2185>>21533500
             LSEARCH' (TEMPKEY, TEMPMODE, TEMPTYPE);           <<L2185>>21533600
             LDELETE;                                          <<L2185>>21533700
             GO NOROOM;                                        <<L2185>>21533800
             END;                                              <<L2185>>21533900
                                                               <<L2185>>21534000
          << Delete old LOADPROCMASTER if expanded. >>         <<L2185>>21534100
          <<---------------------------------------->>         <<L2185>>21534200
                                                               <<L2185>>21534300
          IF TEMP <> 0 THEN                                    <<L2185>>21534400
             BEGIN                                             <<L2185>>21534500
             @ENTP := TEMP;                                    <<L2185>>21534600
             LDELETE;                                          <<L2185>>21534700
             END;                                              <<L2185>>21534800
  IF PROCLOAD' THEN                                            <<L2185>>21597000
    BEGIN                                                      <<L2185>>21597100
    LSTORE;                                                    <<L2185>>21597200
    IF <> THEN                                                 <<L2185>>21597300
      BEGIN                                                    <<L2185>>21597400
      LDELETE;                                                 <<L2185>>21597500
      EXCHANGEDB (0);                                          <<L2185>>21597600
      CSTSALLOCATED := 0;                                      <<L2185>>21597700
      GO NOROOM;                                               <<L2185>>21597800
      END;                                                     <<L2185>>21597900
    END;                                                       <<L2185>>21598000
  << NOW WE MUST DECREMENT THE REFERENCE COUNT OF THOSE     >> <<01961>>21606000
  << SEGMENTS THAT WE INCREMENTED IN ADDSEGDATA'SLDB        >> <<01961>>21606100
  << TO PREVENT AUTO'DEALLOCATE FROM UNLOADING SEGMENTS WE  >> <<01961>>21606200
  << WERE LOADING.                                          >> <<01961>>21606300
                                                               <<01961>>21606400
  SLNR:=MLIBSEARCH+1;                                          <<01961>>21606500
  WHILE (SLNR:=SLNR-1) >= 0 DO                                 <<01961>>21606600
    BEGIN      <<EACH SL>>                                     <<01961>>21606700
      TOS:=0;        <<LSEARCH RESULT>>                        <<S2111>>21606710
      TOS:=SLKEY(SLNR);    <<SLFILE ID>>                       <<01961>>21606800
      EXCHANGEDB(SEGTABDST);                                   <<01961>>21606900
      IF LSEARCH(*,NORMAL,SLFILE) THEN                         <<01961>>21607000
        BEGIN                                                  <<01961>>21607100
         SI:=-1;                                               <<01961>>21607200
         EXCHANGEDB(0);       <<DB BACK TO STACK>>             <<01961>>21607300
         @SEGPTR:=SLDATABASE(SLNR);                            <<01961>>21607400
         WHILE @SEGPTR <> 0 DO                                 <<01961>>21607500
           BEGIN                                               <<01961>>21607600
             IF SEGPTR(DBREFCNT) =1 THEN                       <<01961>>21607700
                BEGIN                                          <<01961>>21607800
                  TOS:=SEGPTR(DBLOGSEG);                       <<01961>>21607900
                  EXCHANGEDB(SEGTABDST);                       <<01961>>21608000
                  ADJSEG(*);                                   <<01961>>21608100
                  EXCHANGEDB(0);       <<DB BACK TO STACK>>    <<01961>>21608200
                  SEGPTR(DBREFCNT):=0;                         <<01961>>21608300
                END;                                           <<01961>>21608400
             @SEGPTR:=SEGPTR(SEGNEXT);                         <<01961>>21608500
           END; <<WHILE>>                                      <<01961>>21608600
        END <<IF>>                                             <<01961>>21608700
      ELSE                                                     <<01961>>21608800
        EXCHANGEDB(0);       <<DB BACK TO STACK>>              <<01961>>21608900
    END; <<WHILE>>                                             <<01961>>21609000
                                                               <<01961>>21609100
$PAGE                                                          <<*2201>>21682000
PROCEDURE REL'LSTX'ENTRY(LOGSEGN,DADDR);                       <<*2201>>21682010
<<---------------------------------------------------------->> <<*2201>>21682020
<< RELEASES THE LSTX ENTRY ASSOCIATED WITH THE LOGICAL      >> <<*2201>>21682030
<< SEGMENT NUMBER PASSED TO LOGSEGN AND DISK ADDRESS PASSED >> <<*2201>>21682040
<< TO DADDR.                                                >> <<*2201>>21682050
<< PARAMETERS:                                              >> <<*2201>>21682060
<<    LOGSEGN - THE LOGICAL SEGMENT NUMBER FROM THE SL FILE >> <<*2201>>21682070
<<              ENTRY THAT WE ARE RELEASING.                >> <<*2201>>21682080
<<    DADDR - HODA/LODA FROM SL FILE ENTRY.                 >> <<*2201>>21682090
<<---------------------------------------------------------->> <<*2201>>21682100
VALUE LOGSEGN,DADDR;                                           <<*2201>>21682110
INTEGER LOGSEGN;                                               <<*2201>>21682120
DOUBLE DADDR;                                                  <<*2201>>21682130
BEGIN                                                          <<*2201>>21682140
    EQUATE EXSLINFO'AREA'SIZE = 35;                            <<*2201>>21682150
    INTEGER SAVEDB, NUMENTRIES;                                <<*2201>>21682160
    INTEGER POINTER ENTRYPTR;                                  <<*2201>>21682170
    DOUBLE POINTER EPOINTER;                                   <<*2201>>21682180
    LOGICAL FOUND;                                             <<*2201>>21682190
                                                               <<*2201>>21682200
    NUMENTRIES := ESLINFO'EXT;  << # OF SL INFO AREAS >>       <<*2201>>21682210
    @ENTRYPTR := @ENTP2;                                       <<*2201>>21682220
    FOUND := FALSE;                                            <<*2201>>21682230
    WHILE (NUMENTRIES > 0) AND (NOT FOUND) DO                  <<*2201>>21682240
    BEGIN                                                      <<*2201>>21682250
        @EPOINTER := @ENTRYPTR + 1;                            <<*2201>>21682260
        IF EPOINTER = DADDR THEN                               <<*2201>>21682270
           BEGIN                                               <<*2201>>21682280
             TOS := @ENTRYPTR + ESLSEGLIST'ENTRY'SIZE;         <<*2201>>21682290
             TOS := LOGSEGN;                                   <<*2201>>21682300
             CLEARBIT(*,*);                                    <<*2201>>21682310
             FOUND := TRUE;                                    <<*2201>>21682320
           END                                                 <<*2201>>21682330
         ELSE                                                  <<*2201>>21682340
           BEGIN                                               <<*2201>>21682350
             NUMENTRIES := NUMENTRIES - 1;                     <<*2201>>21682360
             IF ENTRYPTR.(SL'TYPE) = 1 THEN << SL EXTENSION >> <<*2201>>21682370
                @ENTRYPTR := @ENTRYPTR + EXSLINFO'AREA'SIZE    <<*2201>>21682380
             ELSE                                              <<*2201>>21682390
                @ENTRYPTR := @ENTRYPTR + ESLINFO'AREA'SIZE;    <<*2201>>21682400
           END;                                                <<*2201>>21682410
    END; << WHILE >>                                           <<*2201>>21682420
END; << REL'LSTX'ENTRY >>                                      <<*2201>>21682430
$PAGE                                                          <<*2201>>21685000
PROCEDURE REL'LST'LSTX'ENTRY(PHYCSTN, SLEXISTS);               <<*2201>>21685010
<<--------------------------------------------------------->>  <<*2201>>21685020
<< RELEASES THE LST SL ENTRY AND THE LSTX ENTRY ASSOCIATED >>  <<*2201>>21685030
<< WITH THE PHYSICAL CST NUMBER PASSED TO PHYCSTN.  THIS   >>  <<*2201>>21685040
<< IS DONE AS A RESULT OF THE LOADER DISCOVERING AN ERROR  >>  <<*2201>>21685050
<< ON A LOADPROC.  THIS PREVENTS THE CST ENTRY FROM        >>  <<*2201>>21685060
<< EVENTUALLY BEING RETURNED TWICE.                        >>  <<*2201>>21685070
<< ***** NOTE : THIS ROUTINE ASSUMES THAT THE CALLER HAS  >>   <<*2201>>21685080
<< *****        SET THE SECONDARY POINTERS BY CALLING     >>   <<*2201>>21685090
<< *****        LSEARCH.                                  >>   <<*2201>>21685100
<<  PARAMETERS : PHYCSTN - THE PHYSICAL CST ENTRY THAT IS >>   <<*2201>>21685110
<<               BEING RELEASED.                          >>   <<*2201>>21685120
<<               SLEXISTS -  TRUE IF THE SL ENTRY EXISTS. >>   <<*2201>>21685130
<<-------------------------------------------------------->>   <<*2201>>21685140
VALUE PHYCSTN, SLEXISTS;                                       <<*2201>>21685150
INTEGER PHYCSTN;                                               <<*2201>>21685160
LOGICAL SLEXISTS;                                              <<*2201>>21685170
BEGIN                                                          <<*2201>>21685180
    INTEGER SAVEDB,                                            <<*2201>>21685190
            NUMENTRIES,  << NUMBER OF SEGLIST ENTRIES >>       <<*2201>>21685200
            LOGSEGNO;    << LST LOGICAL SEGMENT NUMBER >>      <<*2201>>21685210
    LOGICAL FOUND;                                             <<*2201>>21685220
    INTEGER POINTER ENTRYPTR;                                  <<*2201>>21685230
    INTEGER IDX;  << INDEX INTO EXTENSION ID BITMAP >>         <<*2201>>21685240
    DOUBLE DISK'ADDRESS;  << HODA LODA IN SL FILE ENTRY >>     <<*2201>>21685250
    INTEGER PIN;                                               <<*2201>>21685260
    DOUBLE SEARCH'KEY;                                         <<S2749>>21685261
    INTEGER SAVEDB1;                                           <<*2201>>21685270
    INTEGER CURR'DST;                                          <<*2201>>21685280
                                                               <<*2201>>21685290
    << SAVE THE SECONDARY POINTERS FOR THE CALLING ROUTINE >>  <<*2201>>21685300
    TOS := @ENTP;                                              <<*2201>>21685310
    TOS := @ENTP1;                                             <<*2201>>21685320
    TOS := @ENTP2;                                             <<*2201>>21685330
    TOS := @ENTP3;                                             <<*2201>>21685340
    PIN := MPIN;  << SAVE PIN BEFORE CHANGING DB >>            <<*2201>>21685350
    SAVEDB := EXCHANGEDB(SEGTABDST);                           <<*2201>>21685360
    IF SLEXISTS THEN                                           <<*2201>>21685370
       BEGIN    << SL ENTRY EXISTS >>                          <<*2201>>21685380
         FOUND := FALSE;                                       <<*2201>>21685390
         NUMENTRIES := INTEGER(ESLSEG'SL);                     <<*2201>>21685400
         @ENTRYPTR := @ENTP3;                                  <<*2201>>21685410
         DISK'ADDRESS := ENTDP1;                               <<*2201>>21685420
         WHILE (NOT FOUND) AND (NUMENTRIES > 0) DO             <<*2201>>21685430
         BEGIN                                                 <<*2201>>21685440
           IF ENTRYPTR(2) = PHYCSTN THEN                       <<*2201>>21685450
              BEGIN                                            <<*2201>>21685460
                TOS := @ENTP2;                                 <<*2201>>21685470
                TOS := ENTRYPTR.(ELOGSEG);                     <<*2201>>21685480
                CLEARBIT(*,*); << RESET BIT IN BITMAP >>       <<*2201>>21685490
                LOGSEGNO := ENTRYPTR.(ELOGSEG);                <<*2201>>21685500
                ENTRYPTR.(ELOGSEG) := -1;                      <<*2201>>21685510
                ENTRYPTR.(ESLID'INDEX) := 0;                   <<*2201>>21685520
                ENTRYPTR(1) := 0;                              <<*2201>>21685530
                ENTRYPTR(2) := 0;                              <<*2201>>21685540
                FOUND := TRUE;                                 <<*2201>>21685550
              END                                              <<*2201>>21685560
           ELSE                                                <<*2201>>21685570
              BEGIN                                            <<*2201>>21685580
                NUMENTRIES := NUMENTRIES - 1;                  <<*2201>>21685590
                @ENTRYPTR := @ENTRYPTR +                       <<*2201>>21685600
                                  ESLSEGLIST'ENTRY'SIZE;       <<*2201>>21685610
              END; << ELSE >>                                  <<*2201>>21685620
         END; << WHILE >>                                      <<*2201>>21685630
       END;  << IF SLEXISTS >>                                 <<*2201>>21685640
    IF FOUND THEN                                              <<*2201>>21685650
       BEGIN                                                   <<*2201>>21685660
         TOS := 0;  << LSEARCH RESULT >>                       <<*2201>>21685670
         TOS := DOUBLE(PIN);                                   <<*2201>>21685680
         IF LSEARCH(*,ANYMODE,LOADPROCMASTER) THEN             <<*2201>>21685690
          BEGIN                                                <<*2201>>21685700
            IF ACTIVE'LPROCS > 0 THEN                          <<*2201>>21685710
               BEGIN                                           <<*2201>>21685720
               << EXISTS SOME ACTIVE LOADPROCS FOR MASTER >>   <<*2201>>21685730
                 NUMENTRIES := ACTIVE'LPROCS;                  <<*2201>>21685740
                 IDX := 0;                                     <<*2201>>21685750
                 @ENTRYPTR := @ENTP1; << SAVE POINTER >>       <<*2201>>21685760
                 WHILE ((IDX:=IDX+1) <= SL'MAX'NR'SEG - 1) AND <<*2201>>21685770
                        (NUMENTRIES > 0) DO                    <<*2201>>21685780
                 BEGIN                                         <<*2201>>21685790
                   << CHECK IF INDEX IS BEING USED >>          <<*2201>>21685800
                     TOS := @ENTRYPTR;                         <<*2201>>21685810
                     IF TESTBIT(*,IDX) THEN                    <<*2201>>21685820
                        BEGIN                                  <<*2201>>21685830
$EDIT VOID=21685840                                            <<S2749>>21685840
                           SEARCH'KEY:= DOUBLE(LOGICAL(PIN))&  <<S2749>>21685850
                                        DLSL(16)+DOUBLE(IDX);  <<*2201>>21685860
                          FOUND := FALSE;                      <<*2201>>21685870
                          CURR'DST := SEGTABDST'EX;            <<*2201>>21685880
                          EXCHANGEDB(CURR'DST);                <<*2201>>21685890
                          << SEARCH EACH LSTX EXTRA DATA     >><<*2201>>21685900
                          << SEGMENT TRYING TO FIND AN       >><<*2201>>21685910
                          << EXTENSION ENTRY.                >><<*2201>>21685920
                          WHILE (NOT FOUND) AND                <<*2201>>21685930
                                (CURR'DST <> 0) DO             <<*2201>>21685940
                          BEGIN                                <<*2201>>21685950
                           <<================================>><<*2201>>21685960
                           <<=  NOTE THAT FOR SEARCHING THE =>><<*2201>>21685970
                           <<=  LSTX WE MUST USE LSEARCH'   =>><<*2201>>21685980
                           <<=  SO THAT THE ENTRY IS NOT    =>><<*2201>>21685990
                           <<=  MOVED INTO THE LST.         =>><<*2201>>21686000
                           <<================================>><<*2201>>21686010
                          IF LSEARCH'(SEARCH'KEY,ANYMODE,      <<S2749>>21686020
                                      EXTENSION) THEN          <<S2749>>21686021
                             BEGIN                             <<*2201>>21686030
                               FOUND := TRUE;                  <<*2201>>21686040
                               REL'LSTX'ENTRY(LOGSEGNO,        <<*2201>>21686050
                                              DISK'ADDRESS);   <<*2201>>21686060
                               NUMENTRIES := NUMENTRIES - 1;   <<*2201>>21686070
                             END                               <<*2201>>21686080
                          ELSE                                 <<*2201>>21686090
                             BEGIN                             <<*2201>>21686100
                               CURR'DST := NEXT'LST;           <<*2201>>21686110
                               EXCHANGEDB(CURR'DST);           <<*2201>>21686120
                             END;                              <<*2201>>21686130
                          END;  << WHILE >>                    <<*2201>>21686140
                        END;  << IF TESTBIT >>                 <<*2201>>21686150
                 EXCHANGEDB(SEGTABDST);                        <<*2201>>21686160
                 END;  << WHILE >>                             <<*2201>>21686170
               END;  << IF ACTIVE'LPROCS >>                    <<*2201>>21686180
               << RELEASE THE TEMPORARY COPY OF THE       >>   <<*2201>>21686190
               << LOADPROCMASTER ENTRY.  NO NEED TO STORE >>   <<*2201>>21686200
               << IT BACK SINCE IT HAS NOT BEEN MODIFIED  >>   <<*2201>>21686210
               LRELEASE;                                       <<*2201>>21686220
          END; << IF LSEARCH(LOADPROCMASTER) >>                <<*2201>>21686230
       END;  << IF FOUND >>                                    <<*2201>>21686240
       EXCHANGEDB(SAVEDB);                                     <<*2201>>21686250
       << RESTORE THE SECONDARY POINTERS >>                    <<*2201>>21686260
       @ENTP3 := TOS;                                          <<*2201>>21686270
       @ENTP2 := TOS;                                          <<*2201>>21686280
       @ENTP1 := TOS;                                          <<*2201>>21686290
       @ENTP := TOS;                                           <<*2201>>21686300
END;  << REL'LST'LSTX'ENTRY >>                                 <<*2201>>21686310
    LOGICAL SLEXISTS;                                          <<01961>>21706000
    <<RELEASE ALLOCATED CST'S AND CLEANUP BEFORE WE LEAVE>>    <<01961>>21710000
            SLEXISTS:=FALSE;                                   <<01961>>21735500
            TOS:=0;        <<LSEARCH RESULT>>                  <<S2111>>21735510
            TOS:=SLKEY(SLNR);    <<SLFILE ID>>                 <<01961>>21736000
            EXCHANGEDB(SEGTABDST);                             <<01961>>21736500
            IF LSEARCH(*,NORMAL,SLFILE) THEN                   <<01961>>21737000
              BEGIN              <<SL ENTRY EXISTS>>           <<01961>>21737500
                SLEXISTS:=TRUE;                                <<01961>>21738000
                SI:=-1;                                        <<01961>>21738500
              END;                                             <<01961>>21739000
            EXCHANGEDB(0);       <<DB BACK TO STACK>>          <<01961>>21739500
                IF SEGPTR(DBREFCNT) =1 THEN                    <<01961>>21751000
                   BEGIN                                       <<01961>>21751100
                     IF SLEXISTS THEN                          <<01961>>21751200
                       BEGIN                                   <<01961>>21751300
                         TOS:=SEGPTR(DBLOGSEG);                <<01961>>21751400
                         EXCHANGEDB(SEGTABDST);                <<01961>>21751500
                         ADJSEG(*);                            <<01961>>21751600
                         EXCHANGEDB(0);  <<DB BACK TO STACK>>  <<01961>>21751700
                       END;                                    <<01961>>21751800
                     SEGPTR(DBREFCNT):=0;                      <<01961>>21751900
                   END;                                        <<01961>>21752000
                                                               <<01961>>21754000
                IF SEGPTR(DBNEWFLAG) = 1 THEN                  <<*2201>>21755000
                   BEGIN                                       <<*2201>>21755100
                     IF SLEXISTS THEN                          <<*2201>>21755110
                        REL'LST'LSTX'ENTRY(SEGPTR(DBPHYCST),   <<*2201>>21755120
                                          TRUE)                <<*2201>>21755130
                     ELSE                                      <<*2201>>21755140
                         REL'LST'LSTX'ENTRY(SEGPTR(DBPHYCST),  <<*2201>>21755200
                                            FALSE);            <<*2201>>21755210
                     RETURNENTRY(1,SEGPTR(DBPHYCST));          <<*2201>>21755300
                   END;                                        <<*2201>>21760000
$PAGE                                                          <<R1625>>22040001
$EDIT VOID=22044900                                            <<01960>>22040010
$PAGE                                                          <<01960>>22040020
<<-------------------------------------------------------->>   <<01960>>22040030
<<  SUBJECT : INITIALIZATION OF LOADER AUXILIARY XDS.     >>   <<01960>>22040040
<<                                                        >>   <<01960>>22040050
<<  DATE    : SEPTEMBER 20, 1985                          >>   <<01960>>22040060
<<                                                        >>   <<01960>>22040070
<<  OVERVIEW: The loader auxiliary extra data segment is  >>   <<01960>>22040080
<<    a multi table data segment.  Each table has a       >>   <<01960>>22040090
<<    standard header and are linked together via a DB    >>   <<01960>>22040100
<<    relative pointer in the header.  More tables within >>   <<01960>>22040110
<<    the extra data segment may be added easily if needed>>   <<01960>>22040120
<<                                                        >>   <<01960>>22040130
<<  Loader Auxiliary extra data segment format:           >>   <<01960>>22040140
<<                   __________________                   >>   <<01960>>22040150
<<            --- 0 <    Table size    > --               >>   <<01960>>22040160
<<           I    1 <   Entry length   >  I               >>   <<01960>>22040170
<<           I    2 <   total # free   >  I               >>   <<01960>>22040180
<<  Table==> I    3 <     1st free     >  I ==> Table     >>   <<01960>>22040190
<<    one    I    4 <ptr. to next table>  I       header  >>   <<01960>>22040200
<<           I    5 <      unused      >  I               >>   <<01960>>22040210
<<           I    6 <      unused      >  I               >>   <<01960>>22040220
<<           I    7 <      unused      > --               >>   <<01960>>22040230
<<           I   10 <autoallocate table>                  >>   <<01960>>22040240
<<           I      <        .         >                  >>   <<01960>>22040250
<<            ---   <        .         >                  >>   <<01960>>22040260
<<                  <------------------>                  >>   <<01960>>22040270
<<  Table  -------- <   program        >                  >>   <<01960>>22040280
<<   two            <   name table     >                  >>   <<01960>>22040290
<<                  <                  >                  >>   <<01960>>22040300
<<                   ------------------                   >>   <<01960>>22040310
<<                                                        >>   <<01960>>22040320
<<  PROGRAM NAME TABLE:                                   >>   <<01960>>22040330
<<        ENTRY SIZE         ->  16                       >>   <<01960>>22040340
<<        NUMBER OF ENTRIES  ->  SIZE OF CST BLOCK TABLE  >>   <<01960>>22040350
<<                                                        >>   <<01960>>22040360
<<                   <----------------->                  >>   <<01960>>22040370
<<               0   <PROGRAM          >                  >>   <<01960>>22040380
<<               1   <         NAME    >                  >>   <<01960>>22040390
<<               2   <                 >                  >>   <<01960>>22040400
<<               3   <                 >                  >>   <<01960>>22040410
<<               4   <GROUP            >                  >>   <<01960>>22040420
<<               5   <         NAME    >                  >>   <<01960>>22040430
<<               6   <                 >                  >>   <<01960>>22040440
<<               7   <                 >                  >>   <<01960>>22040450
<<               10  < ACCOUNT         >                  >>   <<01960>>22040460
<<               11  <         NAME    >                  >>   <<01960>>22040470
<<               12  <                 >                  >>   <<01960>>22040480
<<               13  <                 >                  >>   <<01960>>22040490
<<               14  < HODA            >                  >>   <<01960>>22040500
<<               15  <       LODA      >                  >>   <<01960>>22040510
<<               16  <    UNUSED       >                  >>   <<01960>>22040520
<<               17  <    UNUSED       >                  >>   <<01960>>22040530
<<                   <----------------->                  >>   <<01960>>22040540
<<-------------------------------------------------------->>   <<01960>>22040550
PROCEDURE INIT'LOADER'AUX'XDS;                                 <<01960>>22040560
  OPTION UNCALLABLE;                                           <<01960>>22040570
                                                               <<01960>>22040580
BEGIN                                                          <<01960>>22040590
  INTEGER SAVEDB,NEW'XDS;                                      <<01960>>22040600
  INTEGER CSTX'BLOCK'TABLE'SIZE = DB + 0; <<IN XCSTB XDS   >>  <<01960>>22040610
  EQUATE  CSTX'BLOCK'XDS = 35;  <<XCSTB DST #              >>  <<01960>>22040620
                                                               <<01960>>22040630
  INTEGER AA'TABLE'SIZE;        <<USED TO CALCULATE SIZE OF>>  <<01960>>22040640
  EQUATE  AA'ENTRY'LEN = 1;                                    <<01960>>22040650
                                                               <<01960>>22040660
  INTEGER LOADER'AUX'SIZE;      <<TABLES.                  >>  <<01960>>22040670
                                                               <<01960>>22040680
                                                               <<01960>>22040690
  INTEGER PROGNAME'TABLE'SIZE;                                 <<01960>>22040700
  EQUATE  PROGNAME'ENTRY'SIZE = 16;                            <<01960>>22040710
                                                               <<01960>>22040720
  SAVEDB := EXCHANGEDB(CSTX'BLOCK'XDS);                        <<01960>>22040730
  AA'TABLE'SIZE := CSTX'BLOCK'TABLE'SIZE;                      <<01960>>22040740
  PROGNAME'TABLE'SIZE := (CSTX'BLOCK'TABLE'SIZE + 1) *         <<01960>>22040750
                           PROGNAME'ENTRY'SIZE;                <<01960>>22040760
  EXCHANGEDB(SAVEDB);                                          <<01960>>22040770
                                                               <<01960>>22040780
  <<------------------------------------------------------->>  <<01960>>22040790
  <<GET SIZE OF CSTXB TABLE FOR SIZE OF AUTO-ALLOCATE TABLE>>  <<01960>>22040800
  <<WITHIN THE LOADER AUXILIARY XDS.  THIS WILL BE THE     >>  <<01960>>22040810
  <<MAX. NUMBER OF PROCESS WHICH CAN BE LOADED IN A SYSTEM >>  <<01960>>22040820
                                                               <<01960>>22040830
  <<NEW TABLES ADDED TO THE LOADER'AUX'XDS MUST BE         >>  <<01960>>22040840
  << INCLUDED INTO THE CALCULATION OF THE SIZE OF THE XDS  >>  <<01960>>22040850
  <<------------------------------------------------------->>  <<01960>>22040860
                                                               <<01960>>22040870
  LOADER'AUX'SIZE := AA'TABLE'SIZE + LOADER'AUX'HEADER +       <<01960>>22040880
                     PROGNAME'TABLE'SIZE + LOADER'AUX'HEADER;  <<01960>>22040890
                                                               <<01960>>22040900
  NEW'XDS := GETDATASEG(LOADER'AUX'SIZE,LOADER'AUX'SIZE);      <<01960>>22040910
  IF =  THEN                                                   <<01960>>22040920
    BEGIN                                                      <<01960>>22040930
    EXCHANGEDB(NEW'XDS);                                       <<01960>>22040940
    MOVE LOADER'AUX'TABLE(0) := 0;                             <<01960>>22040950
    MOVE LOADER'AUX'TABLE(1) := LOADER'AUX'TABLE(0),           <<01960>>22040960
                                (LOADER'AUX'SIZE - 1);         <<01960>>22040970
                                                               <<01960>>22040980
   <<INITIALIZE AUTO-ALLOCATE TABLE IN LOADER AUXILIARY XDS>>  <<01960>>22040990
    AUTOALLOC'TABLE (TABLE'SIZE) := AA'TABLE'SIZE;             <<01960>>22041000
    AUTOALLOC'TABLE (ENTRY'LEN ) := AA'ENTRY'LEN;              <<01960>>22041010
    AUTOALLOC'TABLE (NUMB'FREE ) := AA'TABLE'SIZE;             <<01960>>22041020
    AUTOALLOC'TABLE (FIRST'FREE) := 0;                         <<01960>>22041030
    AUTOALLOC'TABLE (NEXT'TABLE) := @AUTOALLOC'TABLE +         <<01960>>22041040
                         AA'TABLE'SIZE + LOADER'AUX'HEADER;    <<01960>>22041050
                                                               <<01960>>22041060
   <<------------------------------------------------------>>  <<01960>>22041070
   << INITIALIZE THE PROGRAM NAME TABLE HERE               >>  <<01960>>22041080
   <<------------------------------------------------------>>  <<01960>>22041090
                                                               <<01960>>22041100
    PROGNAME'TABLE(TABLE'SIZE) := PROGNAME'TABLE'SIZE;         <<01960>>22041110
    PROGNAME'TABLE(ENTRY'LEN)  := PROGNAME'ENTRY'LEN;          <<01960>>22041120
                                                               <<01960>>22041130
                                                               <<01960>>22041140
    <<INITIALIZE NEW TABLES TO THE LOADER'AUX'XDS HERE     >>  <<01960>>22041150
                                                               <<01960>>22041160
    EXCHANGEDB(SEGTABDST);                                     <<01960>>22041170
    SYS'AUTOALLOC'FLAG:=1;  << WE GET A NEW XDS SUCCESSFULLY >><<01960>>22041180
                            << SO WE TURN ON AUTOALLOCATE.   >><<01960>>22041190
    LOADER'AUX'XDS:=NEW'XDS;                                   <<01960>>22041200
    END    << CCE >>                                           <<01960>>22041210
  ELSE                                                         <<01960>>22041220
    BEGIN  << WE DID NOT GET A NEW XDS SUCCESSFULLY. >>        <<01960>>22041230
    EXCHANGEDB(SEGTABDST);                                     <<01960>>22041240
    LOADER'AUX'XDS:=0;                                         <<01960>>22041250
    END;   << CCG OR CCL >>                                    <<01960>>22041260
                                                               <<01960>>22041270
  EXCHANGEDB(SAVEDB);                                          <<01960>>22041280
                                                               <<01960>>22041290
END; <<INIT'LOADER'AUX'XDS>>                                   <<01960>>22041300
$EDIT VOID=22125000                                            <<L2185>>22045000
$PAGE                                                          <<R1625>>22126001
PROCEDURE INITREFTABSEG;                                       <<R1176>>22126010
<<***********************************************************>><<R1176>>22126011
<<                                                           >><<R1176>>22126012
<<  SUBJECT: PERFORMANCE ENHANCEMENT                         >><<R1176>>22126013
<<  DATE   : 6/1/85                                          >><<R1176>>22126014
<<                                                           >><<R1176>>22126015
<<  OVERVIEW                                                 >><<R1176>>22126016
<<   The systems' SL's reference table is limited in size.   >><<R1176>>22126017
<<   Maximum 512 entries each 48 words long. (256 records)   >><<S1945>>22126018
<<   It is referenced frequently and randomly therefore it   >><<R1176>>22126019
<<   will now be kept in an extra data segment (vs being read>><<R1176>>22126020
<<   1 record at a time as needed) to cut down on I/O.       >><<R1176>>22126021
<<   The reference table for any other SL used will still be >><<R1176>>22126022
<<   read in from disk on a record basis as needed.          >><<R1176>>22126023
<<                                                           >><<R1176>>22126024
<<   The reference table can be changed if the SL is altered >><<R1176>>22126025
<<   (via the segmenter).  Therefore the segmenter has been  >><<R1176>>22126026
<<   altered to update the information in the extra data     >><<R1176>>22126027
<<   segment if necessary.                                   >><<R1176>>22126028
<<                                                           >><<R1176>>22126029
<<***********************************************************>><<R1176>>22126030
<<                                                           >><<R1176>>22126031
<<   This particular procedure gets an extra data segment    >><<R1176>>22126032
<<   8k words and initializes it by reading in the reference >><<R1176>>22126033
<<   table records from the system SL.                       >><<R1176>>22126034
<<***********************************************************>><<R1176>>22126036
BEGIN     <<INITREFTABSEG>>                                    <<R1176>>22126045
                                                               <<R1176>>22126046
  DEFINE SL'RTRECORDINDEX = REC1(INDEX'INTO'REC1)#;            <<S1945>>22126047
  EQUATE REFTABSEG'SIZE =25000; <<SYS. SL REF. TABLE XDS SIZE>><<S1945>>22126048
  INTEGER INDEX'INTO'REC1; <<TO EXTRACT RE. TABLE RECORD NUMB>><<S1945>>22126060
  INTEGER ARRAY REC1(*)=Q;                                     <<S1945>>22126061
                                                               <<S1945>>22126070
  TOS:=P256; <<ROOM FOR RECORD 1, AND 2 OF XSL ON STACK>>      <<S1945>>22126071
  ASSEMBLE(ADDS 0);                                            <<S1945>>22126072
  REFTABSEG := GETDATASEG(REFTABSEG'SIZE,REFTABSEG'SIZE);      <<R1176>>22126080
  IF = THEN                                                    <<R1176>>22126090
    BEGIN                                                      <<R1176>>22126100
    FREADDIR(SLFNUM(SYS'SLNR),REC1,P256,1D);                   <<S1945>>22126110
      <<REC1 CONTAINS THE RECORD NUMBERS OF REF. TABLE ENTRY>> <<S1945>>22126111
    IF < THEN GO IOERR;               <<TABLE RECORD NUMBERS>> <<R1176>>22126120
                                                               <<R1176>>22126130
    INDEX'INTO'REC1 := 0;                                      <<R1176>>22126140
    WHILE INDEX'INTO'REC1 < MAX'NR'REF'TAB'REC  DO             <<S1945>>22126150
      BEGIN                                                    <<R1176>>22126160
      IF SL'RTRECORDINDEX <> 0  <<SEGMENT EXIST TO READ??>>    <<R1176>>22126170
      THEN                                                     <<R1176>>22126180
        BEGIN                                                  <<R1176>>22126190
        FREADDIR(SLFNUM(0),BUF2,128,DOUBLE(SL'RTRECORDINDEX)); <<R1176>>22126200
            <<GET A REFERENCE TABLE RECORD>>                   <<R1176>>22126210
        IF < THEN GO IOERR;                                    <<R1176>>22126220
                                                               <<R1176>>22126230
        MOVE BUF2(REFTABSEG'ENTRY'SIZE):=                      <<S1945>>22126231
             BUF2(XRTREC'ENTRY'SIZE),(REFTABSEG'ENTRY'SIZE);   <<S1945>>22126232
        TOS := REFTABSEG;                                      <<R1176>>22126240
        TOS := INDEX'INTO'REC1 * REFTABSEG'ENTRY'SIZE * 2;     <<S1945>>22126250
        TOS := @BUF2;                                          <<R1176>>22126260
        TOS := REFTABSEG'ENTRY'SIZE *2;                        <<S1945>>22126270
        ASSEMBLE(MTDS 4);                                      <<R2168>>22126280
        END; <<THEN>>                                          <<R1176>>22126281
                                                               <<R1176>>22126290
      INDEX'INTO'REC1 := INDEX'INTO'REC1 + 1;                  <<R1176>>22126300
      END; <<WHILE>>                                           <<R1176>>22126310
                                                               <<R1176>>22126320
   END;<<THEN>>                                                <<R1176>>22126330
   GO OUT;                                                     <<R1176>>22126340
                                                               <<R1176>>22126350
                                                               <<R1176>>22126360
                                                               <<R1176>>22126370
IOERR:                                                         <<R1176>>22126380
  RELDATASEG(REFTABSEG);                                       <<R1176>>22126390
  REFTABSEG := 0;                                              <<R1176>>22126400
                                                               <<R1176>>22126410
OUT:                                                           <<R1176>>22126420
  TOS := SEGTABDST;   << SAVE THE REF. TABLE DST # IN LST >>   <<L2185>>22126430
  TOS := @REFTABDST;  << OFFSET INTO LST >>                    <<L2185>>22126440
  TOS := @REFTABSEG;                                           <<R1176>>22126450
  TOS := 1;           << NUMBER OF WORDS TO MOVE       >>      <<R1176>>22126460
  ASSEMBLE (MTDS 4);                                           <<R2168>>22126470
                                                               <<R1176>>22126480
END;<<INITREFTABSEG>>                                          <<R1176>>22126490
$page                                                          <<U1713>>22127000
<<***********************************************************>><<U1713>>22127010
<<***********************************************************>><<U1713>>22127020
<<**                                                       **>><<U1713>>22127030
<<**    THE FOLLOWING EXTERNAL PROCEDURES ARE ONLY USED    **>><<U1713>>22127040
<<**    DURING THE LOADER INITIALIZATION TO OVERLAY THE    **>><<U1713>>22127050
<<**    PLABELS OF THE MPE PROCEDURES TARGETED BY THE      **>><<U1713>>22127060
<<**    MICROCODE PERFORMANCE ENHANCEMENT PROJECT.         **>><<U1713>>22127070
<<**                                                       **>><<U1713>>22127080
<<**  ===================================================  **>><<U1713>>22127090
<<**  =   WARNING     WARNING     WARNING     WARNING   =  **>><<U1713>>22127100
<<**  ===================================================  **>><<U1713>>22127110
<<**                                                       **>><<U1713>>22127120
<<**    THESE PROCEDURES ARE INTENDED FOR USE ONLY WITH    **>><<U1713>>22127130
<<**    THE PERFORMANCE ENHANCEMENT MICROCODE WRITTEN      **>><<U1713>>22127140
<<**    TO REPLACE MPE PROCEDURES!                         **>><<U1713>>22127150
<<**                                                       **>><<U1713>>22127160
<<**  ===================================================  **>><<U1713>>22127170
<<**  =   CAUTION     CAUTION     CAUTION     CAUTION   =  **>><<U1713>>22127180
<<**  ===================================================  **>><<U1713>>22127190
<<**                                                       **>><<U1713>>22127200
<<**    THE MICROCODE GROUP SHOULD BE INFORMED OF ANY      **>><<U1713>>22127210
<<**    CHANGES TO THESE PROCEDURES TO AVOID POTENTIAL     **>><<U1713>>22127220
<<**    PROBLEMS.                                          **>><<U1713>>22127230
<<**                                                       **>><<U1713>>22127240
<<***********************************************************>><<U1713>>22127250
<<***********************************************************>><<U1713>>22127260
                                                               <<U1713>>22127270
                                                               <<U1713>>22127280
procedure ERRORON'70;                                          <<U1713>>22127290
  option  external;                                            <<U1713>>22127300
                                                               <<U1713>>22127310
procedure ERROREXIT'70(INTRNEXIT,ERRWRD,PARAM);                <<U1713>>22127320
  value   INTRNEXIT, ERRWRD, PARAM;                            <<U1713>>22127330
  logical INTRNEXIT, ERRWRD, PARAM;                            <<U1713>>22127340
  option  external;                                            <<U1713>>22127350
                                                               <<U1713>>22127360
double procedure TIMER'70;                                     <<U1713>>22127370
  option  external;                                            <<U1713>>22127380
                                                               <<U1713>>22127390
integer procedure TIMEREQ'70(CODE,REQ,TIME);                   <<U1713>>22127400
  value   CODE, REQ, TIME;                                     <<U1713>>22127410
  integer CODE, REQ;                                           <<U1713>>22127420
  double  TIME;                                                <<U1713>>22127430
  option  external;                                            <<U1713>>22127440
                                                               <<U1713>>22127450
logical procedure EXCHANGEDB'70(WHERE);                        <<U1713>>22127460
  value   WHERE;                                               <<U1713>>22127470
  integer WHERE;                                               <<U1713>>22127480
  option  external;                                            <<U1713>>22127490
                                                               <<U1713>>22127500
procedure MMSTAT'70(EVENT,P1,P2,P3,P4,P5,P6);                  <<U1713>>22127510
  value   EVENT,P1,P2,P3,P4,P5,P6;                             <<U1713>>22127520
  integer EVENT,P1,P2,P3,P4,P5,P6;                             <<U1713>>22127530
  option  external;                                            <<U1713>>22127540
                                                               <<U1713>>22129010
<<***********************************************************>><<U1713>>22129020
<<***********************************************************>><<U1713>>22129030
<<**************  FUTURE EXPANSION GOES HERE  ***************>><<U1713>>22129040
<<***********************************************************>><<U1713>>22129050
<<***********************************************************>><<U1713>>22129060
                                                               <<U1713>>22129070
                                                               <<U1713>>22130000
$page                                                          <<U1713>>22130010
logical procedure Load'from'STT(CSTEN,STTEN);                  <<U1713>>22130020
  value   CSTEN, STTEN;                                        <<U1713>>22130030
  integer CSTEN, STTEN;                                        <<U1713>>22130040
  option  internal, privileged;                                <<U1713>>22130050
COMMENT                                                        <<U1713>>22130060
***************************************************************<<U1713>>22130070
*                                                             *<<U1713>>22130080
*                  PROCEDURE  LOAD'FROM'STT                   *<<U1713>>22130090
*                                                             *<<U1713>>22130100
***************************************************************<<U1713>>22130110
*                                                             *<<U1713>>22130120
*                   FUNCTION OF PROCEDURE                     *<<U1713>>22130130
*                                                             *<<U1713>>22130140
*  LOAD'FROM'STT accesses the CST entry, indexes into the     *<<U1713>>22130150
*  given STT entry, and gets its local PLABEL.                *<<U1713>>22130160
*                                                             *<<U1713>>22130170
*  PARAMETER:   CSTEN (CST entry# in the Code Segment Table)  *<<U1713>>22130180
*  ---------    STTEN (STT entry# of the above Code Segment)  *<<U1713>>22130190
*                                                             *<<U1713>>22130200
*  RETURN:      PLABEL (content of the above STT entry#)      *<<U1713>>22130210
*  ------                                                     *<<U1713>>22130220
*                                                             *<<U1713>>22130230
***************************************************************<<U1713>>22130240
;                                                              <<U1713>>22130250
 begin                                                         <<U1713>>22130260
   << figure out the bank of the given code segment >>         <<U1713>>22130270
   tos := CSTBP(CSTEN*CST'ENTRY'SIZE + CST'ENTRY'BANK);        <<U1713>>22130280
                                                               <<U1713>>22130290
   << compute the address of the given STT entry >>            <<U1713>>22130300
   tos := CSTBP(CSTEN*CST'ENTRY'SIZE + CST'ENTRY'OFFSET) +     <<U1713>>22130310
          CSTBP(CSTEN*CST'ENTRY'SIZE).SEGSIZE&lsl(2)-1 - STTEN;<<U1713>>22130320
                                                               <<U1713>>22130330
   ASMB(lsea);  << load the content (=local PLABEL) of the   >><<U1713>>22130340
                << STT entry# >>                               <<U1713>>22130350
                                                               <<U1713>>22130360
   Load'from'STT := tos;  << return the PLABEL to the caller >><<U1713>>22130370
                                                               <<U1713>>22130380
  end;   << Load'from'STT >>                                   <<U1713>>22130390
                                                               <<U1713>>22130400
$page                                                          <<U1713>>22130410
logical procedure Store'to'STT(CSTEN,STTEN,PLABEL'WORD);       <<U1713>>22130440
  value   CSTEN, STTEN, PLABEL'WORD;                           <<U1713>>22130450
  integer CSTEN, STTEN;                                        <<U1713>>22130460
  logical PLABEL'WORD;                                         <<U1713>>22130470
  option  internal, privileged;                                <<U1713>>22130480
COMMENT                                                        <<U1713>>22130490
***************************************************************<<U1713>>22130500
*                                                             *<<U1713>>22130510
*                  PROCEDURE  STORE'TO'STT                    *<<U1713>>22130520
*                                                             *<<U1713>>22130530
***************************************************************<<U1713>>22130540
*                                                             *<<U1713>>22130550
*                   FUNCTION OF PROCEDURE                     *<<U1713>>22130560
*                                                             *<<U1713>>22130570
*  STORE'TO'STT accesses the CST entry, indexes into the STT  *<<U1713>>22130580
*  entry, and stores the given PLABEL in that STT entry.      *<<U1713>>22130590
*                                                             *<<U1713>>22130600
*  PARAMETER:   CSTEN (CST entry# in the Code Segment Table)  *<<U1713>>22130610
*  ---------    STTEN (STT entry# of the above Code Segment)  *<<U1713>>22130620
*               PLABEL'WORD (word to be stored in the STT     *<<U1713>>22130630
*                            entry#)                          *<<U1713>>22130640
*                                                             *<<U1713>>22130650
*  RETURN:      none                                          *<<U1713>>22130660
*  ------                                                     *<<U1713>>22130670
*                                                             *<<U1713>>22130680
***************************************************************<<U1713>>22130690
;                                                              <<U1713>>22130700
 begin                                                         <<U1713>>22130710
   << figure out the bank of the given code segment >>         <<U1713>>22130720
   tos := CSTBP(CSTEN*CST'ENTRY'SIZE + CST'ENTRY'BANK);        <<U1713>>22130730
                                                               <<U1713>>22130740
   << compute the address of the given STT entry >>            <<U1713>>22130750
   tos := CSTBP(CSTEN*CST'ENTRY'SIZE + CST'ENTRY'OFFSET) +     <<U1713>>22130760
          CSTBP(CSTEN*CST'ENTRY'SIZE).SEGSIZE&lsl(2)-1 - STTEN;<<U1713>>22130770
                                                               <<U1713>>22130780
   tos := PLABEL'WORD;                                         <<U1713>>22130790
                                                               <<U1713>>22130800
   ASMB(ssea); << store the PLABEL'WORD in the STT entry# >>   <<U1713>>22130810
               << of the given code segment >>                 <<U1713>>22130820
 end;   << Store'to'STT >>                                     <<U1713>>22130830
                                                               <<U1713>>22130840
$page                                                          <<U1713>>22130850
procedure Overlay'Plabel(FROM'PNAME, TO'PNAME);                <<U1713>>22130880
  logical procedure FROM'PNAME;  << pass the procedure names >><<U1713>>22130890
  logical procedure TO'PNAME  ;  << in as the parameters in  >><<U1713>>22130900
                                 << order to obtain the      >><<U1713>>22130910
                                 << PLABELS.                 >><<U1713>>22130920
  option  internal, privileged;                                <<U1713>>22130930
COMMENT                                                        <<U1713>>22130940
***************************************************************<<U1713>>22130950
*                                                             *<<U1713>>22130960
*                  PROCEDURE  OVERLAY'PLABEL                  *<<U1713>>22130970
*                                                             *<<U1713>>22130980
***************************************************************<<U1713>>22130990
*                                                             *<<U1713>>22131000
*                   FUNCTION OF PROCEDURE                     *<<U1713>>22131010
*                                                             *<<U1713>>22131020
*  OVERLAY'PLABEL takes the PLABEL of the FROM procedure and  *<<U1713>>22131030
*  overlays on top of the PLABEL of the TO procedure.         *<<U1713>>22131040
*                                                             *<<U1713>>22131050
*  PARAMETER:    FROM'PNAME   (source PLABEL)                 *<<U1713>>22131060
*  ---------     TO'PNAME     (target PLABEL to be replaced)  *<<U1713>>22131070
*                                                             *<<U1713>>22131080
*  RETURN:       none                                         *<<U1713>>22131090
*  ------                                                     *<<U1713>>22131100
*                                                             *<<U1713>>22131110
***************************************************************<<U1713>>22131120
;                                                              <<U1713>>22131130
  begin                                                        <<U1713>>22131140
    logical FROM'PLABEL = Q-5;  << force the PLABELS into    >><<U1713>>22131150
    logical TO'PLABEL   = Q-4;  << the local variables.      >><<U1713>>22131160
                                << The parameters FROM'PNAME >><<U1713>>22131170
                                << and TO'PNAME cannot be    >><<U1713>>22131180
                                << used because they will    >><<U1713>>22131190
                                << generate a PCAL.          >><<U1713>>22131200
                                                               <<U1713>>22131210
    Store'to'STT(TO'PLABEL.CSTNUM,                             <<U1713>>22131220
                 TO'PLABEL.STTNUM,                             <<U1713>>22131230
                 Load'from'STT(FROM'PLABEL.CSTNUM,             <<U1713>>22131240
                               FROM'PLABEL.STTNUM) );          <<U1713>>22131250
                                << gets the local PLABEL of  >><<U1713>>22131260
                                << the "FROM" procedure.     >><<U1713>>22131270
  end;   << Overlay'Plabel >>                                  <<U1713>>22131280
                                                               <<U1713>>22131290
$page                                                          <<U1713>>22131300
procedure Check'and'Set'70'STT;                                <<U1713>>22131310
  option  internal, privileged;                                <<U1713>>22131320
COMMENT                                                        <<U1713>>22131330
***************************************************************<<U1713>>22131340
*                                                             *<<U1713>>22131350
*               PROCEDURE  Check'and'Set'70'STT               *<<U1713>>22131360
*                                                             *<<U1713>>22131370
***************************************************************<<U1713>>22131380
*                                                             *<<U1713>>22131390
*                   FUNCTION OF PROCEDURE                     *<<U1713>>22131400
*                                                             *<<U1713>>22131410
*  Check'and'Set'70'STT checks to see if the current system   *<<U1713>>22131420
*  has the MPE performance enhancement                        *<<U1713>>22131430
*  conversion microcode.  If so, then check to see if the     *<<U1713>>22131440
*  bits of the XP feature mask words that are stored in the   *<<U1713>>22131450
*  System Global Extension cells %21 through %24 are turned   *<<U1713>>22131460
*  on to indicate that the preselected MPE procedures are now *<<U1713>>22131470
*  available in the microcode.  If on, then go overlay the    *<<U1713>>22131480
*  PLABELS of the designated MPE procedures with those that   *<<U1713>>22131490
*  contain code that strictly invokes the microcode to        *<<U1713>>22131500
*  execute the MPE equivalent operation.  Each bit will       *<<U1713>>22131510
*  correspond to a MPE procedure.                             *<<U1713>>22131520
*                                                             *<<U1713>>22131530
*  PARAMETER:    none.                                        *<<U1713>>22131540
*  ---------                                                  *<<U1713>>22131550
*                                                             *<<U1713>>22131560
*  RETURN:       none.                                        *<<U1713>>22131570
*  ------                                                     *<<U1713>>22131580
*                                                             *<<U1713>>22131590
***************************************************************<<U1713>>22131600
*                                                             *<<U1713>>22131610
*                          COMMENTS                           *<<U1713>>22131620
*                          ========                           *<<U1713>>22131630
*  To assist the microcode performance enhancement project,   *<<U1713>>22131640
*  the "Enabled Performance Feature" instruction was written  *<<U1713>>22131650
*  to perform the following tasks:                            *<<U1713>>22131660
*                                                             *<<U1713>>22131670
*   1) To set the XPFIRMWARE bit (13) of the mapping firmware *<<U1713>>22131680
*      flag (%1220) if the XP microcode is running.           *<<U1713>>22131690
*                                                             *<<U1713>>22131700
*   2) To store 5 words in the SysGlob Ext cells (%20-%24) in *<<U1713>>22131710
*      the below format.                                      *<<U1713>>22131720
*                                                             *<<U1713>>22131730
*                       SYSGLOB EXTENSION                     *<<U1713>>22131740
*                                                             *<<U1713>>22131750
*      |-----------------------------------------------|      *<<U1713>>22131760
*      |                  WCS VERSION  (used by DPAN)  |  %20 *<<U1713>>22131770
*      |-----------------------------------------------|      *<<U1713>>22131780
*      |                  XPFEATUREMASK0               |  %21 *<<U1713>>22131790
*      |-----------------------------------------------|      *<<U1713>>22131800
*      |                  XPFEATUREMASK1               |  %22 *<<U1713>>22131810
*      |-----------------------------------------------|      *<<U1713>>22131820
*      |                  XPFEATUREMASK2               |  %23 *<<U1713>>22131830
*      |-----------------------------------------------|      *<<U1713>>22131840
*      |                  XPFEATUREMASK3               |  %24 *<<U1713>>22131850
*      |-----------------------------------------------|      *<<U1713>>22131860
*                                                             *<<U1713>>22131870
*                                                             *<<U1713>>22131880
*  For the first implementation phase of the microcode        *<<U1713>>22131890
*  performance enhancement project, only the least            *<<U1713>>22131900
*  significant mask word will be utilized by both the         *<<U1713>>22131910
*  microcode and MPE.  The bit pattern will represent the     *<<U1713>>22131920
*  MPE procedures as follows.                                 *<<U1713>>22131930
*                                                             *<<U1713>>22131940
*                         XPFEATUREMASK3                      *<<U1713>>22131950
*                                                             *<<U1713>>22131960
*        0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15       *<<U1713>>22131970
*      |--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|      *<<U1713>>22131980
*      |  |  |  |  |  |  |  |  |  |  | M| T| T| E| E| E|      *<<U1713>>22131990
*      |  |  |  |  |  |  |  |  |  |  | M| I| I| X| R| R|      *<<U1713>>22132000
*      |  |  |  |  |  |  |  |  |  |  | S| M| M| C| R| R|      *<<U1713>>22132010
*      |  |  |  |  |  |  |  |  |  |  | T| E| E| H| 0| 0|      *<<U1713>>22132020
*      |  |  |  |  |  |  |  |  |  |  | A| R| R| A| R| R|      *<<U1713>>22132030
*      |  |  |  |  |  |  |  |  |  |  | T| E|  | N| E| O|      *<<U1713>>22132040
*      |  |  |  |  |  |  |  |  |  |  | '| Q|  | G| X| N|      *<<U1713>>22132050
*      |  |  |  |  |  |  |  |  |  |  |  |  |  | E| I|  |      *<<U1713>>22132060
*      |  |  |  |  |  |  |  |  |  |  |  |  |  | D| T|  |      *<<U1713>>22132070
*      |  |  |  |  |  |  |  |  |  |  |  |  |  | B|  |  |      *<<U1713>>22132080
*      |-----------------------------------------------|      *<<U1713>>22132090
*                                                             *<<U1713>>22132100
***************************************************************<<U1713>>22132110
*                                                             *<<U1713>>22132120
*                          WARNING                            *<<U1713>>22132130
*                          =======                            *<<U1713>>22132140
*  All the code segments that are referenced by the below     *<<U1713>>22132150
*  PLABELS must be CORE RESIDENT.                             *<<U1713>>22132160
*                  @@@@@@@@@@@@@                              *<<U1713>>22132170
*                                                             *<<U1713>>22132180
***************************************************************<<U1713>>22132190
;                                                              <<U1713>>22132200
  begin                                                        <<U1713>>22132210
    if  SERIES'70'UCODE  then                                  <<U1713>>22132220
      begin                                                    <<U1713>>22132230
        if  XPFEATUREMASK3 <> 0  then                          <<U1713>>22132240
          begin                                                <<U1713>>22132250
            if  XPFEATUREMASK3.ERRORONBIT  then                <<U1713>>22132260
                  Overlay'Plabel(ERRORON'70, ERRORON);         <<U1713>>22132270
                                                               <<U1713>>22132280
            if  XPFEATUREMASK3.ERROREXITBIT  then              <<U1713>>22132290
                  Overlay'Plabel(ERROREXIT'70, ERROREXIT);     <<U1713>>22132300
                                                               <<U1713>>22132310
            if  XPFEATUREMASK3.EXCHANGEDBBIT  then             <<U1713>>22132320
                  Overlay'Plabel(EXCHANGEDB'70, EXCHANGEDB);   <<U1713>>22132330
                                                               <<U1713>>22132340
            if  XPFEATUREMASK3.TIMERBIT  then                  <<U1713>>22132350
                  Overlay'Plabel(TIMER'70, TIMER);             <<U1713>>22132360
                                                               <<U1713>>22132370
            if  XPFEATUREMASK3.TIMEREQBIT  then                <<U1713>>22132380
                  Overlay'Plabel(TIMEREQ'70, TIMEREQ);         <<U1713>>22132390
                                                               <<U1713>>22132400
            if  XPFEATUREMASK3.MMSTATBIT  then                 <<U1713>>22132410
                  Overlay'Plabel(MMSTAT'70, MMSTAT');          <<U1713>>22132420
                                                               <<U1713>>22135000
                                                               <<U1713>>22135010
          <<*************************************************>><<U1713>>22135020
          <<*************************************************>><<U1713>>22135030
          <<**********  FUTURE EXPANSION GOES HERE  *********>><<U1713>>22135040
          <<*************************************************>><<U1713>>22135050
          <<*************************************************>><<U1713>>22135060
                                                               <<U1713>>22135070
          end;   << XPFEATUREMASK3 >>                          <<U1713>>22135080
       end;   << SERIES'70'UCODE >>                            <<U1713>>22135090
   end;   << Check'and'Set'70'STT >>                           <<U1713>>22135100
$EDIT VOID=22370000                                            <<L2185>>22320000
    EXCHANGEDB (SEGTABDST);                                    <<L2185>>22321000
    IF NEXT'LST = 0 THEN                                       <<L2185>>22322000
       BEGIN                                                   <<L2185>>22323000
       SEGTABDST'EX := 0;                                      <<L2185>>22324000
       CREATE'LSTX;                                            <<L2185>>22325000
       END;                                                    <<L2185>>22326000
                                                               <<L2185>>22327000
    << Allocate space for temporary LST entries >>             <<L2185>>22328000
    <<------------------------------------------>>             <<L2185>>22329000
                                                               <<L2185>>22330000
    LCREATE'TEMP (EXTENSION'MAX, EXTENSION, 0, 0, 0D);         <<L2185>>22331000
    IF = THEN                                                  <<L2185>>22332000
       BEGIN                                                   <<L2185>>22333000
       @TEMP'EXT'ENTP := @ENTP;                                <<L2185>>22334000
       UNLINKLSTENTRY;       << Not accessed by links >>       <<L2185>>22335000
       TEMP'EXT'ENTP  := 0;  << Mark as available >>           <<L2185>>22336000
       END                                                     <<L2185>>22337000
    ELSE                                                       <<L2185>>22338000
       @TEMP'EXT'ENTP := 0;  << Mark not allocated >>          <<L2185>>22339000
                                                               <<L2185>>22340000
    LCREATE'TEMP (LOADPROCMASTER'MAX, LOADPROCMASTER, 0,0,0D); <<L2185>>22341000
    IF = THEN                                                  <<L2185>>22342000
       BEGIN                                                   <<L2185>>22343000
       @TEMP'MAST'ENTP := @ENTP;                               <<L2185>>22344000
       UNLINKLSTENTRY;        << Not accessed by links >>      <<L2185>>22345000
       TEMP'MAST'ENTP  := 0;  << Mark as available >>          <<L2185>>22346000
       END                                                     <<L2185>>22347000
    ELSE                                                       <<L2185>>22348000
       @TEMP'MAST'ENTP := 0;  << Mark not allocated >>         <<L2185>>22349000
                                                               <<L2185>>22350000
    EXCHANGEDB (0);                                            <<L2185>>22351000
    INITLOADCACHE;                                             <<S1945>>22500000
                                                               <<S1945>>22501000
Check'and'Set'70'STT;  << check to see if the running system >><<S1945>>22501100
                       << has the MPE performance enhancement>><<S1945>>22501200
                       << microcode.  If true, then go to    >><<S1945>>22501300
                       << the STT entry# of the designated   >><<S1945>>22501400
                       << MPE procedures and overlay their   >><<S1945>>22501500
                       << PLABELS with those that contain    >><<S1945>>22501600
                       << code that simply invokes the       >><<S1945>>22501700
                       << microcode execution.               >><<S1945>>22501800
                                                               <<S1945>>22501900
                                                               <<S1945>>22502000
 INIT'LOADER'AUX'XDS; <<CREATES LOADER AUXILIARY XDS FOR   >>  <<S1945>>22502100
                      <<AUTO-ALLOCATE INFORMATION          >>  <<S1945>>22502200
 INITREFTABSEG;   <<CREATES REFERENCE TABLE XDS FOR    >>      <<S1945>>22502300
                  <<THE SYSTEM SL AND READS THE INFO IN>>      <<S1945>>22502400
                                                               <<S1945>>22502500
                                                               <<S1945>>22502600
ASSEMBLE(ADDS 1);                                              <<S1945>>22505000
$EDIT VOID=22523900                                            <<S1945>>22523000
$EDIT VOID=22529000                                            <<S1945>>22525100
$EDIT VOID=22925000                                            <<L2185>>22880000
