From 37682dfdafe2acfb4b0529bd673369b9786294f9 Mon Sep 17 00:00:00 2001 From: norayr Date: Fri, 2 Jun 2017 21:52:31 +0400 Subject: [PATCH] example contributed by pdewacht. --- enums_example/{ => 0}/Days.Mod | 0 enums_example/{ => 0}/readme.md | 0 enums_example/{ => 0}/test.Mod | 0 enums_example/1/Days.Mod | 33 +++++++++++++++++++++++++++++++++ enums_example/1/readme.md | 5 +++++ enums_example/1/test.Mod | 22 ++++++++++++++++++++++ 6 files changed, 60 insertions(+) rename enums_example/{ => 0}/Days.Mod (100%) rename enums_example/{ => 0}/readme.md (100%) rename enums_example/{ => 0}/test.Mod (100%) create mode 100644 enums_example/1/Days.Mod create mode 100644 enums_example/1/readme.md create mode 100644 enums_example/1/test.Mod diff --git a/enums_example/Days.Mod b/enums_example/0/Days.Mod similarity index 100% rename from enums_example/Days.Mod rename to enums_example/0/Days.Mod diff --git a/enums_example/readme.md b/enums_example/0/readme.md similarity index 100% rename from enums_example/readme.md rename to enums_example/0/readme.md diff --git a/enums_example/test.Mod b/enums_example/0/test.Mod similarity index 100% rename from enums_example/test.Mod rename to enums_example/0/test.Mod diff --git a/enums_example/1/Days.Mod b/enums_example/1/Days.Mod new file mode 100644 index 0000000..a8ab1ad --- /dev/null +++ b/enums_example/1/Days.Mod @@ -0,0 +1,33 @@ +MODULE Days; + + TYPE + Day* = POINTER TO DayDesc; + DayDesc = RECORD + num: INTEGER + END; + Week* = ARRAY 7 OF Day; + VAR + sun*, mon*, tue*, wed*, thu*, fri*, sat* : Day; + week: Week; + + PROCEDURE Next*(d : Day): Day; + BEGIN RETURN week[(d.num + 1) MOD 7]; + END Next; + + PROCEDURE Prev*(d: Day): Day; + BEGIN RETURN week[(d.num - 1) MOD 7]; + END Prev; + + PROCEDURE day(VAR d: Day; num: INTEGER); + BEGIN NEW(d); d.num := num; week[num] := d; + END day; + +BEGIN + day(sun, 0); + day(mon, 1); + day(tue, 2); + day(wed, 3); + day(thu, 4); + day(fri, 5); + day(sat, 6); +END Days. diff --git a/enums_example/1/readme.md b/enums_example/1/readme.md new file mode 100644 index 0000000..99dc59f --- /dev/null +++ b/enums_example/1/readme.md @@ -0,0 +1,5 @@ + + +Example aimed to show how to survive without enumerations in Oberon. + +This example is contributed by @pdewacht. diff --git a/enums_example/1/test.Mod b/enums_example/1/test.Mod new file mode 100644 index 0000000..8d49b34 --- /dev/null +++ b/enums_example/1/test.Mod @@ -0,0 +1,22 @@ +MODULE test; + +IMPORT Days, Out; + +VAR today, yesterday, tomorrow: Days.Day; + +BEGIN + today := Days.mon; (*init*) + + yesterday := Days.Prev(today); + IF yesterday = Days.sun + THEN + Out.String("it works!"); Out.Ln + END; + tomorrow := Days.Next(today); + + IF tomorrow = Days.tue + THEN + Out.String("it works!"); Out.Ln + END; + +END test.