PROCEDURE PUTONARL(ADDRESS,SIZE,HEADOFLIST);                     <<ALT>>13289000
VALUE ADDRESS,SIZE,HEADOFLIST;                                   <<ALT>>13289500
DOUBLE ADDRESS;                                                  <<ALT>>13290000
INTEGER SIZE;                                                    <<ALT>>13292000
LOGICAL HEADOFLIST;                                              <<ALT>>13294000
OPTION PRIVILEGED,UNCALLABLE;                                    <<ALT>>13296000
                                                                 <<ALT>>13298000
COMMENT                                                          <<ALT>>13300000
                                                                 <<ALT>>13302000
PUTONARL is called by RELEASEREGION, RESERVEREGION, and COLLECT  <<ALT>>13304000
GARBAGE to place the region whose base address is given by       <<ALT>>13306000
the address parameter at the head or tail of the list of         <<ALT>>13308000
available regions.                                               <<ALT>>13310000
                                                                 <<ALT>>13312000
DB is assumed to be at SYSDB when called.                        <<ALT>>13314000
                                                                 <<ALT>>13316000
The condition code is not modified.                              <<ALT>>13318000
                                                                 <<ALT>>13320000
;                                                                <<ALT>>13322000
                                                                 <<ALT>>13324000
   BEGIN                                                         <<ALT>>13326000
                                                                 <<ALT>>13328000
   DOUBLE OLDLISTHEAD,                                           <<ALT>>13330000
          OLDLISTTAIL,                                           <<ALT>>13332000
      PREVLINK,                                                  <<ALT>>13332200
      NEXTLINK;                                                  <<ALT>>13332400
                                                                 <<ALT>>13334000
SUBROUTINE PLACEATHEAD;                                          <<ALT>>13336000
                                                                 <<ALT>>13338000
   BEGIN                                                         <<ALT>>13340000
   OLDLISTHEAD := HOLELISTHEAD;                                  <<ALT>>13342000
   TOS := ADDRESS;                                               <<ALT>>13344000
   TOS := TOS + RBTONLDISP;                                      <<ALT>>13344010
   HOLELISTHEAD := TOS;                                          <<ALT>>13344020
   TOS := ADDRESS;                                               <<ALT>>13346000
   TOS := TOS+RBTOPLDISP;                                        <<ALT>>13348000
   TOS := 0D;                                                    <<ALT>>13350000
   ASMB(SDEA);      << zero out prev link >>                     <<ALT>>13352000
   TOS := TOS+PLTONLDISP;                                        <<ALT>>13354000
   TOS := OLDLISTHEAD;                                           <<ALT>>13356000
   ASMB(SDEA;DDEL);                                              <<ALT>>13358000
   IF OLDLISTHEAD <> 0D THEN                                     <<ALT>>13360000
      BEGIN       << must update prevlink of old head. >>        <<ALT>>13362000
      TOS := OLDLISTHEAD;                                        <<ALT>>13364000
      TOS := TOS+NLTOPLDISP;                                     <<ALT>>13366000
      TOS := ADDRESS;                                            <<ALT>>13368000
      TOS := TOS + RBTOPLDISP;                                   <<ALT>>13368100
      ASMB(SDEA;DDEL);                                           <<ALT>>13370000
      END;                                                       <<ALT>>13372000
   END;     << subroutine PLACEATHEAD >>                         <<ALT>>13374000
                                                                 <<ALT>>13376000
SUBROUTINE PLACEATTAIL;                                          <<ALT>>13378000
                                                                 <<ALT>>13380000
   BEGIN                                                         <<ALT>>13382000
                                                                 <<ALT>>13384000
   OLDLISTTAIL := HOLELISTTAIL;                                  <<ALT>>13386000
   TOS := ADDRESS;                                               <<ALT>>13388000
   TOS := TOS + RBTONLDISP;                                      <<ALT>>13388010
   HOLELISTTAIL := TOS;                                          <<ALT>>13388020
   MAXAVAILREG := SIZE;                                          <<ALT>>13390000
                                                                 <<ALT>>13392000
<< Fill in prev and next links of this hole. >>                  <<ALT>>13394000
                                                                 <<ALT>>13396000
   TOS := ADDRESS;                                               <<ALT>>13398000
   TOS := TOS+RBTONLDISP;                                        <<ALT>>13400000
   TOS := 0D;                                                    <<ALT>>13402000
   ASMB(SDEA);         << zero out Next link >>                  <<ALT>>13404000
   IF OLDLISTTAIL <> 0D THEN                                     <<ALT>>13404100
      BEGIN                                                      <<ALT>>13404200
      TOS := TOS+NLTOPLDISP;                                     <<ALT>>13406000
      TOS := OLDLISTTAIL;                                        <<ALT>>13408000
      TOS := TOS + NLTOPLDISP;                                   <<ALT>>13408100
      ASMB(SDEA);    << update Prev in list ptr >>               <<ALT>>13410000
      END;                                                       <<ALT>>13410010
   DDEL;                                                         <<ALT>>13410020
                                                                 <<ALT>>13412000
