---*- Fonts: CPTFONTB -*-
--
--
	package CALENDAR is

	  type TIME is limited private;

	  type DURATION is delta 20.0*(10.0**(-3)) range -86400.0 .. 86400.0;
	  type DAY_DURATION is delta 20.0*(10.0**(-3)) range 0.0 .. 86_400.0;
	
	  subtype DAY_NUMBER is INTEGER range 1 .. 31;
	  subtype YEAR_NUMBER is INTEGER range 1901 .. 2099;
	  subtype MONTH_NUMBER is INTEGER range 1 .. 12;


	  function CLOCK return TIME;
	  
          function YEAR 	(DATE : TIME) return YEAR_NUMBER;
          function MONTH 	(DATE : TIME) return MONTH_NUMBER;
	  function DAY	 	(DATE : TIME) return DAY_NUMBER;
	  function SECONDS 	(DATE : TIME) return DAY_DURATION;

	  procedure SPLIT 	(DATE    : in  TIME;
				 YEAR    : out YEAR_NUMBER;
				 MONTH   : out MONTH_NUMBER;
				 DAY     : out DAY_NUMBER;
				 SECONDS : out DAY_DURATION);

	  function TIME_OF 	(YEAR    :  YEAR_NUMBER;
				 MONTH   :  MONTH_NUMBER;
				 DAY     :  DAY_NUMBER;
				 SECONDS :  DAY_DURATION) return TIME;

	  function "+"  (LEFT : TIME;	RIGHT : DURATION) return TIME;

	  function "+"	(LEFT : DURATION; RIGHT : TIME) return TIME;

	  function "-"	(LEFT : TIME;	RIGHT : DURATION) return TIME;

	  function "-"	(LEFT : TIME;	RIGHT : TIME) return DURATION;

	  function "<"	(LEFT, RIGHT : TIME) return BOOLEAN;

	  function "<="	(LEFT, RIGHT : TIME) return BOOLEAN;

	  function ">"	(LEFT, RIGHT : TIME) return BOOLEAN;

	  function ">="	(LEFT, RIGHT : TIME) return BOOLEAN;		
	
	  TIME_ERROR : exception;

	  private

		type TIME is 
			record
			  YEAR 	  : YEAR_NUMBER;
			  MONTH   : MONTH_NUMBER;
			  DAY	  : DAY_NUMBER;
			  SECONDS : DAY_DURATION;
	                end record;
	end;
