         << LINES .001/.009 ARE RESERVED FOR SYSTEMS INTEGRATION >>     00000001
INTEGER POINTER ICS = 7;                                       <<F2040>>00117000
$INCLUDE INCLMEAS                                              <<F2040>>00350100
$INCLUDE INCLPCBX                                              <<F2040>>00350200
$INCLUDE INCLMIFT                                              <<F2040>>00350300
$EDIT VOID=01545000                                            <<P9954>>01540000
<<---------------------------------------------------------->> <<P9954>>01541000
PROCEDURE SOFT'DEATH(WHICH);                                   <<P9954>>01542000
  VALUE WHICH;                                                 <<P9954>>01543000
  INTEGER WHICH;                                               <<P9954>>01544000
  OPTION EXTERNAL;                                             <<P9954>>01545000
$PAGE "PROCEDURE GETORIGIN"                                    <<P9954>>01549990
$EDIT VOID=01885000                                            <<.1738>>01685000
COMMENT                                                        <<.1738>>01686000
**BEGIN_IS*****************************************************<<.1738>>01687000
*                                                             *<<.1738>>01688000
* PROCEDURE PROCINFO(ERROR1,ERROR2,PIN,OPTION1,ITEM1,OPTION2, *<<.1738>>01689000
*                    ITEM2,OPTION3,ITEM3,OPTION4,ITEM4,       *<<.1738>>01690000
*                    OPTION5,ITEM5,OPTION6,ITEM6)             *<<.1738>>01691000
*                                                             *<<.1738>>01692000
* PURPOSE:  PROCEDURE PROCINFO IS THE PROCESSOR OF THE        *<<.1738>>01693000
*           PROCINFO INTRINSIC.  THIS PROCEDURE IS CALLED TO  *<<.1738>>01694000
*           OBTAIN PROCESS INFORMATION LIKE WHAT THE PROCESS  *<<.1738>>01695000
*           ID NUMBER (PIN) OF THE CALLER IS, WHAT THE        *<<.1738>>01696000
*           FATHER'S PIN IS, THE NUMBER OF SONS THAT A        *<<.1738>>01697000
*           SPECIFIED PROCESS HAS, THE NUMBER OF DESCENDENTS  *<<.1738>>01698000
*           THAT A SPECIFIED PROCESS HAS, THE NUMBER OF       *<<.1738>>01699000
*           GENERATIONS THAT A SPECIFIED PROCESS HAS, ALL THE *<<.1738>>01700000
*           DIRECTLY RELATED SON PINS OF A SPECIFIED PROCESS, *<<.1738>>01701000
*           ALL THE DESCENDENTS (DIRECT AND INDIRECT) OF A    *<<.1738>>01702000
*           SPECIFIED PROCESS, THE PRIORITY OF THE SPECIFIED  *<<.1738>>01703000
*           PROCESS, THE STATE AND ACTIVATION INFORMATION OF  *<<.1738>>01704000
*           A SPECIFIED PROCESS AND THE PROGRAM NAME OF WHERE *<<.1738>>01705000
*           THE SPECIFIED PROCESS IS CURRENTLY EXECUTING.  UP *<<.1738>>01706000
*           TO 6 DIFFERENT INFORMATION RETRIEVAL OPTIONS CAN  *<<.1738>>01707000
*           BE REQUESTED AND PROCESS WILL STOP WHEN THE FIRST *<<.1738>>01708000
*           ERROR IS ENCOUNTERED.                             *<<.1738>>01709000
*                                                             *<<.1738>>01710000
*           DO AN ADDS/SUBS TO MAKE SURE THAT THE SYSTEM WILL *<<.1738>>01711000
*           HAVE THE AVAILABLE STACK SPACE FOR THE LOCAL      *<<.1738>>01712000
*           VARIABLES.  CALL PROCEDURE CHEK'NOABORT TO CHECK  *<<.1738>>01713000
*           THE CALLING PROCESS & ITS PARAMETER LIST AND GET  *<<.1738>>01714000
*           THE MINIMUM/MAXIMUM BOUNDS LIMIT OF THE STACK.    *<<.1738>>01715000
*           IF THERE IS AN ERROR, THEN RETURN ERROR STATUS IF *<<.1738>>01716000
*           THE 1ST PARAMETER IS MISSING OR IS BEING CALLED   *<<.1738>>01717000
*           IN SPLIT STACK MODE.  SET UP VARIABLE TARGET'PIN  *<<.1738>>01718000
*           WITH EITHER THE CALLER'S PIN OR A SPECIFIED PIN   *<<.1738>>01719000
*           (CALL CHECK'GOOD'PIN TO MAKE SURE THAT IT IS      *<<.1738>>01720000
*           VALID FIRST).  THEN CALL SUBROUTINE               *<<.1738>>01721000
*           GET'CAPABILITIES TO GET THE CALLER'S CAPABILITIES *<<.1738>>01722000
*           AND BEGIN LOOPING THRU ALL THE OPTIONS THAT THE   *<<.1738>>01723000
*           CALLER SPECIFIED (UP TO SIX), CALLING SUBROUTINE  *<<.1738>>01724000
*           SELECT'OPTION TO HANDLE THE PROCESSING OF EACH    *<<.1738>>01725000
*           OPTION (ERROR RETURN IF THERE IS AN UNMATCHED     *<<.1738>>01726000
*           PAIR OF OPTION/ITEM PARAMETERS).  WHEN ALL THE    *<<.1738>>01727000
*           OPTIONS HAVE BEEN PROCESSED, THEN RETURN.         *<<.1738>>01728000
*                                                             *<<.1738>>01729000
* ENTRY:    PIN       =PROCESS ID NUMBER TO GET INFORMATION   *<<.1738>>01730000
*                        FOR.  IF =0, THEN GET INFORMATION    *<<.1738>>01731000
*                        ABOUT THE CALLER.                    *<<.1738>>01732000
*                                                             *<<.1738>>01733000
*           OPTION1--6=FUNCTION CODE TO DESCRIBE ON WHAT      *<<.1738>>01734000
*                         INFORMATION TO GET.                 *<<.1738>>01735000
*                     = 1 IF TO GET THE PIN OF THE CALLING    *<<.1738>>01736000
*                         PROCESS                             *<<.1738>>01737000
*                     = 2 IF TO GET THE PIN OF THE FATHER OF  *<<.1738>>01738000
*                         THE CALLING PROCESS                 *<<.1738>>01739000
*                     = 3 IF TO GET THE NUMBER OF SONS OF THE *<<.1738>>01740000
*                         SPECIFIED PROCESS                   *<<.1738>>01741000
*                     = 4 IF TO GET THE NUMBER OF DESCENDENTS *<<.1738>>01742000
*                         (BOTH DIRECT AND INDIRECT) OF THE   *<<.1738>>01743000
*                         SPECIFIED PROCESS                   *<<.1738>>01744000
*                     = 5 IF TO GET THE NUMBER OF GENERATIONS *<<.1738>>01745000
*                         OF THE SPECIFIED PROCESS WHICH      *<<.1738>>01746000
*                         INCLUDES ITSELF                     *<<.1738>>01747000
*                     = 6 IF TO GET THE PINS OF ALL SONS      *<<.1738>>01748000
*                         (DIRECT DESCENDENTS)                *<<.1738>>01749000
*                     = 7 IF TO GET THE PINS OF ALL           *<<.1738>>01750000
*                         DESCENDENTS (BOTH DIRECT AND        *<<.1738>>01751000
*                         INDIRECT)                           *<<.1738>>01752000
*                     = 8 IF TO GET THE PRIORITY OF THE       *<<.1738>>01753000
*                         SPECIFIED PROCESS                   *<<.1738>>01754000
*                     = 9 IF TO GET STATE AND ACTIVATION INFO *<<.1738>>01755000
*                         OF THE SPECIFIED PROCESS            *<<.1738>>01756000
*                     =10 IF TO GET THE PROGRAM NAME OF THE   *<<.1738>>01757000
*                         SPECIFIED PROCESS                   *<<.1738>>01758000
*                                                             *<<.1738>>01759000
*           ITEM1--6  =A BYTE ARRAY, INTEGER ARRAY OR INTEGER *<<.1738>>01760000
*                         VARIABLE WHICH WILL HOLD THE        *<<.1738>>01761000
*                         RETURNED INFORMATION                *<<.1738>>01762000
*                                                             *<<.1738>>01763000
* EXIT:     ERROR1    =ERROR STATUS WORD                      *<<.1738>>01764000
*                     = 0 IF NO ERROR                         *<<.1738>>01765000
*                     = 1 IF INSUFFICIENT CAPABILITIES OF     *<<.1738>>01766000
*                         CALLER                              *<<.1738>>01767000
*                     = 2 IF OMITTED REQUIRED PARAMETER       *<<.1738>>01768000
*                     = 3 IF PARAMETER ADDRESS SUPPLIED IS    *<<.1738>>01769000
*                         OUT-OF-BOUNDS                       *<<.1738>>01770000
*                     = 4 IF ARRAY SIZE SUPPLIED IS OUT-OF-   *<<.1738>>01771000
*                         RANGE                               *<<.1738>>01772000
*                     = 5 IF INVALID OPTION NUMBER            *<<.1738>>01773000
*                     = 6 IF INVALID PIN NUMBER               *<<.1738>>01774000
*                     = 7 IF UNASSIGNED PIN NUMBER            *<<.1738>>01775000
*                     = 8 IF UNPAIRED OPTION/ITEM PARAMETERS  *<<.1738>>01776000
*                                                             *<<.1738>>01777000
*           ERROR2    =ADDITIONAL ERROR INFORMATION           *<<.1738>>01778000
*                      IF ERROR1= 1, THEN ERROR2=INDEX OF     *<<.1738>>01779000
*                        OFFENDING OPTION                     *<<.1738>>01780000
*                      IF ERROR1= 2, THEN ERROR2=-1           *<<.1738>>01781000
*                      IF ERROR1= 3, THEN ERROR2 IS NOT USED  *<<.1738>>01782000
*                      IF ERROR1= 4, THEN ERROR2 IS THE       *<<.1738>>01783000
*                        ILLEGAL ARRAY SIZE                   *<<.1738>>01784000
*                      IF ERROR1= 5, THEN ERROR2 IS THE INDEX *<<.1738>>01785000
*                        OF THE OFFENDING OPTION              *<<.1738>>01786000
*                      IF ERROR1= 6, THEN ERROR2=-1           *<<.1738>>01787000
*                      IF ERROR1= 7, THEN ERROR2=-1           *<<.1738>>01788000
*                      IF ERROR1= 8, THEN ERROR2 IS THE INDEX *<<.1738>>01789000
*                        OF THE OFFENDING OPTION/ITEM         *<<.1738>>01790000
*                        PARAMETER PAIR                       *<<.1738>>01791000
*                                                             *<<.1738>>01792000
**END_IS*******************************************************<<.1738>>01793000
;                                                              <<.1738>>01794000
$EDIT VOID=02630000                                            <<.1738>>01900000
                                                               <<.1738>>01901000
! CONFIGURATION VALUES                                         <<.1738>>01902000
! --------------------                                         <<.1738>>01903000
EQUATE                                                         <<.1738>>01904000
  REQSTKSIZE        =22,           !NUMBER OF LOCAL VARIABLES  <<.1738>>01905000
  INTRINSIC'NUM     =100,          !PROCINFO IS INTRINSIC # 100<<.1738>>01906000
  NUM'PARMS         =15,           !HAS FIFTEEN PARAMETERS     <<.1738>>01907000
  NUM'PARMS'AND'MASK=NUM'PARMS+1,  !PLUS ONE PARM MASK         <<.1738>>01908000
  MAX'OPTION        =12,           !HAS UP TO 12 OPTIONS       <<.1738>>01909000
  MAX'OPT'PARM      =6;            !CAN DO UP TO 6 REQUESTS    <<.1738>>01910000
                                                               <<.1738>>01911000
! DECLARATIONS FOR EXTERNAL PROCEDURE CHECK'NOABORT            <<.1738>>01912000
! -------------------------------------------------            <<.1738>>01913000
EQUATE                                                         <<.1738>>01914000
  CHEK'INFO  =[1/0,7/0,2/0,1/0,5/NUM'PARMS],                   <<.1738>>01915000
  CHEK'OMTPAR=3,                                               <<.1738>>01916000
  OPT'MASK   =[1/0,3/0,3/7,3/7,3/7,3/7];                       <<.1738>>01917000
                                                               <<.1738>>01918000
! SYSTEM RELATED EQUATES AND DEFINES                           <<.1738>>01919000
! ----------------------------------                           <<.1738>>01920000
EQUATE                                                         <<.1738>>01921000
  PROGEN'PIN=1,  !PIN OF PROGEN PROCESS                        <<.1738>>01922000
  MIN'PIN   =1,  !MINIMUM LEGAL PIN NUMBER                     <<.1738>>01923000
  NUM'CONFIG=0;  !NUMBER OF ENTRIES IN SYSTEM TABLES           <<.1738>>01924000
                                                               <<.1738>>01925000
! ERROR EQUATES                                                <<.1738>>01926000
! -------------                                                <<.1738>>01927000
EQUATE                                                         <<.1738>>01928000
  ILLG'CAP       =1,  !ILLEGAL CAPABILITY                      <<.1738>>01929000
  OMIT'PARM      =2,  !REQUIRED PARAMETER OMITTED              <<.1738>>01930000
  ILLG'ADDR      =3,  !PARAMETER ADDRESS OUT OF RANGE          <<.1738>>01931000
  ILLG'ARRAY'SIZE=4,  !ILLEGAL ARRAY SIZE                      <<.1738>>01932000
  ILLG'OPTION    =5,  !ILLEGAL OPTION NUMBER                   <<.1738>>01933000
  ILLG'PIN       =6,  !PIN BEYOND CONFIGURED LIMITS            <<.1738>>01934000
  UNASSN'PIN     =7,  !PIN IS UNASSIGNED                       <<.1738>>01935000
  UNPAIRED'PARMS =8;  !OPTION PARAMETERS ARE UNPAIRED          <<.1738>>01936000
                                                               <<.1738>>01937000
DEFINE                                                         <<.1738>>01938000
  CC      =STATUS.(6:2)#,                                      <<.1738>>01939000
  PDISABLE=ASSEMBLE(PSDB)#,                                    <<.1738>>01940000
  PENABLE =ASSEMBLE(PSEB)#;                                    <<.1738>>01941000
                                                               <<.1738>>01942000
! MISCELLANEOUS PROCEDURES GLOBAL DECLARATIONS                 <<.1738>>01943000
! --------------------------------------------                 <<.1738>>01944000
EQUATE                                                         <<.1738>>01945000
  INTRINSIC'ID=[10/INTRINSIC'NUM,6/NUM'PARMS'AND'MASK];        <<.1738>>01946000
                                                               <<.1738>>01947000
POINTER INTARRAY;                                              <<.1738>>01948000
                                                               <<.1738>>01949000
LOGICAL                                                        <<.1738>>01950000
  CLEARENCE,          !MASK GIVING CAPABILITIES OF CALLER      <<.1738>>01951000
  CRITICAL'FLAG,      !HOLDS CURRENT VALUE OF CRITICAL FLAG    <<.1738>>01952000
  SCAN'MORE,          !FLAG INDICATING ALL TREE NOT SCANNED    <<.1738>>01953000
  TRUEVALUE:=TRUE,    !BOOLEAN TRUE VALUE                      <<.1738>>01954000
  FALSEVALUE:=FALSE;  !BOOLEAN FALSE VALUE                     <<.1738>>01955000
                                                               <<.1738>>01956000
INTEGER                                                        <<.1738>>01957000
  CALLERS'PIN,        !PROCESS ID NUMBER OF CALLER             <<.1738>>01958000
  INDEX,              !PIN ARRAY INDEX                         <<.1738>>01959000
  NUM'PINS,           !NUMBER OF PINS TO GET                   <<.1738>>01960000
  OPTION'INDEX,       !INDEX OF OPTION OF CURRENT INTEREST     <<.1738>>01961000
  TARGET'PIN;         !PROCESS ID NUMBER OF TARGET PROCESS     <<.1738>>01962000
                                                               <<.1738>>01963000
LOGICAL SCAN'PIN;     !PIN UNDER CURRENT EXAMINATION           <<.1738>>01964000
BYTE ARRAY BSCAN'PIN(*)=SCAN'PIN;                              <<.1738>>01965000
                                                               <<.1738>>01966000
                                                               <<.1738>>01967000
! DECLARATIONS FOR SUBROUTINE WORD'ADDRESS                     <<.1738>>01968000
! ----------------------------------------                     <<.1738>>01969000
INTEGER BYTE'ADDRESS; !HOLDS BYTE ADDRESS OF BYTE ARRAY        <<.1738>>01970000
                                                               <<.1738>>01971000
                                                               <<.1738>>01972000
! DECLARATIONS FOR SUBROUTINE SCAN'TREE                        <<.1738>>01973000
! -------------------------------------                        <<.1738>>01974000
EQUATE                                                         <<.1738>>01975000
  SEARCH'ALL =0,    !TELLS SUBROUTINE TO SEARCH ALL            <<.1738>>01976000
  SEARCH'SONS=1;    !TELLS SUBROUTINE TO SEARCH SONS           <<.1738>>01977000
                                                               <<.1738>>01978000
