         << LINES .001/.009 ARE RESERVED FOR SYSTEMS INTEGRATION >>     00000001
DEFINE   CPUNUM   = ASSEMBLE(PCN)#,      << GET CPU NUMBER >>  <<*9386>>00175000
         PMBCFIRMWARE = ABSOLUTE(%1220).(14:1)#;               <<*9386>>00176000
$INCLUDE INCLJMAT                                              <<A9797>>00706000
INTRINSIC FCHECK;                                              <<A9797>>00722500
INTEGER PROCEDURE ADDJTENTRY (FDES,GP,ACCT,EID,TBL,SIZE,NTRY); << 9797>>01255000
  BYTE ARRAY FDES, GP, ACCT, EID;                              << 9797>>01265000
INTEGER PROCEDURE XRETJTENTRY (FDES,GP, ACCNT, EID,SIZE, NTRY);<< 9797>>01290000
  BYTE ARRAY FDES, GP, ACCNT, EID;                             << 9797>>01295000
INTEGER PROCEDURE XREMJTENTRY (FDES,GP, ACCNT, EID,TABLENUM);  << 9797>>01320000
  BYTE ARRAY FDES, GP, ACCNT, EID;                             << 9797>>01330000
LOGICAL PROCEDURE FNFORMAT (STRING,FNAME,GROUP,ACCNT,LW,ENVID);<< 9797>>01350000
  BYTE POINTER ENVID;                                          << 9797>>01367500
LOGICAL PROCEDURE FINDJOB (JMATENTRY,ENTRYP,JOBNUM,JOB,        <<A9797>>01635025
                           JNAME,UNAME,ANAME,SIR);             <<A9797>>01635050
VALUE   JOBNUM,JOB;                                            <<A9797>>01635075
INTEGER ARRAY JMATENTRY,JNAME,UNAME,ANAME;                     <<A9797>>01635100
INTEGER JOBNUM,SIR,ENTRYP;                                     <<A9797>>01635125
LOGICAL JOB;                                                   <<A9797>>01635150
OPTION VARIABLE,PRIVILEGED,UNCALLABLE,EXTERNAL;                <<A9797>>01635175
                                                               <<A9797>>01635200
