Stepping toward generalised ReadNum.

This commit is contained in:
David Brown 2016-09-30 17:19:26 +01:00
parent 6dedf34785
commit 3dc5049d5a
24 changed files with 156 additions and 32 deletions

View file

@ -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;

View file

@ -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);

View file

@ -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);

View file

@ -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);