瀏覽代碼

display set values in big endian notation (Writer.Set)

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@6621 8c9fc860-2736-0410-a75d-ab315db34111
eth.guenter 9 年之前
父節點
當前提交
d0eff46b54
共有 1 個文件被更改,包括 21 次插入2 次删除
  1. 21 2
      source/Streams.Mod

+ 21 - 2
source/Streams.Mod

@@ -251,7 +251,7 @@ TYPE
 		END Int;
 
 	(** Write a SET in Oberon notation. *)
-		PROCEDURE Set*( s: SET );   (* from P. Saladin *)
+	(*	PROCEDURE Set*( s: SET );   (* from P. Saladin *)
 		VAR i, last: LONGINT;  dots: BOOLEAN;
 		BEGIN
 			Char( "{" );  last := MIN( LONGINT );  dots := FALSE;
@@ -268,7 +268,26 @@ TYPE
 				END
 			END;
 			Char( "}" )
-		END Set;
+		END Set;	*)
+		
+		PROCEDURE Set*( s: SET );   (* from P. Saladin *)
+		VAR i, last: LONGINT;  dots: BOOLEAN;
+		BEGIN
+			Char( "{" );  last := MAX( LONGINT );  dots := FALSE;
+			FOR i := MAX( SET ) TO 0 BY -1 DO
+				IF i IN s THEN
+					IF last = (i + 1) THEN
+						IF dots THEN String( ".." );  dots := FALSE END;
+						IF (i = 0) OR ~((i - 1) IN s) THEN Int( i, 1 ) END
+					ELSE
+						IF last <= MAX( SET ) THEN String( ", " ) END;
+						Int( i, 1 );  dots := TRUE
+					END;
+					last := i
+				END
+			END;
+			Char( "}" )
+		END Set
 
 		(**
 			Write an integer in hexadecimal right-justified in a field of at least ABS(w) characters.