<< LINES .001/.009 ARE RESERVED FOR SYSTEMS INTEGRATION>>               00000001
                                                               <<06738>>00036001
$INCLUDE INCLSIR                                               <<06738>>00036002
DEFINE                                                         <<06647>>00036010
   OWNER = RESOURCE(0)#,                                       <<06647>>00036020
   HEAD  = RESOURCE(1)#,                                       <<06647>>00036030
   TAIL  = RESOURCE(2)#,                                       <<06647>>00036040
   QLEN  = RESOURCE(3)#;                                       <<06647>>00036050
$INCLUDE INCLPCB5                                              <<06647>>00036100
INTEGER S0 = S-0;                                              <<06665>>00043000
       MYPINNUMBER=(CURPRC)/PCBSIZE#;                          <<06647>>00050000
$EDIT VOID = 00058000                                          <<06647>>00054000
DEFINE                                                         <<07315>>00060100
   PDISABLE  = ASSEMBLE(PSDB)#,                                <<*7556>>00060110
   PENABLE   = ASSEMBLE(PSEB)#,                                <<*7556>>00060120
   DISABLE   = ASSEMBLE(SED 0)#,                               <<07315>>00060200
   ENABLE    = ASSEMBLE(SED 1)#;                               <<07315>>00060300
                                                               <<07315>>00060400
DEFINE LOGICALMAPPING = LOGICAL(ABSOLUTE(%1220))#;             <<06101>>00068200
                                                               <<06101>>00068400
EQUATE DSTIX=2;                                                <<06101>>00068600
INTEGER POINTER DST=DSTIX;                                     <<06101>>00068800
$EDIT                                                          <<06647>>00070000
$INCLUDE PCBFINCL                                              <<06665>>00070100
$INCLUDE INCLPXG                                               <<06665>>00070200
INTEGER PROCEDURE CSTCONV(PLABEL,PCBPT);                       <<06101>>00178100
   VALUE PLABEL,PCBPT;                                         <<06101>>00178200
   INTEGER PLABEL,PCBPT;                                       <<06101>>00178300
   OPTION EXTERNAL;                                            <<06101>>00178310
                                                               <<06101>>00178400
LOGICAL PROCEDURE SYSTEM(CSTN);                                <<06101>>00178500
   VALUE CSTN;                                                 <<06101>>00178600
   INTEGER CSTN;                                               <<06101>>00178700
   OPTION EXTERNAL;                                            <<06101>>00178800
$EDIT VOID=00202000                                            <<06665>>00202000
      ARRAY QARRAY(*)=Q+0;                                     <<06665>>00206000
      LOGICAL PXFIXEDLOC;                                      <<06665>>00207000
      PXFIXED;                                                 <<06665>>00213000
$EDIT VOID=00222000                                            <<06665>>00214000
      TOS:=PXFXPCPUTIME1;                                      <<06665>>00225000
      TOS:=PXFXPCPUTIME2;                                      <<06665>>00225100
$EDIT VOID=00228000                                            <<06665>>00226000
$EDIT VOID=00276000                                            <<06665>>00276000
          INTEGER PCBPT;                                       <<06647>>00286100
          ARRAY QARRAY(*)=Q+0;                                 <<06665>>00290000
          LOGICAL PXFIXEDLOC;                                  <<06665>>00291000
          LOGICAL INDEX;                                       <<06665>>00294000
          PCBPT := CURPRC;                                     <<06647>>00296100
          IF ABSOLUTE(%1430).(2:1) THEN HELP;                  <<06647>>00296200
          IF PROCSTATE.SYSTEMPROCFLAG THEN RETURN;             <<06647>>00302000
          PXFIXED;                                             <<06665>>00303000
$EDIT VOID=00310000                                            <<06665>>00304000
          TOS:=PXFXERRLEVEL;                                   <<06665>>00312000
          IF = THEN STKINFO.INSYSTEMFLAG := 1;                 <<06739>>00314000
