separate (Halstead_List)
procedure Create (Empty_List : in out List) is
    --==============================================================
    -- Create an empty list. Previous contents of Empty_List will ==
    -- be put back into the available list.                       ==
    --==============================================================

    Unused_Node : List;

begin
    -- Create

    Clear_Contents:
        while Empty_List /= null loop

            -- mark current node unused
            Unused_Node := Empty_List;

            -- advance list pointer
            Empty_List := Empty_List.Next;

            -- put unused node into the free-list
            Unused_Node.Next := Free_List;
            Free_List := Unused_Node;

        end loop Clear_Contents;

end Create;