uintptr for alloc/free, some sys fns from LONGINT to int64.

This commit is contained in:
David Brown 2016-09-02 13:02:44 +01:00
parent fdaa5ec81b
commit 11de6b8512
214 changed files with 850 additions and 698 deletions

View file

@ -18,8 +18,11 @@
#include <signal.h>
LONGINT SYSTEM_XCHK(LONGINT i, LONGINT ub) {return __X(i, ub);}
LONGINT SYSTEM_RCHK(LONGINT i, LONGINT ub) {return __R(i, ub);}
// Procedure verions of SYSTEM.H versions used when a multiply accessed
// parameter has side effects.
int64 SYSTEM_XCHK(uint64 i, uint64 ub) {return __X(i, ub);}
int64 SYSTEM_RCHK(uint64 i, uint64 ub) {return __R(i, ub);}
LONGINT SYSTEM_ASH (LONGINT i, LONGINT n) {return __ASH(i, n);}
LONGINT SYSTEM_ABS (LONGINT i) {return __ABS(i);}
double SYSTEM_ABSD(double i) {return __ABS(i);}
@ -35,7 +38,7 @@ void SYSTEM_INHERIT(LONGINT *t, LONGINT *t0)
void SYSTEM_ENUMP(void *adr, LONGINT n, void (*P)())
{
while (n > 0) {
P((LONGINT)(SYSTEM_ADRINT)(*((void**)(adr))));
P((uintptr)(*((void**)(adr))));
adr = ((void**)adr) + 1;
n--;
}
@ -48,20 +51,20 @@ void SYSTEM_ENUMR(void *adr, LONGINT *typ, LONGINT size, LONGINT n, void (*P)())
while (n > 0) {
t = typ;
off = *t;
while (off >= 0) {P(*(LONGINT*)((char*)adr+off)); t++; off = *t;}
while (off >= 0) {P(*(uintptr*)((char*)adr+off)); t++; off = *t;}
adr = ((char*)adr) + size;
n--;
}
}
LONGINT SYSTEM_DIV(uLONGINT x, uLONGINT y)
{ if ((LONGINT) x >= 0) return (x / y);
LONGINT SYSTEM_DIV(uint64 x, uint64 y)
{ if ((int64) x >= 0) return (x / y);
else return -((y - 1 - x) / y);
}
LONGINT SYSTEM_MOD(uLONGINT x, uLONGINT y)
{ uLONGINT m;
if ((LONGINT) x >= 0) return (x % y);
LONGINT SYSTEM_MOD(uint64 x, uint64 y)
{ uint64 m;
if ((int64) x >= 0) return (x % y);
else { m = (-x) % y;
if (m != 0) return (y - m); else return 0;
}
@ -106,7 +109,7 @@ SYSTEM_PTR SYSTEM_NEWARR(LONGINT *typ, LONGINT elemsz, int elemalgn, int nofdim,
else if (typ == (LONGINT*)POINTER__typ) {
/* element type is a pointer */
x = Heap_NEWBLK(size + nofelems * sizeof(LONGINT));
p = (LONGINT*)(SYSTEM_ADRINT)x[-1];
p = (LONGINT*)(uintptr)x[-1];
p[-nofelems] = *p; /* build new type desc in situ: 1. copy block size; 2. setup ptr tab; 3. set sentinel; 4. patch tag */
p -= nofelems - 1; n = 1; /* n =1 for skipping the size field */
while (n <= nofelems) {*p = n*sizeof(LONGINT); p++; n++;}
@ -119,7 +122,7 @@ SYSTEM_PTR SYSTEM_NEWARR(LONGINT *typ, LONGINT elemsz, int elemalgn, int nofdim,
while (ptab[nofptrs] >= 0) {nofptrs++;} /* number of pointers per element */
nptr = nofelems * nofptrs; /* total number of pointers */
x = Heap_NEWBLK(size + nptr * sizeof(LONGINT));
p = (LONGINT*)(SYSTEM_ADRINT)x[- 1];
p = (LONGINT*)(uintptr)x[- 1];
p[-nptr] = *p; /* build new type desc in situ; 1. copy block size; 2. setup ptr tab; 3. set sentinel; 4. patch tag */
p -= nptr - 1; n = 0; off = dataoff;
while (n < nofelems) {i = 0;
@ -155,7 +158,7 @@ typedef void (*SystemSignalHandler)(INTEGER); // = Platform_SignalHandler
// (Ignore other signals)
}
void SystemSetHandler(int s, SYSTEM_ADRINT h) {
void SystemSetHandler(int s, uintptr h) {
if (s >= 2 && s <= 4) {
int needtosetsystemhandler = handler[s-2] == 0;
handler[s-2] = (SystemSignalHandler)h;
@ -194,12 +197,12 @@ typedef void (*SystemSignalHandler)(INTEGER); // = Platform_SignalHandler
}
}
void SystemSetInterruptHandler(SYSTEM_ADRINT h) {
void SystemSetInterruptHandler(uintptr h) {
EnsureConsoleCtrlHandler();
SystemInterruptHandler = (SystemSignalHandler)h;
}
void SystemSetQuitHandler(SYSTEM_ADRINT h) {
void SystemSetQuitHandler(uintptr h) {
EnsureConsoleCtrlHandler();
SystemQuitHandler = (SystemSignalHandler)h;
}