From 8e1a8f7d6fa6d50172b81fbdf2864e2bff61d077 Mon Sep 17 00:00:00 2001 From: norayr Date: Thu, 29 Dec 2016 19:19:27 +0400 Subject: [PATCH 01/16] initial. --- Day.Mod | 8 ++++++++ test.Mod | 8 ++++++++ 2 files changed, 16 insertions(+) create mode 100644 Day.Mod create mode 100644 test.Mod diff --git a/Day.Mod b/Day.Mod new file mode 100644 index 0000000..4eb7dbe --- /dev/null +++ b/Day.Mod @@ -0,0 +1,8 @@ +MODULE Day; + + TYPE T* = RECORD END; + + VAR sun*, mon*, tue*, wed*, thu*, fri*, sat* : T; + + +END Day. diff --git a/test.Mod b/test.Mod new file mode 100644 index 0000000..b18bb2a --- /dev/null +++ b/test.Mod @@ -0,0 +1,8 @@ +MODULE test. + +IMPORT Day; + +VAR today: Days.Day; + + +END test. From 3cbba94857ec0e92b5b671a23f48d2a866650072 Mon Sep 17 00:00:00 2001 From: norayr Date: Thu, 29 Dec 2016 19:20:44 +0400 Subject: [PATCH 02/16] rename and smth. --- Day.Mod | 8 -------- Days.Mod | 8 ++++++++ test.Mod | 3 +++ 3 files changed, 11 insertions(+), 8 deletions(-) delete mode 100644 Day.Mod create mode 100644 Days.Mod diff --git a/Day.Mod b/Day.Mod deleted file mode 100644 index 4eb7dbe..0000000 --- a/Day.Mod +++ /dev/null @@ -1,8 +0,0 @@ -MODULE Day; - - TYPE T* = RECORD END; - - VAR sun*, mon*, tue*, wed*, thu*, fri*, sat* : T; - - -END Day. diff --git a/Days.Mod b/Days.Mod new file mode 100644 index 0000000..914ff4d --- /dev/null +++ b/Days.Mod @@ -0,0 +1,8 @@ +MODULE Days; + + TYPE Day* = RECORD END; + + VAR sun*, mon*, tue*, wed*, thu*, fri*, sat* : Day; + + +END Days. diff --git a/test.Mod b/test.Mod index b18bb2a..aeec3a5 100644 --- a/test.Mod +++ b/test.Mod @@ -4,5 +4,8 @@ IMPORT Day; VAR today: Days.Day; +BEGIN + today := Days.mon; (*init*) + END test. From ee38ab860ab7817686d5dc5bee8ca98b5d906877 Mon Sep 17 00:00:00 2001 From: norayr Date: Thu, 29 Dec 2016 20:05:27 +0400 Subject: [PATCH 03/16] Days.Mod example written. --- Days.Mod | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 61 insertions(+), 3 deletions(-) diff --git a/Days.Mod b/Days.Mod index 914ff4d..ae5ac3c 100644 --- a/Days.Mod +++ b/Days.Mod @@ -1,8 +1,66 @@ MODULE Days; - TYPE Day* = RECORD END; - - VAR sun*, mon*, tue*, wed*, thu*, fri*, sat* : Day; + TYPE + Day* = POINTER TO DayDesc; + DayDesc = RECORD + next*, prev* : Day; + END DayDesc; + TYPE Week = ARRAY 7 OF Day; + VAR sun*, mon*, tue*, wed*, thu*, fri*, sat* : Day; + week: ARRAY 7 OF Day; + + 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]; + 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. From 28d02deeae96f2d238c471321bf6bd4d9c8102ef Mon Sep 17 00:00:00 2001 From: norayr Date: Thu, 29 Dec 2016 20:12:52 +0400 Subject: [PATCH 04/16] Days.Mod compiles. --- Days.Mod | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Days.Mod b/Days.Mod index ae5ac3c..37732d9 100644 --- a/Days.Mod +++ b/Days.Mod @@ -1,14 +1,15 @@ MODULE Days; TYPE - Day* = POINTER TO DayDesc; - DayDesc = RECORD - next*, prev* : Day; - END DayDesc; - TYPE Week = ARRAY 7 OF Day; + 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: ARRAY 7 OF Day; + VAR + sun*, mon*, tue*, wed*, thu*, fri*, sat* : Day; + week: Week; PROCEDURE Next*(d : Day): Day; BEGIN From 0f58a5ac19ab630f62a1db0c04d359653772e81a Mon Sep 17 00:00:00 2001 From: norayr Date: Thu, 29 Dec 2016 20:14:24 +0400 Subject: [PATCH 05/16] test also compiles. --- test.Mod | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/test.Mod b/test.Mod index aeec3a5..0c5d897 100644 --- a/test.Mod +++ b/test.Mod @@ -1,11 +1,13 @@ -MODULE test. +MODULE test; -IMPORT Day; +IMPORT Days; -VAR today: Days.Day; +VAR today, yesterday, tomorrow: Days.Day; BEGIN today := Days.mon; (*init*) + yesterday := Days.Prev(today); + tomorrow := Days.Next(today); END test. From 0d23645e831db54912b2b3da9c55b4c407fae161 Mon Sep 17 00:00:00 2001 From: norayr Date: Thu, 29 Dec 2016 20:17:18 +0400 Subject: [PATCH 06/16] fix. --- Days.Mod | 1 + 1 file changed, 1 insertion(+) diff --git a/Days.Mod b/Days.Mod index 37732d9..8611a21 100644 --- a/Days.Mod +++ b/Days.Mod @@ -49,6 +49,7 @@ MODULE Days; w[i].next := w[j]; j := i; dec(j); w[i].prev := w[j]; + INC(i) UNTIL i > 6; END init; From 8324eeb9b9a8fd88297f37ec2039775f7fce604c Mon Sep 17 00:00:00 2001 From: norayr Date: Thu, 29 Dec 2016 20:21:33 +0400 Subject: [PATCH 07/16] it works! --- test.Mod | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/test.Mod b/test.Mod index 0c5d897..8d49b34 100644 --- a/test.Mod +++ b/test.Mod @@ -1,6 +1,6 @@ MODULE test; -IMPORT Days; +IMPORT Days, Out; VAR today, yesterday, tomorrow: Days.Day; @@ -8,6 +8,15 @@ 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 8ace13a5a8638f0f20bb1f7281bb751ae345d801 Mon Sep 17 00:00:00 2001 From: norayr Date: Thu, 29 Dec 2016 20:23:38 +0400 Subject: [PATCH 08/16] readme --- readme.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 readme.md 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. (: + From 734202143ec701c0cedd936910daed44fd2095d9 Mon Sep 17 00:00:00 2001 From: norayr Date: Mon, 15 May 2017 19:46:45 +0400 Subject: [PATCH 09/16] unix style command line arguments by calling traditional oberon functions; -- noch --- .../unixstyle_oberon_traditional/partest.Mod | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 arguments/unixstyle_oberon_traditional/partest.Mod diff --git a/arguments/unixstyle_oberon_traditional/partest.Mod b/arguments/unixstyle_oberon_traditional/partest.Mod new file mode 100644 index 0000000..b15b545 --- /dev/null +++ b/arguments/unixstyle_oberon_traditional/partest.Mod @@ -0,0 +1,63 @@ +MODULE partest; + +IMPORT Oberon, Texts; + +CONST + argStr0 = "str"; (* we only have two types of args, one string and one int *) + argInt0 = "int"; (* i. e. -str somestring -int somenumber *) + +VAR + W: Texts.Writer; (* for console output *) + S: Texts.Scanner; T: Texts.Text; +BEGIN + Texts.OpenWriter(W); + Texts.WriteString(W, "hello, world, let's see which arguments do we get"); Texts.WriteLn(W); + + (* open arguments scanner *) + Texts.OpenScanner(S, Oberon.Par.text, Oberon.Par.pos); + + WHILE ~S.eot DO + Texts.Scan(S); + + IF S.class = Texts.Char THEN (* do we get '-' sign ? *) + IF S.c = "-" THEN + Texts.Scan(S); + IF S.class = Texts.Name THEN (* we got the key *) + Texts.WriteString(W, "key: "); Texts.WriteString(W, S.s); Texts.WriteLn(W); + (* now get the value *) + IF S.s = argStr0 THEN + Texts.Scan(S); + IF S.class = Texts.Name THEN + Texts.WriteString(W, "value: "); Texts.WriteString (W, S.s); Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf); + ELSE + Texts.WriteString(W, "string expected"); Texts.WriteLn(W); + Texts.Append(Oberon.Log, W.buf); + HALT(1); + END; + ELSIF S.s = argInt0 THEN + Texts.Scan(S); + IF S.class = Texts.Int THEN + Texts.WriteString(W, "value: "); Texts.WriteInt (W, S.i, 0); Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf); + ELSE + Texts.WriteString(W, "integer expected"); Texts.WriteLn(W); + Texts.Append(Oberon.Log, W.buf); + HALT(1); + END; + END; + ELSE + (* we were expecting characters after the '-' sign *) + Texts.WriteString(W, "key name expected"); Texts. WriteLn(W); + Texts.Append(Oberon.Log, W.buf); + HALT(1); + END; + END + ELSE + Texts.WriteString(W, "key option must start with '-' sign "); Texts.WriteLn(W); + HALT(1); + END; (* if got '-' *) + Oberon.Par.pos := Texts.Pos(S); + Texts.Append(Oberon.Log, W.buf) + END; (* while *) + + +END partest. From 74f731e7526b0fddc10092efe43a4ba14a45ebe1 Mon Sep 17 00:00:00 2001 From: norayr Date: Mon, 15 May 2017 19:49:07 +0400 Subject: [PATCH 10/16] added makefile; -- noch --- arguments/unixstyle_oberon_traditional/makefile | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 arguments/unixstyle_oberon_traditional/makefile diff --git a/arguments/unixstyle_oberon_traditional/makefile b/arguments/unixstyle_oberon_traditional/makefile new file mode 100644 index 0000000..e19e5ef --- /dev/null +++ b/arguments/unixstyle_oberon_traditional/makefile @@ -0,0 +1,11 @@ + +VOC = /opt/voc/bin/voc + + +all: + $(VOC) -m partest.Mod + + +test: + ./partest -str aaa -int 111 + ./partest -str 1 -int 111 From 33286378b9c6bd456e1b4fd61513761be4b3c8ac Mon Sep 17 00:00:00 2001 From: norayr Date: Mon, 15 May 2017 19:52:50 +0400 Subject: [PATCH 11/16] added readme; -- noch --- .../unixstyle_oberon_traditional/readme.md | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 arguments/unixstyle_oberon_traditional/readme.md diff --git a/arguments/unixstyle_oberon_traditional/readme.md b/arguments/unixstyle_oberon_traditional/readme.md new file mode 100644 index 0000000..894e60c --- /dev/null +++ b/arguments/unixstyle_oberon_traditional/readme.md @@ -0,0 +1,46 @@ + +example shows how to implement unix style arguments parsing by using traditional oberon functions from modules Texts and Oberon. + +compile +======= + +``` +make +``` + +run +=== + +``` +make test +``` + +or type + +``` +./partest -str aaa -int 111 +``` + +that should produce the following output + +``` +hello, world, let's see which arguments do we get +key: str +value: aaa +key: int +value: 111 +``` + +``` +./partest -str 000 -int 111 +``` + +the output will be + +``` +hello, world, let's see which arguments do we get +key: str +string expected +Terminated by Halt(1). +``` + From 31435cd0bbc8e9257bee863f669a6b721144ea1b Mon Sep 17 00:00:00 2001 From: norayr Date: Mon, 15 May 2017 19:54:01 +0400 Subject: [PATCH 12/16] all --- arguments/unixstyle_oberon_traditional/readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/arguments/unixstyle_oberon_traditional/readme.md b/arguments/unixstyle_oberon_traditional/readme.md index 894e60c..3365adf 100644 --- a/arguments/unixstyle_oberon_traditional/readme.md +++ b/arguments/unixstyle_oberon_traditional/readme.md @@ -44,3 +44,4 @@ string expected Terminated by Halt(1). ``` +that's all folks. From 447b87d2ed8f9cfdfe927003676b40b30528667a Mon Sep 17 00:00:00 2001 From: norayr Date: Tue, 23 May 2017 15:42:02 +0400 Subject: [PATCH 13/16] 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 c0673ff2a94ea7197fef45a54fc268f150a7ffe1 Mon Sep 17 00:00:00 2001 From: norayr Date: Tue, 23 May 2017 15:42:02 +0400 Subject: [PATCH 14/16] tmp --- Days.Mod => enums_example/Days.Mod | 0 readme.md => enums_example/readme.md | 0 test.Mod => enums_example/test.Mod | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename Days.Mod => enums_example/Days.Mod (100%) rename readme.md => enums_example/readme.md (100%) rename test.Mod => enums_example/test.Mod (100%) diff --git a/Days.Mod b/enums_example/Days.Mod similarity index 100% rename from Days.Mod rename to enums_example/Days.Mod diff --git a/readme.md b/enums_example/readme.md similarity index 100% rename from readme.md rename to enums_example/readme.md diff --git a/test.Mod b/enums_example/test.Mod similarity index 100% rename from test.Mod rename to enums_example/test.Mod From 512257bacfaa0cbb0d7c40f9574d1392f2418d88 Mon Sep 17 00:00:00 2001 From: norayr Date: Tue, 23 May 2017 16:43:00 +0400 Subject: [PATCH 15/16] 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 From 576603f55d946d422d3271f02c41522655658286 Mon Sep 17 00:00:00 2001 From: norayr Date: Tue, 23 May 2017 17:09:53 +0400 Subject: [PATCH 16/16] testing, need to move the enums example with complete history. --- enums/Days.Mod | 68 ------------------------------------------------- enums/readme.md | 6 ----- enums/test.Mod | 22 ---------------- 3 files changed, 96 deletions(-) delete mode 100644 enums/Days.Mod delete mode 100644 enums/readme.md delete mode 100644 enums/test.Mod diff --git a/enums/Days.Mod b/enums/Days.Mod deleted file mode 100644 index 8611a21..0000000 --- a/enums/Days.Mod +++ /dev/null @@ -1,68 +0,0 @@ -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/enums/readme.md b/enums/readme.md deleted file mode 100644 index 5459059..0000000 --- a/enums/readme.md +++ /dev/null @@ -1,6 +0,0 @@ - - -Example aimed to show how to survive without enumerations in Oberon. - -This way is even cooler than enumerations. (: - diff --git a/enums/test.Mod b/enums/test.Mod deleted file mode 100644 index 8d49b34..0000000 --- a/enums/test.Mod +++ /dev/null @@ -1,22 +0,0 @@ -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.