X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2F16_hc.c;h=005244479b016aae5116a522307bc135253213d2;hb=d89b4d35446e64b0b8fd7c8fdcff32bcd0845e32;hp=a7de12f3e4123f6e2896dd3347dde18308d7a668;hpb=591b42161c7fe70f89f8dac6c8afa6e6fb7cb1f8;p=16.git diff --git a/src/lib/16_hc.c b/src/lib/16_hc.c index a7de12f3..00524447 100644 --- a/src/lib/16_hc.c +++ b/src/lib/16_hc.c @@ -24,32 +24,71 @@ */ #include "src/lib/16_hc.h" +#pragma hdrstop + +#pragma warn -pro +#pragma warn -use int heaphandle; +#ifdef __BORLANDC__ +void * LargestFreeBlock(size_t* Size) +#endif +#ifdef __WATCOMC__ void __near* LargestFreeBlock(size_t* Size) +#endif { size_t s0, s1; +#ifdef __BORLANDC__ + void * p; +#endif +#ifdef __WATCOMC__ void __near* p; +#endif s0 = ~(size_t)0 ^ (~(size_t)0 >> 1); +#ifdef __BORLANDC__ + while (s0 && (p = malloc(s0)) == NULL) +#endif +#ifdef __WATCOMC__ while (s0 && (p = _nmalloc(s0)) == NULL) +#endif s0 >>= 1; if (p) +#ifdef __BORLANDC__ + free(p); +#endif +#ifdef __WATCOMC__ _nfree(p); +#endif s1 = s0 >> 1; while (s1) { +#ifdef __BORLANDC__ + if ((p = malloc(s0 + s1)) != NULL) +#endif +#ifdef __WATCOMC__ if ((p = _nmalloc(s0 + s1)) != NULL) +#endif { s0 += s1; +#ifdef __BORLANDC__ + free(p); +#endif +#ifdef __WATCOMC__ _nfree(p); +#endif } s1 >>= 1; } +#ifdef __BORLANDC__ + while (s0 && (p = malloc(s0)) == NULL) +#endif +#ifdef __WATCOMC__ while (s0 && (p = _nmalloc(s0)) == NULL) +#endif s0 ^= s0 & -s0; *Size = s0; @@ -64,11 +103,16 @@ size_t _coreleft(void) for(;;) { size_t largest; - void __near* p = LargestFreeBlock(&largest); + void __near* p = (void __near *)LargestFreeBlock(&largest); if (largest < sizeof(void __near*)) { if (p != NULL) +#ifdef __BORLANDC__ + free(p); +#endif +#ifdef __WATCOMC__ _nfree(p); +#endif break; } *(void __near* __near*)p = NULL; @@ -84,7 +128,12 @@ size_t _coreleft(void) while (pFirst != NULL) { void __near* p = *(void __near* __near*)pFirst; +#ifdef __BORLANDC__ + free(pFirst); +#endif +#ifdef __WATCOMC__ _nfree(pFirst); +#endif pFirst = p; } return total; @@ -153,6 +202,7 @@ size_t _farcoreleft(void) return total; } +#ifdef __WATCOMC__ void huge* LargestHugeFreeBlock(size_t* Size) { size_t s0, s1; @@ -360,15 +410,14 @@ void heapdump(void) for(;;) { heap_status = _heapwalk( &h_info ); if( heap_status != _HEAPOK ) break; - - strcpy(scratch," "); strcat(scratch,(h_info._useflag == _USEDENTRY ? "USED" : "FREE")); strcat(scratch," block at "); ultoa((dword)h_info._pentry,str,16); strcat(scratch,str); strcat(scratch," of size "); ultoa(h_info._size,str,16); strcat(scratch,str); strcat(scratch,"\n"); + strcpy(scratch," "); strcat(scratch,(h_info._useflag == _USEDENTRY ? "USED" : "FREE")); strcat(scratch," block at "); ultoa((dword)h_info._pentry,str,16); strcat(scratch,str); strcat(scratch," of size "); ultoa(h_info._size,str,10); strcat(scratch,str); strcat(scratch,"\n"); if((h_info._useflag == _USEDENTRY ? "USED" : "FREE")=="FREE") h_free += h_info._size; if((h_info._useflag == _USEDENTRY ? "USED" : "FREE")=="USED") h_used += h_info._size; h_total += h_info._size; write(heaphandle,scratch,strlen(scratch)); } heapstat(heap_status, &scratch); - + //near strcpy(scratch,"\n == near ==\n\n"); write(heaphandle,scratch,strlen(scratch)); @@ -377,8 +426,7 @@ void heapdump(void) for(;;) { heap_status = _nheapwalk( &nh_info ); if( heap_status != _HEAPOK ) break; - - strcpy(scratch," "); strcat(scratch,(h_info._useflag == _USEDENTRY ? "USED" : "FREE")); strcat(scratch," block at "); ultoa((dword)h_info._pentry,str,16); strcat(scratch,str); strcat(scratch," of size "); ultoa(h_info._size,str,16); strcat(scratch,str); strcat(scratch,"\n"); + strcpy(scratch," "); strcat(scratch,(h_info._useflag == _USEDENTRY ? "USED" : "FREE")); strcat(scratch," block at "); ultoa((dword)h_info._pentry,str,16); strcat(scratch,str); strcat(scratch," of size "); ultoa(h_info._size,str,10); strcat(scratch,str); strcat(scratch,"\n"); /* printf( " %s block at %Fp of size %4.4X\n", (nh_info._useflag == _USEDENTRY ? "USED" : "FREE"), nh_info._pentry, nh_info._size );*/ @@ -397,8 +445,7 @@ nh_info._pentry, nh_info._size );*/ for(;;) { heap_status = _fheapwalk( &fh_info ); if( heap_status != _HEAPOK ) break; - - strcpy(scratch," "); strcat(scratch,(h_info._useflag == _USEDENTRY ? "USED" : "FREE")); strcat(scratch," block at "); ultoa((dword)h_info._pentry,str,16); strcat(scratch,str); strcat(scratch," of size "); ultoa(h_info._size,str,16); strcat(scratch,str); strcat(scratch,"\n"); + strcpy(scratch," "); strcat(scratch,(h_info._useflag == _USEDENTRY ? "USED" : "FREE")); strcat(scratch," block at "); ultoa((dword)h_info._pentry,str,16); strcat(scratch,str); strcat(scratch," of size "); ultoa(h_info._size,str,10); strcat(scratch,str); strcat(scratch,"\n"); /*printf( " %s block at %Fp of size %4.4X\n", (fh_info._useflag == _USEDENTRY ? "USED" : "FREE"), fh_info._pentry, fh_info._size );*/ @@ -435,7 +482,7 @@ void heapstat(int heap_status, byte *str) break; case _HEAPEMPTY: strcpy((str),"OK - heap is empty\n"); - + break; case _HEAPBADBEGIN: strcpy((str),"ERROR - heap is damaged\n"); @@ -457,7 +504,7 @@ void heapstat0(int heap_status) break; case _HEAPEMPTY: //printf("OK - heap is empty\n"); - + break; case _HEAPBADBEGIN: printf("ERROR - heap is damaged\n"); @@ -469,7 +516,7 @@ void heapstat0(int heap_status) printf("ERROR - bad node in heap\n"); } } - +#endif /* ============================ =