LOGICAL                                                        <<.1738>>01979000
  BROTHER'PIN,      !PIN OF SCAN'PINS BROTHER                  <<.1738>>01980000
  DAD'PIN,          !PIN OF SCAN'PINS FATHER                   <<.1738>>01981000
  SON'PIN,          !PIN OF SCAN'PINS SON                      <<.1738>>01982000
  ANSTR'PIN,        !PIN OF SCAN'PINS ANCESTOR                 <<.1738>>01983000
  UNCLE'NOT'FOUND,  !SET WHEN SEARCHING FOR COUSINS            <<.1738>>01984000
  UNCLE'PIN;        !PIN OF SCAN'PINS UNCLE                    <<.1738>>01985000
                                                               <<.1738>>01986000
                                                               <<.1738>>01987000
! DECLARATIONS FOR SUBROUTINE GET'CAPABILITIES                 <<.1738>>01988000
! --------------------------------------------                 <<.1738>>01989000
LOGICAL PXFIXEDLOC;  !ADDRESS OF PXFIXED AREA IN CALLER'S STACK<<.1738>>01990000
                                                               <<.1738>>01991000
DEFINE PM'FLAG=STATUS.(0:1)#;  !PRIV MODE FLAG BIT             <<.1738>>01992000
                                                               <<.1738>>01993000
                                                               <<.1738>>01994000
! DECLARATIONS FOR SUBROUTINE SECURE'CHECK                     <<.1738>>01995000
! ----------------------------------------                     <<.1738>>01996000
EQUATE                                                         <<.1738>>01997000
  ABORT   =TRUE,     !EXITS IF TEST FAILURE                    <<.1738>>01998000
  AND'TEST=TRUE,     !TEST IS TO BE AND'ED                     <<.1738>>01999000
  NO'ABORT=FALSE,    !RETURN WITH TEST RESULT                  <<.1738>>02000000
  OR'TEST =FALSE,    !TEST IS TO BE OR'ED                      <<.1738>>02001000
  PH      =%000001,  !CALLER HAS PROCESS HANDLING CAPABILITIES <<.1738>>02002000
  SELF    =%000002,  !CALLER REQUEST INFO ABOUT ITSELF         <<.1738>>02003000
  SON     =%000004,  !CALLER REQUEST INFO ABOUT SON            <<.1738>>02004000
  DECN    =%000010,  !CALLER REQUEST INFO ABOUT DESCENDENTS    <<.1738>>02005000
  PM      =%000100,  !CALLER HAS PRIVILEGED MODE               <<.1738>>02006000
  ANSTR   =%000020;  !CALLER REQUEST INFO ABOUT ANSCESTOR      <<.1738>>02007000
                                                               <<.1738>>02008000
LOGICAL                                                        <<.1738>>02009000
  IN'COMMON,         !MATCHING REQESTED AND GIVEN CAPABILITIES <<.1738>>02010000
  SECURE'RESULT;     !RESULT OF SECURITY TEST                  <<.1738>>02011000
                                                               <<.1738>>02012000
DOUBLE CHEK'PARM:=%2D;                                         <<.1738>>02013000
                                                               <<.1738>>02014000
                                                               <<.1738>>02015000
! DECLARATIONS FOR SUBROUTINE GET'NUM'OF'SONS                  <<.1738>>02016000
! -------------------------------------------                  <<.1738>>02017000
INTEGER NUM'SONS;  !SON COUNT                                  <<.1738>>02018000
                                                               <<.1738>>02019000
                                                               <<.1738>>02020000
! DECLARATIONS FOR SUBROUTINE GET'NUM'OF'DECN                  <<.1738>>02021000
! -------------------------------------------                  <<.1738>>02022000
INTEGER NUM'DECN;  !DESCENDANT COUNT                           <<.1738>>02023000
                                                               <<.1738>>02024000
                                                               <<.1738>>02025000
! DECLARATIONS FOR SUBROUTINE GET'NUM'OF'GENR                  <<.1738>>02026000
! -------------------------------------------                  <<.1738>>02027000
INTEGER                                                        <<.1738>>02028000
  NUM'GENR,  !GENERATION COUNT                                 <<.1738>>02029000
  GENR'CNT;  !FINAL GENERATION TALLY                           <<.1738>>02030000
                                                               <<.1738>>02031000
                                                               <<.1738>>02032000
! DECLARATIONS FOR SUBROUTINE GET'DECN'PINS                    <<.1738>>02033000
! -----------------------------------------                    <<.1738>>02034000
DEFINE                                                         <<.1738>>02035000
  SUSPN'FIELD   =(13:2)#,  !SUSPENSION CONDITION               <<.1738>>02036000
  ACTIVITY'FIELD=(15:1)#,  !ACTIVITY STATE                     <<.1738>>02037000
  ORIGIN        =(7:2)#,   !ORIGIN OF LAST ACTIVATE            <<.1738>>02038000
  Q'INFO        =(4:3)#;   !QUEUE CHARACTERISTICS              <<.1738>>02039000
                                                               <<.1738>>02040000
                                                               <<.1738>>02041000
! DECLARATIONS FOR SUBROUTINE GET'PROCSTATE                    <<.1738>>02042000
! -----------------------------------------                    <<.1738>>02043000
INTEGER PCBADDR;  !PCB RELATIVE ENTRY ADDRESS                  <<.1738>>02044000
                                                               <<.1738>>02045000
                                                               <<.1738>>02046000
! DECLARATIONS FOR GET'PROG'NAME                               <<.1738>>02047000
! ------------------------------                               <<.1738>>02048000
LOGICAL PIN'INFO;  !HOLDS DATA TO BE PASSED BACK               <<.1738>>02049000
BYTE ARRAY BPIN'INFO(*)=PIN'INFO;                              <<.1738>>02050000
                                                               <<.1738>>02051000
BYTE POINTER USERS'BYTE'ADDR;  !USER SUPPLIED BYTE ADDRESS     <<.1738>>02052000
                                                               <<.1738>>02053000
                                                               <<.1738>>02054000
! DECLARATIONS FOR PROCINFO MAINLINE                           <<.1738>>02055000
! ----------------------------------                           <<.1738>>02056000
LOGICAL CHEK'ERROR;  !ERROR RETURN                             <<.1738>>02057000
                                                               <<.1738>>02058000
DOUBLE ADDRESS'BNDS; !MIN&MAX LEGAL ADDR FOR BOUNDS CHECKING   <<.1738>>02059000
INTEGER                                                        <<.1738>>02060000
  LOWER'BOUND=ADDRESS'BNDS,                                    <<.1738>>02061000
  UPPER'BOUND=ADDRESS'BNDS+1;                                  <<.1738>>02062000
                                                               <<.1738>>02063000
LOGICAL PARM'VALUE=Q-4;   !PARAMETER MASK                      <<.1738>>02064000
$EDIT VOID=02670000                                            <<.1738>>02655000
COMMENT                                                        <<.1738>>02656100
..BEGIN_IS.....................................................<<.1738>>02656200
.                                                             .<<.1738>>02656300
. SUBROUTINE ERR'RETURN(ERROR'CODE,SUB'ERROR)                 .<<.1738>>02656400
.                                                             .<<.1738>>02656500
. PURPOSE:   ERR'RETURN IS A LOCAL SUBROUTINE CALLED TO SET   .<<.1738>>02656600
.            UP TO DO AN ERROR RETURN FROM PROCINFO AND       .<<.1738>>02656700
.            PASS BACK AN ERROR CONDITION IN THE PROCINFO     .<<.1738>>02656800
.            ERROR PARAMETERS.                                .<<.1738>>02656900
.                                                             .<<.1738>>02657000
. ENTRY:     ERROR'CODE=ERROR CODE TO BE PASSED BACK TO       .<<.1738>>02657100
.                       PROCINFO CALLER                       .<<.1738>>02657200
.                                                             .<<.1738>>02657300
.                      =ILLG'CAP (1) IF INVALID CAPABILITIES  .<<.1738>>02657400
.                      =OMIT'PARM (2) IF REQUIRED PARAMETER   .<<.1738>>02657500
.                       OMITTED                               .<<.1738>>02657600
.                      =ILLG'ADDR (3) IF PARAMETER ADDRESS IS .<<.1738>>02657700
.                       OUT OF BOUNDS                         .<<.1738>>02657800
.                      =ILLG'OPTION (5) IF ILLEGAL OPTION     .<<.1738>>02657900
.                       NUMBER                                .<<.1738>>02658000
.                      =ILLG'PIN (6) IF PIN IS OUT OF BOUNDS  .<<.1738>>02658100
.                      =UNASSN'PIN (7) IF PIN IS UNASSIGNED   .<<.1738>>02658200
.                      =UNPAIRED'PARMS (8) IF OPTION          .<<.1738>>02658300
.                       PARAMETER ARE UNPAIRED                .<<.1738>>02658400
.                                                             .<<.1738>>02658500
.            SUB'ERROR =SUB ERROR CODE TO BE PASSED BACK TO   .<<.1738>>02658600
.                       PROCINFO CALLER                       .<<.1738>>02658700
.                                                             .<<.1738>>02658800
..END_IS.......................................................<<.1738>>02658900
;                                                              <<.1738>>02659000
$EDIT                                                          <<.1738>>02705000
$PAGE "SUBROUTINE WORD'ADDRESS OF PROCINFO"                    <<.1738>>02706000
$EDIT VOID=02750000                                            <<.1738>>02710000
  INTEGER SUBROUTINE WORD'ADDRESS(RETURN'INFO);                <<.1738>>02711000
    BYTE ARRAY RETURN'INFO;                                    <<.1738>>02712000
COMMENT                                                        <<.1738>>02726000
..BEGIN_IS.....................................................<<.1738>>02727000
.                                                             .<<.1738>>02728000
. SUBROUTINE WORD'ADDRESS(BYTE'ADDRESS)                       .<<.1738>>02729000
.                                                             .<<.1738>>02730000
. PURPOSE:   WORD'ADDRESS IS A LOCAL SUBROUTINE CALLED TO     .<<.1738>>02731000
.            CONVERT A DB RELATIVE BYTE ADDRESS TO A WORD     .<<.1738>>02732000
.            ADDRESS.                                         .<<.1738>>02733000
.                                                             .<<.1738>>02734000
.            SHIFT BYTE ADDRESS RIGHT ONE TO CONVERT IT TO A  .<<.1738>>02735000
.            WORD ADDRESS.  IF THIS WORD ADDRESS IS > Z THEN  .<<.1738>>02736000
.            TURN ON THE SIGN BIT (THIS IS TO CORRECT FOR     .<<.2509>>02737000
.            NEGATIVE ADDRESSING IN THE DL AREA).             .<<.2509>>02738000
.                                                             .<<.2509>>02739000
. ENTRY:     RETURN'INFO=ADDRESS OF THE BYTE ARRAY TO CHECK   .<<.2509>>02740000
.                                                             .<<.2509>>02741000
. EXIT:      WORD'ADDRESS=WORD ADDRESS OF BYTE ADDRESS IN     .<<.2509>>02742000
.                           PARAMETER BYTE'ADDRESS            .<<.2509>>02743000
.                                                             .<<.2509>>02744000
..END_IS.......................................................<<.2509>>02745000
;                                                              <<.2509>>02746000
    BYTE'ADDRESS:=@RETURN'INFO;                                <<.1738>>02760000
$PAGE "SUBROUTINE CHECK'GOOD'PIN OF PROCINFO"                  <<.1738>>02790000
$EDIT VOID=02865000                                            <<.1738>>02810000
COMMENT                                                        <<.1738>>02811100
..BEGIN_IS.....................................................<<.1738>>02811200
.                                                             .<<.1738>>02811300
. SUBROUTINE CHECK'GOOD'PIN(PIN'NUM)                          .<<.1738>>02811400
.                                                             .<<.1738>>02811500
. PURPOSE:   CHECK'GOOD'PIN IS A LOCAL SUBROUTINE CALLED TO   .<<.1738>>02811600
.            MAKE SURE THAT THE PIN IN PARAMETER PIN'NUM IS   .<<.1738>>02811700
.            VALID.  THIS SUBROUTINE MUST BE CALLED WITH ONE  .<<.1738>>02811800
.            PDISABLE IN EFFECT.  A PENABLE IS EXECUTED IF AN .<<.1738>>02811900
.            ERROR IS DETECTED.                               .<<.1738>>02812000
.                                                             .<<.1738>>02812100
.            EXIT THRU ERR'RETURN WITH ILLEGAL P ERROR        .<<.1738>>02812200
.            CONDITION IF THE PIN IS OUT OF BOUNDS BECAUSE IT .<<.1738>>02812300
.            IS NOT BETWEEN THE FIRST AND LAST CONFIGURED     .<<.1738>>02812400
.            PIN.  EXIT THRU ERR'RETURN WITH UNASSIGNED PIN   .<<.1738>>02812500
.            ERROR CONDITION IF THE PROCESS IS NOT ALIVE      .<<.1738>>02812600
.            (PCB ENTRY NOT ASSIGNED).                        .<<.1738>>02812700
.                                                             .<<.1738>>02812800
. ENTRY:     PIN'NUM=PROCESS ID NUMBER TO BE CHECKED          .<<.1738>>02812900
.                                                             .<<.1738>>02813000
. EXIT:      EXITS THRU ERR'RETURN IF ILLEGAL PIN (OUT-OF-    .<<.1738>>02813100
.              BOUNDS) ERROR CONDITION                        .<<.1738>>02813200
.            EXITS THRU ERR'RETURN IF UNASSIGNED ERROR        .<<.1738>>02813300
.              CONDITION                                      .<<.1738>>02813400
.            RETURNS NORMALLY IF NO ERRORS                    .<<.1738>>02813500
.                                                             .<<.1738>>02813600
..END_IS.......................................................<<.1738>>02813700
;                                                              <<.1738>>02813800
! IF PIN IS NOT WITHIN BOUNDS, GO RETURN ILLEGAL PIN ERROR     <<.1738>>02876000
! --------------------------------------------------------     <<.1738>>02877000
                                                               <<.1738>>02901000
