#include "src/lib/16_hc.h"\r
#include <malloc.h>\r
\r
-//functions\r
-void CHIKAKU* HC_LargestFreeBlock(size_t* Size)\r
+//from ftp://213.85.246.177/pub/FreeBSD/ports/archivers/arj/work/arj-3.10.22/environ.c\r
+//#ifdef __WATCOMC__\r
+#define FARCORELEFTPTR __huge\r
+long HC_farcoreleft()\r
+{\r
+ void FARCORELEFTPTR *hp;\r
+ static long rc=736L;\r
+ long s_rc;\r
+\r
+ s_rc=rc;\r
+ rc+=2L;\r
+ do\r
+ hp=halloc(rc-=2L, 1024);\r
+ while(hp==NULL&&rc>0L);\r
+ if(hp!=NULL)\r
+ hfree(hp);\r
+ if(rc<s_rc)\r
+ return(rc*1024L);\r
+ do\r
+ {\r
+ hp=halloc(rc+=16L, 1024);\r
+ if(hp!=NULL)\r
+ hfree(hp);\r
+ } while(hp!=NULL);\r
+ return((rc-16L)*1024L);\r
+}\r
+//#endif\r
+\r
+void\r
+#ifdef __BORLANDC__\r
+ *\r
+#endif\r
+#ifdef __WATCOMC__\r
+ __near*\r
+#endif\r
+HC_LargestFreeBlock(size_t* Size)\r
{\r
size_t s0, s1;\r
- void CHIKAKU* p;\r
+#ifdef __BORLANDC__\r
+ void * p;\r
+#endif\r
+#ifdef __WATCOMC__\r
+ void __near* p;\r
+#endif\r
\r
s0 = ~(size_t)0 ^ (~(size_t)0 >> 1);\r
+#ifdef __BORLANDC__\r
+ while (s0 && (p = malloc(s0)) == NULL)\r
+#endif\r
+#ifdef __WATCOMC__\r
while (s0 && (p = _nmalloc(s0)) == NULL)\r
+#endif\r
s0 >>= 1;\r
\r
if (p)\r
+#ifdef __BORLANDC__\r
+ free(p);\r
+#endif\r
+#ifdef __WATCOMC__\r
_nfree(p);\r
+#endif\r
\r
s1 = s0 >> 1;\r
while (s1)\r
{\r
+#ifdef __BORLANDC__\r
+ if ((p = malloc(s0 + s1)) != NULL)\r
+#endif\r
+#ifdef __WATCOMC__\r
if ((p = _nmalloc(s0 + s1)) != NULL)\r
+#endif\r
{\r
s0 += s1;\r
+#ifdef __BORLANDC__\r
+ free(p);\r
+#endif\r
+#ifdef __WATCOMC__\r
_nfree(p);\r
+#endif\r
}\r
s1 >>= 1;\r
}\r
+#ifdef __BORLANDC__\r
+ while (s0 && (p = malloc(s0)) == NULL)\r
+#endif\r
+#ifdef __WATCOMC__\r
while (s0 && (p = _nmalloc(s0)) == NULL)\r
+#endif\r
s0 ^= s0 & -s0;\r
\r
*Size = s0;\r
size_t HC_coreleft(void)\r
{\r
size_t total = 0;\r
- void CHIKAKU* pFirst = NULL;\r
- void CHIKAKU* pLast = NULL;\r
+ void __near* pFirst = NULL;\r
+ void __near* pLast = NULL;\r
for(;;)\r
{\r
size_t largest;\r
- void CHIKAKU* p = (void CHIKAKU *)HC_LargestFreeBlock(&largest);\r
- if (largest < sizeof(void CHIKAKU*))\r
+ void __near* p = (void __near *)HC_LargestFreeBlock(&largest);\r
+ if (largest < sizeof(void __near*))\r
{\r
if (p != NULL)\r
+#ifdef __BORLANDC__\r
+ free(p);\r
+#endif\r
+#ifdef __WATCOMC__\r
_nfree(p);\r
-\r
+#endif\r
break;\r
}\r
- *(void CHIKAKU* CHIKAKU*)p = NULL;\r
+ *(void __near* __near*)p = NULL;\r
total += largest;\r
if (pFirst == NULL)\r
pFirst = p;\r
\r
if (pLast != NULL)\r
- *(void CHIKAKU* CHIKAKU*)pLast = p;\r
+ *(void __near* __near*)pLast = p;\r
pLast = p;\r
}\r
\r
while (pFirst != NULL)\r
{\r
- void CHIKAKU* p = *(void CHIKAKU* CHIKAKU*)pFirst;\r
+ void __near* p = *(void __near* __near*)pFirst;\r
+#ifdef __BORLANDC__\r
+ free(pFirst);\r
+#endif\r
+#ifdef __WATCOMC__\r
_nfree(pFirst);\r
-\r
+#endif\r
pFirst = p;\r
}\r
return total;\r
return p;\r
}\r
\r
-size_t HC_farcoreleft(void)\r
+size_t HC_farcoreleft_(void)\r
{\r
size_t total = 0;\r
void far* pFirst = NULL;\r
}\r
\r
#ifdef __WATCOMC__\r
-/*\r
-void huge* HC_LargestHugeFreeBlock(size_t* Size)\r
+/*void huge* LargestHugeFreeBlock(size_t* Size)\r
{\r
size_t s0, s1;\r
void huge* p;\r
return p;\r
}\r
\r
-size_t HC_hugecoreleft(void)\r
+size_t _hugecoreleft(void)\r
{\r
size_t total = 0;\r
void huge* pFirst = NULL;\r
for(;;)\r
{\r
size_t largest;\r
- void huge* p = HC_LargestHugeFreeBlock(&largest);\r
+ void huge* p = LargestHugeFreeBlock(&largest);\r
if (largest < sizeof(void huge*))\r
{\r
if (p != NULL)\r
void __based(segu)* pFirst = NULL;\r
void __based(segu)* pLast = NULL;\r
// allocate based heap\r
- segu = _bheapseg( 1024 );\r
+ segu = _bHC_heapseg( 1024 );\r
if( segu == _NULLSEG ) {\r
printf( "Unable to allocate based heap\n" );\r
return 0;\r
struct _heapinfo fh_info, nh_info, h_info;\r
int heap_status;\r
size_t h_free, nh_free, fh_free, h_total, nh_total, fh_total, h_used, nh_used, fh_used;\r
- byte scratch[1024],str[16];\r
+ byte scratch[1024],str[16];\r
\r
HC_OpenDebug(gvar);\r
\r
printmeminfoline(&scratch, "Near", nh_total, nh_used, nh_free);\r
printmeminfoline(&scratch, "Far", fh_total, fh_used, fh_free);\r
strcat(scratch,"---------------- -------- -------- --------\n");\r
- strcat(scratch,"coreleft = "); ultoa((dword)HC_coreleft(),str,10); strcat(scratch,str); strcat(scratch,"\n");\r
- strcat(scratch,"farcoreleft = "); ultoa((dword)HC_farcoreleft(),str,10); strcat(scratch,str); strcat(scratch,"\n");\r
- strcat(scratch,"GetFreeSize = "); ultoa((dword)HC_GetFreeSize(),str,10); strcat(scratch,str); strcat(scratch,"\n");\r
- strcat(scratch,"GetNearFreeSize = "); ultoa((dword)HC_GetNearFreeSize(),str,10); strcat(scratch,str); strcat(scratch,"\n");\r
- strcat(scratch,"GetFarFreeSize = "); ultoa((dword)HC_GetFarFreeSize(),str,10); strcat(scratch,str); strcat(scratch,"\n");\r
+ strcat(scratch,"HC_coreleft = "); ultoa((dword)HC_coreleft(),str,10); strcat(scratch,str); strcat(scratch,"\n");\r
+ strcat(scratch,"HC_farcoreleft = "); ultoa((dword)HC_farcoreleft(),str,10); strcat(scratch,str); strcat(scratch,"\n");\r
+ strcat(scratch,"HC_GetFreeSize = "); ultoa((dword)HC_GetFreeSize(),str,10); strcat(scratch,str); strcat(scratch,"\n");\r
+ strcat(scratch,"HC_GetNearFreeSize = "); ultoa((dword)HC_GetNearFreeSize(),str,10); strcat(scratch,str); strcat(scratch,"\n");\r
+ strcat(scratch,"HC_GetFarFreeSize = "); ultoa((dword)HC_GetFarFreeSize(),str,10); strcat(scratch,str); strcat(scratch,"\n");\r
strcat(scratch,"memavl = "); ultoa((dword)_memavl(),str,10); strcat(scratch,str); strcat(scratch,"\n");\r
strcat(scratch,"stackavail = "); ultoa((dword)stackavail(),str,10); strcat(scratch,str); strcat(scratch,"\n");\r
write(gvar->handle.heaphandle,scratch,strlen(scratch));\r