From 447b87d2ed8f9cfdfe927003676b40b30528667a Mon Sep 17 00:00:00 2001 From: norayr Date: Tue, 23 May 2017 15:42:02 +0400 Subject: [PATCH 1/2] tmp --- Days.Mod | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ readme.md | 6 +++++ test.Mod | 22 ++++++++++++++++++ 3 files changed, 96 insertions(+) create mode 100644 Days.Mod create mode 100644 readme.md create mode 100644 test.Mod diff --git a/Days.Mod b/Days.Mod new file mode 100644 index 0000000..8611a21 --- /dev/null +++ b/Days.Mod @@ -0,0 +1,68 @@ +MODULE Days; + + TYPE + Day* = POINTER TO DayDesc; + DayDesc = RECORD + next, prev : Day + END; + Week = ARRAY 7 OF Day; + + VAR + sun*, mon*, tue*, wed*, thu*, fri*, sat* : Day; + week: Week; + + PROCEDURE Next*(d : Day): Day; + BEGIN + RETURN d.next + END Next; + + PROCEDURE Prev*(d: Day): Day; + BEGIN + RETURN d.prev; + END Prev; + + PROCEDURE inc(VAR j: SHORTINT); + BEGIN + IF j = 6 THEN + j := 0 + ELSE + INC(j) + END + END inc; + + PROCEDURE dec(VAR j: SHORTINT); + BEGIN + IF j = 0 THEN + j := 6 + ELSE + DEC(j) + END + END dec; + + PROCEDURE init(VAR w : Week); + VAR + i,j : SHORTINT; + BEGIN + i := 0; + REPEAT + j := i; inc(j); + w[i].next := w[j]; + j := i; dec(j); + w[i].prev := w[j]; + INC(i) + UNTIL i > 6; + END init; + +BEGIN + NEW(sun); NEW(mon); NEW(tue); NEW(wed); NEW(thu); NEW(fri); NEW(sat); + week[0] := sun; + week[1] := mon; + week[2] := tue; + week[3] := wed; + week[4] := thu; + week[5] := fri; + week[6] := sat; + + init(week); + +END Days. diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..5459059 --- /dev/null +++ b/readme.md @@ -0,0 +1,6 @@ + + +Example aimed to show how to survive without enumerations in Oberon. + +This way is even cooler than enumerations. (: + diff --git a/test.Mod b/test.Mod new file mode 100644 index 0000000..8d49b34 --- /dev/null +++ b/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. From 512257bacfaa0cbb0d7c40f9574d1392f2418d88 Mon Sep 17 00:00:00 2001 From: norayr Date: Tue, 23 May 2017 16:43:00 +0400 Subject: [PATCH 2/2] moved files to new subdirectory --- Days.Mod => enums/Days.Mod | 0 readme.md => enums/readme.md | 0 test.Mod => enums/test.Mod | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename Days.Mod => enums/Days.Mod (100%) rename readme.md => enums/readme.md (100%) rename test.Mod => enums/test.Mod (100%) diff --git a/Days.Mod b/enums/Days.Mod similarity index 100% rename from Days.Mod rename to enums/Days.Mod diff --git a/readme.md b/enums/readme.md similarity index 100% rename from readme.md rename to enums/readme.md diff --git a/test.Mod b/enums/test.Mod similarity index 100% rename from test.Mod rename to enums/test.Mod