(* This is designed to run Under Oberon V4 *) MODULE TTable; IMPORT Oberon, Texts; VAR w: Texts.Writer; (* Helper function writes T or F depending on the boolean value given *) PROCEDURE Writebool (x:BOOLEAN); BEGIN IF x=TRUE THEN Texts.WriteString(w," T ") ELSE Texts.WriteString(w," F ") END; END Writebool; (* Performs a logical exclusive or on two boolean parameters *) PROCEDURE Xor (x:BOOLEAN; y:BOOLEAN): BOOLEAN; BEGIN IF (((x=TRUE) & (y=TRUE)) OR ((x=FALSE) & (y=FALSE))) THEN RETURN FALSE; ELSE RETURN TRUE; END; END Xor; (* Performs a conditional expression operation on two boolean parameters *) PROCEDURE Cond(x:BOOLEAN; y:BOOLEAN): BOOLEAN; BEGIN; IF (x = TRUE) & (y = FALSE) THEN RETURN FALSE; ELSE RETURN TRUE; END; END Cond; PROCEDURE Write*; VAR p,q,r,s,t,u:BOOLEAN; (* Truth cases *) a,b,c,d,e,f:INTEGER; (* Loop variables *) BEGIN (* Header *) Texts.WriteString(w,"(((((p -> q) AND r) OR s) NOR t) XOR u)"); Texts.WriteLn(w); (* Loop for all cases of True and False) p:=TRUE; FOR a:=1 TO 2 DO q:=TRUE; FOR b:=1 TO 2 DO r:=TRUE; FOR c:=1 TO 2 DO s:=TRUE; FOR d:=1 TO 2 DO t:=TRUE; FOR e:=1 TO 2 DO u:=TRUE; FOR f:=1 TO 2 DO Writebool (p); Writebool (q); Writebool (r); Writebool (s); Writebool (t); Writebool (u); Texts.WriteString (w," | "); IF ( Xor ( ~( ( (Cond(p,q) & r) OR s) OR t), u)) = TRUE THEN Texts.WriteString(w, "T") ; ELSE Texts.WriteString(w, "F"); END; Texts.WriteLn(w); Texts.Append(Oberon.Log,w.buf); u:= FALSE; END; t:= FALSE; END; s:= FALSE; END; r:= FALSE; END; q:= FALSE; END; r:=FALSE; END;
(((((p -> q) AND r) OR s) NOR t) XOR u) T T T T T T | T T T T T T F | F T T T T F T | T T T T T F F | F T T T F T T | T T T T F T F | F T T T F F T | T T T T F F F | F T T F T T T | T T T F T T F | F T T F T F T | T T T F T F F | F T T F F T T | T T T F F T F | F T T F F F T | F T T F F F F | T T F T T T T | T T F T T T F | F T F T T F T | T T F T T F F | F T F T F T T | T T F T F T F | F T F T F F T | F T F T F F F | T T F F T T T | T T F F T T F | F T F F T F T | T T F F T F F | F T F F F T T | T T F F F T F | F T F F F F T | F T F F F F F | T T T T T T T | T T T T T T F | F T T T T F T | T T T T T F F | F T T T F T T | T T T T F T F | F T T T F F T | T T T T F F F | F T T F T T T | T T T F T T F | F T T F T F T | T T T F T F F | F T T F F T T | T T T F F T F | F T T F F F T | F T T F F F F | T T F T T T T | T T F T T T F | F T F T T F T | T T F T T F F | F T F T F T T | T T F T F T F | F T F T F F T | F T F T F F F | T T F F T T T | T T F F T T F | F T F F T F T | T T F F T F F | F T F F F T T | T T F F F T F | F T F F F F T | F T F F F F F | T
This program tested on Oberon V4 Windows 32 bit version. When you create a new file TTable.Mod in Oberon's editor (Edit.Open TTable.Mod), sellect this text now and copy it ito the clipboard (File/Copy), paste it into Hello.Mod by placing the caret in that window and executing Clipboard.Copy command anywhere on the screen. Compiling is done by placing a marker (F1 key) on TTable.Mod window and running Compiler.Compile * in the System.Tool.