!     IF PIN IS NOT ALIVE, RETURN UNASSIGNED PIN ERROR         <<.1738>>02902000
!     ------------------------------------------------         <<.1738>>02903000
      IF PCB(PIN'NUM*PCBSIZE+PQPTRWORDNUM)=-1 THEN             <<.1738>>02910000
$PAGE "SUBROUTINE SCAN'TREE OF PROCINFO"                       <<.1738>>02940000
$EDIT VOID=03015000                                            <<.1738>>02960000
COMMENT                                                        <<.1738>>02961100
..BEGIN_IS.....................................................<<.1738>>02961200
.                                                             .<<.1738>>02961300
. SUBROUTINE SCAN'TREE(SCAN'TYPE,ROOT'PIN,MORE'TREE)          .<<.1738>>02961400
.                                                             .<<.1738>>02961500
. PURPOSE:   SCAN'TREE IS A LOCAL SUBROUTINE CALLED TO EITHER .<<.1738>>02961600
.            TRAVERSE THE PROCESS TREE FOR A VALID RELATIVE   .<<.1738>>02961700
.            (SON, BROTHER OR UNCLE) OR JUST RETURN THE       .<<.1738>>02961800
.            BROTHER OF THE SON OF THE PROCESS SPECIFIED IN   .<<.1738>>02961900
.            VARIABLE SCAN'PIN.  VARIABLE MORE'TREE HAS A     .<<.1738>>02962000
.            ZERO IF THERE ARE NO MORE RELATIVES TO CHECK IF  .<<.1738>>02962100
.            THE WHOLE PROCESS TREE IS TO BE SCANNED.         .<<.1738>>02962200
.                                                             .<<.1738>>02962300
.            CALL SUBROUTINE CHECK'GOOD'PIN TO VALIDATE THE   .<<.1738>>02962400
.            STARTING PIN IN PARAMETER ROOT'PIN.  IF TO       .<<.1738>>02962500
.            SEARCH THE ENTIRE PROCESS TREE, THEN START BY    .<<.1738>>02962600
.            SEEING IF THE PROCESS SPECIFIED IN THE SCAN'PIN  .<<.1738>>02962700
.            PARAMETER HAS A SON.  IF IT DOES, THEN SET       .<<.1738>>02962800
.            SCAN'PIN WITH THE SON PROCESS' PIN.  IF THE      .<<.1738>>02962900
.            PROCESS SPECIFIED IN THE SCAN'PIN PARAMETER DOES .<<.1738>>02963000
.            NOT HAVE A SON, THEN SET SCAN'PIN WITH ITS       .<<.1738>>02963100
.            BROTHER IF IT HAS ONE.  IF THE PROCESS SPECIFIED .<<.1738>>02963200
.            IN THE SCAN'PIN PARAMETER DOES NOT HAVE A SON OR .<<.1738>>02963300
.            BROTHER, THEN BACKTRACK AND SCAN FOR AN UNCLE.   .<<.1738>>02963400
.            THIS SCAN WILL END IF THE PROCESS IN VARIABLE    .<<.1738>>02963500
.            TARGET'PIN OR THE PROGEN PIN IS ENCOUNTERED AND  .<<.1738>>02963600
.            IF THERE ARE NO UNCLES OF THE IMMEDIATE FATHER,  .<<.1738>>02963700
.            THEN BACK UP TO THE FATHER'S FATHER TO CHECK FOR .<<.1738>>02963800
.            AN UNCLE.                                        .<<.1738>>02963900
.                                                             .<<.1738>>02964000
.            IF TO JUST SCAN FOR A SON, THEN PASS BACK THE    .<<.1738>>02964100
.            PIN FOUND IN THE BROTHER WORD (NOTE THAT         .<<.1738>>02964200
.            SCAN'PIN MUST BE SET TO A SON PIN).              .<<.1738>>02964300
.                                                             .<<.1738>>02964400
. ENTRY:     SCAN'TYPE =FLAG INDICATING WHETHER TO SCAN THE   .<<.1738>>02964500
.                        WHOLE PROCESS TREE OR JUST THE SON   .<<.1738>>02964600
.                        TREE                                 .<<.1738>>02964700
.                      =SEARCH'ALL( =0) IF TO SCAN THE WHOLE  .<<.1738>>02964800
.                        PROCESS TREE                         .<<.1738>>02964900
.                      =SEARCH'SON( =1) IF TO SCAN FOR A SON  .<<.1738>>02965000
.                                                             .<<.1738>>02965100
.            ROOT'PIN  =STARTING PIN # TO START PROCESS TREE  .<<.1738>>02965200
.                        TRAVERSE                             .<<.1738>>02965300
.                                                             .<<.1738>>02965400
.            MORE'TREE =TRUE IF TO SCAN ALSO FOR PROCESS'     .<<.1738>>02965500
.                        UNCLE (FATHER'S BROTHER)             .<<.1738>>02965600
.                                                             .<<.1738>>02965700
.            SCAN'PIN  =PIN OF PROCESS TO CONTINUE PROCESS    .<<.1738>>02965800
.                         TREE TRAVERSE.  THIS MUST BE SET TO .<<.1738>>02965900
.                         A SON PROCESS IF THE SCAN'TYPE      .<<.1738>>02966000
.                         PARAMETER SPECIFIES A SCAN FOR A    .<<.1738>>02966100
.                         SON                                 .<<.1738>>02966200
.                                                             .<<.1738>>02966300
.            TARGET'PIN=PIN OF PROCESS TO END THE SEARCH      .<<.1738>>02966400
.                         WITH                                .<<.1738>>02966500
.                                                             .<<.1738>>02966600
. EXIT:      SCAN'PIN =PIN OF PROCESS NEXT TO BE CHECKED      .<<.1738>>02966700
.                                                             .<<.1738>>02966800
.            MORE'TREE=FALSE IF NO MORE RELATIVES OF ROOT'PIN .<<.1738>>02966900
.                        TO CHECK                             .<<.1738>>02967000
.                                                             .<<.1738>>02967100
..END_IS.......................................................<<.1738>>02967200
;                                                              <<.1738>>02967300
!   CHECK THE VALIDITY OF THE STARTING PIN NUMBER              <<.1738>>03030000
!   ---------------------------------------------              <<.1738>>03031000
COMMENT***********************************                     <<.1738>>03045000
* DO A COMPLETE SCAN OF THE PROCESS TREE *                     <<.1738>>03046000
*****************************************;                     <<.1738>>03047000
$EDIT VOID=03085000                                            <<.1738>>03055000
COMMENT*********************************                       <<.1738>>03096000
* IF PROCESS HAS A SON, RETURN SON PIN *                       <<.1738>>03097000
***************************************;                       <<.1738>>03098000
$EDIT                                                          <<.1738>>03100000
        SON'PIN:=PCB(SCAN'PIN*PCBSIZE+SONINFOWORDNUM)/PCBSIZE; <<.1738>>03101000
                                                               <<.1738>>03111000
COMMENT*****************************************               <<.1738>>03112000
* IF PROCESS HAS A BROTHER, RETURN BROTHER PIN *               <<.1738>>03113000
***********************************************;               <<.1738>>03114000
$EDIT VOID=03125000                                            <<.1738>>03120000
$EDIT VOID=03140000                                            <<.1738>>03135000
              BROTHER'PIN:=PCB(SCAN'PIN*PCBSIZE+               <<.1738>>03136000
                           BROTHERINFOWORDNUM)/PCBSIZE;        <<.1738>>03137000
                                                               <<.1738>>03151000
COMMENT**************************************                  <<.1738>>03152000
* IF PROCESS HAS AN UNCLE, RETURN UNCLE PIN *                  <<.1738>>03153000
********************************************;                  <<.1738>>03154000
$EDIT VOID=03165000                                            <<.1738>>03160000
$EDIT VOID=03185000                                            <<.1738>>03180000
                                                               <<.1738>>03196000
!                   FLAG TO EXIT UNCLE SRCH IF TARGET OR PROGEN<<.1738>>03197000
!                   -------------------------------------------<<.1738>>03198000
$EDIT VOID=03205000                                            <<.1738>>03200000
                    DAD'PIN:=PCB(SCAN'PIN*PCBSIZE+             <<.1738>>03201000
                                 FATHERINFOWORDNUM)/PCBSIZE;   <<.1738>>03202000
                                                               <<.1738>>03226000
!                       CHECK FOR POSSIBLE UNCLE               <<.1738>>03227000
!                       ------------------------               <<.1738>>03228000
$EDIT VOID=03245000                                            <<.1738>>03240000
                        PCB(DAD'PIN*PCBSIZE+                   <<.1738>>03241000
                            BROTHERINFOWORDNUM)/PCBSIZE;       <<.1738>>03242000
                                                               <<.1738>>03246000
!                       IF NO UNCLE, CHK FATHER'S FATHER UNCLE <<.1738>>03247000
!                       -------------------------------------- <<.1738>>03248000
$EDIT                                                          <<.1738>>03255000
                                                               <<.1738>>03261000
!                         RETURN UNCLE PIN&FLAG TO EXIT SCAN   <<.1738>>03262000
!                         ----------------------------------   <<.1738>>03263000
$EDIT                                                          <<.1738>>03270000
$EDIT VOID=03330000                                            <<.1738>>03315000
                                                               <<.1738>>03336000
COMMENT******************************************              <<.1738>>03337000
* IF TO JUST SCAN SON, RETURN SON'S BROTHER PIN *              <<.1738>>03338000
************************************************;              <<.1738>>03339000
$EDIT VOID=03370000                                            <<.1738>>03340000
      ELSE SCAN'PIN:=PCB(SCAN'PIN*PCBSIZE+BROTHERINFOWORDNUM)/ <<.1738>>03341000
                         PCBSIZE;                              <<.1738>>03342000
$PAGE "SUBROUTINE SCAN'FOR'DECN OF PROCINFO"                   <<.1738>>03380000
$EDIT VOID=03420000                                            <<.1738>>03400000
COMMENT                                                        <<.1738>>03401100
..BEGIN_IS.....................................................<<.1738>>03401200
.                                                             .<<.1738>>03401300
. SUBROUTINE SCAN'FOR'DECN(TREE'ROOT,PIN'OF'DECN)             .<<.1738>>03401400
.                                                             .<<.1738>>03401500
. PURPOSE:   SCAN'FOR'DECN IS A LOCAL SUBROUTINE FUNCTION     .<<.1738>>03401600
.            CALLED TO SEARCH DOWN A PROCESS TREE FOR A       .<<.1738>>03401700
.            DESCENDENT.  IF THE DESCENDENT IS FOUND, THEN    .<<.1738>>03401800
.            DECN (=%000010) IS PASSED BACK, ELSE A ZERO FOR  .<<.1738>>03401900
.            USE BY VARIABLE CLEARENCE.                       .<<.1738>>03402000
.                                                             .<<.1738>>03402300
. ENTRY:     TREE'ROOT  =PIN # OF PROCESS TO START THE SEARCH .<<.1738>>03402400
.                          AT                                 .<<.1738>>03402410
.                                                             .<<.1738>>03402500
.            PIN'OF'DECN=PIN OF DESCENDENT TO BE SEARCHED FOR .<<.1738>>03402600
.                                                             .<<.1738>>03402700
. EXIT:      SCAN'FOR'DECN=DECN(=%000010) IF SPECIFIED        .<<.1738>>03402800
.                            DESCENDENT PIN IN PIN'OF'DECN    .<<.1738>>03402900
.                            PARAMETER IS FOUND               .<<.1738>>03403000
.                                                             .<<.1738>>03403100
..END_IS.......................................................<<.1738>>03403200
;                                                              <<.1738>>03403300
                                                               <<.1738>>03426000
! POSITION TO SON WORD OF STARTING PROCESS                     <<.1738>>03427000
! ----------------------------------------                     <<.1738>>03428000
  SON'PIN:=PCB(TREE'ROOT*PCBSIZE+SONINFOWORDNUM)/PCBSIZE;      <<.1738>>03430000
                                                               <<.1738>>03431000
! SEARCH FOR DESCENDENT PIN IF THERE IS A SON                  <<.1738>>03432000
! -------------------------------------------                  <<.1738>>03433000
                                                               <<.1738>>03461000
!   PASS BACK DECN IF A DESCENDENT IS FOUND                    <<.1738>>03462000
!   ---------------------------------------                    <<.1738>>03463000
$EDIT VOID=03495000                                            <<.1738>>03490000
$PAGE "SUBROUTINE SCAN'FOR'SON OF PROCINFO"                    <<.1738>>03491000
$EDIT VOID=03540000                                            <<.1738>>03515000
COMMENT                                                        <<.1738>>03516100
..BEGIN_IS.....................................................<<.1738>>03516200
.                                                             .<<.1738>>03516300
. SUBROUTINE SCAN'FOR'SON(TREE'ROOT,PIN'OF'SON)               .<<.1738>>03516400
.                                                             .<<.1738>>03516500
. PURPOSE:   SCAN'FOR'SON IS A LOCAL SUBROUTINE FUNCTION      .<<.1738>>03516600
.            CALLED TO SEARCH DOWN A PROCESS TREE FOR A       .<<.1738>>03516700
.            SPECIFIC SON.  IF THE SON IS FOUND, THEN THE     .<<.1738>>03516800
.            VALUE SON (=%000004) IS PASSED BACK, ELSE A ZERO .<<.1738>>03516900
.            FOR USE IN VARIABLE CLEARENCE.                   .<<.1738>>03517000
.                                                             .<<.1738>>03517100
. ENTRY:     TREE'ROOT =PIN # OF PROCESS TO START THE SEARCH  .<<.1738>>03517200
.                         AT                                  .<<.1738>>03517300
.                                                             .<<.1738>>03517400
.            PIN'OF'SON=PIN OF SON TO BE SEARCHED FOR         .<<.1738>>03517500
.                                                             .<<.1738>>03517600
. EXIT:      SCAN'FOR'SON=SON (=%000004) IF SON SPECIFIED IN  .<<.1738>>03517700
.                           PIN'OF'SON PARAMETER IS FOUND     .<<.1738>>03517800
.                                                             .<<.1738>>03517900
..END_IS.......................................................<<.1738>>03518000
;                                                              <<.1738>>03518100
!   POSITION TO SON WORD OF STARTING PROCESS                   <<.1738>>03551000
!   ----------------------------------------                   <<.1738>>03552000
    SCAN'PIN:=PCB(TREE'ROOT*PCBSIZE+SONINFOWORDNUM)/PCBSIZE;   <<.1738>>03565000
                                                               <<.1738>>03566000
!   SCAN THRU FAMILY TREE FOR SPECIFIED SON                    <<.1738>>03567000
!   ---------------------------------------                    <<.1738>>03568000
                                                               <<.1738>>03576000
!   PASS BACK SON (%000004) IF SPECIFIED SON IS FOUND          <<.1738>>03577000
!   -------------------------------------------------          <<.1738>>03578000
$PAGE "SUBROUTINE GET'CAPABILITIES OF PROCINFO"                <<.1738>>03605000
$EDIT VOID=03625000                                            <<.1738>>03615000
COMMENT                                                        <<.1738>>03616100
..BEGIN_IS.....................................................<<.1738>>03616200
.                                                             .<<.1738>>03616300
. SUBROUTINE GET'CAPABILITIES                                 .<<.1738>>03616400
.                                                             .<<.1738>>03616500
. PURPOSE:   GET'CAPABILITIES IS A LOCAL SUBROUTINE CALLED TO .<<.1738>>03616600
.            FLAG THE CAPABILITIES OF THE CALLER.  IT WILL    .<<.1738>>03616700
.            TURN ON BITS WITHIN VARIABLE CLEARENCE           .<<.1738>>03616800
.            INDICATING IF THE PROCINFO CALLER HAS PRIVILEGED .<<.1738>>03616900
.            MODE (PM) CAPABILITIES, WHETHER IT IS TRYING TO  .<<.1738>>03617000
.            GET INFO ON ITS IMMEDIATE FATHER, ABOUT THE      .<<.1738>>03617100
.            BEGINNING FATHER (1ST FATHER) THAT SPAWNED IT,   .<<.1738>>03617200
.            WHETHER IT IS TRYING TO GET INFO ON ITS          .<<.1738>>03617300
.            DESCENDENTS, WHETHER IT IS TRYING TO GET INFO    .<<.1738>>03617400
.            ABOUT ITS SONS OR WHETHER IT IS GETTING INFO     .<<.1738>>03617500
.            ABOUT ITSELF.                                    .<<.1738>>03617600
.                                                             .<<.1738>>03617700
.            INITIALIZE VARIABLE CLEARENCE AND MAP TO THE     .<<.1738>>03617800
.            PXFIXED AREA OF THE CALLER'S STACK SO THAT       .<<.1738>>03617900
.            CLEARENCE CAN BE FLAGGED WITH THE PROCESS        .<<.1738>>03618000
.            HANDLING (PH) AND PRIVILEGED MODE (PM)           .<<.1738>>03618100
.            CAPABILITIES.  IF THE CALLER IS GETTING INFO     .<<.1738>>03618200
.            ABOUT ITSELF, THEN FLAG THAT IN CLEARENCE.  IF   .<<.1738>>03618300
.            NOT, THEN FLAG EITHER THAT IT IS GETTING INFO    .<<.1738>>03618400
.            ABOUT ITS ANCESTORS (ONLY IF THE PIN TO GET INFO .<<.1738>>03618500
.            ON HAPPENS TO BE THE 1ST [ORIGINATING] FATHER)   .<<.1738>>03618600
.            OR INFO ON ITS DESCENDENTS AND SONS.             .<<.1738>>03618700
.                                                             .<<.1738>>03618800
. ENTRY:     TARGET'PIN=PROCESS TO GET INFO ON                .<<.1738>>03618900
.                                                             .<<.1738>>03619000
. EXIT:      VARIABLE CLEARENCE CONTAINS CAPABILITIES OF      .<<.1738>>03619100
.              PROCESS                                        .<<.1738>>03619200
.                                                             .<<.1738>>03619300
.              BIT  9=1 IF CALLER HAS PM CAPABILITIES         .<<.1738>>03619400
.                  10=1 IF GETTING INFO ABOUT ITS IMMEDIATE   .<<.1738>>03619500
.                          FATHER                             .<<.1738>>03619600
.                  11=1 IF GETTING INFO ABOUT ITS 1ST FATHER  .<<.1738>>03619700
.                  12=1 IF GETTING INFO ABOUT ITS DESCENDENTS .<<.1738>>03619800
.                  13=1 IF GETTING INFO ABOUT ITS SON         .<<.1738>>03619900
.                  14=1 IF GETTING INFO ABOUT ITSELF          .<<.1738>>03620000
.                  15=1 IF PH, PM CAPABILITIES                .<<.1738>>03620100
.                                                             .<<.1738>>03620200
..END_IS.......................................................<<.1738>>03620300
;                                                              <<.1738>>03620400
                                                               <<.1738>>03630100
COMMENT**************************************                  <<.1738>>03630200
* FLAG CLEARENCE WITH INFORMATION ON CALLER *                  <<.1738>>03630300
********************************************;                  <<.1738>>03630400
                                                               <<.1738>>03630500
!   FLAG CLEARENCE WITH PROCESS' PH, PM CAPABILITIES           <<.1738>>03630600
!   ------------------------------------------------           <<.1738>>03630700
$EDIT VOID=03645000                                            <<.1738>>03640000
$EDIT VOID=03670000                                            <<.1738>>03665000
!   FLAG IN CLEARENCE IF GETTING INFO ABOUT ITSELF             <<.1738>>03676000
!   ----------------------------------------------             <<.1738>>03677000
$EDIT                                                          <<.1738>>03685000
                                                               <<.1738>>03691000
COMMENT********************************************            <<.1738>>03692000
* FLAG CLEARENCE WITH INFO ON ANCESTOR, IF NEEDED *            <<.1738>>03693000
**************************************************;            <<.1738>>03694000
$EDIT                                                          <<.1738>>03700000
$EDIT VOID=03730000                                            <<.1738>>03710000
                                                               <<.1738>>03711000
!       SET ANSTR'PIN WITH CALLER'S FATHER PIN                 <<.1738>>03712000
!       --------------------------------------                 <<.1738>>03713000
        ANSTR'PIN:=PCB(CALLERS'PIN*PCBSIZE+                    <<.1738>>03714000
                       FATHERINFOWORDNUM)/PCBSIZE;             <<.1738>>03715000
                                                               <<.1738>>03731000
!       WALK BACK THRU FATHER PIN TO 1ST FATHER                <<.1738>>03732000
!       ---------------------------------------                <<.1738>>03733000
$EDIT VOID=03750000                                            <<.1738>>03745000
          ANSTR'PIN:=PCB(ANSTR'PIN*PCBSIZE+                    <<.1738>>03746000
                           FATHERINFOWORDNUM)/PCBSIZE;         <<.1738>>03747000
                                                               <<.1738>>03756000
