-- Datumsprogramm fuer das erste Semester -- "Professional version"
-- Debora Weber-Wulff 28.1.98
-- datum.ads

PACKAGE datum_paket IS

   TYPE weekday is (Sunday, Monday, Tuesday, Wednesday, Thursday,
			  Friday, Saturday);

   TYPE languages is (English, German, Icelandic);
   language : languages := English;

   TYPE datum  IS PRIVATE;

FUNCTION  set_day (d, m, y : integer) RETURN datum;
PROCEDURE get (d : OUT datum);
PROCEDURE put (d : IN datum);
PROCEDURE get (w : OUT weekday);
PROCEDURE put (w : IN weekday);
FUNCTION  next_day   (d : datum) RETURN datum;
FUNCTION  weekday_of (d : datum) RETURN weekday;
FUNCTION  "+"  (d : datum; days : integer) RETURN datum;
FUNCTION  "-"  (d : datum; days : integer) RETURN datum;
FUNCTION  "-"  (day1, day2 : datum) RETURN integer;
FUNCTION  "<"  (day1, day2 : datum) RETURN Boolean;
FUNCTION  "<=" (day1, day2 : datum) RETURN Boolean;
FUNCTION  ">"  (day1, day2 : datum) RETURN Boolean;
FUNCTION  ">=" (day1, day2 : datum) RETURN Boolean;

-- This exception is raised on an improper datum
   datum_error : exception;

--------------------------------------
PRIVATE

   SUBTYPE days   IS integer RANGE 1 .. 31;
   SUBTYPE months IS integer RANGE 1 .. 12;
   SUBTYPE years  IS integer RANGE 1582 .. 2500;
   TYPE datum  IS
	RECORD
	  day   : days;
	  month : months;
	  year  : years;
	END RECORD;

END datum_paket;

