example contributed by pdewacht.

This commit is contained in:
norayr 2017-06-02 21:52:31 +04:00
parent 9802b7e1fd
commit 37682dfdaf
6 changed files with 60 additions and 0 deletions

33
enums_example/1/Days.Mod Normal file
View file

@ -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.

View file

@ -0,0 +1,5 @@
Example aimed to show how to survive without enumerations in Oberon.
This example is contributed by @pdewacht.

22
enums_example/1/test.Mod Normal file
View file

@ -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.