Fix generalised ReadNum and use for Sym reading.

This commit is contained in:
David Brown 2016-09-30 18:15:46 +01:00
parent 3dc5049d5a
commit 1fa182c7ce
24 changed files with 59 additions and 163 deletions

View file

@ -600,16 +600,16 @@ MODULE OPM; (* RC 6.3.89 / 28.6.89, J.Templ 10.7.89 / 22.7.96 *)
PROCEDURE SymRInt64*(): SYSTEM.INT64;
VAR k: SYSTEM.INT64;
BEGIN Files.ReadNum64(oldSF, k); RETURN k
BEGIN Files.ReadNum(oldSF, k); RETURN k
END SymRInt64;
(* todo - combine RSet64 and RSet *)
PROCEDURE SymRSet64*(VAR s: SYSTEM.SET64);
BEGIN Files.ReadNum64(oldSF, s)
BEGIN Files.ReadNum(oldSF, s)
END SymRSet64;
PROCEDURE SymRSet*(VAR s: SET);
BEGIN Files.ReadNum(oldSF, SYSTEM.VAL(LONGINT, s))
BEGIN Files.ReadNum(oldSF, s)
END SymRSet;
PROCEDURE SymRReal*(VAR r: REAL);

View file

@ -657,7 +657,7 @@ Especially Length would become fairly complex.
PROCEDURE ReadNum*(VAR R: Rider; VAR x: ARRAY OF SYSTEM.BYTE);
VAR s, b: SYSTEM.INT8; q: SYSTEM.INT64;
BEGIN s := 0; q := 0; Read(R, b);
WHILE b >= 128 DO INC(q, ASH(b-128, s)); INC(s, 7); Read(R, b) END;
WHILE b < 0 DO INC(q, ASH(b+128, s)); INC(s, 7); Read(R, b) END;
INC(q, ASH(b MOD 64 - b DIV 64 * 64, s));
ASSERT(LEN(x) <= 8);
SYSTEM.MOVE(SYSTEM.ADR(q), SYSTEM.ADR(x), LEN(x)) (* Assumes little endian representation of q and x. *)

View file

@ -654,23 +654,14 @@ Especially Length would become fairly complex.
UNTIL b
END ReadLine;
(* todo combine ReadNum and ReadNum64 *)
PROCEDURE ReadNum64*(VAR R: Rider; VAR x: ARRAY OF SYSTEM.BYTE);
PROCEDURE ReadNum*(VAR R: Rider; VAR x: ARRAY OF SYSTEM.BYTE);
VAR s, b: SYSTEM.INT8; q: SYSTEM.INT64;
BEGIN s := 0; q := 0; Read(R, b);
WHILE b >= 128 DO INC(q, ASH(b-128, s)); INC(s, 7); Read(R, b) END;
BEGIN
s := 0; q := 0; Read(R, b);
WHILE b < 0 DO INC(q, ASH(b+128, s)); INC(s, 7); Read(R, b) END;
INC(q, ASH(b MOD 64 - b DIV 64 * 64, s));
ASSERT(LEN(x) <= 8);
SYSTEM.MOVE(SYSTEM.ADR(q), SYSTEM.ADR(x), LEN(x)) (* Assumes little endian representation of q and x. *)
END ReadNum64;
PROCEDURE ReadNum* (VAR R: Rider; VAR x: LONGINT);
VAR s: SHORTINT; ch: CHAR; n: LONGINT;
BEGIN s := 0; n := 0; Read(R, ch);
WHILE ORD(ch) >= 128 DO INC(n, ASH(ORD(ch) - 128, s) ); INC(s, 7); Read(R, ch) END;
INC(n, ASH(ORD(ch) MOD 64 - ORD(ch) DIV 64 * 64, s) );
x := n
END ReadNum;
PROCEDURE WriteBool* (VAR R: Rider; x: BOOLEAN);

View file

@ -126,7 +126,7 @@ void determineOS() {
#endif
}
#define optimize " -O1"
#define optimize "" // " -O1"
void determineCCompiler() {
snprintf(libspec, sizeof(libspec), " -l %s", oname);