From 246fa180b8956d53f9b1c27d4cdb3412a287d42a Mon Sep 17 00:00:00 2001 From: Norayr Chilingarian Date: Mon, 3 Feb 2014 12:15:35 +0400 Subject: [PATCH] Listen.Mod added Former-commit-id: 74bb4adb10312d0324d5200c3035e2673f975d11 --- makefile | 1 + makefile.gnuc.armv6j | 1 + makefile.gnuc.armv6j_hardfp | 1 + makefile.gnuc.armv7a_hardfp | 1 + makefile.gnuc.powerpc | 1 + makefile.gnuc.x86 | 1 + makefile.gnuc.x86_64 | 1 + src/lib/misc/Listen.Mod | 61 +++++++++++++++++++++++++++++++++++++ 8 files changed, 68 insertions(+) create mode 100644 src/lib/misc/Listen.Mod diff --git a/makefile b/makefile index b444a5ce..86097c64 100644 --- a/makefile +++ b/makefile @@ -227,6 +227,7 @@ stage6: $(VOCSTATIC) -sP MultiArrays.Mod $(VOCSTATIC) -sP MultiArrayRiders.Mod $(VOCSTATIC) -sP MersenneTwister.Mod + $(VOCSTATIC) -sP Listen.Mod #s3 libs $(VOCSTATIC) -sP ethBTrees.Mod diff --git a/makefile.gnuc.armv6j b/makefile.gnuc.armv6j index b6f8d55f..5e1b5c54 100644 --- a/makefile.gnuc.armv6j +++ b/makefile.gnuc.armv6j @@ -227,6 +227,7 @@ stage6: $(VOCSTATIC) -sP MultiArrays.Mod $(VOCSTATIC) -sP MultiArrayRiders.Mod $(VOCSTATIC) -sP MersenneTwister.Mod + $(VOCSTATIC) -sP Listen.Mod #s3 libs $(VOCSTATIC) -sP ethBTrees.Mod diff --git a/makefile.gnuc.armv6j_hardfp b/makefile.gnuc.armv6j_hardfp index 2f1a1bb2..4961f4a2 100644 --- a/makefile.gnuc.armv6j_hardfp +++ b/makefile.gnuc.armv6j_hardfp @@ -227,6 +227,7 @@ stage6: $(VOCSTATIC) -sP MultiArrays.Mod $(VOCSTATIC) -sP MultiArrayRiders.Mod $(VOCSTATIC) -sP MersenneTwister.Mod + $(VOCSTATIC) -sP Listen.Mod #s3 libs $(VOCSTATIC) -sP ethBTrees.Mod diff --git a/makefile.gnuc.armv7a_hardfp b/makefile.gnuc.armv7a_hardfp index 3d0498a2..48e192cd 100644 --- a/makefile.gnuc.armv7a_hardfp +++ b/makefile.gnuc.armv7a_hardfp @@ -227,6 +227,7 @@ stage6: $(VOCSTATIC) -sP MultiArrays.Mod $(VOCSTATIC) -sP MultiArrayRiders.Mod $(VOCSTATIC) -sP MersenneTwister.Mod + $(VOCSTATIC) -sP Listen.Mod #s3 libs $(VOCSTATIC) -sP ethBTrees.Mod diff --git a/makefile.gnuc.powerpc b/makefile.gnuc.powerpc index 09002914..bb00e2af 100644 --- a/makefile.gnuc.powerpc +++ b/makefile.gnuc.powerpc @@ -227,6 +227,7 @@ stage6: $(VOCSTATIC) -sP MultiArrays.Mod $(VOCSTATIC) -sP MultiArrayRiders.Mod $(VOCSTATIC) -sP MersenneTwister.Mod + $(VOCSTATIC) -sP Listen.Mod #s3 libs $(VOCSTATIC) -sP ethBTrees.Mod diff --git a/makefile.gnuc.x86 b/makefile.gnuc.x86 index ae19c11e..4cb8bfe6 100644 --- a/makefile.gnuc.x86 +++ b/makefile.gnuc.x86 @@ -227,6 +227,7 @@ stage6: $(VOCSTATIC) -sP MultiArrays.Mod $(VOCSTATIC) -sP MultiArrayRiders.Mod $(VOCSTATIC) -sP MersenneTwister.Mod + $(VOCSTATIC) -sP Listen.Mod #s3 libs $(VOCSTATIC) -sP ethBTrees.Mod diff --git a/makefile.gnuc.x86_64 b/makefile.gnuc.x86_64 index b444a5ce..86097c64 100644 --- a/makefile.gnuc.x86_64 +++ b/makefile.gnuc.x86_64 @@ -227,6 +227,7 @@ stage6: $(VOCSTATIC) -sP MultiArrays.Mod $(VOCSTATIC) -sP MultiArrayRiders.Mod $(VOCSTATIC) -sP MersenneTwister.Mod + $(VOCSTATIC) -sP Listen.Mod #s3 libs $(VOCSTATIC) -sP ethBTrees.Mod diff --git a/src/lib/misc/Listen.Mod b/src/lib/misc/Listen.Mod new file mode 100644 index 00000000..a3263f39 --- /dev/null +++ b/src/lib/misc/Listen.Mod @@ -0,0 +1,61 @@ +(* + Module taken from http://www.dg.bnv-bamberg.de/seiten/faecher/informat/oberon/aachen/listen.htm +Author: zita@pegasus.dvz.fh-aachen.de + +*) + +MODULE Listen; +TYPE + Element* = POINTER TO ElementDesc; + ElementDesc* = RECORD END; + Liste* = POINTER TO ListDesc; + ListDesc = RECORD + e: Element; + rest: Liste + END; + + CompareProc=PROCEDURE(e1,e2:Element):BOOLEAN; + + PROCEDURE Concat*(head: Element; tail: Liste): Liste; + VAR temp:Liste; + BEGIN + NEW(temp); temp.e := head; temp.rest := tail; + RETURN temp + END Concat; + + PROCEDURE Head* (l:Liste):Element; + BEGIN + RETURN l.e + END Head; + + PROCEDURE Tail* (l:Liste):Liste; + BEGIN + RETURN l.rest + END Tail; + + PROCEDURE Append* (list: Liste; e: Element): Liste; + BEGIN + IF list = NIL THEN + RETURN Concat(e, NIL) ELSE + RETURN Concat(Head(list),Append(Tail(list),e)) + END; + END Append; + + + PROCEDURE IsElement*(e:Element;l:Liste;equal:CompareProc):BOOLEAN; + BEGIN + IF l = NIL THEN RETURN FALSE + ELSIF equal(e,Head(l)) THEN RETURN TRUE + ELSE RETURN IsElement(e,Tail(l),equal) + END + END IsElement; + + PROCEDURE Find*(e:Element;l:Liste;equal:CompareProc):Element; + BEGIN + IF l = NIL THEN RETURN NIL + ELSIF equal(e,Head(l)) THEN RETURN Head(l) + ELSE RETURN Find(e,Tail(l),equal) + END + END Find; + +END Listen.