(* ------------------------------------------------------------------------
  :Program.       CheckDay
  :Author.        Kai Bolay [kai]
  :Address.       Hoffmannstraße 168
  :Address.       D-7250 Leonberg 1
  :History.       v1.0 [kai] 29-Sep-91 (initial)
  :Copyright.     PD
  :Language.      Oberon
  :Translator.    AMIGA OBERON v2.09e
------------------------------------------------------------------------ *)
MODULE CheckDay;

IMPORT
  d: Dos, e: Exec, y: SYSTEM;
CONST
  Version = "\o$VER: CheckDay v1.0 (29-Sep-91)\n\r";
  Template = "From/A,To/A";
VAR
  RD: d.RDArgsPtr;
  ArgArray: ARRAY 2 OF LONGINT;
  Start, End, Now: INTEGER;
  Date: d.Date;

PROCEDURE GetDay (Day: e.STRPTR): INTEGER;
VAR
  i: INTEGER;
BEGIN
  i := 0; WHILE Day^[i] # 0X DO Day^[i] := CAP (Day^[i]); INC (i) END;
  IF    Day^ = "SUNDAY"    THEN RETURN 0;
  ELSIF Day^ = "MONDAY"    THEN RETURN 1;
  ELSIF Day^ = "TUESDAY"   THEN RETURN 2;
  ELSIF Day^ = "WEDNESDAY" THEN RETURN 3;
  ELSIF Day^ = "THURSDAY"  THEN RETURN 4;
  ELSIF Day^ = "FRIDAY"    THEN RETURN 5;
  ELSIF Day^ = "SATURDAY"  THEN RETURN 6;
  ELSE RETURN -1 END;
END GetDay;

BEGIN
  IF d.dos.lib.version < 37 THEN
    y.SETREG (0, d.Write (d.Output(), "Go, get a 2.0 ROM!\n", 19));
    HALT (20);
  END;
  d.PrintF ("%s", y.ADR (Version)+7);
  RD := d.ReadArgs (Template, ArgArray, NIL);
  IF RD = NIL THEN
    d.PrintF ("Usage: CheckDay %s\n", y.ADR (Template));
    HALT (20);
  END;
  Start := GetDay (ArgArray[0]);
  IF Start = -1 THEN
    d.PrintF ("'%s' is no valid day of the week!\n", ArgArray[0]);
    HALT (20);
  END;
  End := GetDay (ArgArray[1]);
  IF End = -1 THEN
    d.PrintF ("'%s' is no valid day of the week!\n", ArgArray[1]);
    HALT (20);
  END;
  d.DateStamp (Date); Now := SHORT (Date.days MOD 7);
  IF ((Start <= End) AND ((Now >= Start) AND (Now <= End))) OR
     ((Start  > End) AND ((Now >= Start) OR  (Now <= End))) THEN
    HALT (5);
  END;
CLOSE
  IF RD # NIL THEN d.FreeArgs (RD); RD := NIL END;
END CheckDay.