!       IF 1ST FATHER=TARGET PIN, FLAG THAT IN CLEARENCE       <<.1738>>03757000
!       ------------------------------------------------       <<.1738>>03758000
!       FLAG THAT GETTING INFO ON DESCENDENT/SON IN CLEARENCE  <<.1738>>03771000
!       -----------------------------------------------------  <<.1738>>03772000
$EDIT VOID=03915000                                            <<.1738>>03815000
$PAGE "SUBROUTINE CHECK'BOUNDS OF PROCINFO"                    <<.1738>>03816000
SUBROUTINE CHECK'BOUNDS(ADDRESS,ERRNUM);                       <<.1738>>03817000
  VALUE   ADDRESS,ERRNUM;                                      <<.1738>>03818000
  INTEGER ADDRESS,ERRNUM;                                      <<.1738>>03819000
COMMENT                                                        <<.1738>>03820000
..BEGIN_IS.....................................................<<.1738>>03821000
.                                                             .<<.1738>>03822000
. SUBROUTINE CHECK'BOUNDS(ADDRESS,ERRNUM)                     .<<.1738>>03823000
.                                                             .<<.1738>>03824000
. PURPOSE:   CHECK'BOUNDS IS A LOCAL SUBROUTINE CALLED TO     .<<.1738>>03825000
.            INSURE THAT THE ADDRESS PARAMETER VALUE FALLS    .<<.1738>>03826000
.            BETWEEN ADDRESS'BNDS LIMITS.  IF NOT, ERR'RETURN .<<.1738>>03827000
.            IS CALLED TO PASS BACK ERROR STATUS TO THE       .<<.1738>>03828000
.            CALLER.                                          .<<.1738>>03829000
.                                                             .<<.1738>>03830000
. ENTRY:     ADDRESS=THE WORD ADDRESS TO BE CHECKED           .<<.1738>>03831000
.                                                             .<<.1738>>03832000
.            ERRNUM =ERROR NUMBER TO BE PASSED TO THE CALLER  .<<.1738>>03833000
.                    IF A BOUNDS VIOLATION OCCURRED           .<<.1738>>03834000
.                                                             .<<.1738>>03835000
..END_IS.......................................................<<.1738>>03836000
;                                                              <<.1738>>03837000
  BEGIN                                                        <<.1738>>03838000
  IF NOT(LOWER'BOUND <=ADDRESS<= UPPER'BOUND) THEN             <<.1738>>03839000
     ERR'RETURN(ERRNUM,OPTION'INDEX);                          <<.1738>>03840000
  END;  <<SUBROUTINE CHECK'BOUNDS>>                            <<.1738>>03841000
$PAGE "SUBROUTINE SECURE'CHECK OF PROCINFO"                    <<.1738>>03921000
$EDIT VOID=04090000                                            <<.1738>>03945000
COMMENT                                                        <<.1738>>03946100
..BEGIN_IS.....................................................<<.1738>>03946200
.                                                             .<<.1738>>03946300
. SUBROUTINE SECURE'CHECK(CHECK'TYPE,CHECK'LIST,EXIT'TYPE)    .<<.1738>>03946400
.                                                             .<<.1738>>03946500
. PURPOSE:   SECURE'CHECK IS A LOCAL SUBROUTINE CALLED TO     .<<.1738>>03946600
.            PERFORM A SECURITY CHECK AND WILL EITHER PASS    .<<.1738>>03946700
.            BACK A FALSE VALUE OR DO AN ERROR RETURN TO      .<<.1738>>03946800
.            ERR'RETURN TO ABORT THE CALLER IF THE SECURITY   .<<.1738>>03946900
.            REQUIREMENTS ARE NOT MET OR WILL PASS BACK A     .<<.1738>>03947000
.            TRUE VALUE IF THEY ARE.                          .<<.1738>>03947100
.                                                             .<<.1738>>03947200
.            MASK OUT THE FLAG BITS IN VARIABLE CLEARENCE     .<<.1738>>03947300
.            WITH THE BITS IN PARAMETER CHECK'LIST TO REMOVE  .<<.1738>>03947400
.            ANY EXTRANEOUS BITS.  THEN SET UP SECURE'RESULT  .<<.1738>>03947500
.            WITH THE RESULT OF EITHER CHECKING ANY OF THE    .<<.1738>>03947600
.            FLAG BITS BEING ON (DETERMINED BY VARIABLE       .<<.1738>>03947700
.            CHECK'TYPE) OR ALL OF THE FLAG BITS NEEDING TO   .<<.1738>>03947800
.            BE ON.  IF THE SECURITY CHECK IS FALSE DUE TO    .<<.1738>>03947900
.            THE PROPER FLAG BITS NOT BEING SET, THEN CALL    .<<.1738>>03948000
.            ERR'RETURN TO ABORT THE CALLER IF SPECIFIED.     .<<.1738>>03948100
.            OTHERWISE PASS BACK A TRUE CONDITION CODE        .<<.1738>>03948200
.            INDICATING IT PASSED THE SECURITY CHECK.         .<<.1738>>03948300
.                                                             .<<.1738>>03948400
. ENTRY:     CHECK'TYPE=THE TYPE OF CHECK TO BE MADE          .<<.1738>>03948500
.                      =TRUE (AND'TEST) IF ALL CONDITIONS     .<<.1738>>03948600
.                         MUST BE MET TO PASS CHECK           .<<.1738>>03948700
.                      =FALSE (OR'TEST) IF ANY CONDITION MUST .<<.1738>>03948800
.                         BE TRUE TO PASS CHECK               .<<.1738>>03948900
.                                                             .<<.1738>>03949000
.            CHECK'LIST=A BIT MASK INDICATING WHICH OPTIONS   .<<.1738>>03949100
.                         ARE TO BE CHECKED                   .<<.1738>>03949200
.                                                             .<<.1738>>03949300
.                         BIT  9=1 IF CALLER HAS PM           .<<.1738>>03949400
.                                  CAPABILITIES               .<<.1738>>03949500
.                             10=1 IF CALLER IS REQUESTING    .<<.1738>>03949600
.                                  INFO ABOUT ITS FATHER      .<<.1738>>03949700
.                             11=1 IF CALLER IS REQUESTING    .<<.1738>>03949800
.                                  INFO ABOUT AN ANCESTOR     .<<.1738>>03949900
.                             12=1 IF CALLER IS REQUESTING    .<<.1738>>03950000
.                                  INFO ABOUT AN INDIRECT     .<<.1738>>03950100
.                                  DESCENDENT                 .<<.1738>>03950200
.                             13=1 IF CALLER IS REQUESTING    .<<.1738>>03950300
.                                  INFO ABOUT A DIRECT        .<<.1738>>03950400
.                                  DESCENDENT                 .<<.1738>>03950500
.                             14=1 IF CALLER IS REQUESTING    .<<.1738>>03950600
.                                  INFO ABOUT ITSELF          .<<.1738>>03950700
.                             15=1 IF CALLER HAS PH           .<<.1738>>03950800
.                                  CAPABILITIES               .<<.1738>>03950900
.                                                             .<<.1738>>03951000
.            EXIT'TYPE =THE ACTION TO BE TAKEN IF THE CHECK   .<<.1738>>03951100
.                         FAILS                               .<<.1738>>03951200
.                      =ABORT(TRUE) IF TO EXIT FROM PROCINFO  .<<.1738>>03951300
.                         BY CALLING ERR'RETURN WITH ILLEGAL  .<<.1738>>03951400
.                         CAPABILITIES ERROR CONDITION        .<<.1738>>03951500
.                                                             .<<.1738>>03951600
. EXIT:      SECURE'CHECK=TRUE IF SECURITY CONDITION ARE MET  .<<.1738>>03951700
.                                                             .<<.1738>>03951800
..END_IS.......................................................<<.1738>>03951900
;                                                              <<.1738>>03952000
                                                               <<.1738>>04096000
!   SET SECURE'RESULT WITH TRUE/FALSE CONDITION OF TEST        <<.1738>>04097000
!   ---------------------------------------------------        <<.1738>>04098000
                                                               <<.1738>>04121000
!   ERROR RETURN IF TO ABORT CALLER ELSE RETURN TRUE           <<.1738>>04122000
!   ------------------------------------------------           <<.1738>>04123000
$EDIT                                                          <<.1738>>04150000
$EDIT VOID=04170000                                            <<.1738>>04160000
COMMENT                                                        <<.1738>>04161100
..BEGIN_IS.....................................................<<.1738>>04161200
.                                                             .<<.1738>>04161300
. SUBROUTINE EXIT'PROCINFO                                    .<<.1738>>04161400
.                                                             .<<.1738>>04161500
. PURPOSE:   EXIT'PROCINFO IS A LOCAL SUBROUTINE WHICH IS     .<<.1738>>04161600
.            CALLED TO DO A NORMAL RETURN TO THE CALLER OF    .<<.1738>>04161700
.            PROCINFO WITH NORMAL ERROR STATUS AND CONDITION  .<<.1738>>04161800
.            CODE.                                            .<<.1738>>04161900
.                                                             .<<.1738>>04162000
.            PASS BACK A 0 IN ERROR1, ERROR2 FORMAL PARAMTERS .<<.1738>>04162100
.            TO THE CALLER AND CALL PROCEDURE ERROREXIT TO    .<<.1738>>04162200
.            RETURN.                                          .<<.1738>>04162300
.                                                             .<<.1738>>04162400
..END_IS.......................................................<<.1738>>04162500
;                                                              <<.1738>>04162600
$EDIT VOID=04220000                                            <<.1738>>04205000
$PAGE "SUBROUTINE GET'CURRENT'PIN OF PROCINFO"                 <<.1738>>04206000
$EDIT VOID=04245000                                            <<.1738>>04235000
COMMENT                                                        <<.1738>>04236100
..BEGIN_IS.....................................................<<.1738>>04236200
.                                                             .<<.1738>>04236300
. SUBROUTINE GET'CURRENT'PIN(RETURN'INFO)                     .<<.1738>>04236400
.                                                             .<<.1738>>04236500
. PURPOSE:   GET'CURRENT'PIN IS A LOCAL SUBROUTINE CALLED TO  .<<.1738>>04236600
.            PASS BACK IN PARAMETER RETURN'INFO THE PROCESS   .<<.1738>>04236700
.            ID NUMBER (PIN) OF THE TARGET PROCESS.           .<<.1738>>04236800
.                                                             .<<.1738>>04236900
. EXIT:      RETURN'INFO=CALLING PROCESS' ID NUMBER           .<<.1738>>04237000
.                                                             .<<.1738>>04237100
..END_IS.......................................................<<.1738>>04237200
;                                                              <<.1738>>04237300
$EDIT VOID=04280000                                            <<.1738>>04270000
$PAGE "SUBROUTINE GET'FATHERS'PIN OF PROCINFO"                 <<.1738>>04271000
COMMENT                                                        <<.1738>>04290100
..BEGIN_IS.....................................................<<.1738>>04290200
.                                                             .<<.1738>>04290300
. SUBROUTINE GET'FATHERS'PIN(RETURN'INFO)                     .<<.1738>>04290400
.                                                             .<<.1738>>04290500
. PURPOSE:   GET'FATHER'PIN IS A LOCAL SUBROUTINE CALLED TO   .<<.1738>>04290600
.            PASS BACK IN PARAMETER RETURN'INFO THE PROCESS   .<<.1738>>04290700
.            ID NUMBER (PIN) OF THE IMMEDIATE FATHER OF THE   .<<.1738>>04290800
.            TARGET PROCESS.                                  .<<.1738>>04290900
.                                                             .<<.1738>>04291000
.            CALL ERR'RETURN TO PASS BACK ILLEGAL CAPABILITES .<<.1738>>04291100
.            ERROR CONDITION IF THE CALLING PROCESS DOES NOT  .<<.1738>>04291200
.            HAVE PRIV MODE, IS GETTING INFO ABOUT ITSELF OR  .<<.1738>>04291300
.            ITS DESCENDENTS.  GET THE FATHER PIN FROM THE    .<<.1738>>04291400
.            PROCESS SPECIFIED IN VARIABLE TARGET'PIN AND     .<<.1738>>04291500
.            PASS THE PIN BACK THRU THE FORMAL PARAMETER      .<<.1738>>04291600
.            RETURN'INFO.                                     .<<.1738>>04291700
.                                                             .<<.1738>>04291800
. EXIT:      RETURN'INFO=TARGET PROCESS' IMMEDIATE FATHER PIN .<<.1738>>04291900
.                                                             .<<.1738>>04292000
..END_IS.......................................................<<.1738>>04292100
;                                                              <<.1738>>04292200
$EDIT VOID=04310000                                            <<.1738>>04300000
                                                               <<.1738>>04314100
! ERR RTRN IF NOT PM,GETTING SELF,DESCENDENT OR ANCESTOR INFO  <<.1738>>04314200
! -----------------------------------------------------------  <<.1738>>04314300
! PASS BACK IMMEDIATE FATHER PIN OF TARGET PIN                 <<.1738>>04331000
! --------------------------------------------                 <<.1738>>04332000
  PIN'INFO:=PCB(TARGET'PIN*PCBSIZE+FATHERINFOWORDNUM)/PCBSIZE; <<.1738>>04335000
$EDIT                                                          <<.1738>>04350000
$PAGE "SUBROUTINE GET'NUM'OF'SONS OF PROCINFO"                 <<.1738>>04351000
COMMENT                                                        <<.1738>>04361100
..BEGIN_IS.....................................................<<.1738>>04361200
.                                                             .<<.1738>>04361300
. SUBROUTINE GET'NUM'OF'SONS(RETURN'INFO)                     .<<.1738>>04361400
.                                                             .<<.1738>>04361500
. PURPOSE:   GET'NUM'OF'SON IS A LOCAL SUBROUTINE CALLED TO   .<<.1738>>04361600
.            COUNT THE NUMBER OF SONS THAT THE PROCESS        .<<.1738>>04361700
.            SPECIFIED IN VARIABLE TARGET'PIN AND PASS THE    .<<.1738>>04361800
.            COUNT BACK IN VARIABLE RETURN'INFO.              .<<.1738>>04361900
.                                                             .<<.1738>>04362000
.            CALL ERR'RETURN TO PASS BACK ILLEGAL             .<<.1738>>04362100
.            CAPABILITIES IF THE CALLING PROCESS DOES NOT     .<<.1738>>04362200
.            HAVE PRIV MODE, IS GETTING INFO ABOUT ITSELF OR  .<<.1738>>04362300
.            ITS DESCENDENTS.  IF NOT, LOOP THRU THE PROCESS  .<<.1738>>04362400
.            (SPECIFIED IN VARIABLE TARGET'PIN) SON THREAD BY .<<.1738>>04362500
.            CALLING SCAN'TREE AND COUNTING EACH SON          .<<.1738>>04362600
.            ENCOUNTERED.  WHEN ALL THE SONS HAVE BEEN        .<<.1738>>04362700
.            ENCOUNTERED, THEN PASS BACK THE COUNT THRU       .<<.1738>>04362800
.            FORMAL PARAMETER RETURN'INFO AND RETURN.         .<<.1738>>04362900
.                                                             .<<.1738>>04363000
. EXIT:      RETURN'INFO=NUMBER OF SONS OF TARGET PROCESS     .<<.1738>>04363100
.                                                             .<<.1738>>04363200
..END_IS.......................................................<<.1738>>04363300
;                                                              <<.1738>>04363400
$EDIT VOID=04385000                                            <<.1738>>04375000
                                                               <<.1738>>04376000
! ERR RTRN IF NOT PM,GETTING SELF,DESCENDENT OR ANCESTOR INFO  <<.1738>>04377000
! -----------------------------------------------------------  <<.1738>>04378000
! WALK DOWN SON THREAD, COUNTING EACH SON                      <<.1738>>04406000
! ---------------------------------------                      <<.1738>>04407000
  SCAN'PIN:=PCB(TARGET'PIN*PCBSIZE+SONINFOWORDNUM)/PCBSIZE;    <<.1738>>04410000
                                                               <<.1738>>04451000
! PASS BACK NUMBER OF SONS OF TARGET PIN                       <<.1738>>04452000
! --------------------------------------                       <<.1738>>04453000
$EDIT                                                          <<.1738>>04470000
$PAGE "SUBROUTINE GET'NUM'OF'DECN OF PROCINFO"                 <<.1738>>04471000
COMMENT                                                        <<.1738>>04481100
..BEGIN_IS.....................................................<<.1738>>04481200
.                                                             .<<.1738>>04481300
. SUBROUTINE GET'NUM'OF'DECN(RETURN'INFO)                     .<<.1738>>04481400
.                                                             .<<.1738>>04481500
. PURPOSE:   GET'NUM'OF'DECN IS A LOCAL SUBROUTINE CALLED TO  .<<.1738>>04481600
.            PASS BACK IN PARAMETER RETURN'INFO THE NUMBER OF .<<.1738>>04481700
.            DECENDENTS (DIRECT AND INDIRECT) OF THE          .<<.1738>>04481800
.            SPECIFIED PROCESS.                               .<<.1738>>04481900
.                                                             .<<.1738>>04482000
.            CALL ERR'RETURN TO PASS BACK ILLEGAL             .<<.1738>>04482100
.            CAPABILITIES ERROR CONDITION IF THE CALLING      .<<.1738>>04482200
.            PROCESS DOES NOT HAVE PRIV MODE, IS GETTING INFO .<<.1738>>04482300
.            ABOUT ITSELF OR ITS DESCENDENTS OR DOES NOT HAVE .<<.1738>>04482400
.            PROCESS HANDLING CAPABILITIES AND IS GETTING     .<<.1738>>04482500
.            INFO ABOUT ITS ANCESTORS.  LOOP THRU ALL         .<<.1738>>04482600
.            DESCENDENTS BY WALKING DOWN THE SON, BROTHER AND .<<.1738>>04482700
.            UNCLE (FATHER'S BROTHER) THREAD, COUNTING EACH   .<<.1738>>04482800
.            RELATIVE OF THE PROCESS SPECIFIED IN THE         .<<.1738>>04482900
.            TARGET'PIN VARIABLE.  PASS BACK THE NUMBER OF    .<<.1738>>04483000
.            DESCENDENTS THRU FORMAL PARAMETER RETURN'INFO.   .<<.1738>>04483100
.                                                             .<<.1738>>04483200
. EXIT:      RETURN'INFO=NUMBER OF RELATIVES OF SPECIFIED     .<<.1738>>04483300
.                          PROCESS                            .<<.1738>>04483400
.                                                             .<<.1738>>04483500
..END_IS.......................................................<<.1738>>04483600
;                                                              <<.1738>>04483700
$EDIT VOID=04505000                                            <<.1738>>04495000
                                                               <<.1738>>04496000
! ERR RTRN IF NOT PM,GETTING SELF,DESCENDENT OR ANCESTOR INFO  <<.1738>>04497000
! -----------------------------------------------------------  <<.1738>>04498000
! WALK DOWN SON, FATHER AND UNCLE TREE & COUND DESCENDENTS     <<.1738>>04526000
! --------------------------------------------------------     <<.1738>>04527000
  SCAN'PIN:=PCB(TARGET'PIN*PCBSIZE+SONINFOWORDNUM)/PCBSIZE;    <<.1738>>04530000
                                                               <<.1738>>04581000
! PASS BACK NUMBER OF DESCENDENTS                              <<.1738>>04582000
! -------------------------------                              <<.1738>>04583000
$EDIT                                                          <<.1738>>04605000
$PAGE "SUBROUTINE GET'NUM'OF'GENR OF PROCINFO"                 <<.1738>>04606000
COMMENT                                                        <<.1738>>04616100
..BEGIN_IS.....................................................<<.1738>>04616200
.                                                             .<<.1738>>04616300
. SUBROUTINE GET'NUM'OF'GENR(RETURN'INFO)                     .<<.1738>>04616400
.                                                             .<<.1738>>04616500
. PURPOSE:   GET'NUM'OF'GENR IS A LOCAL SUBROUTINE CALLED TO  .<<.1738>>04616600
.            PASS BACK IN PARAMETER RETURN'INFO THE NUMBER OF .<<.1738>>04616700
.            GENERATIONS (LEVELS) OF THE SPECIFIED PROCESS.   .<<.1738>>04616800
.                                                             .<<.1738>>04616900
.            CALL ERR'RETURN TO PASS BACK ILLEGAL             .<<.1738>>04617000
.            CAPABILITIES ERROR CONDITION IF THE CALLING      .<<.1738>>04617100
.            PROCESS DOES NOT HAVE PRIV MODE, IS GETTING INFO .<<.1738>>04617200
.            ABOUT ITSELF OR ITS DESCENDENTS OR DOES NOT HAVE .<<.1738>>04617300
.            PROCESS HANDLING CAPABILITIES AND IS GETTING     .<<.1738>>04617400
.            INFO ABOUT ITS ANCESTORS.  LOOP THRU ALL THE     .<<.1738>>04617500
.            SONS OF THE SPECIFIED PROCESS, COUNTING EACH OF  .<<.1738>>04617600
.            THE GENERATIONS ENCOUNTERED.  PASS BACK THE      .<<.1738>>04617700
.            NUMBER OF GENERATIONS THRU FORMAL PARAMETER      .<<.1738>>04617800
.            RETURN'INFO.                                     .<<.1738>>04617900
.                                                             .<<.1738>>04618000
. EXIT:      RETURN'INFO=NUMBER OF GENERATIONS (LEVELS) OF    .<<.1738>>04618100
.            THE SPECIFIED PROCESS.                           .<<.1738>>04618200
.                                                             .<<.1738>>04618300
..END_IS.......................................................<<.1738>>04618400
;                                                              <<.1738>>04618500
$EDIT VOID=04640000                                            <<.1738>>04630000
                                                               <<.1738>>04631000
! ERR RTRN IF NOT PM,GETTING SELF,DESCENDENT OR ANCESTOR INFO  <<.1738>>04632000
! -----------------------------------------------------------  <<.1738>>04633000
                                                               <<.1738>>04656000
! WALK DOWN SON THREAD, COUNTING GENERATIONS                   <<.1738>>04657000
! ------------------------------------------                   <<.1738>>04658000
  SCAN'PIN:=PCB(TARGET'PIN*PCBSIZE+SONINFOWORDNUM)/PCBSIZE;    <<.1738>>04675000
                                                               <<.1738>>04741000
