]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/16_head.c
FICK!!!!! i need super legit help!
[16.git] / src / lib / 16_head.c
index d56b52607748051ca1c7cee1e6e326021918bc27..008c654409f12919eda0533725d4113c3745afc8 100644 (file)
 
 #include "src/lib/16_head.h"
 
-/* local function */\r
-void wait(clock_t wait);
-void* AllocateLargestFreeBlock(size_t* Size);
-size_t GetFreeSize(void);
-long int filesize(FILE *fp);\r
-\r
 /* Function: Wait **********************************************************\r
 *\r
 *     Parameters:    wait - time in microseconds\r
@@ -117,6 +111,69 @@ size_t GetFreeSize(void)
   return total;
 }
 
+void far* AllocateLargestFarFreeBlock(size_t far* Size)
+{
+       size_t s0, s1;
+       void far* p;
+
+       s0 = ~(size_t)0 ^ (~(size_t)0 >> 1);
+       while (s0 && (p = _fmalloc(s0)) == NULL)
+               s0 >>= 1;
+
+       if (p)
+               _ffree(p);
+
+       s1 = s0 >> 1;
+       while (s1)
+       {
+               if ((p = _fmalloc(s0 + s1)) != NULL)
+               {
+                       s0 += s1;
+                       _ffree(p);
+               }
+       s1 >>= 1;
+       }
+       while (s0 && (p = _fmalloc(s0)) == NULL)
+               s0 ^= s0 & -s0;
+
+       *Size = s0;
+       return p;
+}
+
+size_t GetFarFreeSize(void)
+{
+       size_t total = 0;
+       void far* pFirst = NULL;
+       void far* pLast = NULL;
+       for(;;)
+       {
+               size_t largest;
+               void far* p = AllocateLargestFarFreeBlock(&largest);
+               if (largest < sizeof(void far*))
+               {
+                       if (p != NULL)
+                       _ffree(p);
+                       break;
+               }
+               *(void far* far*)p = NULL;
+               total += largest;
+               if (pFirst == NULL)
+                       pFirst = p;
+
+               if (pLast != NULL)
+                       *(void far* far*)pLast = p;
+               pLast = p;
+       }
+
+       while (pFirst != NULL)
+       {
+               void far* p = *(void far* far*)pFirst;
+               _ffree(pFirst);
+               pFirst = p;
+       }
+       return total;
+}
+
 long int
 filesize(FILE *fp)\r
 {\r
@@ -163,3 +220,66 @@ US_CheckParm(char *parm,char **strings)
        }\r
        return(-1);\r
 }
+
+/*\r
+==========================\r
+=\r
+= Quit\r
+=\r
+==========================\r
+*/\r
+\r
+/*void Quit(char *error, ...)\r
+{\r
+       short exit_code=0;\r
+       unsigned        finscreen;\r
+\r
+       va_list ap;\r
+\r
+       va_start(ap,error);\r
+\r
+#ifndef CATALOG\r
+       if (!error)\r
+       {\r
+               CA_SetAllPurge ();\r
+               CA_CacheGrChunk (PIRACY);\r
+               finscreen = (unsigned)grsegs[PIRACY];\r
+       }\r
+#endif\r
+\r
+       //ShutdownId ();\r
+\r
+       if (error && *error)\r
+       {\r
+               vprintf(error,ap);\r
+               exit_code = 1;\r
+       }\r
+#ifndef CATALOG\r
+       else\r
+       if (!NoWait)\r
+       {\r
+               movedata (finscreen,0,0xb800,0,4000);\r
+               bioskey (0);\r
+       }\r
+#endif\r
+\r
+       va_end(ap);\r
+\r
+#ifndef CATALOG\r
+       if (!error)\r
+       {\r
+               _argc = 2;\r
+               _argv[1] = "LAST.SHL";\r
+               _argv[2] = "ENDSCN.SCN";\r
+               _argv[3] = NULL;\r
+               if (execv("LOADSCN.EXE", _argv) == -1)\r
+               {\r
+                       clrscr();\r
+                       puts("Couldn't find executable LOADSCN.EXE.\n");\r
+                       exit(1);\r
+               }\r
+       }\r
+#endif\r
+\r
+       exit(exit_code);\r
+}*/