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.