! PASS BACK NUMBER OF GENERATIONS                              <<.1738>>04742000
! -------------------------------                              <<.1738>>04743000
$EDIT                                                          <<.1738>>04770000
$PAGE "SUBROUTINE GET'SON'PINS OF PROCINFO"                    <<.1738>>04771000
COMMENT                                                        <<.1738>>04781010
..BEGIN_IS.....................................................<<.1738>>04781020
.                                                             .<<.1738>>04781030
. SUBROUTINE GET'SON'PINS(RETURN'INFO)                        .<<.1738>>04781040
.                                                             .<<.1738>>04781050
. PURPOSE:   GET'SON'PIN IS A LOCAL SUBROUTINE CALLED TO FILL .<<.1738>>04781060
.            THE CALLER'S BYTE ARRAY WITH SON PROCESS'S ID    .<<.1738>>04781070
.            NUMBERS (PIN) UP TO THE NUMBER SPECIFIED IN THE  .<<.1738>>04781080
.            1ST DOUBLE BYTE OF THE BYTE ARRAY.  IF THE       .<<.1738>>04781090
.            ACTUAL NUMBER OF PINS RETURNED IS LESS THAN THE  .<<.1738>>04781100
.            NUMBER SPECIFIED BY THE CALLER, THEN ZERO FILL   .<<.1738>>04781110
.            THE REMAINDER OF THE BYTE ARRAY.                 .<<.1738>>04781120
.                                                             .<<.1738>>04781130
.            CALL ERR'RETURN TO PASS BACK ILLEGAL             .<<.2509>>04781140
.            CAPABILITIES IF THE CALLING PROCESS DOES NOT     .<<.2509>>04781150
.            HAVE PRIV MODE, IS GETTING INFO ABOUT ITSELF OR  .<<.2509>>04781160
.            ITS DECENDENTS OR DOES NOT HAVE PROCESS HANDLING .<<.2509>>04781170
.            CAPABILITIES AND IS GETTING INFO ABOUT ITS       .<<.2509>>04781180
.            ANCESTORS.  SET UP TO MOVE SON PINS TO THE 2ND   .<<.2509>>04781190
.            WORD AND ONWARD OF THE BYTE ARRAY, CALL          .<<.2509>>04781200
.            ERR'RETURN TO PASS BACK ILLEGAL ARRAY SIZE ERROR .<<.2509>>04781210
.            CONDITION IF THE ARRAY SIZE IS NEGATIVE OR ZERO  .<<.2509>>04781220
.            AND CALL CHECK'BOUNDS TO MAKE SURE THAT THE      .<<.2509>>04781230
.            ARRAY SIZE IS LEGITIMATE.  CALL SETCRITICAL TO   .<<.2509>>04781240
.            PREVENT THE CALLER FROM ABORTING WITHIN THE      .<<.2509>>04781250
.            PROCINFO INTRINSIC CODE AND THEN LOOP THRU THE   .<<.2509>>04781260
.            PROCESS OF PUTTING A SON PIN INTO THE BYTE ARRAY .<<.2509>>04781270
.            AND GETTING THE NEXT SON (BY CALLING ROUTINE     .<<.2509>>04781280
.            SCAN'TREE) UNTIL EITHER THERE IS NO MORE SON     .<<.2509>>04781290
.            PINS OR THE END OF THE BYTE ARRAY IS REACHED.    .<<.2509>>04781300
.            IF THERE ARE STILL EMPTY ENTRIES WITH IN THE     .<<.2509>>04781310
.            BYTE ARRAY, THEN ZERO THOSE OUT.  FINALLY ENABLE .<<.2509>>04781320
.            PROCESS SWITCHING AND RETURN.                    .<<.2509>>04781330
.                                                             .<<.1738>>04781340
. ENTRY:     RETURN'INFO=BYTE ARRAY OF WHERE TO PUT THE       .<<.1738>>04781350
.                        SON PINS OF THE CALLER.  THE FIRST   .<<.1738>>04781360
.                        TWO BYTES OF THE ARRAY REFLECTS THE  .<<.1738>>04781370
.                        NUMBER OF PINS TO PUT IN THE ARRAY   .<<.1738>>04781380
.                        AND THE BYTE ARRAY MUST START ON A   .<<.1738>>04781390
.                        WORD BOUNDARY.                       .<<.1738>>04781400
.                                                             .<<.1738>>04781410
..END_IS.......................................................<<.1738>>04781420
;                                                              <<.1738>>04781430
$EDIT VOID=04805000                                            <<.1738>>04790000
                                                               <<.1738>>04796000
! ERR RTRN IF NOT PM,GETTING SELF,DESCENDENT OR ANCESTOR INFO  <<.1738>>04797000
! -----------------------------------------------------------  <<.1738>>04798000
$EDIT VOID=04935000                                            <<.1738>>04825000
                                                               <<.1738>>04826000
! SET UP TO MOVE SON PINS STARTING AT 2ND WORD OF BYTE ARRAY   <<.1738>>04827000
! ----------------------------------------------------------   <<.1738>>04828000
$EDIT                                                          <<.2509>>04829000
  @INTARRAY:=WORD'ADDRESS(RETURN'INFO);                        <<.2509>>04830000
  NUM'PINS:=INTARRAY;                                          <<.1738>>04831000
  IF NUM'PINS<=0 THEN                                          <<.1738>>04832000
     ERR'RETURN(ILLG'ARRAY'SIZE,NUM'PINS);                     <<.1738>>04833000
  CHECK'BOUNDS(@INTARRAY+NUM'PINS,ILLG'ARRAY'SIZE);            <<.1738>>04834000
                                                               <<.1738>>04835000
! WALK DOWN THE SON THREADS AND RECORD THE PINS                <<.2509>>04836000
! ---------------------------------------------                <<.2509>>04837000
  CRITICAL'FLAG:=SETCRITICAL;                                  <<.2509>>04837100
  SCAN'PIN:=PCB(TARGET'PIN*PCBSIZE+SONINFOWORDNUM)/PCBSIZE;    <<.1738>>04838000
  INDEX:=1;                                                    <<.1738>>04839000
  WHILE SCAN'PIN<>0 AND INDEX<NUM'PINS DO                      <<.1738>>04840000
    BEGIN                                                      <<.1738>>04841000
    INTARRAY(INDEX):=SCAN'PIN;                                 <<.1738>>04842000
    INDEX:=INDEX+1;                                            <<.1738>>04843000
    SCAN'TREE(SEARCH'SONS,TARGET'PIN,TRUEVALUE);               <<.1738>>04844000
    END;                                                       <<.1738>>04845000
                                                               <<.1738>>04846000
! ZERO OUT REST OF PIN ARRAY                                   <<.2509>>04847000
! --------------------------                                   <<.2509>>04848000
  IF SCAN'PIN=0 THEN                                           <<.1738>>04849000
    BEGIN                                                      <<.1738>>04850000
    WHILE INDEX<NUM'PINS DO                                    <<.1738>>04851000
      BEGIN                                                    <<.1738>>04852000
      INTARRAY(INDEX):=0;                                      <<.1738>>04853000
      INDEX:=INDEX+1;                                          <<.1738>>04854000
      END;                                                     <<.1738>>04855000
    END;                                                       <<.1738>>04856000
                                                               <<.1738>>04857000
  RESETCRITICAL(CRITICAL'FLAG);                                <<.1738>>04858000
$PAGE "SUBROUTINE GET'DECN'PINS OF PROCINFO"                   <<.1738>>04941000
COMMENT                                                        <<.1738>>04951010
..BEGIN_IS.....................................................<<.1738>>04951020
.                                                             .<<.1738>>04951030
. SUBROUTINE GET'DECN'PINS(RETURN'INFO)                       .<<.1738>>04951040
.                                                             .<<.1738>>04951050
. PURPOSE:   GET'DECN'PINS IS A LOCAL SUBROUTINE CALLED TO    .<<.1738>>04951060
.            FILL THE CALLER'S BYTE ARRAY WITH DESCENDENTS    .<<.1738>>04951070
.            (BROTHERS, SONS, BROTHER'S SON, ETC.) PROCESS ID .<<.1738>>04951080
.            NUMBER (PINS) UP TO THE NUMBER SPECIFIED IN THE  .<<.1738>>04951090
.            1ST DOUBLE BYTE OF THE BYTE ARRAY.  IF THE       .<<.1738>>04951100
.            ACTUAL NUMBER OF PINS RETURNED IS LESS THAN THE  .<<.1738>>04951110
.            NUMBER SPECIFIED BY THE CALLER, THEN ZERO FILL   .<<.1738>>04951120
.            THE REMAINDER OF THE BYTE ARRAY.                 .<<.1738>>04951130
.                                                             .<<.1738>>04951140
.            CALL ERR'RETURN TO PASS BACK ILLEGAL             .<<.2509>>04951150
.            CAPABILITIES ERROR CONDITION IF THE CALLING      .<<.2509>>04951160
.            PROCESS DOES NOT HAVE PRIV MODE, IS GETTING INFO .<<.2509>>04951170
.            ABOUT ITSELF OR ITS DESCENDENTS OR DOES NOT HAVE .<<.2509>>04951180
.            PROCESS HANDLING CAPABILITIES AND IS GETTING     .<<.2509>>04951190
.            INFO ABOUT ITS ANCESTORS.  SET UP TO MOVE        .<<.2509>>04951200
.            DESCENDENT PINS TO THE 2ND WORD AND ONWARD OF    .<<.2509>>04951210
.            THE BYTE ARRAY, CALL ERR'RETURN TO PASS BACK     .<<.2509>>04951220
.            ILLEGAL ARRAY SIZE ERROR CONDITION IF THE ARRAY  .<<.2509>>04951230
.            SIZE IS NEGATIVE OR ZERO AND CALL CHECK'BOUNDS   .<<.2509>>04951240
.            TO MAKE SURE THAT THE ARRAY SIZE IS LEGITIMATE.  .<<.2509>>04951250
.            CALL PROCEDURE SETCRITICAL TO PREVENT THE CALLER .<<.2509>>04951260
.            FROM ABORTING WITHIN THE PROCINFO INTRINSIC CODE .<<.2509>>04951270
.            AND LOOP THRU THE PROCESS OF PUTTING A PIN INTO  .<<.2509>>04951280
.            THE BYTE ARRAY AND GETTING THE NEXT PIN (BY      .<<.2509>>04951290
.            CALLING ROUTINE SCAN'TREE) UNTIL EITHER THERE    .<<.2509>>04951300
.            ARE NO MORE PINS OR THE END OF THE BYTE ARRAY IS .<<.2509>>04951310
.            REACHED.  IF THERE ARE STILL ENTRIES IN THE BYTE .<<.2509>>04951320
.            ARRAY, THEN ZERO THOSE OUT.  FINALLY ENABLE      .<<.2509>>04951330
.            PROCESS SWITCHING AND RETURN.                    .<<.2509>>04951340
.                                                             .<<.1738>>04951350
. ENTRY:     RETURN'INFO=BYTE ARRAY OF WHERE TO PUT THE       .<<.1738>>04951360
.                        DESCENDENT PINS OF THE CALLER.  THE  .<<.1738>>04951370
.                        FIRST TWO BYTES OF THE ARRAY         .<<.1738>>04951380
.                        REFLECTS THE NUMBER OF PINS TO PUT   .<<.1738>>04951390
.                        IN THE ARRAY AND THE BYTE ARRAY      .<<.1738>>04951400
.                        MUST START ON A WORD BOUNDARY.       .<<.1738>>04951410
.                                                             .<<.1738>>04951420
..END_IS.......................................................<<.1738>>04951430
;                                                              <<.1738>>04951440
$EDIT VOID=04975000                                            <<.1738>>04960000
                                                               <<.1738>>04966000
! ERR RTRN IF NOT PM,GETTING SELF,DESCENDENT OR ANCESTOR INFO  <<.1738>>04967000
! -----------------------------------------------------------  <<.1738>>04968000
$EDIT VOID=05120000                                            <<.1738>>04995000
                                                               <<.1738>>04996000
! SET UP TO MOVE DESCENDENT PINS TO 2ND WORD OF BYTE ARRAY     <<.1738>>04997000
! --------------------------------------------------------     <<.1738>>04998000
$EDIT                                                          <<.2509>>04999000
  @INTARRAY:=WORD'ADDRESS(RETURN'INFO);                        <<.2509>>05000000
  NUM'PINS:=INTARRAY;                                          <<.1738>>05001000
  IF NUM'PINS<=0 THEN                                          <<.1738>>05002000
     ERR'RETURN(ILLG'ARRAY'SIZE,NUM'PINS);                     <<.1738>>05003000
  CHECK'BOUNDS(@INTARRAY+NUM'PINS,ILLG'ARRAY'SIZE);            <<.1738>>05004000
                                                               <<.1738>>05005000
! WALK DOWN SON, BROTHER, UNCLE THREADS AND RECORD THE PINS    <<.1738>>05006000
! ---------------------------------------------------------    <<.1738>>05007000
  CRITICAL'FLAG:=SETCRITICAL;                                  <<.2509>>05007100
  SCAN'MORE:=TRUE;                                             <<.1738>>05008000
  SCAN'PIN:=PCB(TARGET'PIN*PCBSIZE+SONINFOWORDNUM)/PCBSIZE;    <<.1738>>05009000
  INDEX:=1;                                                    <<.1738>>05010000
  IF SCAN'PIN<>0 THEN                                          <<.1738>>05011000
    WHILE SCAN'MORE AND INDEX<NUM'PINS DO                      <<.1738>>05012000
      BEGIN                                                    <<.1738>>05013000
      INTARRAY(INDEX):=SCAN'PIN;                               <<.1738>>05014000
      SCAN'TREE(SEARCH'ALL,SCAN'PIN,SCAN'MORE);                <<.1738>>05015000
      INDEX:=INDEX+1;                                          <<.1738>>05016000
      END                                                      <<.1738>>05017000
  ELSE SCAN'MORE:=FALSE;                                       <<.1738>>05018000
                                                               <<.1738>>05019000
