From 3dc5049d5a637f9aa83a1d23a35a602820815deb Mon Sep 17 00:00:00 2001 From: David Brown Date: Fri, 30 Sep 2016 17:19:26 +0100 Subject: [PATCH] Stepping toward generalised ReadNum. --- bootstrap/unix-44/Files.c | 18 ++++++++++++++++++ bootstrap/unix-44/Files.h | 1 + bootstrap/unix-44/OPM.c | 10 +++++++++- bootstrap/unix-44/OPM.h | 1 + bootstrap/unix-48/Files.c | 18 ++++++++++++++++++ bootstrap/unix-48/Files.h | 1 + bootstrap/unix-48/OPM.c | 10 +++++++++- bootstrap/unix-48/OPM.h | 1 + bootstrap/unix-88/Files.c | 18 ++++++++++++++++++ bootstrap/unix-88/Files.h | 1 + bootstrap/unix-88/OPM.c | 10 +++++++++- bootstrap/unix-88/OPM.h | 1 + bootstrap/windows-48/Files.c | 18 ++++++++++++++++++ bootstrap/windows-48/Files.h | 1 + bootstrap/windows-48/OPM.c | 10 +++++++++- bootstrap/windows-48/OPM.h | 1 + bootstrap/windows-88/Files.c | 18 ++++++++++++++++++ bootstrap/windows-88/Files.h | 1 + bootstrap/windows-88/OPM.c | 10 +++++++++- bootstrap/windows-88/OPM.h | 1 + src/compiler/OPM.Mod | 18 ++++++------------ src/runtime/Files.Mod | 10 ---------- src/system/Files.Mod | 8 ++++---- src/tools/make/oberon.mk | 2 +- 24 files changed, 156 insertions(+), 32 deletions(-) diff --git a/bootstrap/unix-44/Files.c b/bootstrap/unix-44/Files.c index b1a7e280..81252466 100644 --- a/bootstrap/unix-44/Files.c +++ b/bootstrap/unix-44/Files.c @@ -89,6 +89,7 @@ export void Files_ReadLInt (Files_Rider *R, address *R__typ, int32 *x); export void Files_ReadLReal (Files_Rider *R, address *R__typ, LONGREAL *x); export void Files_ReadLine (Files_Rider *R, address *R__typ, CHAR *x, LONGINT x__len); export void Files_ReadNum (Files_Rider *R, address *R__typ, int32 *x); +export void Files_ReadNum64 (Files_Rider *R, address *R__typ, SYSTEM_BYTE *x, LONGINT x__len); export void Files_ReadReal (Files_Rider *R, address *R__typ, REAL *x); export void Files_ReadSet (Files_Rider *R, address *R__typ, uint32 *x); export void Files_ReadString (Files_Rider *R, address *R__typ, CHAR *x, LONGINT x__len); @@ -914,6 +915,23 @@ void Files_ReadLine (Files_Rider *R, address *R__typ, CHAR *x, LONGINT x__len) } while (!b); } +void Files_ReadNum64 (Files_Rider *R, address *R__typ, SYSTEM_BYTE *x, LONGINT x__len) +{ + int8 s, b; + int64 q; + s = 0; + q = 0; + Files_Read(&*R, R__typ, (void*)&b); + while ((int16)b >= 128) { + q += (int64)__ASH(((int16)b - 128), s); + s += 7; + Files_Read(&*R, R__typ, (void*)&b); + } + q += (int64)__ASH((__MASK(b, -64) - __ASHL(__ASHR(b, 6), 6)), s); + __ASSERT(x__len <= 8, 0); + __MOVE((address)&q, (address)x, x__len); +} + void Files_ReadNum (Files_Rider *R, address *R__typ, int32 *x) { int8 s; diff --git a/bootstrap/unix-44/Files.h b/bootstrap/unix-44/Files.h index fd146132..af64d06f 100644 --- a/bootstrap/unix-44/Files.h +++ b/bootstrap/unix-44/Files.h @@ -46,6 +46,7 @@ import void Files_ReadLInt (Files_Rider *R, address *R__typ, int32 *x); import void Files_ReadLReal (Files_Rider *R, address *R__typ, LONGREAL *x); import void Files_ReadLine (Files_Rider *R, address *R__typ, CHAR *x, LONGINT x__len); import void Files_ReadNum (Files_Rider *R, address *R__typ, int32 *x); +import void Files_ReadNum64 (Files_Rider *R, address *R__typ, SYSTEM_BYTE *x, LONGINT x__len); import void Files_ReadReal (Files_Rider *R, address *R__typ, REAL *x); import void Files_ReadSet (Files_Rider *R, address *R__typ, uint32 *x); import void Files_ReadString (Files_Rider *R, address *R__typ, CHAR *x, LONGINT x__len); diff --git a/bootstrap/unix-44/OPM.c b/bootstrap/unix-44/OPM.c index 32bb978e..7e770a33 100644 --- a/bootstrap/unix-44/OPM.c +++ b/bootstrap/unix-44/OPM.c @@ -82,6 +82,7 @@ export int64 OPM_SymRInt64 (void); export void OPM_SymRLReal (LONGREAL *lr); export void OPM_SymRReal (REAL *r); export void OPM_SymRSet (uint32 *s); +export void OPM_SymRSet64 (uint64 *s); export void OPM_SymWCh (CHAR ch); export void OPM_SymWInt (int64 i); export void OPM_SymWLReal (LONGREAL lr); @@ -752,10 +753,17 @@ int32 OPM_SymRInt (void) int64 OPM_SymRInt64 (void) { int64 _o_result; - _o_result = OPM_SymRInt(); + int64 k; + Files_ReadNum64(&OPM_oldSF, Files_Rider__typ, (void*)&k, 8); + _o_result = k; return _o_result; } +void OPM_SymRSet64 (uint64 *s) +{ + Files_ReadNum64(&OPM_oldSF, Files_Rider__typ, (void*)&*s, 8); +} + void OPM_SymRSet (uint32 *s) { Files_ReadNum(&OPM_oldSF, Files_Rider__typ, (int32*)&*s); diff --git a/bootstrap/unix-44/OPM.h b/bootstrap/unix-44/OPM.h index dd3c0c27..12db4754 100644 --- a/bootstrap/unix-44/OPM.h +++ b/bootstrap/unix-44/OPM.h @@ -50,6 +50,7 @@ import int64 OPM_SymRInt64 (void); import void OPM_SymRLReal (LONGREAL *lr); import void OPM_SymRReal (REAL *r); import void OPM_SymRSet (uint32 *s); +import void OPM_SymRSet64 (uint64 *s); import void OPM_SymWCh (CHAR ch); import void OPM_SymWInt (int64 i); import void OPM_SymWLReal (LONGREAL lr); diff --git a/bootstrap/unix-48/Files.c b/bootstrap/unix-48/Files.c index b1a7e280..81252466 100644 --- a/bootstrap/unix-48/Files.c +++ b/bootstrap/unix-48/Files.c @@ -89,6 +89,7 @@ export void Files_ReadLInt (Files_Rider *R, address *R__typ, int32 *x); export void Files_ReadLReal (Files_Rider *R, address *R__typ, LONGREAL *x); export void Files_ReadLine (Files_Rider *R, address *R__typ, CHAR *x, LONGINT x__len); export void Files_ReadNum (Files_Rider *R, address *R__typ, int32 *x); +export void Files_ReadNum64 (Files_Rider *R, address *R__typ, SYSTEM_BYTE *x, LONGINT x__len); export void Files_ReadReal (Files_Rider *R, address *R__typ, REAL *x); export void Files_ReadSet (Files_Rider *R, address *R__typ, uint32 *x); export void Files_ReadString (Files_Rider *R, address *R__typ, CHAR *x, LONGINT x__len); @@ -914,6 +915,23 @@ void Files_ReadLine (Files_Rider *R, address *R__typ, CHAR *x, LONGINT x__len) } while (!b); } +void Files_ReadNum64 (Files_Rider *R, address *R__typ, SYSTEM_BYTE *x, LONGINT x__len) +{ + int8 s, b; + int64 q; + s = 0; + q = 0; + Files_Read(&*R, R__typ, (void*)&b); + while ((int16)b >= 128) { + q += (int64)__ASH(((int16)b - 128), s); + s += 7; + Files_Read(&*R, R__typ, (void*)&b); + } + q += (int64)__ASH((__MASK(b, -64) - __ASHL(__ASHR(b, 6), 6)), s); + __ASSERT(x__len <= 8, 0); + __MOVE((address)&q, (address)x, x__len); +} + void Files_ReadNum (Files_Rider *R, address *R__typ, int32 *x) { int8 s; diff --git a/bootstrap/unix-48/Files.h b/bootstrap/unix-48/Files.h index fd146132..af64d06f 100644 --- a/bootstrap/unix-48/Files.h +++ b/bootstrap/unix-48/Files.h @@ -46,6 +46,7 @@ import void Files_ReadLInt (Files_Rider *R, address *R__typ, int32 *x); import void Files_ReadLReal (Files_Rider *R, address *R__typ, LONGREAL *x); import void Files_ReadLine (Files_Rider *R, address *R__typ, CHAR *x, LONGINT x__len); import void Files_ReadNum (Files_Rider *R, address *R__typ, int32 *x); +import void Files_ReadNum64 (Files_Rider *R, address *R__typ, SYSTEM_BYTE *x, LONGINT x__len); import void Files_ReadReal (Files_Rider *R, address *R__typ, REAL *x); import void Files_ReadSet (Files_Rider *R, address *R__typ, uint32 *x); import void Files_ReadString (Files_Rider *R, address *R__typ, CHAR *x, LONGINT x__len); diff --git a/bootstrap/unix-48/OPM.c b/bootstrap/unix-48/OPM.c index 32bb978e..7e770a33 100644 --- a/bootstrap/unix-48/OPM.c +++ b/bootstrap/unix-48/OPM.c @@ -82,6 +82,7 @@ export int64 OPM_SymRInt64 (void); export void OPM_SymRLReal (LONGREAL *lr); export void OPM_SymRReal (REAL *r); export void OPM_SymRSet (uint32 *s); +export void OPM_SymRSet64 (uint64 *s); export void OPM_SymWCh (CHAR ch); export void OPM_SymWInt (int64 i); export void OPM_SymWLReal (LONGREAL lr); @@ -752,10 +753,17 @@ int32 OPM_SymRInt (void) int64 OPM_SymRInt64 (void) { int64 _o_result; - _o_result = OPM_SymRInt(); + int64 k; + Files_ReadNum64(&OPM_oldSF, Files_Rider__typ, (void*)&k, 8); + _o_result = k; return _o_result; } +void OPM_SymRSet64 (uint64 *s) +{ + Files_ReadNum64(&OPM_oldSF, Files_Rider__typ, (void*)&*s, 8); +} + void OPM_SymRSet (uint32 *s) { Files_ReadNum(&OPM_oldSF, Files_Rider__typ, (int32*)&*s); diff --git a/bootstrap/unix-48/OPM.h b/bootstrap/unix-48/OPM.h index dd3c0c27..12db4754 100644 --- a/bootstrap/unix-48/OPM.h +++ b/bootstrap/unix-48/OPM.h @@ -50,6 +50,7 @@ import int64 OPM_SymRInt64 (void); import void OPM_SymRLReal (LONGREAL *lr); import void OPM_SymRReal (REAL *r); import void OPM_SymRSet (uint32 *s); +import void OPM_SymRSet64 (uint64 *s); import void OPM_SymWCh (CHAR ch); import void OPM_SymWInt (int64 i); import void OPM_SymWLReal (LONGREAL lr); diff --git a/bootstrap/unix-88/Files.c b/bootstrap/unix-88/Files.c index 8e446a1c..75dee180 100644 --- a/bootstrap/unix-88/Files.c +++ b/bootstrap/unix-88/Files.c @@ -89,6 +89,7 @@ export void Files_ReadLInt (Files_Rider *R, address *R__typ, int32 *x); export void Files_ReadLReal (Files_Rider *R, address *R__typ, LONGREAL *x); export void Files_ReadLine (Files_Rider *R, address *R__typ, CHAR *x, LONGINT x__len); export void Files_ReadNum (Files_Rider *R, address *R__typ, int32 *x); +export void Files_ReadNum64 (Files_Rider *R, address *R__typ, SYSTEM_BYTE *x, LONGINT x__len); export void Files_ReadReal (Files_Rider *R, address *R__typ, REAL *x); export void Files_ReadSet (Files_Rider *R, address *R__typ, uint32 *x); export void Files_ReadString (Files_Rider *R, address *R__typ, CHAR *x, LONGINT x__len); @@ -914,6 +915,23 @@ void Files_ReadLine (Files_Rider *R, address *R__typ, CHAR *x, LONGINT x__len) } while (!b); } +void Files_ReadNum64 (Files_Rider *R, address *R__typ, SYSTEM_BYTE *x, LONGINT x__len) +{ + int8 s, b; + int64 q; + s = 0; + q = 0; + Files_Read(&*R, R__typ, (void*)&b); + while ((int16)b >= 128) { + q += (int64)__ASH(((int16)b - 128), s); + s += 7; + Files_Read(&*R, R__typ, (void*)&b); + } + q += (int64)__ASH((__MASK(b, -64) - __ASHL(__ASHR(b, 6), 6)), s); + __ASSERT(x__len <= 8, 0); + __MOVE((address)&q, (address)x, x__len); +} + void Files_ReadNum (Files_Rider *R, address *R__typ, int32 *x) { int8 s; diff --git a/bootstrap/unix-88/Files.h b/bootstrap/unix-88/Files.h index edb43852..0ba00834 100644 --- a/bootstrap/unix-88/Files.h +++ b/bootstrap/unix-88/Files.h @@ -48,6 +48,7 @@ import void Files_ReadLInt (Files_Rider *R, address *R__typ, int32 *x); import void Files_ReadLReal (Files_Rider *R, address *R__typ, LONGREAL *x); import void Files_ReadLine (Files_Rider *R, address *R__typ, CHAR *x, LONGINT x__len); import void Files_ReadNum (Files_Rider *R, address *R__typ, int32 *x); +import void Files_ReadNum64 (Files_Rider *R, address *R__typ, SYSTEM_BYTE *x, LONGINT x__len); import void Files_ReadReal (Files_Rider *R, address *R__typ, REAL *x); import void Files_ReadSet (Files_Rider *R, address *R__typ, uint32 *x); import void Files_ReadString (Files_Rider *R, address *R__typ, CHAR *x, LONGINT x__len); diff --git a/bootstrap/unix-88/OPM.c b/bootstrap/unix-88/OPM.c index 9ecaaba2..deeaaa1d 100644 --- a/bootstrap/unix-88/OPM.c +++ b/bootstrap/unix-88/OPM.c @@ -82,6 +82,7 @@ export int64 OPM_SymRInt64 (void); export void OPM_SymRLReal (LONGREAL *lr); export void OPM_SymRReal (REAL *r); export void OPM_SymRSet (uint32 *s); +export void OPM_SymRSet64 (uint64 *s); export void OPM_SymWCh (CHAR ch); export void OPM_SymWInt (int64 i); export void OPM_SymWLReal (LONGREAL lr); @@ -752,10 +753,17 @@ int32 OPM_SymRInt (void) int64 OPM_SymRInt64 (void) { int64 _o_result; - _o_result = OPM_SymRInt(); + int64 k; + Files_ReadNum64(&OPM_oldSF, Files_Rider__typ, (void*)&k, 8); + _o_result = k; return _o_result; } +void OPM_SymRSet64 (uint64 *s) +{ + Files_ReadNum64(&OPM_oldSF, Files_Rider__typ, (void*)&*s, 8); +} + void OPM_SymRSet (uint32 *s) { Files_ReadNum(&OPM_oldSF, Files_Rider__typ, (int32*)&*s); diff --git a/bootstrap/unix-88/OPM.h b/bootstrap/unix-88/OPM.h index dd3c0c27..12db4754 100644 --- a/bootstrap/unix-88/OPM.h +++ b/bootstrap/unix-88/OPM.h @@ -50,6 +50,7 @@ import int64 OPM_SymRInt64 (void); import void OPM_SymRLReal (LONGREAL *lr); import void OPM_SymRReal (REAL *r); import void OPM_SymRSet (uint32 *s); +import void OPM_SymRSet64 (uint64 *s); import void OPM_SymWCh (CHAR ch); import void OPM_SymWInt (int64 i); import void OPM_SymWLReal (LONGREAL lr); diff --git a/bootstrap/windows-48/Files.c b/bootstrap/windows-48/Files.c index 39445fd2..003173fa 100644 --- a/bootstrap/windows-48/Files.c +++ b/bootstrap/windows-48/Files.c @@ -89,6 +89,7 @@ export void Files_ReadLInt (Files_Rider *R, address *R__typ, int32 *x); export void Files_ReadLReal (Files_Rider *R, address *R__typ, LONGREAL *x); export void Files_ReadLine (Files_Rider *R, address *R__typ, CHAR *x, LONGINT x__len); export void Files_ReadNum (Files_Rider *R, address *R__typ, int32 *x); +export void Files_ReadNum64 (Files_Rider *R, address *R__typ, SYSTEM_BYTE *x, LONGINT x__len); export void Files_ReadReal (Files_Rider *R, address *R__typ, REAL *x); export void Files_ReadSet (Files_Rider *R, address *R__typ, uint32 *x); export void Files_ReadString (Files_Rider *R, address *R__typ, CHAR *x, LONGINT x__len); @@ -914,6 +915,23 @@ void Files_ReadLine (Files_Rider *R, address *R__typ, CHAR *x, LONGINT x__len) } while (!b); } +void Files_ReadNum64 (Files_Rider *R, address *R__typ, SYSTEM_BYTE *x, LONGINT x__len) +{ + int8 s, b; + int64 q; + s = 0; + q = 0; + Files_Read(&*R, R__typ, (void*)&b); + while ((int16)b >= 128) { + q += (int64)__ASH(((int16)b - 128), s); + s += 7; + Files_Read(&*R, R__typ, (void*)&b); + } + q += (int64)__ASH((__MASK(b, -64) - __ASHL(__ASHR(b, 6), 6)), s); + __ASSERT(x__len <= 8, 0); + __MOVE((address)&q, (address)x, x__len); +} + void Files_ReadNum (Files_Rider *R, address *R__typ, int32 *x) { int8 s; diff --git a/bootstrap/windows-48/Files.h b/bootstrap/windows-48/Files.h index 1b482bb6..12fa2cfa 100644 --- a/bootstrap/windows-48/Files.h +++ b/bootstrap/windows-48/Files.h @@ -46,6 +46,7 @@ import void Files_ReadLInt (Files_Rider *R, address *R__typ, int32 *x); import void Files_ReadLReal (Files_Rider *R, address *R__typ, LONGREAL *x); import void Files_ReadLine (Files_Rider *R, address *R__typ, CHAR *x, LONGINT x__len); import void Files_ReadNum (Files_Rider *R, address *R__typ, int32 *x); +import void Files_ReadNum64 (Files_Rider *R, address *R__typ, SYSTEM_BYTE *x, LONGINT x__len); import void Files_ReadReal (Files_Rider *R, address *R__typ, REAL *x); import void Files_ReadSet (Files_Rider *R, address *R__typ, uint32 *x); import void Files_ReadString (Files_Rider *R, address *R__typ, CHAR *x, LONGINT x__len); diff --git a/bootstrap/windows-48/OPM.c b/bootstrap/windows-48/OPM.c index 32bb978e..7e770a33 100644 --- a/bootstrap/windows-48/OPM.c +++ b/bootstrap/windows-48/OPM.c @@ -82,6 +82,7 @@ export int64 OPM_SymRInt64 (void); export void OPM_SymRLReal (LONGREAL *lr); export void OPM_SymRReal (REAL *r); export void OPM_SymRSet (uint32 *s); +export void OPM_SymRSet64 (uint64 *s); export void OPM_SymWCh (CHAR ch); export void OPM_SymWInt (int64 i); export void OPM_SymWLReal (LONGREAL lr); @@ -752,10 +753,17 @@ int32 OPM_SymRInt (void) int64 OPM_SymRInt64 (void) { int64 _o_result; - _o_result = OPM_SymRInt(); + int64 k; + Files_ReadNum64(&OPM_oldSF, Files_Rider__typ, (void*)&k, 8); + _o_result = k; return _o_result; } +void OPM_SymRSet64 (uint64 *s) +{ + Files_ReadNum64(&OPM_oldSF, Files_Rider__typ, (void*)&*s, 8); +} + void OPM_SymRSet (uint32 *s) { Files_ReadNum(&OPM_oldSF, Files_Rider__typ, (int32*)&*s); diff --git a/bootstrap/windows-48/OPM.h b/bootstrap/windows-48/OPM.h index dd3c0c27..12db4754 100644 --- a/bootstrap/windows-48/OPM.h +++ b/bootstrap/windows-48/OPM.h @@ -50,6 +50,7 @@ import int64 OPM_SymRInt64 (void); import void OPM_SymRLReal (LONGREAL *lr); import void OPM_SymRReal (REAL *r); import void OPM_SymRSet (uint32 *s); +import void OPM_SymRSet64 (uint64 *s); import void OPM_SymWCh (CHAR ch); import void OPM_SymWInt (int64 i); import void OPM_SymWLReal (LONGREAL lr); diff --git a/bootstrap/windows-88/Files.c b/bootstrap/windows-88/Files.c index 8d9e0113..36fc4d53 100644 --- a/bootstrap/windows-88/Files.c +++ b/bootstrap/windows-88/Files.c @@ -89,6 +89,7 @@ export void Files_ReadLInt (Files_Rider *R, address *R__typ, int32 *x); export void Files_ReadLReal (Files_Rider *R, address *R__typ, LONGREAL *x); export void Files_ReadLine (Files_Rider *R, address *R__typ, CHAR *x, LONGINT x__len); export void Files_ReadNum (Files_Rider *R, address *R__typ, int32 *x); +export void Files_ReadNum64 (Files_Rider *R, address *R__typ, SYSTEM_BYTE *x, LONGINT x__len); export void Files_ReadReal (Files_Rider *R, address *R__typ, REAL *x); export void Files_ReadSet (Files_Rider *R, address *R__typ, uint32 *x); export void Files_ReadString (Files_Rider *R, address *R__typ, CHAR *x, LONGINT x__len); @@ -914,6 +915,23 @@ void Files_ReadLine (Files_Rider *R, address *R__typ, CHAR *x, LONGINT x__len) } while (!b); } +void Files_ReadNum64 (Files_Rider *R, address *R__typ, SYSTEM_BYTE *x, LONGINT x__len) +{ + int8 s, b; + int64 q; + s = 0; + q = 0; + Files_Read(&*R, R__typ, (void*)&b); + while ((int16)b >= 128) { + q += (int64)__ASH(((int16)b - 128), s); + s += 7; + Files_Read(&*R, R__typ, (void*)&b); + } + q += (int64)__ASH((__MASK(b, -64) - __ASHL(__ASHR(b, 6), 6)), s); + __ASSERT(x__len <= 8, 0); + __MOVE((address)&q, (address)x, x__len); +} + void Files_ReadNum (Files_Rider *R, address *R__typ, int32 *x) { int8 s; diff --git a/bootstrap/windows-88/Files.h b/bootstrap/windows-88/Files.h index acb178a5..35d709e7 100644 --- a/bootstrap/windows-88/Files.h +++ b/bootstrap/windows-88/Files.h @@ -48,6 +48,7 @@ import void Files_ReadLInt (Files_Rider *R, address *R__typ, int32 *x); import void Files_ReadLReal (Files_Rider *R, address *R__typ, LONGREAL *x); import void Files_ReadLine (Files_Rider *R, address *R__typ, CHAR *x, LONGINT x__len); import void Files_ReadNum (Files_Rider *R, address *R__typ, int32 *x); +import void Files_ReadNum64 (Files_Rider *R, address *R__typ, SYSTEM_BYTE *x, LONGINT x__len); import void Files_ReadReal (Files_Rider *R, address *R__typ, REAL *x); import void Files_ReadSet (Files_Rider *R, address *R__typ, uint32 *x); import void Files_ReadString (Files_Rider *R, address *R__typ, CHAR *x, LONGINT x__len); diff --git a/bootstrap/windows-88/OPM.c b/bootstrap/windows-88/OPM.c index 9ecaaba2..deeaaa1d 100644 --- a/bootstrap/windows-88/OPM.c +++ b/bootstrap/windows-88/OPM.c @@ -82,6 +82,7 @@ export int64 OPM_SymRInt64 (void); export void OPM_SymRLReal (LONGREAL *lr); export void OPM_SymRReal (REAL *r); export void OPM_SymRSet (uint32 *s); +export void OPM_SymRSet64 (uint64 *s); export void OPM_SymWCh (CHAR ch); export void OPM_SymWInt (int64 i); export void OPM_SymWLReal (LONGREAL lr); @@ -752,10 +753,17 @@ int32 OPM_SymRInt (void) int64 OPM_SymRInt64 (void) { int64 _o_result; - _o_result = OPM_SymRInt(); + int64 k; + Files_ReadNum64(&OPM_oldSF, Files_Rider__typ, (void*)&k, 8); + _o_result = k; return _o_result; } +void OPM_SymRSet64 (uint64 *s) +{ + Files_ReadNum64(&OPM_oldSF, Files_Rider__typ, (void*)&*s, 8); +} + void OPM_SymRSet (uint32 *s) { Files_ReadNum(&OPM_oldSF, Files_Rider__typ, (int32*)&*s); diff --git a/bootstrap/windows-88/OPM.h b/bootstrap/windows-88/OPM.h index dd3c0c27..12db4754 100644 --- a/bootstrap/windows-88/OPM.h +++ b/bootstrap/windows-88/OPM.h @@ -50,6 +50,7 @@ import int64 OPM_SymRInt64 (void); import void OPM_SymRLReal (LONGREAL *lr); import void OPM_SymRReal (REAL *r); import void OPM_SymRSet (uint32 *s); +import void OPM_SymRSet64 (uint64 *s); import void OPM_SymWCh (CHAR ch); import void OPM_SymWInt (int64 i); import void OPM_SymWLReal (LONGREAL lr); diff --git a/src/compiler/OPM.Mod b/src/compiler/OPM.Mod index 3dd56c16..6db573f6 100644 --- a/src/compiler/OPM.Mod +++ b/src/compiler/OPM.Mod @@ -592,27 +592,21 @@ MODULE OPM; (* RC 6.3.89 / 28.6.89, J.Templ 10.7.89 / 22.7.96 *) BEGIN Files.Read(oldSF, ch) END SymRCh; + (* todo - combine RInt64 and RInt *) PROCEDURE SymRInt*(): LONGINT; VAR k: LONGINT; BEGIN Files.ReadNum(oldSF, k); RETURN k END SymRInt; - (* todo PROCEDURE SymRInt64*(): SYSTEM.INT64; VAR k: SYSTEM.INT64; - BEGIN Files.ReadNum(oldSF, k); RETURN k - END SymRInt64; - *) - - PROCEDURE SymRInt64*(): SYSTEM.INT64; - BEGIN RETURN SymRInt() + BEGIN Files.ReadNum64(oldSF, k); RETURN k END SymRInt64; - (* todo - PROCEDURE SymRSet*(VAR s: SYSTEM.SET64); - BEGIN Files.ReadNum(oldSF, SYSTEM.VAL(SYSTEM.INT64, s)) - END SymRSet; - *) + (* todo - combine RSet64 and RSet *) + PROCEDURE SymRSet64*(VAR s: SYSTEM.SET64); + BEGIN Files.ReadNum64(oldSF, s) + END SymRSet64; PROCEDURE SymRSet*(VAR s: SET); BEGIN Files.ReadNum(oldSF, SYSTEM.VAL(LONGINT, s)) diff --git a/src/runtime/Files.Mod b/src/runtime/Files.Mod index 73d527cf..893abf1f 100644 --- a/src/runtime/Files.Mod +++ b/src/runtime/Files.Mod @@ -654,16 +654,6 @@ Especially Length would become fairly complex. UNTIL b END ReadLine; - (* - 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 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); diff --git a/src/system/Files.Mod b/src/system/Files.Mod index 04495ccb..94ef014a 100644 --- a/src/system/Files.Mod +++ b/src/system/Files.Mod @@ -654,16 +654,16 @@ Especially Length would become fairly complex. UNTIL b END ReadLine; - (* todo - PROCEDURE ReadNum*(VAR R: Rider; VAR x: ARRAY OF SYSTEM.BYTE); + (* todo combine ReadNum and ReadNum64 *) + PROCEDURE ReadNum64*(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; 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 ReadNum; - *) + END ReadNum64; + PROCEDURE ReadNum* (VAR R: Rider; VAR x: LONGINT); VAR s: SHORTINT; ch: CHAR; n: LONGINT; diff --git a/src/tools/make/oberon.mk b/src/tools/make/oberon.mk index af0cbe2c..6d2a9c24 100644 --- a/src/tools/make/oberon.mk +++ b/src/tools/make/oberon.mk @@ -155,7 +155,7 @@ installable: # May require root access. install: @printf "\nInstalling into \"$(INSTALLDIR)\"\n" - @rm -rf "$(INSTALLDIR)/bin" "$(INSTALLDIR)/2 "$(INSTALLDIR)/C + @rm -rf "$(INSTALLDIR)" @mkdir -p "$(INSTALLDIR)/bin" @cp $(OBECOMP) "$(INSTALLDIR)/bin/$(OBECOMP)"