separate (Halstead_List)
procedure Get (New_Node : out List) is
    --
    -- gets a new node either from the free-list or system;
    -- we ASSUME that there will be no OVERFLOW!!!
    --

    Free_Node : List;

begin
    -- Get

    -- check whether the free-list is empty or not
    if Free_List = null then

        -- free-list is empty, so get a new node from the system
        New_Node := new Node;

    else
        -- free-list is NOT empty

        -- get the free node from the free-list
        Free_Node := Free_List;
        Free_List := Free_List.Next;
        Free_Node.Next := null;
        New_Node := Free_Node;

    end if;

end Get;