! ZERO OUT REST OF PIN ARRAY                                   <<.1738>>05020000
! --------------------------                                   <<.1738>>05021000
  IF NOT(SCAN'MORE) THEN                                       <<.1738>>05022000
    BEGIN                                                      <<.1738>>05023000
    WHILE INDEX<NUM'PINS DO                                    <<.1738>>05024000
      BEGIN                                                    <<.1738>>05025000
      INTARRAY(INDEX):=0;                                      <<.1738>>05026000
      INDEX:=INDEX+1;                                          <<.1738>>05027000
      END;                                                     <<.1738>>05028000
    END;                                                       <<.1738>>05029000
                                                               <<.1738>>05030000
  RESETCRITICAL(CRITICAL'FLAG);                                <<.1738>>05031000
$PAGE "SUBROUTINE GET'PRIORITY OF PROCINFO"                    <<.1738>>05129000
COMMENT                                                        <<.1738>>05136100
..BEGIN_IS.....................................................<<.1738>>05136200
.                                                             .<<.1738>>05136300
. SUBROUTINE GET'PRIORITY(RETURN'INFO)                        .<<.1738>>05136400
.                                                             .<<.1738>>05136500
. PURPOSE:   GET'PRIORITY IS A LOCAL SUBROUTINE CALLED TO GET .<<.1738>>05136600
.            THE PRIORITY OF THE PROCESS SPECIFIED IN VARIBLE .<<.1738>>05136700
.            TARGET'PIN AND PASS THE PRIORITY BACK IN VARIBLE .<<.1738>>05136800
.            RETURN'INFO.                                     .<<.1738>>05136900
.                                                             .<<.1738>>05137000
.            CALL ERR'RETURN TO PASS BACK ILLEGAL             .<<.1738>>05137100
.            CAPABILITES ERROR CONDITION IF THE CALLING       .<<.1738>>05137200
.            PROCESS DOES NOT HAVE PRIV MODE, IS GETTING INFO .<<.1738>>05137300
.            ABOUT ITSELF OR ITS SONS.  IF NOT, GET THE       .<<.1738>>05137400
.            PRIORITY FROM THE PRIORITY FIELD OF THE PROCESS  .<<.1738>>05137500
.            SPECIFIED IN VARIABLE TARGET'PIN AND PASS THE    .<<.1738>>05137600
.            PRIORITY BACK THRU FORMAL PARAMETER RETURN'INFO. .<<.1738>>05137700
.                                                             .<<.1738>>05137800
. EXIT:      RETURN'INFO=PRIORITY OF THE TARGET PROCESS       .<<.1738>>05137900
.                                                             .<<.1738>>05138000
..END_IS.......................................................<<.1738>>05138100
;                                                              <<.1738>>05138200
                                                               <<.1738>>05141000
! ERROR RETURN IF NOT PM, GETTING SELF OR SON INFO             <<.1738>>05142000
! ------------------------------------------------             <<.1738>>05143000
                                                               <<.1738>>05151000
! PASS BACK PRIORITY OF THE TARGET PROCESS                     <<.1738>>05152000
! ----------------------------------------                     <<.1738>>05153000
  PIN'INFO:=PCB(TARGET'PIN*PCBSIZE+QUEUEINGINFOWORDNUM).       <<.1738>>05155000
               PRIFIELD;                                       <<.1738>>05156000
$EDIT                                                          <<.1738>>05170000
$PAGE "SUBROUTINE GET'PROCSTATE OF PROCINFO"                   <<.1738>>05171000
COMMENT                                                        <<.1738>>05181010
..BEGIN_IS.....................................................<<.1738>>05181020
.                                                             .<<.1738>>05181030
. SUBROUTINE GET'PROCSTATE(RETURN'INFO)                       .<<.1738>>05181040
.                                                             .<<.1738>>05181050
. PURPOSE:   GET'PROC'STATE IS A LOCAL SUBROUTINE CALLED TO   .<<.1738>>05181060
.            PASS BACK THE STATE AND THE ACTIVATION INFO      .<<.1738>>05181070
.            OF A SPECIFIED PROCESS.  THIS INFORMATION IS     .<<.1738>>05181080
.            PASSED BACK IN A FORMAT IDENTICAL TO THAT OF     .<<.1738>>05181090
.            WORD 2 IN THE GETPROCINFO INTRINSIC.             .<<.1738>>05181100
.                                                             .<<.1738>>05181110
.            CALL ERR'RETURN TO PASS BACK ILLEGAL             .<<.1738>>05181120
.            CAPABILITIES IF THE CALLING PROCESS DOES NOT     .<<.1738>>05181130
.            HAVE PRIV MODE, IS GETTING INFO ABOUT ITSELF OR  .<<.1738>>05181140
.            ITS SONS.  BUILD THE STATE/ACTIVATION WORD       .<<.1738>>05181150
.            ACCORDING TO THE FORMAT SPECIFIED IN THE 2ND     .<<.1738>>05181160
.            WORD OF THE GETPROCINFO INTRINSIC AND PASS IT    .<<.1738>>05181170
.            BACK TO THE CALLER.                              .<<.1738>>05181180
.                                                             .<<.1738>>05181190
. EXIT:      RETURN'INFO=PROC STATE INFO WORD                 .<<.1738>>05181200
.                        BITS  0- 4=RESERVED FOR MPE USE      .<<.1738>>05181210
.                                     (ZEROED OUT)            .<<.1738>>05181220
.                                                             .<<.1738>>05181230
.                              4- 6=QUEUE CHARACTERISTICS     .<<.1738>>05181240
.                                  =1 IF D OR E QUEUE         .<<.1738>>05181250
.                                     PRIORITY CLASS          .<<.1738>>05181260
.                                  =2 IF C PRIORITY CLASS     .<<.1738>>05181270
.                                  =4 IF A OR B QUEUE         .<<.1738>>05181280
.                                     PRIORITY CLASS          .<<.1738>>05181290
.                                                             .<<.1738>>05181300
.                              7- 8=ORIGIN OF LAST ACTIVATE   .<<.1738>>05181310
.                                     INTRINSIC CALL          .<<.1738>>05181320
.                                  =0 IF PROCESS ACTIVATED    .<<.1738>>05181330
.                                     BY MPE                  .<<.1738>>05181340
.                                  =1 IF PROCESS ACTIVATED    .<<.1738>>05181350
.                                     BY THE FATHER           .<<.1738>>05181360
.                                  =2 IF PROCESS ACTIVATED    .<<.1738>>05181370
.                                     BY THE SON              .<<.1738>>05181380
.                                                             .<<.1738>>05181390
.                              9-12=RESERVED FOR MPE USE      .<<.1738>>05181400
.                                     (ZEROED OUT)            .<<.1738>>05181410
.                                                             .<<.1738>>05181420
.                             13-14=SUSPENSION CONDITION      .<<.1738>>05181430
.                                   IF BIT 13=1, SOURCE       .<<.1738>>05181440
.                                     OF EXPECTED             .<<.1738>>05181450
.                                     ACTIVATION IS BY        .<<.1738>>05181460
.                                     FATHER                  .<<.1738>>05181470
.                                   IF BIT 14=1, SOURCE       .<<.1738>>05181480
.                                     OF EXPECTED             .<<.1738>>05181490
.                                     ACTIVATION IS BY A      .<<.1738>>05181500
.                                     SON                     .<<.1738>>05181510
.                                                             .<<.1738>>05181520
.                                15=ACTIVITY STATE            .<<.1738>>05181530
.                                  =1 IF PROCESS IS ACTIVE    .<<.1738>>05181540
.                                                             .<<.1738>>05181550
..END_IS.......................................................<<.1738>>05181560
;                                                              <<.1738>>05181570
                                                               <<.1738>>05186000
! ERROR RETURN IF NOT PM, GETTING SELF OR SON INFO             <<.1738>>05187000
! ------------------------------------------------             <<.1738>>05188000
                                                               <<.1738>>05196000
$EDIT VOID=05235000                                            <<.1738>>05200000
! BUILD PROCSTATE INFO WORD                                    <<.1738>>05201000
! -------------------------                                    <<.1738>>05202000
  PCBADDR:=TARGET'PIN*PCBSIZE;                                 <<.1738>>05203000
  PIN'INFO.SUSPN'FIELD:=PCB(PCBADDR+WAKEMASKWORDNUM).          <<.1738>>05204000
                            FATHERSONWAKEFLAGS;                <<.1738>>05205000
  PIN'INFO.ACTIVITY'FIELD:=IF PIN'INFO.SUSPN'FIELD=0 THEN      <<.1738>>05206000
                             1 ELSE 0;                         <<.1738>>05207000
  PIN'INFO.ORIGIN:=PCB(PCBADDR+PIINFOWORDNUM).OAFIELD;         <<.1738>>05208000
                                                               <<.1738>>05209000
  PIN'INFO.Q'INFO:=PCB(PCBADDR+QUEUEINGINFOWORDNUM).QUEUEFIELD;<<.1738>>05210000
$EDIT VOID=05250000                                            <<.1738>>05240000
                                                               <<.1738>>05256000
! PASS BACK STATE OF PROCESS                                   <<.1738>>05257000
! --------------------------                                   <<.1738>>05258000
$EDIT                                                          <<.1738>>05265000
$EDIT                                                          <<.1738>>05275000
$PAGE "SUBROUTINE GET'PROG'NAME OF PROCINFO"                   <<.1738>>05276000
$EDIT VOID=05315000                                            <<.1738>>05290000
COMMENT                                                        <<.1738>>05291100
..BEGIN_IS.....................................................<<.1738>>05291200
.                                                             .<<.1738>>05291300
. SUBROUTINE GET'PROG'NAME(RETURN'INFO)                       .<<.1738>>05291400
.                                                             .<<.1738>>05291500
. PURPOSE:   GET'PROG'NAME IS A LOCAL SUBROUTINE CALLED TO    .<<.1738>>05291600
.            GET THE ASCII PROGRAM NAME OF THE SPECIFIED      .<<.1738>>05291700
.            PROCESS FROM THE LOADER'S SEGMENT TABLE SIR.     .<<.1738>>05291800
.            THE SPECIFIED PROCESS MUST BE THE CALLER, THE    .<<.1738>>05291900
.            DIRECT SON OF THE CALLER OR THE CALLER MUST BE   .<<.1738>>05292000
.            PRIVILEDGED.                                     .<<.1738>>05292100
.                                                             .<<.1738>>05292200
.            CALL SUBROUTINE CHECK'BOUNDS TO MAKE SURE THAT   .<<.1738>>05292300
.            THE BYTE ADDRESS IS VALID AND THAT IT IS LARGE   .<<.1738>>05292400
.            ENOUGH TO HOLD THE PROGRAM NAME (=>28 BYTES).    .<<.1738>>05292500
.            CALL ERR'RETURN TO PASS BACK ILLEGAL             .<<.1738>>05292600
.            CAPABILITIES ERROR CONDITION IF THE CALLING      .<<.1738>>05292700
.            PROCESS DOES NOT HAVE PRIV MODE, IS GETTING INFO .<<.1738>>05292800
.            ABOUT ITSELF, ITS DESCENDENTS OR ANCESTORS.      .<<.1738>>05292900
.            FINALLY, CALL SUBROUTINE CHECK'GOOD'PIN TO MAKE  .<<.1738>>05293000
.            SURE THAT THE SPECIFIED PROCESS IS STILL VALID   .<<.1738>>05293100
.            AND THEN CALL PROCEDURE PROCFILE TO GET THE      .<<.1738>>05293200
.            PROGRAM NAME FROM THE LOADER'S SEGMENT TABLE SIR .<<.1738>>05293300
.            (CALL ERR'RETURN TO PASS BACK UNASSIGNED PIN     .<<.1738>>05293400
.            ERROR CONDITION IF THE SPECIFIED PIN IS NOT      .<<.1738>>05293500
.            ASSIGNED).                                       .<<.1738>>05293600
.                                                             .<<.1738>>05293700
. ENTRY:     RETURN'INFO=BYTE ARRAY TO HOLD THE PROGRAM NAME  .<<.1738>>05293800
.                                                             .<<.1738>>05293900
.            VARIABLE TARGET'PIN=PROCESS TO GET THE PROGRAM   .<<.1738>>05294000
.                                  NAME                       .<<.1738>>05294100
.                                                             .<<.1738>>05294200
..END_IS.......................................................<<.1738>>05294300
;                                                              <<.1738>>05294400
! MAKE SURE THAT BYTE ARRAY IS LARGE ENOUGH TO HOLD PROG NAME  <<.1738>>05330000
! -----------------------------------------------------------  <<.1738>>05331000
  CHECK'BOUNDS(WORD'ADDRESS(RETURN'INFO),ILLG'ADDR);           <<.1738>>05335000
  CHECK'BOUNDS(WORD'ADDRESS(RETURN'INFO)+13,ILLG'ADDR);        <<.1738>>05340000
$EDIT VOID=05355000                                            <<.1738>>05350000
                                                               <<.1738>>05351000
! ERROR RETURN IF NOT PM,GETTING SELF,SON OR DESCENDENT INFO   <<.1738>>05352000
! ----------------------------------------------------------   <<.1738>>05353000
! MAKE SURE SPECIFIED PROCESS IS STILL VALID                   <<.1738>>05380000
! ------------------------------------------                   <<.1738>>05381000
! GO GET PROG NAME FROM LOADER'S SEGMENT TABLE SIR             <<.1738>>05405000
! ------------------------------------------------             <<.1738>>05406000
$EDIT VOID=05435000                                            <<.1738>>05430000
$PAGE "SUBROUTINE SELECT'OPTION OF PROCINFO"                   <<.1738>>05431000
$EDIT VOID=05460000                                            <<.1738>>05445000
COMMENT                                                        <<.1738>>05446100
..BEGIN_IS.....................................................<<.1738>>05446200
.                                                             .<<.1738>>05446300
. SUBROUTINE SELECT'OPTION(OPTION'NUM,ITEM)                   .<<.1738>>05446400
.                                                             .<<.1738>>05446500
. PURPOSE:   SELECT'OPTION IS A LOCAL SUBROUTINE CALLED TO    .<<.1738>>05446600
.            SELECT AND CALLS THE PROPER LOCAL SUBROUTINE FOR .<<.1738>>05446700
.            THE OPTION SPECIFIED IN VARIABLE OPTION'NUM.     .<<.1738>>05446800
.                                                             .<<.1738>>05446900
.            EXIT THRU ERR'RETURN WITH ILLEGAL OPTION ERROR   .<<.1738>>05447000
.            CONDITION IF THE OPTION SPECIFIED IS NOT WITHIN  .<<.1738>>05447100
.            BOUNDS.  THEN FALL INTO THE CASE STATEMENT TO    .<<.1738>>05447200
.            CALL THE APPROPRIATE SUBROUTINE TO PROCESS THE   .<<.1738>>05447300
.            OPTION.                                          .<<.1738>>05447400
.                                                             .<<.1738>>05447500
. ENTRY:     OPTION'NUM=OPTION THAT SPECIFIES WHAT OPTION IS  .<<.1738>>05447600
.                         DESIRED                             .<<.1738>>05447700
.                                                             .<<.1738>>05447800
.                      = 1 IF TO GET CALLING PROCESS'S PIN    .<<.1738>>05447900
.                      = 2 IF TO GET FATHER PIN OF SPECIFIED  .<<.1738>>05448000
.                          PROCESS                            .<<.1738>>05448100
.                      = 3 IF TO GET NUMBER OF SONS OF        .<<.1738>>05448200
.                          SPECIFIED PROCESS                  .<<.1738>>05448300
.                      = 4 IF TO GET NUMBER OF DESCENDENTS    .<<.1738>>05448400
.                          OF SPECIFIED PROCESS               .<<.1738>>05448500
.                      = 5 IF TO GET NUMBER OF GENERATIONS    .<<.1738>>05448600
.                          OF SPECIFIED PROCESS               .<<.1738>>05448700
.                      = 6 IF TO GET PINS OF ALL SONS OF      .<<.1738>>05448800
.                          SPECIFIED PROCESS                  .<<.1738>>05448900
.                      = 7 IF TO GET PINS OF ALL DESCENDENTS  .<<.1738>>05449000
.                          OF SPECIFIED PROCESS               .<<.1738>>05449100
.                      = 8 IF TO GET PRIORITY OF A PROCESS    .<<.1738>>05449200
.                      = 9 IF TO GET STATE & ACTIVATION INFO  .<<.1738>>05449300
.                          OF SPECIFIED PROCESS               .<<.1738>>05449400
.                      =10 IF TO GET PROGRAM NAME OF          .<<.1738>>05449500
.                          SPECIFIED PROCESS                  .<<.1738>>05449600
.                      =11 (NOT USED)                         .<<.1738>>05449700
.                      =12 (NOT USED)                         .<<.1738>>05449800
.                                                             .<<.1738>>05449900
.            ITEM      =BYTE ARRAY THAT CONTAINS OR IS TO     .<<.1738>>05450000
.                       RECEIVE INFORMATION (OPTION           .<<.1738>>05450100
.                       DEPENDENT)                            .<<.1738>>05450200
.                                                             .<<.1738>>05450300
..END_IS.......................................................<<.1738>>05450400
;                                                              <<.1738>>05450500
$EDIT                                                          <<.1738>>05490000
! VERIFY THAT THE OPTION IS WITHIN LEGAL BOUNDS                <<.1738>>05496000
! ---------------------------------------------                <<.1738>>05497000
$EDIT VOID=05515000                                            <<.1738>>05510000
! CALL THE APPROPRIATE SUBROUTINE TO PROCESS OPTION            <<.1738>>05521000
! -------------------------------------------------            <<.1738>>05522000
$EDIT                                                          <<.1738>>05615000
COMMENT*****                                                   <<.1738>>05616100
* MAINLINE *                                                   <<.1738>>05616200
***********;                                                   <<.1738>>05616300
                                                               <<.1738>>05616400
