Jelajahi Sumber

Removed output of 0X characters when tracing commands
Removed double output when SetPos feature of a stream is used

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7343 8c9fc860-2736-0410-a75d-ab315db34111

felixf 7 tahun lalu
induk
melakukan
5efdda3582
1 mengubah file dengan 15 tambahan dan 5 penghapusan
  1. 15 5
      source/Commands.Mod

+ 15 - 5
source/Commands.Mod

@@ -47,7 +47,7 @@ TYPE
 
 	(*see StreamUtilities.Mod: reader that can daisychained with another reader that extracts a copy of the data flow to a monitor stream*)
 	ReaderMonitor* = OBJECT(Streams.Reader)
-		VAR in: Streams.Reader; tracer: Streams.Writer; receive: Streams.Receiver; pos0: LONGINT;
+		VAR in: Streams.Reader; tracer: Streams.Writer; pos0: LONGINT; tracedPos: LONGINT;
 
 		PROCEDURE &Init(in: Streams.Reader; tracer: Streams.Writer);
 		BEGIN
@@ -55,16 +55,24 @@ TYPE
 			InitReader(Receiver, 1024);
 			SELF.in := in;
 			pos0 := in.Pos();
+			tracedPos := pos0;
 		END Init;
 
 		PROCEDURE Receiver(VAR buf: ARRAY OF CHAR; ofs, size, min: LONGINT; VAR len, res: LONGINT);
+		VAR inReader: Streams.Reader;nextPos: LONGINT;
 		BEGIN
+			inReader := in;
 			ASSERT((size > 0) & (min <= size) & (min >= 0));
 			in.Bytes(buf, ofs, size, len);
-			tracer.Bytes(buf, ofs, len);
-			IF len < size THEN (* end of data indication *)
-				tracer.String("~"); tracer.Ln;
+			(* filter out 0X characters *)
+			nextPos := tracedPos;
+			WHILE (nextPos < ofs + len) & (buf[nextPos] # 0X) DO
+				INC(nextPos);
 			END;
+			IF nextPos > tracedPos THEN
+				tracer.Bytes(buf,tracedPos,nextPos-tracedPos);
+			END;
+			tracedPos := nextPos;
 			res:=in.res
 		END Receiver;
 
@@ -163,7 +171,9 @@ TYPE
 			res := CommandTrapped; COPY("Exception during command execution", msg);
 		END;
 		IF trace THEN
-			tracer.String(" ~"); tracer.Ln; tracer.Update
+			tracer.String(" ~"); 
+			tracer.Ln; 
+			tracer.Update
 		END;
 		BEGIN {EXCLUSIVE} state := Finished; END;
 	END Runner;