-- F340A001.A
--
--                             Grant of Unlimited Rights
--
--     Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
--     F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained 
--     unlimited rights in the software and documentation contained herein.
--     Unlimited rights are defined in DFAR 252.227-7013(a)(19).  By making 
--     this public release, the Government intends to confer upon all 
--     recipients unlimited rights  equal to those held by the Government.  
--     These rights include rights to use, duplicate, release or disclose the 
--     released technical data and computer software in whole or in part, in 
--     any manner and for any purpose whatsoever, and to have or permit others 
--     to do so.
--
--                                    DISCLAIMER
--
--     ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
--     DISCLOSED ARE AS IS.  THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED 
--     WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
--     SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE 
--     OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
--     PARTICULAR PURPOSE OF SAID MATERIAL.
--*
--
-- FOUNDATION DESCRIPTION:
--      This file declares a tagged type and primitive subprogram for use in
--      tests covering tagged types and type extensions.
--
-- TEST FILES:
--      The following files comprise this foundation:
--
--         F340A000.A
--      => F340A001.A
--
-- CHANGE HISTORY:
--      06 Dec 94   SAIC    ACVC 2.0
--
--!

package F340A001 is  -- Book definitions.


   type Text_Ptr is access String;

   type Book_Type is tagged record                      -- Root tagged type.
      Title  : Text_Ptr;
      Author : Text_Ptr;
   end record;


   procedure Create_Book (Title  : in     Text_Ptr;     -- Primitive operation
                          Author : in     Text_Ptr;     -- of root tagged type.
                          Book   :    out Book_Type);
                          

end F340A001;


     --==================================================================--


package body F340A001 is  -- Book definitions.


   procedure Create_Book (Title  : in     Text_Ptr;
                          Author : in     Text_Ptr;
                          Book   :    out Book_Type) is
   begin
      Book.Title  := Title;
      Book.Author := Author;
   end Create_Book;
                          

end F340A001;