! MAKE SURE THAT STACK SPACE IS AVAILABLE FOR PROCINFO USE     <<.1738>>05616500
! --------------------------------------------------------     <<.1738>>05616600
$EDIT VOID=05645000                                            <<.1738>>05630000
! GO HAVE PARAMETER LIST CHECKED & GET STACK BOUNDS            <<.1738>>05651000
! -------------------------------------------------            <<.1738>>05652000
! ERROR RETURN IF 1ST PARAMETER IS MISSING OR SPLIT STACK MODE <<.1738>>05666000
! ------------------------------------------------------------ <<.1738>>05667000
$EDIT VOID=05715000                                            <<.1738>>05710000
! SET TARGET'PIN TO PIN OF PROCESS TO GET INFO ON              <<.1738>>05721000
! -----------------------------------------------              <<.1738>>05722000
$EDIT VOID=05795000                                            <<.1738>>05770000
! FLAG THE CHARACTERISTICS OF THE PROCESS IN VAR CLEARENCE     <<.1738>>05801000
! --------------------------------------------------------     <<.1738>>05802000
$EDIT VOID=05820000                                            <<.1738>>05810000
                                                               <<.1738>>05916000
!      ERROR RETURN IF MISSING OPTION/ITEM OF ELEMENT PAIR     <<.1738>>05917000
!      ---------------------------------------------------     <<.1738>>05918000
                                                               <<.1738>>05926000
!    ERROR RETURN IF MISSING OPTION/ITEM OF ELEMENT PAIR       <<.1738>>05927000
!    ---------------------------------------------------       <<.1738>>05928000
                                                               <<.1738>>05946000