$EDIT VOID=00316000                                            <<06665>>00316000
$EDIT VOID=00318000                                            <<06665>>00318000
$EDIT VOID=00320000                                            <<06665>>00320000
$EDIT VOID=00322000                                            <<06665>>00322000
          PXFXERRLEVEL:=TOS;                                   <<06665>>00328000
          INDEX:=TOS;                                          <<06665>>00330000
               BEGIN PXFXINTRERR:=0;                           <<06665>>00338000
                     INDEX:=INDEX+1;                           <<06665>>00340000
          PXFXINTRERR:=0;                                      <<06665>>00344000
$EDIT VOID=00386000                                            <<06665>>00386000
          ARRAY QARRAY(*)=Q+0;                                 <<06665>>00394000
          LOGICAL PXFIXEDLOC;                                  <<06665>>00394100
          LOGICAL INDEX;                                       <<06665>>00395000
          INTEGER PCBPT;                                       <<06647>>00395100
$EDIT VOID=00396000                                            <<06665>>00396000
          PCBPT := CURPRC;                                     <<06647>>00398100
          IF PROCSTATE.SYSTEMPROCFLAG THEN RETURN;             <<06647>>00400000
          PXFIXED;                                             <<06665>>00409000
$EDIT VOID=00416000                                            <<06665>>00410000
          TOS:=PXFXERRLEVEL+LOGICAL(L);                        <<06665>>00418000
          INDEX:=TOS;                                          <<06665>>00430000
          TOS:=PXFXINTRERR;                                    <<L7554>>00431000
$EDIT VOID=00432000                                            <<06665>>00432000
  FIN:    ERRORGET:=TOS;                                       <<L7554>>00434000
$EDIT VOID=00474000                                            <<06665>>00474000
          ARRAY QARRAY(*)=Q+0;                                 <<06665>>00482000
          INTEGER PCBPT;                                       <<06647>>00482100
          LOGICAL PXFIXEDLOC;                                  <<06665>>00483000
          LOGICAL INDEX;                                       <<06665>>00484000
          PCBPT := CURPRC;                                     <<06647>>00486100
          IF PROCSTATE.SYSTEMPROCFLAG THEN RETURN;             <<06647>>00488000
$EDIT VOID=00490000                                            <<06665>>00490000
          PXFIXED;                                             <<06665>>00490500
          INDEX:=LOGICAL(L)+PXFXERRLEVEL;                      <<06665>>00491000
$EDIT VOID=00508000                                            <<06665>>00492000
          IF NOT(1<=INTEGER(INDEX)<=6) THEN RETURN;            <<*7556>>00509000
          PXFXINTRERR:=ERRWORD;                                <<06665>>00509100
$EDIT VOID=00586000                                            <<06665>>00586000
          ARRAY QARRAY(*)=Q+0;                                 <<06665>>00608000
          LOGICAL PXFIXEDLOC;                                  <<06665>>00609000
          LOGICAL INDEX;                                       <<06665>>00609100
          INTEGER PCBPT;                                       <<06647>>00610100
$EDIT VOID=00614000                                            <<06665>>00614000
          PCBPT := CURPRC;                                     <<06647>>00616100
          IF ABSOLUTE(%1430).(0:1) THEN HELP;                  <<06647>>00616200
          IF PROCSTATE.SYSTEMPROCFLAG THEN GOTO CONT;          <<06647>>00618000
          PXFIXED;                                             <<06665>>00619000
$EDIT VOID=00626000                                            <<06665>>00620000
          TOS:=PXFXERRLEVEL;            <<DECR ERROR LEVEL>>   <<06665>>00628000
                     INDEX:=0;                                 <<06665>>00634000
$EDIT VOID=00636000                                            <<06665>>00634001
                     PXFXINTRERR:=0;                           <<06665>>00635000
                     INDEX:=1;                                 <<06665>>00636000
                     PXFXINTRERR:=0;                           <<06665>>00637000
$EDIT VOID=00638000                                            <<06665>>00638000
          PXFXERRLEVEL:=TOS;                                   <<06665>>00646000
$EDIT VOID=00652000                                            <<06665>>00652000
          STKINFO.INSYSTEMFLAG := 0;                           <<06647>>00654000
          IF PROCSTATE.STOVFLAG                                <<06647>>00658000
