diff --git a/CharacterStack.Mod b/CharacterStack.Mod new file mode 100644 index 0000000..dfa3b50 --- /dev/null +++ b/CharacterStack.Mod @@ -0,0 +1,83 @@ +MODULE CharaterStack; +IMPORT List, Out, Sys; + +TYPE + integer* = Sys.integer; + + TChar* = POINTER TO TCharDesc; + + TCharDesc = RECORD (List.NodeDesc) + char* : CHAR + END; + + string = Sys.string; + + CharacterStackType = POINTER TO CharacterStackTypeDesc; + + CharacterStackTypeDesc = RECORD (List.TListDesc) + pop: PROCEDURE(self: CharacterStackType): CHAR; + push: PROCEDURE(self: CharacterStackType; char: CHAR); + top: PROCEDURE(self: CharacterStackType) : CHAR; + END; + +PROCEDURE pop(self: CharacterStackType): CHAR; +VAR + ch: TChar; +BEGIN + NEW(ch); + ch := self.Get(self, self.Count); + self.Delete(self, self.Count); + RETURN ch.char; +END pop; + +PROCEDURE push(self: CharacterStackType; char: CHAR); +VAR + int: integer; + ch: TChar; +BEGIN + NEW(ch); + ch.char := char; + int := self.Add(self, ch); +END push; + + +PROCEDURE Create* () : CharacterStackType; + VAR l : CharacterStackType; + BEGIN + NEW(l); + l.First := NIL; + l.Last := NIL; + l.Count := 0; + l.Add := List.Add; + l.Append := List.Append; + l.AppendList := List.AppendList; + l.Clear := List.Clear; + l.Free := List.Free; + l.Insert := List.Insert; + l.Delete := List.Delete; + l.Empty := List.Empty; + l.Get := List.Get; + l.res := TRUE; + + l.pop := pop; + l.push:= push; + (* l.top := top; *) + RETURN(l); +END Create; + +VAR + characterStack: CharacterStackType; +BEGIN + NEW(characterStack); + characterStack.push(characterStack, 'a'); + characterStack.push(characterStack, 'b'); + characterStack.push(characterStack, 'c'); + Out.Char(characterStack.pop(characterStack)); + Out.Ln(); + Out.Char(characterStack.pop(characterStack)); + Out.Ln(); + Out.Char(characterStack.pop(characterStack)); + Out.Ln(); + Out.Char(characterStack.pop(characterStack)); + Out.Ln(); +END CharaterStack. \ No newline at end of file diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..e39bcb2 --- /dev/null +++ b/build.sh @@ -0,0 +1,6 @@ +#/bin/bash + +voc -s \ + ./diaspora2hugo/src/lists/Sys.Mod \ + ./diaspora2hugo/src/lists/List.Mod \ + ./CharacterStack.Mod -m \ No newline at end of file diff --git a/test.Mod b/test.Mod new file mode 100644 index 0000000..2349afe --- /dev/null +++ b/test.Mod @@ -0,0 +1,15 @@ +MODULE test; +IMPORT Out; +VAR + string: POINTER TO ARRAY OF CHAR; +BEGIN + NEW(string, 42); + string[1] := "a"; + Out.Char(string[1]); + Out.Ln(); + Out.Int(ORD(string[1]), 10); + Out.Ln(); + Out.Int(ORD(string[2]), 10); + Out.Ln(); + COPY("Gago", string); +END test. \ No newline at end of file