PROCEDURE IMPEDE(PCB'INDEX);                                   <<A9797>>01635225
VALUE PCB'INDEX;                                               <<A9797>>01635250
INTEGER PCB'INDEX;                                             <<A9797>>01635275
OPTION EXTERNAL;                                               <<A9797>>01635300
                                                               <<A9797>>01635325
PROCEDURE UNIMPEDE(PCB'INDEX);                                 <<A9797>>01635350
VALUE PCB'INDEX;                                               <<A9797>>01635375
INTEGER PCB'INDEX;                                             <<A9797>>01635400
OPTION EXTERNAL;                                               <<A9797>>01635425
                                                               <<A9797>>01635450
LOGICAL PROCEDURE CHECKALIVE(PIN);                             <<A9797>>01635475
VALUE PIN;                                                     <<A9797>>01635500
INTEGER PIN;                                                   <<A9797>>01635525
OPTION PRIVILEGED, UNCALLABLE, EXTERNAL;                       <<A9797>>01635550
                                                               <<A9797>>01635575
PROCEDURE FPROCTERM;                                           <<A9797>>01710500
   OPTION EXTERNAL;                                            <<A9797>>01711000
                                                               <<*9968>>01712000
INTEGER PROCEDURE MUSTOPEN (FD, FO, AO, R, D, FM, U, B,        <<*9968>>01712100
                            N, FS, NE, I, FC);                 <<*9968>>01712200
   VALUE      FO, AO, R, U, B, N, FS, NE, I, FC;               <<*9968>>01712300
   BYTE ARRAY FD, D, FM;                                       <<*9968>>01712400
   LOGICAL    FO, AO;                                          <<*9968>>01712500
   INTEGER    R, U, B, N, NE, I, FC;                           <<*9968>>01712600
   DOUBLE     FS;                                              <<*9968>>01712700
   OPTION VARIABLE, EXTERNAL;                                  <<*9968>>01712800
                                                               <<*9968>>01712900
      LOGICAL CHKPRIVALUE;                                     <<J1267>>02150000
         BEGIN                         <<CHECK VALIDITY>>      <<J1219>>02210000
         IF NOT (1<=PIN<=PCB(0)) THEN  <<PIN IS INVAILID>>     <<J1219>>02211000
            BEGIN                                              <<J1219>>02211500
            CC:=CCL;                                           <<J1219>>02212000
            GOTO FIN;                                          <<J1219>>02212500
            END                                                <<J1219>>02213000
         ELSE                          <<PIN IS VALID>>        <<J1219>>02213500
            BEGIN                                              <<J1219>>02214000
            PCBPT:=PIN*PCBSIZE;                                <<J1219>>02215000
            IF PQPTR = -1 THEN         <<PIN ISN'T ASSIGNED>>  <<J1219>>02216000
               BEGIN                                           <<J1219>>02216500
               CC:=CCL;                                        <<J1219>>02217000
               GOTO FIN;                                       <<J1219>>02217500
               END                                             <<J1219>>02218000
            ELSE                       <<PIN IS ASSIGNED>>     <<J1219>>02218500
               BEGIN                                           <<J1219>>02219000
               TOS := FATHERINFO;                              <<J1219>>02220000
               IF TOS<>TOS THEN        <<NOT A SON>>           <<J1267>>02225000
$EDIT VOID=2230                                                <<J1267>>02230000
                 BEGIN                                         <<J1219>>02235000
                 CC:=CCL;                                      <<J1219>>02240000
                 GOTO FIN;                                     <<J1219>>02245000
                 END;                                          <<J1219>>02250000
               END;                    <<ELSE IF PQPTR=-1>>    <<J1219>>02251000
           END;            <<ELSE IF NOT (1<=PIN<=PCB(0))>>    <<J1219>>02252000
         END                           <<IF PIN<>0>>           <<J1219>>02254000
      ELSE DEL;                        <<PIN=0>>               <<J1219>>02255000
      CHKPRIVALUE:=TOS;                                        <<J1219>>02280000
         BEGIN                            <<VIOLATION>>        <<J1219>>02295000
         END;                                                  <<J1219>>02320000
Integer Savevalue; <<For SETCRITICAL call>>                    <<C2104>>03906000
      LOGICAL PRIV;                                            <<B9460>>03917000
      SaveValue := Setcritical;                                <<C2104>>04260000
      IF  FLAGS.(13:1) LAND (FLAGS.(9:1))  THEN                <<B9460>>04426000
         << IF DEBUG AND PRIVILEGE PROGRAM THEN >>             <<B9460>>04426100
         << USER MUST HAVE PRIVILEGE MODE CAPABILITIES>>       <<B9460>>04426200
         BEGIN                                                 <<B9460>>04426300
            JIT:=GETJITDST;   <<JIT>>                          <<B9460>>04426400
            DB:=EXCHANGEDB(JIT);                               <<B9460>>04426500
            PRIV:=JITARR(39).(9:1);<<GET PRIVILEGED BIT>>      <<B9460>>04426600
            EXCHANGEDB(DB);                                    <<B9460>>04426700
            IF  NOT PRIV THEN  FLAGS.(13:1):=0;  <<NO DEBUG>>  <<B9460>>04426800
         END;                                                  <<B9460>>04426900
      IF PMBCFIRMWARE                                          <<*9386>>04585000
         THEN PXFXPMBC:= PMBC'INIT;                            <<*9386>>04590000
      Resetcritical(SaveValue);                                <<C2104>>06445000
      BREFTAB'LEN     = 197;    << BACK REF TABLE SIZE >>      << 9797>>08035000
                                                               << 9797>>08077750
  BYTE POINTER                                                 << 9797>>08078000
      BREF'ENVID;                                              << 9797>>08078250
      FEQTABLNTH       = 197;   << MAX SIZE OF ENTRY >>        << 9797>>08440000
                      BREF'ANAME, BREF'LWNAME, BREF'ENVID);    << 9797>>08845000
            IF @BREF'ENVID = 0 THEN                            << 9797>>08847500
               @BREF'ENVID := @BPTR;                           << 9797>>08850000
                            BREF'ENVID,DUMMY,BREFTAB) <> 0 THEN<< 9797>>08860000
            IF ADDJTENTRY (FORMALDES, BPTR, BPTR, BPTR, -3,    << 9797>>09740000
      MINPARSETAB'LEN = 124,    << MINIMUM PARSE TBLE SIZE >>  << 9797>>10650000
          XREMJTENTRY (STDIN'FORMAL,BLNKPTR,BLNKPTR,BLNKPTR,3);<< 9797>>11310000
          XREMJTENTRY (STDLIST'FORMAL,BLNKPTR,BLNKPTR,BLNKPTR, << 9797>>11320000
                       3);                                     << 9797>>11320250
        PROGFNUM := MUSTOPEN (PROGNAME, %2003, %767);          <<*9968>>13880000
        TOS := QP50(PXFIXEDLOC) ; <<GET JOB/SESSION NUMB>>     <<P9926>>14130000
          XREMJTENTRY (STDIN'FORMAL,BLNKPTR,BLNKPTR,BLNKPTR,3);<< 9797>>14760000
          XREMJTENTRY (STDLIST'FORMAL,BLNKPTR,BLNKPTR,BLNKPTR, << 9797>>14770000
                       3);                                     << 9797>>14770250
$PAGE "PROCEDURE CLOSE'FILES"                                  <<A9797>>15855000
PROCEDURE CLOSE'FILES;                                         <<A9797>>15860000
OPTION PRIVILEGED,UNCALLABLE;                                  <<A9797>>15864000
BEGIN                                                          <<A9797>>15865000
   << PROCEDURE TO CLOSE ANY OPEN FILES A PROCESS MIGHT HAVE >><<A9797>>15866000
   << BEFORE BEING ADOPTED BY PROGEN.  PROCEDURE ADOPT       >><<A9797>>15868000
   << BUILDS A STACK MARKER ON THE ADOPTEE'S STACK WHICH     >><<A9797>>15870000
   << FORCES THE ADOPTEE TO EXECUTE THIS PROCEDURE BEFORE    >><<A9797>>15872000
   << ADOPTION IS COMPLETE AND ADOPT RETURNS TO ITS CALLER.  >><<A9797>>15874000
                                                               <<A9797>>15876000
  LOGICAL PCBPT;                                               <<A9797>>15878000
   EQUATE FATHERWAIT = 1,   SONWAIT = 2;                       <<A9797>>15880000
   FPROCTERM;     << FCLOSE ANY OPEN STANDARD FILES >>         <<A9797>>15882000
                                                               <<A9797>>15884000
   PCBPT := CURPRC;                                            <<A9797>>15886000
   PCBPT := SPCBFATHERINFO;                                    <<A9797>>15888000
                                                               <<A9797>>15890000
   AWAKE(PCBPT,SONWAIT,FATHERWAIT);                            <<A9797>>15892000
END << CLOSE'FILES >>;                                         <<A9797>>15894000
$PAGE "ADOPT -- ADOPT CREATED PROCESS TO ANOTHER PROCESS"      <<A9797>>15896000
INTEGER PROCEDURE ADOPT(ADOPTEE,ADOPTER);                      <<A9797>>15898000
VALUE ADOPTEE,ADOPTER;                                         <<A9797>>15900000
INTEGER ADOPTEE,ADOPTER;                                       <<A9797>>15902000
OPTION PRIVILEGED,UNCALLABLE;                                  <<A9797>>15904000
BEGIN                                                          <<A9797>>15906000
<< ADOPT IS AN MPE PROCEDURE DESIGNED TO ADOPT A PROCESS TO>>  <<A9797>>15908000
<< PROGEN.  THE PURPOSE IS TO ALLOW A PROCESS THAT WAS     >>  <<A9797>>15910000
<< CREATED TO CONTINUE TO LIVE IRREGUARDLESS OF WHAT       >>  <<A9797>>15912000
<< HAPPENS TO ITS REAL FATHER.  SINCE PROGEN NEVER DIES,   >>  <<A9797>>15914000
<< A SON OF PROGEN CAN EXIST AS LONG AS THE SYSTEM IS UP.  >>  <<A9797>>15916000
<< ONE EXAMPLE OF ITS USE IS IN THE :STARTSPOOL COMMAND.   >>  <<A9797>>15918000
<< THE CI CREATES A SPOOLER PROCESS FOR A DEVICE AND ADOPTS>>  <<A9797>>15920000
<< IT TO PROGEN SO THAT IF THE CI LOGS OFF, THE SPOOLER    >>  <<A9797>>15922000
<< PROCESS WILL REMAIN.  IF A PROCESS ACTUALLY CALLS ADOPT >>  <<A9797>>15924000
<< , NOT ONENET'ENTRY, THEN THE OLD FATHER MUST BE THE     >>  <<A9797>>15926000
<< CALLER.                                                 >>  <<A9797>>15928000
   ENTRY ONENET'ADOPT;                                         <<A9797>>15930000
   EQUATE SYSPROGENPCBPT=%1141,                                <<A9797>>15932000
          PROGEN=3;                                            <<A9797>>15934000
   DEFINE                                                      <<A9797>>15936000
      PROGENINX = ABSOLUTE(SYSPROGENPCBPT)#,                   <<A9797>>15938000
      PROGENPIN = PROGENINX/PCBSIZE#;                          <<A9797>>15940000
                                                               <<A9797>>15942000
                                                               <<A9797>>15944000
<<  ADOPTEE'S PCBX GLOBAL & FIXED AREA>>                       <<A9797>>15946000
                                                               <<A9797>>15948000
   INTEGER ARRAY A'PCBX(0:PXG'SIZE+FIXEDSIZE-1);               <<A9797>>15950000
   INTEGER ARRAY A'PCBXGLOB(*)=A'PCBX;                         <<A9797>>15952000
   INTEGER ARRAY A'PCBXFIXED(*)=A'PCBX(PXG'SIZE);              <<A9797>>15954000
                                                               <<A9797>>15956000
<<  ADOPTORS PCBX GLOBAL & FIXED AREA>>                        <<A9797>>15958000
                                                               <<A9797>>15960000
   INTEGER ARRAY P'PCBX(0:PXG'SIZE+FIXEDSIZE-1);               <<A9797>>15962000
   INTEGER ARRAY P'PCBXGLOB(*)=P'PCBX;                         <<A9797>>15964000
   INTEGER ARRAY P'PCBXFIXED(*)=P'PCBX(PXG'SIZE);              <<A9797>>15966000
                                                               <<A9797>>15968000
                                                               <<A9797>>15970000
   INTEGER STK,I,NEW'FATHER,ADTINX,OLD'FATHER,INDEX,OLDINDEX;  <<A9797>>15972000
                                                               <<A9797>>15974000
   DOUBLE STACK'DB;  <<DB BANK & DB ADDRESS IN STACK>>         <<A9797>>15976000
   INTEGER DB'BANK = STACK'DB,                                 <<A9797>>15978000
           DB'ADDR = STACK'DB + 1,                             <<A9797>>15980000
           DBPTR,                                              <<A9797>>15982000
           SREL'VALUE;                                         <<A9797>>15984000
                                                               <<A9797>>15986000
   LOGICAL ONENET'ENTRY := FALSE;                              <<A9797>>15988000
   LOGICAL CSTNUM;                                             <<A9797>>15990000
   INTEGER JNUMANDTYPE;                                        <<A9797>>15992000
                                                               <<A9797>>15994000
   LOGICAL ARRAY STK'MARKER(0:5);                              <<A9797>>15996000
   EQUATE FATHERWAIT = 1,   SONWAIT = 2;                       <<A9797>>15998000
                                                               <<A9797>>16000000
   INTEGER ARRAY JITARR(*) = DB+0;                             <<P2522>>16012000
   INTEGER NEXTJIT;                                            <<P2522>>16012100
                                                               <<A9797>>16014000
   EQUATE JXREFDST=50;              <<JOB XREF TABLE DST #>>   <<A9797>>16016000
$EDIT                                                          << 9797>>16018000
   INTEGER PCBGLOBLOC,PXFIXEDLOC;                              <<A9797>>16020000
                                                               <<A9797>>16022000
   SUBROUTINE MOVEFROMDSEG(TARGET,DSTN,OFFSET,COUNT);          <<A9797>>16024000
   VALUE TARGET,DSTN,OFFSET,COUNT;                             <<A9797>>16026000
   LOGICAL TARGET,DSTN,OFFSET,COUNT;                           <<A9797>>16028000
   BEGIN                                                       <<A9797>>16030000
      X:=TOS;                                                  <<A9797>>16032000
      ASSEMBLE(MFDS 0);                                        <<A9797>>16034000
      TOS:=X;                                                  <<A9797>>16036000
   END;                                                        <<A9797>>16038000
                                                               <<A9797>>16040000
   SUBROUTINE MOVETODSEG(DSTN,OFFSET,SOURCE,COUNT);            <<A9797>>16042000
   VALUE DSTN,OFFSET,SOURCE,COUNT;                             <<A9797>>16044000
   LOGICAL DSTN,OFFSET,SOURCE,COUNT;                           <<A9797>>16046000
   BEGIN                                                       <<A9797>>16048000
      X:=TOS;                                                  <<A9797>>16050000
      ASSEMBLE(MTDS 0);                                        <<A9797>>16052000
      TOS:=X;                                                  <<A9797>>16054000
   END;                                                        <<A9797>>16056000
                                                               <<A9797>>16058000
   GO AROUND;                                                  <<A9797>>16060000
   ONENET'ADOPT:                                               <<A9797>>16062000
   ONENET'ENTRY := TRUE;                                       <<A9797>>16064000
   AROUND:                                                     <<A9797>>16066000
   PXFIXEDLOC := 0;                                            <<A9797>>16068000
   PCBGLOBLOC := 0;                                            <<A9797>>16070000
   ADOPT:=0;        <<INITIALIZE RETURN VALUE>>                <<A9797>>16072000
   <<PROGEN'S PIN IS NO LONGER 3. CALLING PROCEDURES SHOULD>>  <<A9797>>16074000
   <<BE CHANGED TO LOOK UP PROGEN'S PIN AS IS DONE HERE. FOR>> <<A9797>>16076000
   <<NOW, A KLUDGE.>>                                          <<A9797>>16078000
   IF ADOPTER = PROGEN THEN                                    <<A9797>>16080000
      ADOPTER := PROGENPIN     << THIS IS THE KLUDGE. >>       <<A9797>>16082000
   ELSE                                                        <<A9797>>16084000
      IF ADOPTER <> PROGENPIN AND NOT ONENET'ENTRY THEN        <<A9797>>16086000
      BEGIN  << FOR NOW, ONLY LEGAL ADOPTER IS PROGEN >>       <<A9797>>16088000
         ADOPT := 1;                                           <<A9797>>16090000
         RETURN;                                               <<A9797>>16092000
      END;                                                     <<A9797>>16094000
                                                               <<A9797>>16096000
   NEW'FATHER := ADOPTER * PCBSIZE; << NEWFATHER PCB INDEX >>  <<A9797>>16098000
   ADTINX := ADOPTEE * PCBSIZE; << ADOPTEE PCB INDEX >>        <<A9797>>16100000
   PDISABLE;                                                   <<A9797>>16102000
   OLD'FATHER := LPCB(ADTINX+FATHERINFOWORDNUM);               <<A9797>>16104000
   STK := LPCB(ADTINX+STKINFOWORDNUM).STKDSTFIELD;             <<A9797>>16106000
   IF LPCB(OLD'FATHER+PROCSTATEWORDNUM).SYSTEMPROCFLAG <> 0    <<A9797>>16108000
      AND NOT ONENET'ENTRY                                     <<A9797>>16110000
   THEN BEGIN << OLD FATHER IS A SYSTEM PROCESS >>             <<A9797>>16112000
      ADOPT := 2;                                              <<A9797>>16114000
      PENABLE;                                                 <<A9797>>16116000
      RETURN;                                                  <<A9797>>16118000
   END;                                                        <<A9797>>16120000
   PENABLE;                                                    <<A9797>>16122000
                                                               <<A9797>>16124000
                                                               <<A9797>>16126000
<< IF ADOPTER PROCESS IS SYSTEM PROCESS, NEED TO HAVE >>       <<A9797>>16128000
<< ADOPTEE PROCESS CLOSE OPEN STANDARD FILES, IF THEY >>       <<A9797>>16130000
<< ARE OPEN, UNLESS WE ARE INVOKED THROUGH THE ONENET >>       <<A9797>>16132000
<< ENTRY POINT.                                       >>       <<A9797>>16134000
      IF LPCB(NEW'FATHER+PROCSTATEWORDNUM).SYSTEMPROCFLAG <> 0 <<A9797>>16136000
         AND NOT ONENET'ENTRY                                  <<A9797>>16138000
      THEN BEGIN << NEW FATHER IS A SYSTEM PROCESS >>          <<A9797>>16140000
      <<GET DB BANK, DB ADDRESS, & S REL PTR FROM ADOPTEE STK>><<A9797>>16142000
      MOVEFROMDSEG(@DBPTR,STK,PXG'RELDB'OFFSET,1);             <<A9797>>16144000
      MOVEFROMDSEG(@SREL'VALUE,STK,PXG'SIZE+RELSOFFSET,1);     <<A9797>>16146000
      MOVEFROMDSEG(@STACK'DB,STK,DBPTR+SREL'VALUE,2);          <<A9797>>16148000
                                                               <<A9797>>16150000
      <<BUILD STACK MARKER TO CLOSE'FILES>>                    <<A9797>>16152000
      CSTNUM := @CLOSE'FILES.(8:8);                            <<A9797>>16154000
      STK'MARKER(0) := 0;                  <<X REG>>           <<A9797>>16156000
      STK'MARKER(1) := CONVEXTLABELTODELTAP(@CLOSE'FILES);     <<A9797>>16158000
      STK'MARKER(2) := %160000 LOR CSTNUM; <<STATUS REG>>      <<A9797>>16160000
      STK'MARKER(3) := 4;                  <<DELTA Q>>         <<A9797>>16162000
      STK'MARKER(4) := DB'BANK;            <<DB BANK FOR IXIT>><<A9797>>16164000
      STK'MARKER(5) := DB'ADDR;            <<DB ADDR FOR IXIT>><<A9797>>16166000
                                                               <<A9797>>16168000
      <<PUT STACK MARKER ON ADOPTEE'S STACK & ADJUST SREL>>    <<A9797>>16170000
      MOVETODSEG(STK, DBPTR+SREL'VALUE-1, @STK'MARKER, 6);     <<A9797>>16172000
      SREL'VALUE := SREL'VALUE + 4;                            <<A9797>>16174000
      MOVETODSEG(STK,PXG'SIZE+RELSOFFSET,@SREL'VALUE,1);       <<A9797>>16176000
                                                               <<A9797>>16178000
      <<ALLOW ADOPTEE TO CLOSE OPEN STANDARD FILES BEFORE    >><<A9797>>16180000
      <<CONTINUING ADOPTION.                                 >><<A9797>>16182000
      AWAKE(ADOPTEE * PCBSIZE,FATHERWAIT,SONWAIT);             <<A9797>>16184000
   END;                                                        <<A9797>>16186000
                                                               <<A9797>>16188000
   PDISABLE;                                                   <<A9797>>16190000
   INDEX := LPCB(OLD'FATHER+SONINFOWORDNUM);                   <<A9797>>16192000
<<  REMOTE ADOPTEE FROM HIS OLD FATHER'S PROCESS TREE>>        <<A9797>>16194000
   IF INDEX=ADTINX THEN <<ADOPTEE IS FATHER'S 1ST SON>>        <<A9797>>16196000
      LPCB(OLD'FATHER+SONINFOWORDNUM) :=                       <<A9797>>16198000
      LPCB(ADTINX+BROTHERINFOWORDNUM)                          <<A9797>>16200000
   ELSE                                                        <<A9797>>16202000
   BEGIN   <<ADOPTEE IS A BROTHER OF FATHER'S 1ST SON>>        <<A9797>>16204000
      DO INDEX := LPCB((OLDINDEX := INDEX)+BROTHERINFOWORDNUM) <<A9797>>16206000
      UNTIL INDEX=ADTINX;  <<SCAN BROTHER CHAIN UNTIL ADOPTEE>><<A9797>>16208000
      LPCB(OLDINDEX + BROTHERINFOWORDNUM) :=                   <<A9797>>16210000
        LPCB(ADTINX + BROTHERINFOWORDNUM);                     <<A9797>>16212000
   END;                                                        <<A9797>>16214000
   PENABLE;                                                    <<A9797>>16216000
                                                               <<A9797>>16218000
   MOVEFROMDSEG(@A'PCBX,STK,0,PXG'SIZE+                        <<A9797>>16220000
               FIXEDSIZE);<< ADOPTEE'S PCBXGLOB AND FIXED >>   <<A9797>>16222000
                                                               <<A9797>>16224000
   MOVEFROMDSEG(@P'PCBX,LPCB(NEW'FATHER+STKINFOWORDNUM)        <<A9797>>16226000
               .STKDSTFIELD,0,PXG'SIZE+                        <<A9797>>16228000
                FIXEDSIZE); << PROGEN'S PCBXGLOB AND FIXED >>  <<A9797>>16230000
                                                               <<A9797>>16232000
   << UPDATE PROCESS CREATION COUNT IN JIT>>                   <<A9797>>16234000
                                                               <<A9797>>16236000
   PCBGLOBLOC := @P'PCBXGLOB - @QARRAY;                        <<P2522>>16236100
   NEXTJIT    := PXG'JITDST;                                   <<P2522>>16236200
   PCBGLOBLOC := @A'PCBXGLOB - @QARRAY;                        << 9797>>16238000
   EXCHANGEDB(PXG'JITDST);                                     <<P2522>>16240000
   DISABLE;                                                    <<P2522>>16242000
   IF JITNUMCREATIONS <> 0 THEN                                <<P2522>>16244000
     JITNUMCREATIONS := JITNUMCREATIONS - 1;                   <<P2522>>16246000
   ENABLE;                                                     <<P2522>>16248000
   EXCHANGEDB(NEXTJIT);                                        <<P2522>>16250000
   DISABLE;                                                    <<P2522>>16252000
   JITNUMCREATIONS := JITNUMCREATIONS + 1;                     <<P2522>>16254000
   ENABLE;                                                     <<P2522>>16256000
   EXCHANGEDB(0);                                              <<P2522>>16258000
                                                               <<A9797>>16260000
<< UPDATE JOB CROSS REFERENCE TABLE>>                          <<A9797>>16262000
                                                               <<A9797>>16264000
   PXFIXEDLOC := (@P'PCBXGLOB - @QARRAY) + PXG'SIZE;           << 9797>>16266000
   JNUMANDTYPE := PXFXJOBNUM;                                  <<A9797>>16268000
   JNUMANDTYPE.(0:2) := PXFXJOBTYPE;                           <<A9797>>16270000
   MOVETODSEG(JXREFDST,ADOPTEE,@JNUMANDTYPE,1);                <<A9797>>16272000
                                                               <<A9797>>16274000
<< UPDATE JOB PROCESS COUNT TABLE >>                           <<A9797>>16276000
                                                               <<A9797>>16278000
   <<NO CODE IS HERE AS THE TABLE ISN'T CURRENTLY BEING MAINTAI<<A9797>>16280000
   <<BY MPE.>>                                                 <<A9797>>16282000
                                                               <<A9797>>16284000
<< UPDATE JOB#/JOB TYPE IN ADOPTEE'S PCBXFIXED AREA>>          <<A9797>>16286000
                                                               <<A9797>>16288000
   JNUMANDTYPE := PXFXJOBNUM;                                  <<A9797>>16290000
   JNUMANDTYPE.(0:2) := PXFXJOBTYPE;                           <<A9797>>16292000
   PXFIXEDLOC := (@A'PCBXGLOB - @QARRAY) + PXG'SIZE;           << 9797>>16294000
   PXFXJOBNUM := JNUMANDTYPE.(2:14);                           <<J9797>>16296000
   PXFXJOBTYPE := JNUMANDTYPE.(0:2);                           <<J9797>>16297000
                                                               <<A9797>>16298000
<< UPDATE ADOPTEE'S PCBXGLOB AREA TO REFLECT ADOPTER'S JOB>>   <<A9797>>16300000
                                                               <<A9797>>16302000
   MOVE A'PCBXGLOB(2) := P'PCBXGLOB(2),(PXG'SIZE-2);           <<A9797>>16304000
                                                               <<A9797>>16306000
<< IF ADOPTER PROCESS IS SYSTEM PROCESS, NEED TO MAKE THIS NEW><<A9797>>16308000
<< SON A SYSTEM PROCESS>>                                      <<A9797>>16310000
                                                               <<A9797>>16312000
    IF LPCB(NEW'FATHER+PROCSTATEWORDNUM).SYSTEMPROCFLAG <> 0   <<A9797>>16314000
       AND NOT ONENET'ENTRY                                    <<A9797>>16316000
      THEN BEGIN << SYSTEM PROCESS >>                          <<A9797>>16318000
      LPCB(ADTINX+PROCSTATEWORDNUM).SYSTEMPROCFLAG:= 1;        <<A9797>>16320000
       END                                                     <<A9797>>16322000
    ELSE IF ONENET'ENTRY THEN                                  <<A9797>>16324000
      BEGIN                                                    <<A9797>>16326000
        PDISABLE;                                              <<A9797>>16328000
        IF LPCB(NEW'FATHER+PROCSTATEWORDNUM).SYSTEMPROCFLAG = 0<<A9797>>16330000
           THEN LPCB(ADTINX+PROCSTATEWORDNUM).PTYPEFIELD := 0  <<A9797>>16332000
        ELSE                                                   <<A9797>>16334000
           LPCB(ADTINX+PROCSTATEWORDNUM).PTYPEFIELD := 4;      <<A9797>>16336000
        LPCB(ADTINX+QUEUEINGINFOWORDNUM).QUEUEFIELD :=         <<A9797>>16338000
          LPCB(NEW'FATHER+QUEUEINGINFOWORDNUM).QUEUEFIELD;     <<A9797>>16340000
        LPCB(ADTINX+QUEUEINGINFOWORDNUM).PRIFIELD :=           <<A9797>>16342000
          LPCB(NEW'FATHER+QUEUEINGINFOWORDNUM).PRIFIELD;       <<A9797>>16344000
        PENABLE;                                               <<A9797>>16346000
      END;                                                     <<A9797>>16348000
                                                               <<A9797>>16350000
<< NOW READY TO LINK THE ADOPTEE INTO ADOPTER PROCESS STRUCTURE<<A9797>>16352000
                                                               <<A9797>>16354000
   MOVETODSEG(STK,0,@A'PCBX,PXG'SIZE+FIXEDSIZE);               <<A9797>>16356000
   PDISABLE;                                                   <<A9797>>16358000
   LPCB(ADTINX+BROTHERINFOWORDNUM) :=                          <<A9797>>16360000
   LPCB(NEW'FATHER+SONINFOWORDNUM);                            <<A9797>>16362000
   LPCB(NEW'FATHER+SONINFOWORDNUM):=ADOPTEE * PCBSIZE;         <<A9797>>16364000
   LPCB(ADTINX+FATHERINFOWORDNUM) := ADOPTER * PCBSIZE;        <<A9797>>16366000
   PENABLE;                                                    <<A9797>>16368000
                                                               <<A9797>>16370000
<< AT THIS POINT EVERYTHING IS DONE.>>                         <<A9797>>16372000
<< THIS PROCESS CANNOT BE ACTIVATED BY THE CREATING PROCESS,>> <<A9797>>16374000
<< BUT RATHER MUST BE AWAKEN VIA AWAKE(ADOPTEE,1)>>            <<A9797>>16376000
                                                               <<A9797>>16378000
   END;                                                        <<A9797>>16380000
$PAGE "PROCEDURE ADOPT'"                                       <<A9797>>16380010
<< ******************************************************** >> <<A9797>>16380020
<<                                                          >> <<A9797>>16380030
<< PROCEDURE ADOPT'                                         >> <<A9797>>16380040
<<                                                          >> <<A9797>>16380050
<<    NOTE: CURRENTLY THIS ROUTINE IS ONLY CALLED BY ADS.   >> <<A9797>>16380060
<<                                                          >> <<A9797>>16380070
<<    FUNCTION:                                             >> <<A9797>>16380080
<<                                                          >> <<A9797>>16380090
<<    CAUSES THE PROCESS SPECIFIED BY "ADOPTOR'PIN" TO ADOPT>> <<A9797>>16380100
<<    THE CALLING PROCESS AS ITS SON.  OPTIONALLY OPENS     >> <<A9797>>16380110
<<    $STDIN AND $STDLIST FOR THE ADOPTED PROCESS.  IF THE  >> <<A9797>>16380120
<<    CALLER WANTS TO ENSURE THAT THE ADOPTOR IS IN THE     >> <<A9797>>16380130
<<    PROPER STATE FOR THE ADOPT, THE PARAMETER             >> <<A9797>>16380140
<<    "CHECK'ADOPTOR" SHOULD BE TRUE.  THIS WILL CAUSE THE  >> <<A9797>>16380150
<<    ADOPTING PROCESS TO BE IMPEDED BEFORE THE ADOPT TAKES >> <<A9797>>16380160
<<    PLACE TO ENSURE THAT IT WILL NOT CHANGE STATE.  THE   >> <<A9797>>16380170
<<    ADOPTOR WILL THEN BE UNIMPEDED IF THE PASSED PARAMETER>> <<A9797>>16380180
<<    PARAMETER INDICATES TO DO SO.                         >> <<A9797>>16380190
<<                                                          >> <<A9797>>16380200
<<    PARAMETERS:                                           >> <<A9797>>16380210
<<                                                          >> <<A9797>>16380220
<<    ADOPTOR'PIN (INPUT)                                   >> <<A9797>>16380230
<<       PIN OF PROCESS WHO WILL ADOPT THE CALLING PROCESS. >> <<A9797>>16380240
<<                                                          >> <<A9797>>16380250
<<    OPENF (INPUT)                                         >> <<A9797>>16380260
<<       IF TRUE THEN THE ADOPTEE'S $STDIN AND $STDLIST WILL>> <<A9797>>16380270
<<       BE OPENED AFTER THE ADOPT TAKES PLACE.             >> <<A9797>>16380280
<<                                                          >> <<A9797>>16380290
<<    JOB'NUM (INPUT)                                       >> <<A9797>>16380300
<<       JOB OR SESSION # IN WHICH THE ADOPTOR RESIDES.     >> <<A9797>>16380310
<<       THE FIRST TWO BITS OF THIS PARM INDICATE WHETHER   >> <<A9797>>16380320
<<       THE # REFERS TO A JOB OR SESSION (1-SESSION, 2-JOB)>> <<A9797>>16380330
<<       THIS PARAMETER IS ONLY CONSULTED IF "OPENF" IS TRUE>> <<A9797>>16380340
<<                                                          >> <<A9797>>16380350
<<    CHECK'ADOPTOR (INPUT)                                 >> <<A9797>>16380360
<<       IF TRUE THEN THE ADOPTOR WILL BE CHECKED FOR ITS   >> <<A9797>>16380370
<<       READINESS TO ACCEPT A SON (ALIVE, NO SOFT KILL OR  >> <<A9797>>16380380
<<       STOP PSEUDO-INTERRUPTS, NOT IMPEDED).  IT WILL BE  >> <<A9797>>16380390
<<       IMPEDED IF IT IS IN THE PROPER STATE.              >> <<A9797>>16380400
<<                                                          >> <<A9797>>16380410
<<    UNIMPEDE'ADOPTOR (INPUT)                              >> <<A9797>>16380420
<<       IF TRUE (AND "CHECK'ADOPTOR" IS TRUE) THEN THE     >> <<A9797>>16380430
<<       ADOPTOR WILL BE UNIMPEDED AFTER THE ADOPT. IF FALSE>> <<A9797>>16380440
<<       THEN THE CALLER SHOULD UNIMPEDE THE ADOPTOR (IF    >> <<A9797>>16380450
<<       CCE IS RETURNED).                                  >> <<A9797>>16380460
<<                                                          >> <<A9797>>16380470
<<    NOTE:  IF THIS ROUTINE IS CALLED WITH "OPENF" TRUE    >> <<A9797>>16380480
<<    AND "UNIMPEDE'ADOPTOR" FALSE THEN CARE MUST BE TAKEN  >> <<A9797>>16380490
<<    THAT THE ADOPTOR DOES NOT HAVE ANY SIRS LOCKED WHICH  >> <<A9797>>16380500
<<    WILL BE NEEDED WHEN OPENING STANDARD FILES.  IF THIS  >> <<A9797>>16380510
<<    IS A PROBLEM THEN PERHAPS A WAIT LOOP SHOULD BE ADDED >> <<A9797>>16380520
<<    BEFORE THE "IMPEDE" TO ENSURE THAT THE ADOPTOR HAS    >> <<A9797>>16380530
<<    RELEASED ANY SIRS WHICH IT HAS (AND WHICH WE NEED).   >> <<A9797>>16380540
<<                                                          >> <<A9797>>16380550
<<    CONDITION CODES:                                      >> <<A9797>>16380560
<<                                                          >> <<A9797>>16380570
<<    CCG -> PIN/SESSION DOESN'T EXIST OR IS NOT IN THE     >> <<A9797>>16380580
<<           PROPER STATE.                                  >> <<A9797>>16380590
<<    CCL -> ADOPT FAILED.                                  >> <<A9797>>16380600
<<    CCE -> PROCESS ADOPTED SUCCESSFULLY.                  >> <<A9797>>16380610
<<                                                          >> <<A9797>>16380620
<< ******************************************************** >> <<A9797>>16380630
                                                               <<A9797>>16380640
PROCEDURE ADOPT'(ADOPTOR'PIN, OPENF, JOB'NUM, CHECK'ADOPTOR,   <<A9797>>16380650
   UNIMPEDE'ADOPTOR);                                          <<A9797>>16380660
                                                               <<A9797>>16380670
VALUE ADOPTOR'PIN,OPENF,JOB'NUM,CHECK'ADOPTOR,UNIMPEDE'ADOPTOR;<<A9797>>16380680
INTEGER ADOPTOR'PIN, JOB'NUM;                                  <<A9797>>16380690
LOGICAL OPENF, CHECK'ADOPTOR, UNIMPEDE'ADOPTOR;                <<A9797>>16380700
OPTION PRIVILEGED, UNCALLABLE;                                 <<A9797>>16380710
                                                               <<A9797>>16380720
BEGIN                                                          <<A9797>>16380730
                                                               <<A9797>>16380740
EQUATE                                                         <<A9797>>16380750
                                                               <<A9797>>16380760
   << FOPTIONS, AOPTIONS FOR $STDIN, $STDLIST >>               <<A9797>>16380770
                                                               <<A9797>>16380780
   FOPT1'SESS = %2244,                                         <<A9797>>16380790
   FOPT2'SESS = %2614,                                         <<A9797>>16380800
   AOPT1'SESS = %1700,                                         <<A9797>>16380810
   AOPT2'SESS = %1701,                                         <<A9797>>16380820
   FOPT1'JOB  = %2245,                                         <<A9797>>16380830
   FOPT2'JOB  = %2614,                                         <<A9797>>16380840
   AOPT1'JOB  = %1300,                                         <<A9797>>16380850
   AOPT2'JOB  = %1301,                                         <<A9797>>16380860
                                                               <<A9797>>16380870
   JMATINX    = 0,  << SINCE WE ARE USING FINDJOB TO GET THE >><<A9797>>16380880
                    << JMAT ENTRY, "JMATARR" POINTS TO THE   >><<A9797>>16380890
                    << BEGINNING OF THE JMAT ENTRY (RATHER   >><<A9797>>16380900
                    << THAN THE BEGINNING OF THE JMAT ITSELF)>><<A9797>>16380910
                    << THEREFORE THE INDEX TO THE ENTRY FROM >><<A9797>>16380920
                    << "JMATARR" IS 0.                       >><<A9797>>16380930
   NO'FILE    = 72,                                            <<A9797>>16380940
   JOB        = TRUE, << SEARCH FOR JOB.                     >><<A9797>>16380950
   SESSION    = FALSE;<< SEARCH FOR SESSION.                 >><<A9797>>16380960
                                                               <<A9797>>16380970
DEFINE                                                         <<A9797>>16380980
   CC = STATUS.(6:2)#,                                         <<A9797>>16380990
   ADOPTOR'IS'ALIVE =                                          <<A9797>>16381020
      CHECKALIVE(ADOPTOR'PIN) AND PROCSTATE.ALIVEFLAG#,        <<A9797>>16381030
   NOT'MARKED'FOR'DEATH =                                      <<A9797>>16381040
      NOT PROCSTATE.SOFTKILLFLAG AND NOT PROCSTATE.STOPFLAG#,  <<A9797>>16381050
   IMPEDED =                                                   <<A9797>>16381060
      WAKEMASK.IMPEDEDWAITFLAG#;                               <<A9797>>16381070
                                                               <<A9797>>16381080
LOGICAL                                                        <<A9797>>16381090
   PCBPT,            << REQUIRED FOR INCLUDE FILE >>           <<A9797>>16381100
                     << DEFINES.  GIVES PCB INDEX >>           <<A9797>>16381110
                     << FOR DESIRED PIN.          >>           <<A9797>>16381120
   TYPE,             << TELLS FINDJOB TO SEARCH   >>           <<A9797>>16381130
                     << FOR JOB (TRUE) OR SESSION.>>           <<A9797>>16381140
   FCLOSE1,          << FCLOSE RESULT FOR $STDIN  >>           <<A9797>>16381150
   FCLOSE2;          << FCLOSE RESULT FOR $STDLIST>>           <<A9797>>16381160
                                                               <<A9797>>16381170
INTEGER                                                        <<A9797>>16381180
   MY'PIN,           << PIN OF CALLER.            >>           <<A9797>>16381190
   OLD'FATHER'PIN,   << PIN OF CALLER'S FATHER    >>           <<A9797>>16381200
                     << BEFORE ADOPT TAKES PLACE. >>           <<A9797>>16381210
   OLDSVAL,          << FROM FINDJOB (VIA GETSIR).>>           <<A9797>>16381220
   ENTRYP,           << USED BY FINDJOB.          >>           <<A9797>>16381230
   ERRCOD,           << USED BY ONENET'ADOPT AND  >>           <<A9797>>16381240
                     << FCHECK.                   >>           <<A9797>>16381250
   LENGTH;           << USED FOR ASCII RETURN.    >>           <<A9797>>16381260
                                                               <<A9797>>16381270
INTEGER ARRAY                                                  <<A9797>>16381280
   JMATARR(0:JMATENTRYSIZE); << USED BY FINDJOB.  >>           <<A9797>>16381290
                                                               <<A9797>>16381300
BYTE ARRAY                                                     <<A9797>>16381310
   FORDES1 (0:8),    << FORMAL DESIGNATOR $STDIN  >>           <<A9797>>16381320
   FORDES2 (0:8),    << FORMAL DESIGNATOR $STDLIST>>           <<A9797>>16381330
   DEV1NEW (0:3),    << NEW $STDIN DEVICE         >>           <<A9797>>16381340
   DEV2NEW (0:3);    << NEW $STDLIST DEVICE       >>           <<A9797>>16381350
                                                               <<A9797>>16381360
INTEGER POINTER                                                <<A9797>>16381370
   PCB = SYSPCBINDEX;                                          <<A9797>>16381380
                                                               <<A9797>>16381390
LOGICAL POINTER                                                <<A9797>>16381400
   PXGLOB;           << POINTER TO STACK PXGLOB   >>           <<A9797>>16381410
                                                               <<A9797>>16381420
LOGICAL PROCEDURE MYPIN;                                       <<A9797>>16381430
OPTION EXTERNAL;                                               <<A9797>>16381440
$PAGE "PROCEDURE ADOPT' - MAIN BODY"                           <<A9797>>16381450
<<*** BODY OF ADOPT' ***>>                                     <<A9797>>16381460
                                                               <<A9797>>16381470
MY'PIN := MYPIN;                                               <<A9797>>16381480
                                                               <<A9797>>16381490
<< CLOSE STANDARD FILES >>                                     <<A9797>>16381500
                                                               <<A9797>>16381510
FCLOSE1 := TRUE;                                               <<A9797>>16381520
FCLOSE(1,0,0);                                                 <<A9797>>16381530
IF <> THEN                                                     <<A9797>>16381540
   BEGIN                                                       <<A9797>>16381550
   FCLOSE(1, -1 << MUST CLOSE >>, 0);                          <<A9797>>16381560
   IF <> THEN                                                  <<A9797>>16381570
      BEGIN                                                    <<A9797>>16381580
      FCHECK(1,ERRCOD);                                        <<A9797>>16381590
      FCLOSE1 := ERRCOD = NO'FILE;                             <<A9797>>16381600
      END;                                                     <<A9797>>16381610
   END;                                                        <<A9797>>16381620
FCLOSE2 := TRUE;                                               <<A9797>>16381630
FCLOSE(2,0,0);                                                 <<A9797>>16381640
IF <> THEN                                                     <<A9797>>16381650
   BEGIN                                                       <<A9797>>16381660
   FCLOSE(2, -1 << MUST CLOSE >>, 0);                          <<A9797>>16381670
   IF <> THEN                                                  <<A9797>>16381680
      BEGIN                                                    <<A9797>>16381690
      FCHECK(2, ERRCOD);                                       <<A9797>>16381700
      FCLOSE2 := ERRCOD = NO'FILE;                             <<A9797>>16381710
      END;                                                     <<A9797>>16381720
   END;                                                        <<A9797>>16381730
                                                               <<A9797>>16381740
<< GET FATHER PIN IN CASE WE NEED TO GET BACK TO WHERE >>      <<A9797>>16381750
<< WE STARTED.                                         >>      <<A9797>>16381751
                                                               <<A9797>>16381760
PDISABLE;                                                      <<A9797>>16381770
PCBPT := MY'PIN * PCBSIZE;                                     <<A9797>>16381780
OLD'FATHER'PIN := SPCBFATHERINFO / PCBSIZE;                    <<A9797>>16381790
                                                               <<A9797>>16381800
IF CHECK'ADOPTOR THEN                                          <<A9797>>16381810
   << MAKE SURE ADOPTOR IS IN THE PROPER STATE FOR THE ADOPT >><<A9797>>16381820
   BEGIN                                                       <<A9797>>16381830
   PCBPT := ADOPTOR'PIN * PCBSIZE;                             <<A9797>>16381840
   IF ADOPTOR'IS'ALIVE AND NOT'MARKED'FOR'DEATH AND            <<A9797>>16381850
      NOT IMPEDED THEN                                         <<A9797>>16381851
                                                               <<A9797>>16381860
      << ADOPTOR IS OK, IMPEDE IT SO THAT IT STAYS THAT WAY >> <<A9797>>16381870
                                                               <<A9797>>16381880
      IMPEDE(PCBPT)                                            <<A9797>>16381890
   ELSE                                                        <<A9797>>16381900
      BEGIN << ADOPTOR IS IN BAD SHAPE, DON'T ADOPT >>         <<A9797>>16381910
      PENABLE;                                                 <<A9797>>16381920
      CC := CCG;                                               <<A9797>>16381930
      RETURN;                                                  <<A9797>>16381940
      END;                                                     <<A9797>>16381950
   END;                                                        <<A9797>>16381960
PENABLE;                                                       <<A9797>>16381970
                                                               <<A9797>>16381980
ERRCOD := ONENET'ADOPT(MY'PIN, ADOPTOR'PIN);                   <<A9797>>16381990
IF ERRCOD <> 0 THEN                                            <<A9797>>16382000
   CC := CCL                                                   <<A9797>>16382010
ELSE                                                           <<A9797>>16382020
   IF OPENF THEN                                               <<A9797>>16382030
      BEGIN  << OPEN $STDIN, $STDLIST FOR ADOPTEE >>           <<A9797>>16382040
      MOVE FORDES1 := "$STDIN ";                               <<A9797>>16382050
      MOVE FORDES2 := "$STDLIST ";                             <<A9797>>16382060
                                                               <<A9797>>16382070
      IF JOB'NUM < 0 THEN                                      <<A9797>>16382080
          TYPE := JOB                                          <<A9797>>16382090
      ELSE                                                     <<A9797>>16382100
          TYPE := SESSION;                                     <<A9797>>16382110
                                                               <<A9797>>16382120
      << UNIMPEDE ADOPTOR TO ENSURE THAT WE DON'T HANG WHEN >> <<A9797>>16382130
      << MESSING WITH FILES.  WE WILL SET "CHECK'ADOPTOR" SO>> <<A9797>>16382140
      << THAT WE WILL NOT ATTEMPT TO UNIMPEDE IT AGAIN AT   >> <<A9797>>16382150
      << THE END OF THIS PROCEDURE.                         >> <<A9797>>16382160
                                                               <<A9797>>16382170
      IF CHECK'ADOPTOR AND UNIMPEDE'ADOPTOR THEN               <<A9797>>16382180
         BEGIN                                                 <<A9797>>16382190
         UNIMPEDE(PCBPT);                                      <<A9797>>16382200
         CHECK'ADOPTOR := FALSE;                               <<A9797>>16382210
         END;                                                  <<A9797>>16382220
                                                               <<A9797>>16382230
      IF FINDJOB(JMATARR, ENTRYP, JOB'NUM.(2:14),              <<A9797>>16382240
          TYPE,,,,OLDSVAL) THEN                                <<A9797>>16382250
         BEGIN                                                 <<A9797>>16382260
         RELSIR(JMATSIR, OLDSVAL);                             <<A9797>>16382270
         LENGTH := ASCII(JMATJINDEV, 10, DEV1NEW);             <<A9797>>16382280
         DEV1NEW(LENGTH) := " ";                               <<A9797>>16382290
         LENGTH := ASCII(JMATJLISTDEV, 10, DEV2NEW);           <<A9797>>16382300
         DEV2NEW(LENGTH) := " ";                               <<A9797>>16382310
         IF FCLOSE1 THEN                                       <<A9797>>16382320
            IF TYPE = JOB THEN                                 <<A9797>>16382330
               FOPEN(FORDES1, FOPT1'JOB, AOPT1'JOB,, DEV1NEW)  <<A9797>>16382340
            ELSE                                               <<A9797>>16382350
               FOPEN(FORDES1,FOPT1'SESS, AOPT1'SESS,, DEV1NEW);<<A9797>>16382360
         IF FCLOSE2 THEN                                       <<A9797>>16382370
            IF TYPE = JOB THEN                                 <<A9797>>16382380
               FOPEN(FORDES2, FOPT2'JOB, AOPT2'JOB,, DEV2NEW)  <<A9797>>16382390
            ELSE                                               <<A9797>>16382400
               FOPEN(FORDES2,FOPT2'SESS, AOPT2'SESS,, DEV2NEW);<<A9797>>16382410
         CC := CCE;                                            <<A9797>>16382420
         END                                                   <<A9797>>16382430
      ELSE                                                     <<A9797>>16382440
          <<JOB WAS NOT FOUND. GET BACK TO OLD FATHER. WE ARE>><<A9797>>16382450
          << ASSUMING HERE THAT ADOPT' WAS CALLED WHILE THE  >><<A9797>>16382460
          << SERVER WAS UNDER DSDAD AND THEREFORE THE ADOPTOR>><<A9797>>16382470
          << FOR THE CALL BELOW (DSDAD) DOES NOT NEED TO BE  >><<A9797>>16382480
          << IMPEDED WHILE WE TRY TO GET BACK.               >><<A9797>>16382490
          BEGIN                                                <<A9797>>16382500
          ONENET'ADOPT(MY'PIN, OLD'FATHER'PIN);                <<A9797>>16382510
          CC := CCG;                                           <<A9797>>16382520
          END;                                                 <<A9797>>16382530
      END  << OPENF >>                                         <<A9797>>16382540
   ELSE                                                        <<A9797>>16382550
      CC := CCE;  << DON'T OPEN STD FILES >>                   <<A9797>>16382560
                                                               <<A9797>>16382570
<< UNIMPEDE THE ADOPTOR IF CALLER DESIRES OR AN ERROR OCCURED>><<A9797>>16382580
<< (AND ADOPTOR IS IMPEDED).                                 >><<A9797>>16382590
                                                               <<A9797>>16382600
IF CHECK'ADOPTOR THEN                                          <<A9797>>16382610
   IF CC <> CCE OR UNIMPEDE'ADOPTOR THEN                       <<A9797>>16382620
      UNIMPEDE(PCBPT);                                         <<A9797>>16382630
                                                               <<A9797>>16382640
END;  << OF ADOPT' >>                                          <<A9797>>16382650
$PAGE "PROCEDURE AS'CHANGE'FATHER"                             <<A9797>>16382660
<<***********************************************************>><<A9797>>16382670
<<                                                           >><<A9797>>16382680
<< PROCEDURE AS'CHANGE'FATHER                                >><<A9797>>16382690
<<                                                           >><<A9797>>16382700
<<    NOTE: CURRENTLY THIS ROUTINE IS ONLY CALLED BY ADS.    >><<A9797>>16382710
<<                                                           >><<A9797>>16382720
<<    FUNCTION:                                              >><<A9797>>16382730
<<                                                           >><<A9797>>16382740
<<    RELINKS THE PROCESS TREE POINTER IN THE PROCESS CONTROL>><<A9797>>16382750
<<    BLOCK (PCB) SO THAT THE INDICATED SON PROCESS BECOMES A>><<A9797>>16382760
<<    SON OF THE NEWFATHER PROCESS.  THIS IS USED TO MOVE    >><<A9797>>16382770
<<    THE DSSERVER PROCESS BACK UNDERNEATH DSDAD AFTER AN AS >><<A9797>>16382780
<<    SERVICE (LIKE VT OR PTOP) ADOPTS THE SERVER TO A CI    >><<A9797>>16382790
<<    SESSION.  THE AS IMS WILL EVENTUALLY EXPLAIN WE GO TO  >><<A9797>>16382800
<<    THE TROUBLE TO DO ALL THIS.                           >> <<A9797>>16382810
<<                                                           >><<A9797>>16382820
<<    PARAMETERS:                                            >><<A9797>>16382830
<<                                                           >><<A9797>>16382840
<<    SON (INPUT BY VALUE)                                   >><<A9797>>16382850
<<       INTEGER PROCESS ID NUMBER (PIN) FOR THE PROCESS TO  >><<A9797>>16382860
<<       BE MOVED UNDERNEATH THE NEW FATHER.  THIS IS USUALLY>><<A9797>>16382870
<<       THE DSSERVER PROCESS.                               >><<A9797>>16382880
<<                                                           >><<A9797>>16382890
<<    NEWFATHER (INPUT BY VALUE)                             >><<A9797>>16382900
<<       INTEGER PROCESS ID NUMBER (PIN) FOR THE PROCESS TO  >><<A9797>>16382910
<<       BECOME THE NEW FATHER OF THE SON PROCESS.           >><<A9797>>16382920
<<                                                           >><<A9797>>16382930
<<***********************************************************>><<A9797>>16382940
                                                               <<A9797>>16382950
PROCEDURE AS'CHANGE'FATHER( SON, NEWFATHER );                  <<A9797>>16382960
   VALUE   SON, NEWFATHER;                                     <<A9797>>16382970
   INTEGER SON, NEWFATHER;                                     <<A9797>>16382980
   OPTION  UNCALLABLE;                                         <<A9797>>16382990
BEGIN                                                          <<A9797>>16383000
                            << PCB INDICES FOR PROCESSES:    >><<A9797>>16383010
   INTEGER SONINDEX,        << SON PROCESS TO BE CHANGED     >><<A9797>>16383020
           NEWFATHERINDEX,  << NEW FATHER PROCESS FOR SON    >><<A9797>>16383030
           OLDFATHERINDEX,  << ORIGINAL FATHER OF SON PROCESS>><<A9797>>16383040
           NEXTSONINDEX,    << NEXT SON IN PROCESS TREE      >><<A9797>>16383050
           LASTSONINDEX;    << PRECEDING SON IN PROCESS TREE >><<A9797>>16383060
                                                               <<A9797>>16383070
      <<THE PCB TABLE IS ACCESSED BY THE FOLLOWING CONSTRUCT:>><<A9797>>16383080
      <<                                                     >><<A9797>>16383090
      <<       LPCB(ENTRYINDEX+FIELDOFFSET)                  >><<A9797>>16383100
      <<                                                     >><<A9797>>16383110
      << WHERE ENTRYINDEX  IS THE INDEX (RELATIVE TO THE     >><<A9797>>16383120
      <<                   BEGINNING OF THE PCB) OF THE ENTRY>><<A9797>>16383130
      <<                   FOR A PROCESS,                    >><<A9797>>16383140
      <<       FIELDOFFSET IS THE OFFSET OF A FIELD WITHIN   >><<A9797>>16383150
      <<                   THE ENTRY.                        >><<A9797>>16383160
      <<                                                     >><<A9797>>16383170
      << LPCB USES THE SYSDB RELATIVE POINTER TO THE PCB AT  >><<A9797>>16383180
      << SYSDB+3; REFERENCES TO IT GENERATE LOAD FROM AND    >><<A9797>>16383190
      << STORE TO SYSTEM TABLE (LST AND SST) INSTRUCTIONS.   >><<A9797>>16383200
      << THE LPCB POINTER AND THE FIELDOFFSETS ARE DEFINED   >><<A9797>>16383210
      << IN THE PCB INCLUDE FILE INCLPCB5.                   >><<A9797>>16383220
                                                               <<A9797>>16383230
   DEFINE  DISABLE'INTERRUPTS = ASSEMBLE(SED 0)   #,           <<A9797>>16383240
           ENABLE'INTERRUPTS  = ASSEMBLE(SED 1)   #;           <<A9797>>16383250
                                                               <<A9797>>16383260
   DISABLE'INTERRUPTS;                                         <<A9797>>16383270
   SONINDEX       := SON * PCBSIZE;                            <<A9797>>16383280
   NEWFATHERINDEX := NEWFATHER * PCBSIZE;                      <<A9797>>16383290
   IF LPCB(SONINDEX      +PROCSTATEWORDNUM).ALIVEFLAG AND      <<A9797>>16383300
      LPCB(NEWFATHERINDEX+PROCSTATEWORDNUM).ALIVEFLAG THEN     <<A9797>>16383310
      BEGIN                                                    <<A9797>>16383320
      OLDFATHERINDEX := LPCB(SONINDEX+FATHERINFOWORDNUM);      <<A9797>>16383330
                                                               <<A9797>>16383340
         << REMOVE THE SON PROCESS FROM ITS OLD FATHERS PRO- >><<A9797>>16383350
         << CESS TREE; RELINK THE BROTHER LIST AROUND THE SON>><<A9797>>16383360
         << OR (IF SON IS THE FIRST BROTHER), RELINK THE OLD >><<A9797>>16383370
         << FATHER'S SON POINTER TO THE NEXT BROTHER.        >><<A9797>>16383380
                                                               <<A9797>>16383390
      NEXTSONINDEX   := LPCB(OLDFATHERINDEX+SONINFOWORDNUM);   <<A9797>>16383400
      LASTSONINDEX   := 0;                                     <<A9797>>16383410
      WHILE NEXTSONINDEX <> SONINDEX DO                        <<A9797>>16383420
         BEGIN                                                 <<A9797>>16383430
         LASTSONINDEX := NEXTSONINDEX;                         <<A9797>>16383440
         NEXTSONINDEX := LPCB(NEXTSONINDEX+BROTHERINFOWORDNUM);<<A9797>>16383450
         END;                                                  <<A9797>>16383460
      IF LASTSONINDEX <> 0 THEN                                <<A9797>>16383470
         LPCB(LASTSONINDEX+BROTHERINFOWORDNUM) :=              <<A9797>>16383480
            LPCB(SONINDEX+BROTHERINFOWORDNUM)                  <<A9797>>16383490
      ELSE                                                     <<A9797>>16383500
         LPCB(OLDFATHERINDEX+SONINFOWORDNUM) :=                <<A9797>>16383510
            LPCB(SONINDEX+BROTHERINFOWORDNUM);                 <<A9797>>16383520
                                                               <<A9797>>16383530
         << LINK THE SON PROCESS INTO THE NEW FATHER'S PRO-  >><<A9797>>16383540
         << CESS TREE.  POINT THE SON'S FATHER PIN TO THE NEW>><<A9797>>16383550
         << FATHER, AND INSERT THE SON INTO THE LIST OF THE  >><<A9797>>16383560
         << NEW FATHER'S SONS.                               >><<A9797>>16383570
                                                               <<A9797>>16383580
      LPCB(SONINDEX+FATHERINFOWORDNUM) := NEWFATHERINDEX;      <<A9797>>16383590
      NEXTSONINDEX := LPCB(NEWFATHERINDEX+SONINFOWORDNUM);     <<A9797>>16383600
      LASTSONINDEX := 0;                                       <<A9797>>16383610
      WHILE NEXTSONINDEX <> 0 DO                               <<A9797>>16383620
         BEGIN                                                 <<A9797>>16383630
         LASTSONINDEX := NEXTSONINDEX;                         <<A9797>>16383640
         NEXTSONINDEX := LPCB(NEXTSONINDEX+BROTHERINFOWORDNUM);<<A9797>>16383650
         END;                                                  <<A9797>>16383660
      IF LASTSONINDEX <> 0 THEN                                <<A9797>>16383670
         LPCB(LASTSONINDEX+BROTHERINFOWORDNUM) := SONINDEX     <<A9797>>16383680
      ELSE                                                     <<A9797>>16383690
         LPCB(NEWFATHERINDEX+SONINFOWORDNUM)   := SONINDEX;    <<A9797>>16383700
      LPCB(SONINDEX+BROTHERINFOWORDNUM) := 0;                  <<A9797>>16383710
      END;                                                     <<A9797>>16383720
   ENABLE'INTERRUPTS;                                          <<A9797>>16383730
                                                               <<A9797>>16383740
END;  <<AS'CHANGE'FATHER>>                                     <<A9797>>16383750
$CONTROL SEGMENT=MAIN                                          <<A9797>>16384000
END.                                                           <<A9797>>16386000