$EDIT                                                          <<06647>>00660000
             DISABLE;                                          <<07315>>00678100
             PROCSTATE.STOVFLAG := 0; << Must turn this off!!>><<07315>>00678200
             RESABORTINFO.STOVABORTFLAG := 1;                  <<06647>>00680000
             ENABLE;                                           <<07315>>00681000
$EDIT                                                          <<06647>>00682000
$EDIT VOID=00688000                                            <<06665>>00688000
          INDEX:=TOS+1;                                        <<06665>>00706000
          PXFXINTRERR:=TOS;            <<PUT ERROR WORD>>      <<06665>>00708000
   ARRAY QARRAY(*) = Q+0;                                      <<06665>>00811000
   LOGICAL PXFIXEDLOC;                                         <<06665>>00811100
   INTEGER PCBGLOBLOC;                                         <<06665>>00811200
$EDIT VOID=00858000                                            <<06665>>00858000
$EDIT VOID=00860000                                            <<06665>>00860000
$EDIT VOID=00862000                                            <<06665>>00862000
   INTEGER PCBPT;                                              <<06647>>00882100
   PCBPT := CURPRC;                                            <<06647>>00952100
   IF ABSOLUTE(%1430).(1:1) THEN HELP;                         <<06647>>00952200
   TOS:=0; <<RESERVE FOR VALUE RETURNED FROM SYSTEM>>          <<06101>>00954000
   TOS:=LQ1ARR(-DELTAQ).(8:8);                                 <<06101>>00955000
   TOS.(0:1):=IF LOGICALMAPPING THEN Q2ARR(-DELTAQ).(1:1)      <<06101>>00956000
                                ELSE 1;                        <<06101>>00957000
   TOS:=SYSTEM(*);                                             <<06101>>00958000
   XREG := DBXDSINFO.XDSDSTFIELD&ASL(2);                       <<06647>>00960000
      PXGLOBAL;                                                <<06665>>01053000
$EDIT VOID=01058000                                            <<06665>>01054000
      TOS := PXG'USERATTRIBUTES LAND CAP1;                     <<06665>>01060000
   PXFIXED;                                                    <<06665>>01061000
$EDIT VOID=01062000                                            <<06665>>01062000
      TOS := PXFXCAP LAND CAP2;                                <<06665>>01064000
$EDIT                                                          <<07315>>01308000
      INTEGER DELTAP = Q-2;                                    <<06101>>01425000
$EDIT VOID=01444000                                            <<06101>>01430000
      TOS:=0;<<FOR CSTCONV RETURNED VALUE>>                             01431000
      TOS:=STATUS;                                             <<06101>>01432000
      IF LOGICALMAPPING THEN TOS.(0:1):=DELTAP.(1:1);          <<06101>>01433000
      X:=CSTCONV(*,0);                                         <<06101>>01434000
      TOS:=DST(X);                                             <<06101>>01435000
      EQUATE  CPCB=4;                                          <<06665>>01516000
      ARRAY QARRAY(*)=Q+0;                                     <<06665>>01524000
      LOGICAL PXFIXEDLOC;                                      <<06665>>01525000
      INTEGER PCBPT;                                           <<06647>>01528100
$EDIT                                                          <<06647>>01544000
$EDIT VOID=01548000                                            <<06665>>01546000
$EDIT VOID=01550000                                            <<06665>>01550000
      DEFINE PENDCTLY=PIINFO.PSIMFIELD=5#;                     <<06647>>01556000
      PCBPT := CURPRC;                                         <<06647>>01560100
         INITQ:=PXFXQREG;                                      <<06665>>01584000
         WHILE STACKMARKER(PLOC).(0:1) <> 1 AND                <<06101>>01594000
            STACKMARKER(PLOC).(0:1) := 0;                      <<06101>>01616000
            P.(0:1) := 1;                                      <<06101>>01618000