!    POSITION TO THE NEXT OPTION/ITEM ELEMENT PAIR             <<.1738>>05947000
!    ---------------------------------------------             <<.1738>>05948000
   DEFINE GLOBAL'STOPSUSP =                                    <<F2040>>06350000
         IF CLASS0STATSENABLED THEN                            <<F2040>>06350100
         BEGIN                                                 <<F2040>>06350200
            TOS := MEASSTATXDSBANK;                            <<F2040>>06350300
            TOS := MEASSTATXDSBASE + C0SUB0'SEGRELOFF +        <<F2040>>06350400
                   C'STOPSUSPENDED;                            <<F2040>>06350500
            ASSEMBLE (LSEA;INCA;SSEA;DDEL);                    <<F2040>>06350600
         END;  #,                                              <<F2040>>06350700
     PROCESS'STOPSUSP =                                        <<F2040>>06350710
         IF GCLASSENABLEDMASK.CLASS15 THEN                     <<F2040>>06350800
         BEGIN                                                 <<F2040>>06350900
            TOS := MEASPROCXDSBANK;                            <<F2040>>06351000
            TOS := MEASPROCXDSBASE + CLASS15'SUB0SIZE *        <<F2040>>06351100
                   LOGICAL (PIN) + CP'STOPIMPEDE;              <<F2040>>06351200
            ASSEMBLE (LSEA;INCA;SSEA;DDEL);                    <<F2040>>06351300
         END;                                                  <<F2040>>06351400
         TOS := ICS (-ICS'STKBANKCELL);                        <<F2040>>06351500
         TOS := ICS (-ICS'STKBASECELL) + PXGLOBSIZE +          <<F2040>>06351600
                MEASSTOPREASON'IDX;                            <<F2040>>06351700
         TOS := STOPIMPEDE;                                    <<F2040>>06351800
         ASSEMBLE (SSEA;DDEL);#;                               <<F2040>>06351900
                                                                        06352100
        GLOBAL'STOPSUSP;                                       <<F2040>>06620100
        PROCESS'STOPSUSP;                                      <<F2040>>06620200
       ELSE                                                    <<F2040>>06930000
       BEGIN                                                   <<F2040>>06930100
          GLOBAL'STOPSUSP;                                     <<F2040>>06930200
          PROCESS'STOPSUSP;                                    <<F2040>>06930300
          WAIT (SUSP, 0);                                      <<F2040>>06930400
       END;                                                    <<F2040>>06930500
                                                                        07585100
            <<SINCE WE DO NOT HAVE ENOUGH COUNTERS FOR THE  >> <<F2040>>07585200
            <<PROCESS LEVEL, WE USE CP'STOPIMPEDE FOR THIS  >> <<F2040>>07585300
            <<TYPE OF STOP.                                 >> <<F2040>>07585400
            IF CLASS0STATSENABLED THEN                         <<F2040>>07585500
            BEGIN                                              <<F2040>>07585600
               TOS := MEASSTATXDSBANK;                         <<F2040>>07585700
               TOS := MEASSTATXDSBASE + C0SUB0'SEGRELOFF +     <<F2040>>07585800
                      C'STOPACTIVATE;                          <<F2040>>07585900
               ASSEMBLE (LSEA;INCA;SSEA;DDEL);                 <<F2040>>07586000
            END;                                               <<F2040>>07586100
            IF GCLASSENABLEDMASK.CLASS15 THEN                  <<F2040>>07586200
            BEGIN                                              <<F2040>>07586300
               TOS := MEASPROCXDSBANK;                         <<F2040>>07586400
               TOS := MEASPROCXDSBASE + CLASS15'SUB0SIZE *     <<F2040>>07586500
                      LOGICAL (CALPIN) + CP'STOPIMPEDE;        <<F2040>>07586600
               ASSEMBLE (LSEA;INCA;SSEA;DDEL);                 <<F2040>>07586700
            END;                                               <<F2040>>07586800
            TOS := ICS (-ICS'STKBANKCELL);                     <<F2040>>07586900
            TOS := ICS (-ICS'STKBASECELL) + PXGLOBSIZE +       <<F2040>>07587000
                   MEASSTOPREASON'IDX;                         <<F2040>>07587100
            TOS := STOPIMPEDE;                                 <<F2040>>07587200
            ASSEMBLE (SSEA;DDEL);                              <<F2040>>07587300
                                                                        07587400
   S'VALUE,                                                    <<D9933>>07956000
   Z'VALUE,                                                    <<D9933>>07957000
PUSH (S);                                                      <<D9933>>08205000
S'VALUE := TOS;                                                <<D9933>>08206000
                                                               <<D9933>>08207000
PUSH (Z);                                                      <<D9933>>08208000
Z'VALUE := TOS;                                                <<D9933>>08209000
S'TO'Z := Z'VALUE - S'VALUE;                                   <<D9933>>08210000
                                                               <<D9933>>08211000
$EDIT VOID=09275000                                            <<P9954>>09250000
COMMENT                                                        <<P9954>>09251100
**BEGIN_IS*****************************************************<<P9954>>09251200
*                                                             *<<P9954>>09251300
* PROCEDURE ABORTPROG                                         *<<P9954>>09251400
*                                                             *<<P9954>>09251500
* PURPOSE:  ABORTPROG IS A PROCEDURE CALLED TO HAVE THE SON   *<<P9954>>09251600
*           OF MAIN, IF ANY, KILLED.                          *<<P9954>>09251700
*                                                             *<<P9954>>09251800
*           START BY GETTING THE CURRENT PROCESS AND SEEING   *<<P9954>>09251900
*           IF THERE IS ANY SON TO KILL.  IF NOT, THEN CALL   *<<P9954>>09252000
*           SOFT'DEATH WITH A 302 TO RECORD THE CALL TO       *<<P9954>>09252100
*           ABORTPROG IN THE MONITOR TABLE.  IF THE PROCESS   *<<P9954>>09252200
*           HAS A LIVE SON, THEN DO THE FOLLOWING:  CALL      *<<P9954>>09252300
*           PROCEDURE SET'PSIF TO INDICATE SOFT KILL HAS      *<<P9954>>09252400
*           OCCURRED, CALL ABORTPROCIO TO ABORT ANY I/O FOR   *<<P9954>>09252500
*           THE SON, AWAKE THE SON ON A MAIL EVENT, CALL      *<<P9954>>09252600
*           REMRITENTRY TO CLEAR ANY CONSOLE MESSAGES AND IF  *<<P9954>>09252700
*           THE SON IS NOT DEAD, THEN CALL WAIT TO WAIT FOR   *<<P9954>>09252800
*           THE SON-TO-DIE (MOURNING) EVENT TO OCCUR.  WHEN   *<<P9954>>09252900
*           THE SON HAS DIED, THE CALL BURRYPROC TO REMOVE    *<<P9954>>09253000
*           THE SON FROM THE SYSTEM AND RESTORE THE PROCESS   *<<P9954>>09253100
*           TO AN ABORTABLE STATE.  IF THE PROCESS HAS A DEAD *<<P9954>>09253200
*           SON, THEN PUT THE SON IN A HIBERNATE STATE AND    *<<P9954>>09253300
*           WAIT FOR THE SON RESPONSE.  FINALLY, SET UP THE   *<<P9954>>09253400
*           JCW TO ISSUE THE MESSAGE "CIERR 989, PROGRAM      *<<P9954>>09253500
*           ABORTED PER USER REQUEST" BEFORE RETURNING.       *<<P9954>>09253600
*                                                             *<<P9954>>09253700
**END_IS*******************************************************<<P9954>>09253800
;                                                              <<P9954>>09253900
$EDIT VOID=09305000                                            <<P9954>>09300000
!     GET CURRENT PROCESS AND SOFTDEATH IF NO SON TO KILL      <<P9954>>09311000
!     ---------------------------------------------------      <<P9954>>09312000
      DISAPROC;   <<THE DISABLE/ENABLE WAS IMPLEMENTED TO>>    <<B1504>>09321000
                  <<PREVENT THE CASE WHERE UCOP AND FATHER>>   <<B1504>>09322000
                  <<TRY TO BURRY THE SAME SON>>                <<B1504>>09323000
         BEGIN                                                 <<P9954>>09330000
         SOFT'DEATH(302);  !INDICATE THE KILLING OF NO SON     <<P9954>>09331000
         RETURN;                                               <<P9954>>09332000
         END;                                                  <<P9954>>09333000
                                                               <<P9954>>09334100
!     IF PROCESS HAS LIVE SON, THEN:                           <<P9954>>09334200
!     ------------------------------                           <<P9954>>09334300
         ENAPROC; <<******SEE ABOVE COMMENT OF DISAPROC>>      <<B1504>>09351000
                                                               <<P9954>>09406100
!     IF PROCESS HAS DEAD SON, THEN:                           <<P9954>>09406200
!     ------------------------------                           <<P9954>>09406300
         <<AT THE PROCESS LEVEL, SINCE WE DON'T HAVE ENOUGH  >><<F2040>>09420100
         <<COUNTERS, WE WILL USE CP'STOPIMPEDE FOR THIS TYPE >><<F2040>>09420200
         <<OF STOP REASON.                                   >><<F2040>>09420300
         IF CLASS0STATSENABLED THEN                            <<F2040>>09420400
         BEGIN                                                 <<F2040>>09420500
            TOS := MEASSTATXDSBANK;                            <<F2040>>09420600
            TOS := MEASSTATXDSBASE + C0SUB0'SEGRELOFF +        <<F2040>>09420700
                   C'STOPABORTSON;                             <<F2040>>09420800
            ASSEMBLE (LSEA;INCA;SSEA;DDEL);                    <<F2040>>09420900
         END;                                                  <<F2040>>09421000
         IF GCLASSENABLEDMASK.CLASS15 THEN                     <<F2040>>09421100
         BEGIN                                                 <<F2040>>09421200
            TOS := MEASPROCXDSBANK;                            <<F2040>>09421300
            TOS := MEASPROCXDSBASE + (CURPRC / PCBSIZE) *      <<F2040>>09421400
                   CLASS15'SUB0SIZE + CP'STOPIMPEDE;           <<F2040>>09421500
            ASSEMBLE (LSEA;INCA;SSEA;DDEL);                    <<F2040>>09421600
         END;                                                  <<F2040>>09421700
         TOS := ICS (-ICS'STKBANKCELL);                        <<F2040>>09421800
         TOS := ICS (-ICS'STKBASECELL) + PXGLOBSIZE +          <<F2040>>09421900
                MEASSTOPREASON'IDX;                            <<F2040>>09422000
         TOS := STOPIMPEDE;                                    <<F2040>>09422100
         ASSEMBLE (SSEA;DDEL);                                 <<F2040>>09422200
                                                                        09422300
!     SETUP TO ISSUE "PROGRAM ABORTED PER USER REQUEST"        <<P9954>>09441100
!     -------------------------------------------------        <<P9954>>09441200
$EDIT                                                          <<01036>>09530000
$PAGE "PROCEDURE BREAKJOB"                                     <<01036>>09531000
COMMENT                                                        <<01036>>09556100
**BEGIN_IS*****************************************************<<01036>>09556200
*                                                             *<<01036>>09556300
* PROCEDURE BREAKJOB(LDEV,BRKFLAG,MAINPIN,CY'PIN)             *<<01036>>09556400
*                                                             *<<01036>>09556500
*           BREAKJOB IS A PROCEDURE CALLED TO PASS ALONG      *<<01036>>09556600
*           INFORMATION ABOUT A BREAK, CONTROL-Y OR DS        *<<01036>>09556700
*           CONTROL-Y HAPPENING.  IF A BREAK HAS HAPPENED,    *<<01036>>09556800
*           THEN SEND A PSEUDO INTERRUPT (PI) TO ALL SONS TO  *<<01036>>09556900
*           HYBERNATE AND INFORM THE PROCESS SPECIFIED IN     *<<01036>>09557000
*           THE MAIN PIN PARAMETER THAT A BREAK HAS HAPPENED. *<<01036>>09557100
*           IF A CONTROL-Y HAS HAPPENED, THEN SEND A CONTROL- *<<01036>>09557200
*           Y PSEUDO INTERRUPT.  IF A DS CONTROL-Y HAS        *<<01036>>09557300
*           HAPPENED THEN CALL DSBRK, IF PRESENT AND RETURN   *<<01036>>09557400
*           CONDITION CODE STATUS.  IT IS ASSUMED THAT THE    *<<01036>>09557500
*           CALLER WILL CHECK THAT THE LDEV BELONGS TO A      *<<01036>>09557600
*           SESSION.                                          *<<01036>>09557700
*                                                             *<<01036>>09557800
*           START BY IDENTIFYING WHETHER OR NOT THIS IS A DS  *<<01036>>09557900
*           CONTROL-Y.  IT IS IF THE CY'PIN PARAMETER =0      *<<01036>>09558000
*           (NO CONTROL-Y PIN [PROCESS ID NUMBER]) AND THE    *<<01036>>09558100
*           BRKFLAG PARAMETER IS FALSE (INDICATING A CONTROL- *<<01036>>09558200
*           Y PSEUDO INTERRUPT).  THEN DO A VALIDITY CHECK ON *<<01036>>09558300
*           ALL THE PARAMETERS.  IF THE MAINPIN PARAMETER IS  *<<01036>>09558400
*           OUT OF BOUNDS OF VALID PCB'S, THEN CALL PEXIT TO  *<<01036>>09558500
*           TO RETURN BAD STATUS.  IF THE CY'PIN CONTAINS A   *<<01036>>09558600
*           PIN THAT IS OUT OF BOUNDS OF VALID PINS, THEN     *<<01036>>09558700
*           CALL PEXIT.  IF THE BRKFLAG PARAMETER HAS         *<<01036>>09558800
*           EXTRANEOUS BITS, THEN CALL PEXIT.  IF THE MAINPIN *<<01036>>09558900
*           PARAMETER HAS A PIN THAT IS NOT ALIVE, THEN CALL  *<<01036>>09559000
*           PEXIT.  AND IF THE PIN IN PARAMETER CY'PIN IS     *<<01036>>09559100
*           VALID BUT NOT ALIVE, THEN CALL PEXIT.             *<<01036>>09559200
*                                                             *<<01036>>09559300
*           IF THIS IS NOT A DS CONTROL-Y REQUEST, THEN       *<<01036>>09559400
*           PROCESS THE BREAK OR CONTROL-Y PSEUDO INTERRUPT,  *<<01036>>09559500
*           DISABLE INTERRUPTS AND IF THIS IS NOT A BREAK     *<<01036>>09559600
*           (CONTROL-Y), THEN FLAG IN THE LOGICAL-TO-PHYSICAL *<<01036>>09559700
*           DEVICE TABLE (LPDT) THAT A CONTROL-Y HAS          *<<01036>>09559800
*           HAPPENED.  IF THIS IS A BREAK, THEN MAKE SURE     *<<01036>>09559900
*           THAT THE PIN IN PARAMETER MAINPIN IS INTERACTIVE, *<<01036>>09560000
*           IN A NON-CRITICAL WAIT OR NOT IN UCOP/SON WAIT,   *<<01036>>09560100
*           THEN FLAG IN THE LPDT THAT A BREAK OCCURRED.  IF  *<<01036>>09560200
*           THE PIN IN PARAMETER MAINPIN IS NOT INTERACTIVE,  *<<01036>>09560300
*           THEN CALL PEXIT TO PASS BACK BAD STATUS.  ENABLE  *<<01036>>09560400
*           INTERRUPTS AND IF THE MAIN PIN WAS IN UCOP & SON  *<<01036>>09560500
*           WAIT (AND NOT WAITING ON ANY OTHER NON-CRITICAL   *<<01036>>09560600
*           EVENTS) THEN CONTINUE PROCESSING BREAK OR         *<<01036>>09560700
*           CONTROL-Y AS FOLLOWS:  IF A BREAK HAS OCCURRED,   *<<01036>>09560800
*           THEN SET THE HYBERNATE PSEUDO INTERRUPT ON ALL    *<<01036>>09560900
*           SONS AND SET THE BREAK PSEUDO INTERRUPT FOR THE   *<<01036>>09561000
*           MAIN PIN.  THEN MOVE THE RIT/BREAK BIT OT HE PCB  *<<01036>>09561100
*           FLAGWORD AND THE MAIN PIN WITH EITHER A RIT OR    *<<01036>>09561200
*           SON EVENT FLAG.  IF A CONTROL-Y HAS HAPPENED,     *<<01036>>09561300
*           THEN SET THE PIN THE THE CY'PIN PARAMETER WITH A  *<<01036>>09561400
*           CONTROL-Y PSEUDO INTERRUPT.                       *<<01036>>09561500
*                                                             *<<01036>>09561600
*           IF THIS IS A DS CONTROL-Y, THEN CALL PROCEDURE    *<<01036>>09561700
*           DSBRK IF AVAILABLE AND PASS BACK GOOD CONDITION   *<<01036>>09561800
*           CODE STATUS AND RETURN.                           *<<01036>>09561900
*                                                             *<<01036>>09562000
* PURPOSE:  BREAKJOB IS A PROCEDURE CALLED TO PASS ALONG      *<<01036>>09562100
*                                                             *<<01036>>09562200
* ENTRY:    LDEV   =LOGICAL DEVICE NUMBER TO RECEIVE BREAK    *<<01036>>09562300
*                   OR CONTROL-Y                              *<<01036>>09562400
*                                                             *<<01036>>09562500
*           BRKFLG = BIT  0=RESERVED FOR DS USE               *<<01036>>09562600
*                    BIT 15=0 IF CONTROL-Y WAS RECEIVED       *<<01036>>09562700
*                    BIT 15=1 IF BREAK WAS RECEIVED           *<<01036>>09562800
*                                                             *<<01036>>09562900
*           MAINPIN=FATHER PIN TO RECEIVE BREAK               *<<01036>>09563000
*                                                             *<<01036>>09563100
*           CY'PIN =PIN THAT RECEIVED CONTROL-Y               *<<01036>>09563200
*                  =0 IF TO PROCESS DS CONTROL-Y              *<<01036>>09563300
*                                                             *<<01036>>09563400
* EXIT:     CONDITION CODE=CCE IF NO ERRORS                   *<<01036>>09563500
*                          CCL IF MAIN PIN NOT WAITING FOR    *<<01036>>09563600
*                              SON DURING BREAK,              *<<01036>>09563700
*                              CONTROL-Y PIN IS NOT ALIVE     *<<01036>>09563800
*                              OR MAINPIN HAS PIN WHICH IS    *<<01036>>09563900
*                              NOT INTERACTIVE.               *<<01036>>09564000
*                          CCG INVALID OR CONFLICTING         *<<01036>>09564100
*                              PARAMETER VALUES               *<<01036>>09564200
*                                                             *<<01036>>09564300
**END_IS*******************************************************<<01036>>09564400
;                                                              <<01036>>09564500
$EDIT VOID=09700000                                            <<01036>>09570000
COMMENT                                                        <<01036>>09860100
..BEGIN_IS.....................................................<<01036>>09860200
.                                                             .<<01036>>09860300
. SUBROUTINE PEXIT(CONDITION'CODE,PSEUDO'ENABLE)              .<<01036>>09860400
.                                                             .<<01036>>09860500
. PURPOSE:   PEXIT IS A LOCAL SUBROUTINE CALLED BY BREAKJOB   .<<01036>>09860600
.            TO PASS BACK TO THE CALLER THE CONDITION CODE    .<<01036>>09860700
.            AND ENABLE (ALLOW ANY PENDING DSP CALLS TO BE    .<<01036>>09860800
.            RECOGNIZED) THE DISPATCHER BEFORE EXITING.       .<<01036>>09860900
.                                                             .<<01036>>09861000
.            BEGIN BY SETTING THE CONDITION CODE IN THE       .<<01036>>09861100
.            STATUS WORD OF THE CALLING PROCESS' STACK MARKER .<<01036>>09861200
.            WITH THE VALUE IN THE PARAMETER CONDITION'CODE.  .<<01036>>09861300
.            THEN IF PARAMETER PSEUDO'ENABLE IS TRUE, THEN    .<<01036>>09861400
.            ENABLE THE DISPATCHER.  FINALLY BUILD AN EXIT    .<<01036>>09861500
.            INSTRUCTION AND EXECUTE IT TO RETURN TO THE      .<<01036>>09861600
.            CALLER.                                          .<<01036>>09861700
.                                                             .<<01036>>09861800
. EXIT:      CONDITION'CODE=CONDITION CODE VALUE TO BE PUT    .<<01036>>09861900
.                           INTO CALLER'S STATUS WORD         .<<01036>>09862000
.                                                             .<<01036>>09862100
.            PSEUDO'ENABLE =TRUE IF TO ENABLE DISPATCHER      .<<01036>>09862200
.                                                             .<<01036>>09862300
..END_IS.......................................................<<01036>>09862400
;                                                              <<01036>>09862500
$EDIT                                                          <<01036>>09870000
                                                               <<01036>>09896000
$EDIT                                                          <<01036>>09920000
$PAGE "PROCEDURE BREAKJOB"                                     <<01036>>09921100
COMMENT*****                                                   <<01036>>09921200
* MAINLINE *                                                   <<01036>>09921300
***********;                                                   <<01036>>09921400
                                                               <<01036>>09921500
!  IDENTIFY WHETHER OR NOT THIS IS A DS CONTROL-Y              <<01036>>09922000
!  ----------------------------------------------              <<01036>>09923000
$EDIT                                                          <<01036>>09925000
                                                               <<01036>>09936100
COMMENT************************                                <<01036>>09936200
* DO PARAMETER VALIDITY CHECK *                                <<01036>>09936300
******************************;                                <<01036>>09936400
                                                               <<01036>>09936500
!  ERROR EXIT IF PIN=0 OR PIN IS OUT-OF-RANGE                  <<01036>>09936600
!  ------------------------------------------                  <<01036>>09936700
$EDIT                                                          <<01036>>09940000
!  ERROR EXIT IF CONTROL-Y & PIN=0 OR PIN OUT-OF-RANGE         <<01036>>09956000
!  ---------------------------------------------------         <<01036>>09957000
!  ERROR EXIT IF PARAMETER BRKFLAG HAS EXTRANEOUS BITS         <<01036>>09981000
!  ---------------------------------------------------         <<01036>>09982000
$EDIT                                                          <<01036>>10000000
                                                               <<01036>>10001000
!  ERROR EXIT IF PROCESS SPECIFIED BY MAINPIN IS NOT ALIVE     <<01036>>10002000
!  -------------------------------------------------------     <<01036>>10003000
                                                               <<01036>>10011000
!  ERROR EXIT IF CONTROL-Y AND PIN IS NOT ALIVE                <<01036>>10012000
!  --------------------------------------------                <<01036>>10013000
                                                               <<01036>>10031000
COMMENT************************************************        <<01036>>10032000
* IF NOT DS CONTROL-Y, PROCESS THE BREAK OR CONTROL-Y *        <<01036>>10033000
******************************************************;        <<01036>>10034000
                                                               <<01036>>10041000
!  IF CONTROL-Y, THEN FLAG IN LPDT THAT CONTROL-Y HAPPENED     <<01036>>10042000
!  -------------------------------------------------------     <<01036>>10043000
$EDIT VOID=10125000                                            <<01036>>10080000
                                                               <<01036>>10081000
!  PROCESS BREAK ONLY IF MAINPIN IS VALID                      <<01036>>10082000
!  --------------------------------------                      <<01036>>10083000
   ELSE IF PCB(MAINPIN+QUEUEINGINFOWORDNUM).INTERACTIVEFLAG<>0 <<01036>>10084000
      THEN                                                     <<01036>>10085000
                                                               <<01036>>10086000
!     IF MAINPIN, IN NON-CRITICAL WAIT OR <> UCOP/SON, THEN    <<01036>>10087000
!     -----------------------------------------------------    <<01036>>10088000
      BEGIN                                                    <<01036>>10089000
      IF (PCB(MAINPIN+WAKEMASKWORDNUM) LAND UCOPSONWAIT)=0 OR  <<01036>>10090000
         (PCB(MAINPIN+WAKEMASKWORDNUM) LAND UCPSNOTHR)<>0 THEN <<01036>>10091000
                                                               <<01036>>10092000
!        FLAG BREAK HAPPENED IN LPDT & DISABLE BREAK           <<01036>>10093000
!        -------------------------------------------           <<01036>>10094000
         BEGIN                                                 <<01036>>10095000
         LPDTSTATE.BREAKFLAG:=1;                               <<01036>>10096000
         IF = THEN CC:=CCE;                                    <<01036>>10097000
         LPDT(LDEV*LPDT'ENTRYSIZE+LPDTSTATEWORDNUM):=          <<01036>>10098000
            LPDTSTATE;                                         <<01036>>10099000
         REFUSE'BREAK:=TRUE;                                   <<01036>>10100000
         END;                                                  <<01036>>10101000
      END                                                      <<01036>>10102000
                                                               <<01036>>10103000
!     IF INVALID MAINPIN, PASS BACK BAD STATUS & RETURN        <<01036>>10104000
!     -------------------------------------------------        <<01036>>10105000
      ELSE PEXIT(CCL,TRUE);                                    <<01036>>10106000
                                                               <<01036>>10126000
                                                               <<01036>>10146000
!     IF BREAK, HIBERNATE ALL SONS & TELL MAIN PIN OF BREAK    <<01036>>10147000
!     -----------------------------------------------------    <<01036>>10148000
                                                               <<01036>>10206000
!        MOVE RIT/BREAK BIT TO PCB FLAGWORD                    <<01036>>10207000
!        ----------------------------------                    <<01036>>10208000
                                                               <<01036>>10226000
!        AWAKEN MAIN PIN WITH RIT OR SON EVENT                 <<01036>>10227000
!        -------------------------------------                 <<01036>>10228000
                                                               <<01036>>10251000
!     IF CONTROL-Y, AWAKEN CY'PIN WITH CONTROL-Y PI            <<01036>>10252000
!     ---------------------------------------------            <<01036>>10253000
                                                               <<01036>>10271000
COMMENT*********************************************           <<01036>>10272000
* IF DS CONTROL-Y, CALL DSBRK AND RETURN CC STATUS *           <<01036>>10273000
***************************************************;           <<01036>>10274000
$EDIT                                                          <<01036>>10275000
$EDIT VOID=10340000                                            <<01036>>10335000
$EDIT                                                          <<01036>>10350000
$PAGE "PROCEDURE CAUSEBREAK"                                   <<01036>>10351000
$EDIT                                                          <<01036>>10625000
$PAGE "PROCEDURE CLOCK"                                        <<01036>>10626000
DEFINE GLOBAL'STOPMAIL =                                       <<F2040>>12135100
   IF CLASS0STATSENABLED THEN                                  <<F2040>>12135200
   BEGIN                                                       <<F2040>>12135300
      TOS := MEASSTATXDSBANK;                                  <<F2040>>12135400
      TOS := MEASSTATXDSBASE + C0SUB0'SEGRELOFF +              <<F2040>>12135500
             C'STOPFORMAIL;                                    <<F2040>>12135600
      ASSEMBLE (LSEA;INCA;SSEA;DDEL);                          <<F2040>>12135700
   END;  #,                                                    <<F2040>>12135800
       PROCESS'STOPMAIL =                                      <<F2040>>12135810
   IF GCLASSENABLEDMASK.CLASS15 THEN                           <<F2040>>12135900
   BEGIN                                                       <<F2040>>12136000
      TOS := MEASPROCXDSBANK;                                  <<F2040>>12136100
      TOS := MEASPROCXDSBASE + (CURPRC / PCBSIZE) *            <<F2040>>12136200
             CLASS15'SUB0SIZE + CP'STOPIMPEDE;                 <<F2040>>12136300
      ASSEMBLE (LSEA;INCA;SSEA;DDEL);                          <<F2040>>12136400
   END;                                                        <<F2040>>12136500
   TOS := ICS (- ICS'STKBANKCELL);                             <<F2040>>12136600
   TOS := ICS (- ICS'STKBASECELL) + PXGLOBSIZE +               <<F2040>>12136700
          MEASSTOPREASON'IDX;                                  <<F2040>>12136800
   TOS := STOPIMPEDE;                                          <<F2040>>12136900
   ASSEMBLE (SSEA;DDEL); #;                                    <<F2040>>12137000
                                                               <<F2040>>12137100
                                                                        12137300
               BEGIN GLOBAL'STOPMAIL;                          <<F2040>>12180000
                     PROCESS'STOPMAIL;                         <<F2040>>12180100
                     WAIT (BLOKWAIT, 0);                       <<F2040>>12180200
DEFINE GLOBAL'STOPMAIL =                                       <<F2040>>12350100
   IF CLASS0STATSENABLED THEN                                  <<F2040>>12350200
   BEGIN                                                       <<F2040>>12350300
      TOS := MEASSTATXDSBANK;                                  <<F2040>>12350400
      TOS := MEASSTATXDSBASE + C0SUB0'SEGRELOFF +              <<F2040>>12350500
             C'STOPFORMAIL;                                    <<F2040>>12350600
      ASSEMBLE (LSEA;INCA;SSEA;DDEL);                          <<F2040>>12350700
   END;  #,                                                    <<F2040>>12350800
      PROCESS'STOPMAIL  =                                      <<F2040>>12350810
   IF GCLASSENABLEDMASK.CLASS15 THEN                           <<F2040>>12350900
   BEGIN                                                       <<F2040>>12351000
      TOS := MEASPROCXDSBANK;                                  <<F2040>>12351100
      TOS := MEASPROCXDSBASE + (CURPRC / PCBSIZE) *            <<F2040>>12351200
             CLASS15'SUB0SIZE + CP'STOPIMPEDE;                 <<F2040>>12351300
      ASSEMBLE (LSEA;INCA;SSEA;DDEL);                          <<F2040>>12351400
   END;                                                        <<F2040>>12351500
   TOS := ICS (-ICS'STKBANKCELL);                              <<F2040>>12351600
   TOS := ICS (-ICS'STKBASECELL) + PXGLOBSIZE +                <<F2040>>12351700
          MEASSTOPREASON'IDX;                                  <<F2040>>12351800
   TOS := STOPIMPEDE;                                          <<F2040>>12351900
   ASSEMBLE (SSEA;DDEL);  #;                                   <<F2040>>12352000
                                                                        12352200
          IF SOFTKILL THEN ENAPROC                             <<F2040>>12570000
             ELSE                                              <<F2040>>12570100
             BEGIN                                             <<F2040>>12570200
                GLOBAL'STOPMAIL;                               <<F2040>>12570300
                PROCESS'STOPMAIL;                              <<F2040>>12570400
                WAIT (MAILWAIT, 0);                            <<F2040>>12570500
             END;                                              <<F2040>>12570600
          SETMAILINFO(0D,PCBNUM);                              <<M1289>>12846000
          IF TOS < 2 THEN DEL ELSE RELDATASEG(*);              <<01035>>12855000
$EDIT                                                          <<M1289>>12860000
$EDIT                                                          <<M1289>>13131000
          ABORTMAILINFO(PCBNUM);                               <<M1289>>13146000
