X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2F16_hc.c;h=316b86b90faf716c0466f1a2210116bbfe38c00f;hb=535f618e80aa6546e61907026b2451e123655a5b;hp=a904560abae3e5c8f15dd9c056c80a2d81057463;hpb=e0806081573e79828c100893f396dadc9d909f99;p=16.git diff --git a/src/lib/16_hc.c b/src/lib/16_hc.c old mode 100644 new mode 100755 index a904560a..316b86b9 --- a/src/lib/16_hc.c +++ b/src/lib/16_hc.c @@ -1,5 +1,5 @@ /* Project 16 Source Code~ - * Copyright (C) 2012-2015 sparky4 & pngwen & andrius4669 + * Copyright (C) 2012-2016 sparky4 & pngwen & andrius4669 & joncampbell123 * * This file is part of Project 16. * @@ -25,8 +25,6 @@ #include "src/lib/16_hc.h" -int heaphandle; - #ifdef __BORLANDC__ void * LargestFreeBlock(size_t* Size) #endif @@ -99,7 +97,7 @@ 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) @@ -390,17 +388,17 @@ size_t GetNearFreeSize(void) return nh_free; } -void heapdump(void) +void heapdump(global_game_variables_t *gvar) { struct _heapinfo fh_info, nh_info, h_info; int heap_status; size_t h_free, nh_free, fh_free, h_total, nh_total, fh_total, h_used, nh_used, fh_used; byte scratch[1024],str[16]; - HC_OpenDebug(); + HC_OpenDebug(gvar); strcpy(scratch,"\n == default ==\n\n"); - write(heaphandle,scratch,strlen(scratch)); + write(gvar->handle.heaphandle,scratch,strlen(scratch)); h_info._pentry = NULL; h_free=0; h_total=0; h_used=0; for(;;) { @@ -410,47 +408,47 @@ void heapdump(void) 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)); + write(gvar->handle.heaphandle,scratch,strlen(scratch)); } - heapstat(heap_status, &scratch); + heapstat(gvar, heap_status, &scratch); //near strcpy(scratch,"\n == near ==\n\n"); - write(heaphandle,scratch,strlen(scratch)); + write(gvar->handle.heaphandle,scratch,strlen(scratch)); nh_info._pentry = NULL; nh_free=0; nh_total=0; nh_used=0; 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,10); strcat(scratch,str); strcat(scratch,"\n"); + strcpy(scratch," "); strcat(scratch,(h_info._useflag == _USEDENTRY ? "USED" : "FREE")); strcat(scratch," block at "); ultoa((dword)nh_info._pentry,str,16); strcat(scratch,str); strcat(scratch," of size "); ultoa(nh_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 );*/ if((nh_info._useflag == _USEDENTRY ? "USED" : "FREE")=="FREE") nh_free += nh_info._size; if((nh_info._useflag == _USEDENTRY ? "USED" : "FREE")=="USED") nh_used += nh_info._size; nh_total += nh_info._size; - write(heaphandle,scratch,strlen(scratch)); + write(gvar->handle.heaphandle,scratch,strlen(scratch)); } - heapstat(heap_status, &scratch); + heapstat(gvar, heap_status, &scratch); //far strcpy(scratch,"\n == far ==\n\n"); - write(heaphandle,scratch,strlen(scratch)); + write(gvar->handle.heaphandle,scratch,strlen(scratch)); fh_info._pentry = NULL; fh_free=0; fh_total=0; fh_used=0; 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,10); strcat(scratch,str); strcat(scratch,"\n"); + strcpy(scratch," "); strcat(scratch,(h_info._useflag == _USEDENTRY ? "USED" : "FREE")); strcat(scratch," block at "); ultoa((dword)fh_info._pentry,str,16); strcat(scratch,str); strcat(scratch," of size "); ultoa(fh_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 );*/ if((fh_info._useflag == _USEDENTRY ? "USED" : "FREE")=="FREE") fh_free += fh_info._size; if((fh_info._useflag == _USEDENTRY ? "USED" : "FREE")=="USED") fh_used += fh_info._size; fh_total += fh_info._size; - write(heaphandle,scratch,strlen(scratch)); + write(gvar->handle.heaphandle,scratch,strlen(scratch)); } - heapstat(heap_status, &scratch); + heapstat(gvar, heap_status, &scratch); strcpy(scratch,"\n"); strcat(scratch,kittengets(2,0,"Memory Type Total Used Free\n")); @@ -466,11 +464,11 @@ fh_info._pentry, fh_info._size );*/ strcat(scratch,"GetFarFreeSize = "); ultoa((dword)GetFarFreeSize(),str,10); strcat(scratch,str); strcat(scratch,"\n"); strcat(scratch,"memavl = "); ultoa((dword)_memavl(),str,10); strcat(scratch,str); strcat(scratch,"\n"); strcat(scratch,"stackavail = "); ultoa((dword)stackavail(),str,10); strcat(scratch,str); strcat(scratch,"\n"); - write(heaphandle,scratch,strlen(scratch)); - HC_CloseDebug(); + write(gvar->handle.heaphandle,scratch,strlen(scratch)); + HC_CloseDebug(gvar); } -void heapstat(int heap_status, byte *str) +void heapstat(global_game_variables_t *gvar, int heap_status, byte *str) { switch( heap_status ) { case _HEAPEND: @@ -489,7 +487,7 @@ void heapstat(int heap_status, byte *str) case _HEAPBADNODE: strcpy((str),"ERROR - bad node in heap\n"); } - write(heaphandle,(str),strlen((str))); + write(gvar->handle.heaphandle,(str),strlen((str))); } void heapstat0(int heap_status) @@ -500,7 +498,6 @@ void heapstat0(int heap_status) break; case _HEAPEMPTY: //printf("OK - heap is empty\n"); - break; case _HEAPBADBEGIN: printf("ERROR - heap is damaged\n"); @@ -522,13 +519,19 @@ void heapstat0(int heap_status) = ============================ */ -void HC_OpenDebug() +void HC_OpenDebug(global_game_variables_t *gvar) { - unlink("heap.16"); - heaphandle = open("heap.16", O_CREAT | O_WRONLY | O_TEXT); +#ifdef __BORLANDC__ + unlink("heap.16b"); + gvar->handle.heaphandle = open("heap.16b", O_CREAT | O_WRONLY | O_TEXT); +#endif +#ifdef __WATCOMC__ + unlink("heap.16w"); + gvar->handle.heaphandle = open("heap.16w", O_CREAT | O_WRONLY | O_TEXT); +#endif } -void HC_CloseDebug() +void HC_CloseDebug(global_game_variables_t *gvar) { - close(heaphandle); + close(gvar->handle.heaphandle); }