]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/16_hc.c
==== bcexmm.exe works again! yay! ==== wwww
[16.git] / src / lib / 16_hc.c
index 8c9f939648eab9cf171443b3cc77b97b5bda6d82..f2963158f9fa4154055d171b64277d4092a8fec3 100755 (executable)
 #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
@@ -59,34 +123,42 @@ void CHIKAKU* HC_LargestFreeBlock(size_t* Size)
 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
@@ -121,7 +193,7 @@ void far* HC_LargestFarFreeBlock(size_t* Size)
        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
@@ -156,8 +228,7 @@ size_t HC_farcoreleft(void)
 }\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
@@ -186,7 +257,7 @@ void huge* HC_LargestHugeFreeBlock(size_t* Size)
        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
@@ -194,7 +265,7 @@ size_t HC_hugecoreleft(void)
        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
@@ -257,7 +328,7 @@ size_t _basedcoreleft(void)
        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
@@ -353,7 +424,7 @@ void HC_heapdump(global_game_variables_t *gvar)
        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
@@ -417,11 +488,11 @@ fh_info._pentry, fh_info._size );*/
        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