<< Update old tail's Next link >>                                <<ALT>>13414000
                                                                 <<ALT>>13416000
   TOS := OLDLISTTAIL;                                           <<ALT>>13418000
   IF = THEN ASMB(DDEL) ELSE                                     <<ALT>>13420000
      BEGIN                                                      <<ALT>>13422000
      TOS := ADDRESS;                                            <<ALT>>13426000
      TOS := TOS+RBTONLDISP;                                     <<ALT>>13428000
      ASMB(SDEA;DDEL);                                           <<ALT>>13430000
      END;                                                       <<ALT>>13432000
   END;      << subroutine PLACEATTHEAD >>                       <<ALT>>13434000
                                                                 <<ALT>>13436000
                                                                 <<ALT>>13438000
   IF LOGICAL(SIZE) > LOGICAL(MAXHOLESIZE) THEN ASMB(HALT 3);    <<ALT>>13440000
                                                                 <<ALT>>13442000
   HOLECOUNT := HOLECOUNT+1;                                     <<ALT>>13444000
                                                                 <<ALT>>13446020
   IF HOLELISTHEAD = 0D THEN                                     <<ALT>>13446040
      BEGIN       << List of holes is empty. >>                  <<ALT>>13446060
      PLACEATHEAD;                                               <<ALT>>13446080
      PLACEATTAIL;                                               <<ALT>>13446100
      END                                                        <<ALT>>13446120
   ELSE IF SIZE=MAXAVAILREG AND NOT HEADOFLIST                   <<ALT>>13446140
   THEN PLACEATTAIL ELSE                                         <<ALT>>13446142
      BEGIN     << Must merge into list >>                       <<ALT>>13446160
                                                                 <<ALT>>13446180
<< Locate position in the hole list for this hole. >>            <<ALT>>13446200
                                                                 <<ALT>>13446220
      TOS := NLTORSDISP;   << offset from Link to target for LLSH<<ALT>>13446240
      IF HEADOFLIST THEN TOS := SIZE ELSE TOS := SIZE+1;   <<test<<ALT>>13446260
      TOS := HOLELISTHEAD;    << first link addr for LLSH >>     <<ALT>>13446280
      X := HOLECOUNT-1;       << link count >>                   <<ALT>>13446300
      ASMB(LLSH);  << chase through the list to get to right plac<<ALT>>13446320
      IF > THEN ASMB(HALT 3) ELSE IF < THEN PLACEATTAIL ELSE     <<ALT>>13446340
         BEGIN    << got a hit >>                                <<ALT>>13446360
         IF NOT HEADOFLIST THEN                                  <<ALT>>13446380
            BEGIN    << Put in front of link on TOS >>           <<ALT>>13446400
            TOS := TOS+NLTOPLDISP;                               <<ALT>>13446420
            ASMB(LDEA);                                          <<ALT>>13446440
            PREVLINK := TOS;                                     <<ALT>>13446460
            END                                                  <<ALT>>13446480
         ELSE                                                    <<ALT>>13446500
            BEGIN    << Goes after addr on TOS >>                <<ALT>>13446520
            TOS := TOS+NLTOPLDISP;                               <<ALT>>13446540
            PREVLINK := TOS;                                     <<ALT>>13446560
            END;                                                 <<ALT>>13446580
                                                                 <<ALT>>13446600
<< Now link in behind previous region base. >>                   <<ALT>>13446620
                                                                 <<ALT>>13446640
         TOS := PREVLINK;                                        <<ALT>>13446660
         IF = THEN PLACEATHEAD ELSE                              <<ALT>>13446680
            BEGIN                                                <<ALT>>13446700
            TOS := TOS+PLTONLDISP;                               <<ALT>>13446720
            ASMB(LDEA);                                          <<ALT>>13446740
            NEXTLINK := TOS;                                     <<ALT>>13446760
            TOS := ADDRESS;                                      <<ALT>>13446780
            TOS := TOS+RBTONLDISP;                               <<ALT>>13446800
            ASMB(SDEA);  << put new next link in prev in list >> <<ALT>>13446820
                                                                 <<ALT>>13446840
            TOS := NEXTLINK;                                     <<ALT>>13446860
            IF = THEN ASMB(HALT 3); << end of list case taken >> <<ALT>>13446880
            TOS := TOS+NLTOPLDISP;                               <<ALT>>13446900
            TOS := ADDRESS;                                      <<ALT>>13446920
            TOS := TOS + RBTOPLDISP;                             <<ALT>>13446921
            ASMB(SDEA);  << put new prev ptr in next in list >>  <<ALT>>13446940
                                                                 <<ALT>>13446960
            TOS := ADDRESS;                                      <<ALT>>13446980
            TOS := TOS+RBTONLDISP;                               <<ALT>>13447000
            TOS := NEXTLINK;                                     <<ALT>>13447020
            ASMB(SDEA);   << put next link into this region >>   <<ALT>>13447040
            TOS := TOS+NLTOPLDISP;                               <<ALT>>13447060
            TOS := PREVLINK;                                     <<ALT>>13447080
            ASMB(SDEA);   << put Prev region ptr into this region<<ALT>>13447100
            END;                                                 <<ALT>>13447120
         END;                                                    <<ALT>>13447140
      END;                                                       <<ALT>>13447160
   END;    << procedure PUTONARL>>                               <<ALT>>13447180
