     ----------------------------------------------------------------------
     -- Title       :  TimeAK
     -- Version     :  1.0
     -- Author      :  David Wallace Croft, CompuServe [76600,102]
     -- Compiler    :  Ada
     -- Unit Type   :  package specification
     -- Copyright   :  1994 David Wallace Croft.  All rights reserved.
     -- Description :  Calendar and time package
     ----------------------------------------------------------------------

     with Calendar;

     package TimeAK is
     ----------------------------------------------------------------------
     Copyright : constant string
       := "TimeAK (C) 1994 David Wallace Croft.  All rights reserved.";
     ----------------------------------------------------------------------
     -- Calendar package renamed.
     ----------------------------------------------------------------------
     subtype Time         is Calendar.Time;
     subtype Year_Number  is Calendar.Year_Number;
     subtype Month_Number is Calendar.Month_Number;
     subtype Day_Number   is Calendar.Day_Number;
     subtype Day_Duration is Calendar.Day_Duration;
     ----------------------------------------------------------------------
     function Clock
       return Time
       renames Calendar.Clock;
     function Year (
       T : Time )
       return Year_Number
       renames Calendar.Year;
     function Month (
       T : Time )
       return Month_Number
       renames Calendar.Month;
     function Day (
       T : Time )
       return Day_Number
       renames Calendar.Day;
     function Seconds (
       T :  Time )
       return Day_Duration
       renames Calendar.Seconds;
     procedure Split (
       Date    : in     Time;
       Year    :    out Year_Number;
       Month   :    out Month_Number;
       Day     :    out Day_Number;
       Seconds :    out Day_Duration )
       renames Calendar.Split;
     function Time_Of (
       Year    :  Year_Number;
       Month   :  Month_Number;
       Day     :  Day_Number;
       Seconds :  Day_Duration := 0.0 )
       return Time
       renames Calendar.Time_Of;
     ----------------------------------------------------------------------
     Time_Error : exception renames Calendar.Time_Error;
     ----------------------------------------------------------------------
     function "+" ( X : Time;     Y : Duration ) return Time
       renames Calendar."+";
     function "+" ( X : Duration; Y : Time     ) return Time
       renames Calendar."+";
     function "-" ( X : Time;     Y : Duration ) return Time
       renames Calendar."-";
     function "-" ( X : Time;     Y : Time     ) return Duration
       renames Calendar."-";
     function "<"  ( X, Y : Time ) return boolean renames Calendar."<";
     function "<=" ( X, Y : Time ) return boolean renames Calendar."<=";
     function ">"  ( X, Y : Time ) return boolean renames Calendar.">";
     function ">=" ( X, Y : Time ) return boolean renames Calendar.">=";
     ----------------------------------------------------------------------
     -- Declarations unique to TimeAK package.
     ----------------------------------------------------------------------
     subtype Hour_Type   is natural range 0..23;
     subtype Minute_Type is natural range 0..59;
     subtype Second_Type is natural range 0..59;
     subtype Centi_Type  is natural range 0..99;
     subtype Date_Str_Type is string ( 1..10 ); -- YYYY/MM/DD
     subtype Time_Str_Type is string ( 1..11 ); -- HH:MM:SS.CC
     subtype Date_Time_Str_Type is string ( 1..22 );
       -- YYYY/MM/DD HH:MM:SS.CC
     type Date_Time_Format_Type is (
       Unknown,
       YYYY_MM_DD_HH_MM_SS_CC,
       YYYY_MM_DD_HH_MM_SS,
       YYYY_MM_DD,
       YY_MM_DD_HH_MM_SS_CC,
       YY_MM_DD_HH_MM_SS,
       YY_MM_DD,
       MM_DD_YY_HH_MM_SS_CC,
       MM_DD_YY_HH_MM_SS,
       MM_DD_YY );
     ----------------------------------------------------------------------
     -- Sub-programs unique to TimeAK.
     ----------------------------------------------------------------------
     function Convert_Format (
       Date_Time_Str : in string )
       return Date_Time_Str_Type;
     procedure Demo;
     function Determine_Date_Time_Format (
       Date_Time_Str : in string )
       return Date_Time_Format_Type;
     function Join (
       Year   : in Year_Number;
       Month  : in Month_Number;
       Day    : in Day_Number;
       Hour   : in Hour_Type;
       Minute : in Minute_Type;
       Second : in Second_Type;
       Centi  : in Centi_Type )
       return Time;
     function Image (
       T : in     Time )
       return string;
     procedure Split (
       T       : in     Time;
       Year    :    out Year_Number;
       Month   :    out Month_Number;
       Day     :    out Day_Number;
       Hour    :    out Hour_Type;
       Minute  :    out Minute_Type;
       Second  :    out Second_Type;
       Centi   :    out Centi_Type );
     function Value (
       Date_Time_Str : in Date_Time_Str_Type )
       return Time;
     ----------------------------------------------------------------------
     ----------------------------------------------------------------------
     end TimeAK;