$EDIT VOID=01672000                                            <<06665>>01654000
      ARRAY QARRAY(*) = Q+0;                                   <<06665>>01672000
      INTEGER PCBGLOBLOC;                                      <<06665>>01672100
      PXGLOBAL;                                                <<06665>>01673000
      JPCOUNTX:=PXG'JPCNTINX;                                  <<06665>>01674000
      LOCKJIR:=GETSIR(JPCOUNTX+FIRST'JOBSIR);                  <<06738>>01708000
      RELSIR(JPCOUNTX+FIRST'JOBSIR,A);                         <<06738>>01734000
Comment                                                        <<06647>>01752000
   The following procedure adds in PROCNO to the queue of      <<06647>>01753000
processes waiting on a certain resource. This queue is laced   <<06647>>01754000
thru the PCB's previous impeded and next impeded pin, words.   <<06647>>01755000
As a standard matter all PINS are specified as PCB relative    <<06647>>01756000
indexes ( i. e. PIN * PCBSIZE ). This is valid for the nature  <<06647>>01757000
of the PROCNO parameter as well as the fields in the PCB       <<06647>>01758000
itself. The RESOURCE parameter has to be at least 4 words in   <<06647>>01759000
size. The general format of the RESOURCE array is as follows:  <<06647>>01760000
                                                               <<06647>>01761000
   +------------------------------------+                      <<06647>>01762000
   !        OWNER PCB INDEX             !                      <<06647>>01763000
   !------------------------------------!                      <<06647>>01764000
   !        HEAD PCB INDEX              !                      <<06647>>01765000
   !------------------------------------!                      <<06647>>01766000
   !        TAIL PCB INDEX              !                      <<06647>>01767000
   !------------------------------------!                      <<06647>>01768000
   !        QUEUE LENGTH                !                      <<06647>>01769000
   +------------------------------------+                      <<06647>>01770000
                                                               <<06647>>01771000
;                                                              <<06647>>01772000
$EDIT VOID = 01798000                                          <<06647>>01773000
$EDIT VOID = 01806000                                          <<06647>>01802000
LOGICAL                                                        <<06647>>01806100
   PCBPT;                                                      <<06647>>01806200
IF HEAD = 0 AND TAIL = 0 THEN                                  <<06647>>01808000
   BEGIN                                                       <<06647>>01809000
   HEAD := TAIL := PROCNO;                                     <<06740>>01810000
   QLEN := 0;                                                  <<06647>>01811000
   END                                                         <<06647>>01812000
ELSE                                                           <<06647>>01813000
   BEGIN                                                       <<06647>>01814000
   PCBPT := TAIL;                                              <<06647>>01815000
   NIMPPIN := PROCNO;                                          <<06647>>01816000
   PCBPT := PROCNO;                                            <<07315>>01816100
   PIMPPIN := TAIL;                                            <<07315>>01816200
   TAIL := PROCNO;                                             <<06647>>01817000
$EDIT VOID=01819000                                            <<06740>>01818000
   END;                                                        <<06647>>01820000
PCBPT := PROCNO;                                               <<06740>>01820100
NIMPPIN := 0;                                                  <<06740>>01820200
$EDIT VOID = 01851000                                          <<06647>>01821000
INTEGER                                                        <<06647>>01886000
   NEWPIX;                                                     <<06647>>01887000
LOGICAL                                                        <<06647>>01887100
   PCBPT;                                                      <<06647>>01887200
$EDIT                                                          <<06647>>01888000
$EDIT                                                          <<06647>>01894000
IF HEAD = 0 THEN                                               <<06647>>01896000
   RETURN;                                                     <<06647>>01897000
NEWPIX := DQPROC := HEAD;                                      <<06647>>01898000
PCBPT := HEAD;                                                 <<06647>>01899000
IF NIMPPIN = 0 THEN                                            <<06647>>01900000
   BEGIN                                                       <<06647>>01901000
   HEAD := 0;                                                  <<06740>>01902000
   TAIL := 0;                                                  <<06740>>01903000
   END                                                         <<06647>>01904000
ELSE                                                           <<06647>>01905000
   BEGIN                                                       <<06647>>01906000
   HEAD := NIMPPIN;                                            <<06647>>01907000
   PCBPT := HEAD;                                              <<07315>>01907100
   PIMPPIN := 0;                                               <<07315>>01907200
   END;                                                        <<06647>>01908000
PCBPT := NEWPIX;                                               <<06647>>01909000
NIMPPIN := 0;                                                  <<06647>>01910000
$EDIT VOID = 01926000                                          <<06647>>01911000
PROCEDURE RELEASE(RESOURCE,ALTRES,WAKEUP);                     <<06647>>01932000
VALUE RESOURCE,ALTRES,WAKEUP;                                  <<06647>>01934000
LOGICAL WAKEUP;                                                <<06647>>01936000
LOGICAL POINTER RESOURCE,ALTRES;                               <<06647>>01938000
$EDIT                                                          <<06647>>02018000
LOGICAL                                                        <<06647>>02019000
   PCBPT;                                                      <<06647>>02020000
       IGNORE=-1,                                              <<*7556>>02024000
       DUMMYPIN = 1;                                           <<*7556>>02025000
PDISABLE;                                                      <<*7556>>02034000
                                                               <<*7556>>02035000
                                                               <<*7556>>02035010
IF OWNER <> DUMMYPIN THEN                                      <<*7556>>02035020
   BEGIN                                                       <<*7556>>02035030
   IF OWNER <> CURPRC THEN                                     <<*7556>>02035100
      BEGIN   << Can't release it unless we own it! >>         <<*7556>>02035200
      PENABLE;                                                 <<*7556>>02035300
      RETURN;                                                  <<*7556>>02035400
      END;                                                     <<*7556>>02035500
   END;                                                        <<*7556>>02035510
                                                               <<*7556>>02035600
OWNER := 0;                                                    <<06647>>02036000
IF HEAD <> 0 AND TAIL <> 0 THEN                                <<06740>>02044000
     OWNER := DQPROC(RESOURCE);                                <<06647>>02052000
     IF @ALTRES<>IGNORE THEN QPROC(ALTRES,OWNER)               <<06647>>02056000
                        ELSE UNIMPEDE(OWNER);                  <<06647>>02058000
UNTIL WAKEUP OR (HEAD = 0 LAND TAIL = 0);                      <<06740>>02064000
PENABLE;                                                       <<*7556>>02066000
INTEGER PROCEDURE OBTAIN(RESOURCE,ALTRES);                     <<06647>>02072000
VALUE RESOURCE,ALTRES;                                         <<06647>>02074000
LOGICAL POINTER RESOURCE,ALTRES;                               <<06647>>02076000
$EDIT VOID = 02130000                                          <<06647>>02122000
$EDIT                                                          <<06647>>02166000
LOGICAL                                                        <<06647>>02167000
   PCBPT;                                                      <<06647>>02168000
       DUMMYPIN = 1,                                           <<07315>>02172000
INTEGER                                                        <<06647>>02178000
   PIX = OBTAIN;                                               <<06647>>02179000
PIX := (CURPRC)/PCBSIZE;                                       <<06647>>02190000
PDISABLE;                                                      <<*7556>>02198000
IF OWNER = 0 THEN                                              <<06647>>02200000
   OWNER := CURPRC;                                            <<*7556>>02210000
   PENABLE;                                                    <<*7556>>02212000
   END                                                         <<*7556>>02216000
ELSE                                                           <<*7556>>02217000
   IF OWNER = CURPRC THEN                                      <<*7556>>02217100
     BEGIN    << Opps...already own it! >>                     <<*7556>>02217200
     PENABLE;                                                  <<*7556>>02217300
     RETURN;                                                   <<*7556>>02217400
     END                                                       <<*7556>>02217500
   QPROC(RESOURCE,PIX * PCBSIZE);                              <<06647>>02234000
   IF OWNER = DUMMYPIN THEN                                    <<07315>>02236000
     IMPAIRED(OWNER/PCBSIZE,@RESOURCE,FALSE);                  <<06647>>02242000
MYPIN := (CURPRC)/PCBSIZE;                                     <<06647>>02300000
NEXTPROC := PCB(CURPRC+NIMPPINWORDNUM)/PCBSIZE;                <<06647>>02340000
