--package specification
package ourQueue is

     type myArray is array (1..20) of integer;
     type queue is private;

-- function and/or procedure headers followed by ;

-- add something to a queue
   procedure addSomething ( value : in integer;  TheQueue : in out queue);

-- remove something from a queue and return it
  procedure RemoveSomething (theThing : out integer; TheQueue : in out queue) ; 

-- remove something from the queue without returning it
   procedure RemoveSomething (TheQueue : in out queue);

-- determine how many elements are in the queue
     function SizeOfThing (TheQueue : in queue )  return integer;

-- look at first element in queue
   function firstThing (TheQueue : in queue)return integer; 

-- empty the queue
     procedure makeEmpty (TheQueue :  in out queue );

-- check to see if the queue is empty
      function IsThingEmpty (TheQueue : in queue) return boolean;

-- show the queue
-- CAN BE INCLUDED BUT, BECAUSE IN THEORY IT INVOLVES DESTRUCTION OF EXISTING QUEUE 
-- AND CREATION OF REPLACEMENT QUEUE WHICH IS IDENTICAL, IT DOES NOT HAVE TO BE

-- is queue full
      function IsThingFull( TheQueue : in queue) return boolean;

-- THIS FUNCTION SHOULD BE IN THE TEST PROGRAM, NOT IN THE SPEC OR BODY.  
-- IT INVOLVES BUILDING A NEW QUEUE AS THE ELEMENTS ARE DELETED FROM THE EXISTING QUEUE 
-- BECAUSE THE ONLY ELEMENT IN THE QUEUE YOU CAN SEE IS THE FIRST ELEMENT.
-- is a particular item in the queue?  
--     function IsThingInQueue (TheQueue : in queue) return boolean;

   private
      type queue is record 
           size : integer;
           myQueue : myArray;         
      end record; 
end ourQueue;