generic
    Max : in Positive := 100;             -- MAX NUMBER OF ELEMENTS
    type Element_Type is private; -- TYPE OF QUEUE ELEMENTS
package X0que is

    type Queue is limited private;

    --FULL_QUEUE,EMPTY_QUEUE  : EXCEPTION;

    --EMPTY A QUEUE
    procedure Make_Empty (Q : in out Queue);

    --TEST IF A QUEUE IS EMPTY
    function Is_Empty (Q : in Queue) return Boolean;

    --TEST IF A QUEUE IS NOT EMPTY
    function Is_Not_Empty (Q : in Queue) return Boolean;

    --TEST IF A QUEUE IS FULL
    function Is_Full (Q : in Queue) return Boolean;

    --ADD AN ELEMENT_TYPE TO THE END OF THE QUEUE
    procedure Put_End (Q : in out Queue; C : in Element_Type);

    --GET AN ELEMENT_TYPE FROM THE FRONT OF THE QUEUE
    procedure Get_End (Q : in out Queue; C : out Element_Type);

    --ASSIGN THE FIRST QUEUE TO THE SECOND QUEUE
    procedure Assign (Qin : in Queue; Qout : out Queue);

private
    --QUEUE IS IMPLEMENTED AS A LINKED LIST OF TYPE QDATA_TYPE
    type Qdata_Type is array (1 .. Max) of Element_Type;
    type Queue is
        record
            Qu : Qdata_Type;
            Qctr : Integer range 0 .. Max := 0;
        end record;

end X0que;