]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/16_ca.c
wwww cleanings and now the compiler header generated files are shown and so is the...
[16.git] / src / lib / 16_ca.c
old mode 100644 (file)
new mode 100755 (executable)
index 0505972..f5893d8
@@ -31,7 +31,10 @@ loaded into the data segment
 */\r
 \r
 #include "src/lib/16_ca.h"\r
-//#include "ID_STRS.H"\r
+#pragma hdrstop\r
+\r
+#pragma warn -pro\r
+#pragma warn -use\r
 \r
 //#define THREEBYTEGRSTARTS\r
 \r
@@ -74,9 +77,7 @@ byte          _seg    *audiosegs[NUMSNDCHUNKS];
 void           _seg    *grsegs[NUMCHUNKS];\r
 \r
 byte           far     grneeded[NUMCHUNKS];\r
-byte           ca_levelbit,ca_levelnum;\r
-\r
-int                    profilehandle,debughandle;*/\r
+byte           ca_levelbit,ca_levelnum;*/\r
 \r
 void   (*drawcachebox)         (char *title, unsigned numcache);\r
 void   (*updatecachebox)       (void);\r
@@ -173,17 +174,22 @@ long GRFILEPOS(int c)
 =\r
 ============================\r
 */\r
-/*++++\r
-void CA_OpenDebug(void)\r
+void CA_OpenDebug(global_game_variables_t *gvar)\r
 {\r
-       unlink("DEBUG.TXT");\r
-       debughandle = open("DEBUG.TXT", O_CREAT | O_WRONLY | O_TEXT);\r
+#ifdef __BORLANDC__\r
+       unlink("debug.16b");\r
+       gvar->handle.debughandle = open("debug.16b", O_CREAT | O_WRONLY | O_TEXT);\r
+#endif\r
+#ifdef __WATCOMC__\r
+       unlink("debug.16w");\r
+       gvar->handle.debughandle = open("debug.16w", O_CREAT | O_WRONLY | O_TEXT);\r
+#endif\r
 }\r
 \r
-void CA_CloseDebug(void)\r
+void CA_CloseDebug(global_game_variables_t *gvar)\r
 {\r
-       close debughandle);\r
-}*/\r
+       close(gvar->handle.debughandle);\r
+}\r
 \r
 \r
 \r
@@ -216,36 +222,64 @@ void CAL_GetGrChunkLength (int chunk)
 ==========================\r
 */\r
 \r
-boolean CA_FarRead (int handle, byte far *dest, dword length)\r
+boolean CA_FarRead(int handle, byte huge *dest, dword length, mminfo_t *mm)\r
 {\r
        boolean flag;\r
-       if (length>0xffffl)\r
+       //dword fat=0;\r
+       //word segm=0;\r
+       if(mm->EMSVer<0x40)\r
+       if(length>0xfffflu)\r
+       {\r
+               printf("File is a fat bakapee\n");\r
+               //segm=(length%0xfffflu)-1;\r
+               //fat=segm*0xfffflu;\r
+               //length-=fat;\r
                printf("CA_FarRead doesn't support 64K reads yet!\n");\r
+               return 0;//TODO: EXPAND!!!\r
+       }\r
 \r
-       __asm\r
-       {\r
-               push    ds\r
-               mov     bx,[handle]\r
-               mov     cx,[WORD PTR length]\r
-               mov     dx,[WORD PTR dest]\r
-               mov     ds,[WORD PTR dest+2]\r
-               mov     ah,0x3f                         // READ w/handle\r
-               int     21h\r
-               pop     ds\r
-               jnc     good\r
-               mov     errno,ax\r
-               mov     flag,0\r
-               jmp End\r
+       //if(!fat&&!segm)\r
+       //{\r
+               __asm {\r
+                       push    ds\r
+                       mov     bx,[handle]\r
+                       mov     cx,[WORD PTR length]\r
+                       mov     dx,[WORD PTR dest]\r
+                       mov     ds,[WORD PTR dest+2]\r
+                       mov     ah,0x3f                         // READ w/handle\r
+                       int     21h\r
+                       pop     ds\r
+                       jnc     good\r
+                       mov     errno,ax\r
+                       mov     flag,0\r
+                       jmp End\r
+#ifdef __BORLANDC__\r
+               }\r
+#endif\r
 good:\r
-               cmp     ax,[WORD PTR length]\r
-               je      done\r
-//             errno = EINVFMT;                        // user manager knows this is bad read\r
-               mov     flag,0\r
-               jmp End\r
+#ifdef __BORLANDC__\r
+               __asm {\r
+#endif\r
+                       cmp     ax,[WORD PTR length]\r
+                       je      done\r
+//                     errno = EINVFMT;                        // user manager knows this is bad read\r
+                       mov     flag,0\r
+                       jmp End\r
+#ifdef __BORLANDC__\r
+               }\r
+#endif\r
 done:\r
-               mov     flag,1\r
+#ifdef __BORLANDC__\r
+               __asm {\r
+#endif\r
+                       mov     flag,1\r
+#ifdef __BORLANDC__\r
+               }\r
+#endif\r
 End:\r
-       }\r
+#ifdef __WATCOMC__\r
+               }\r
+#endif\r
        return flag;\r
 }\r
 \r
@@ -260,36 +294,64 @@ End:
 ==========================\r
 */\r
 \r
-boolean CA_FarWrite (int handle, byte far *source, dword length)\r
+boolean CA_FarWrite(int handle, byte huge *source, dword length, mminfo_t *mm)\r
 {\r
        boolean flag;\r
-       if (length>0xffffl)\r
-               printf("CA_FarWrite doesn't support 64K reads yet!\n");\r
-\r
-       __asm\r
+       //dword fat=0;\r
+       //word segm=0;\r
+       if(mm->EMSVer<0x40)\r
+       if(length>0xfffflu)\r
        {\r
-               push    ds\r
-               mov     bx,[handle]\r
-               mov     cx,[WORD PTR length]\r
-               mov     dx,[WORD PTR source]\r
-               mov     ds,[WORD PTR source+2]\r
-               mov     ah,0x40                 // WRITE w/handle\r
-               int     21h\r
-               pop     ds\r
-               jnc     good\r
-               mov     errno,ax\r
-               mov flag,0\r
-               jmp End\r
+               printf("File is a fat bakapee\n");\r
+               //segm=(length%0xfffflu)-1;\r
+               //fat=segm*0xfffflu;\r
+               //length-=fat;\r
+               printf("CA_FarRead doesn't support 64K reads yet!\n");\r
+               return 0;\r
+       }\r
+\r
+       //if(!fat&&!segm)\r
+       //{\r
+               __asm {\r
+                       push    ds\r
+                       mov     bx,[handle]\r
+                       mov     cx,[WORD PTR length]\r
+                       mov     dx,[WORD PTR source]\r
+                       mov     ds,[WORD PTR source+2]\r
+                       mov     ah,0x40                 // WRITE w/handle\r
+                       int     21h\r
+                       pop     ds\r
+                       jnc     good\r
+                       mov     errno,ax\r
+                       mov flag,0\r
+                       jmp End\r
+#ifdef __BORLANDC__\r
+               }\r
+#endif\r
 good:\r
-               cmp     ax,[WORD PTR length]\r
-               je      done\r
-       //errno = ENOMEM;                               // user manager knows this is bad write\r
-               mov     flag,0\r
-               jmp End\r
+#ifdef __BORLANDC__\r
+               __asm {\r
+#endif\r
+                       cmp     ax,[WORD PTR length]\r
+                       je      done\r
+                       //errno = ENOMEM;                               // user manager knows this is bad write\r
+                       mov     flag,0\r
+                       jmp End\r
+#ifdef __BORLANDC__\r
+               }\r
+#endif\r
 done:\r
-               mov     flag,1\r
+#ifdef __BORLANDC__\r
+               __asm {\r
+#endif\r
+                       mov     flag,1\r
+#ifdef __BORLANDC__\r
+               }\r
+#endif\r
 End:\r
-       }\r
+#ifdef __WATCOMC__\r
+               }\r
+#endif\r
        return flag;\r
 }\r
 \r
@@ -304,16 +366,49 @@ End:
 ==========================\r
 */\r
 \r
-boolean CA_ReadFile(char *filename, memptr *ptr)\r
+boolean CA_ReadFile(char *filename, memptr *ptr, mminfo_t *mm)\r
 {\r
        int handle;\r
-       dword size;\r
+       sdword size;\r
+       //long size;\r
 \r
        if((handle = open(filename,O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
                return false;\r
 \r
        size = filelength(handle);\r
-       if(!CA_FarRead(handle,*ptr,size))\r
+       if(!CA_FarRead(handle,*ptr,size, mm))\r
+       {\r
+               close (handle);\r
+               return false;\r
+       }\r
+       close (handle);\r
+       return true;\r
+}\r
+\r
+\r
+/*\r
+==========================\r
+=\r
+= CA_WriteFile\r
+=\r
+= Writes a file from a memory buffer\r
+=\r
+==========================\r
+*/\r
+\r
+boolean CA_WriteFile (char *filename, void far *ptr, long length, mminfo_t *mm)\r
+{\r
+       int handle;\r
+       sdword size;\r
+       //long size;\r
+\r
+       handle = open(filename,O_CREAT | O_BINARY | O_WRONLY,\r
+                               S_IREAD | S_IWRITE | S_IFREG);\r
+\r
+       if (handle == -1)\r
+               return false;\r
+\r
+       if (!CA_FarWrite (handle,ptr,length, mm))\r
        {\r
                close(handle);\r
                return false;\r
@@ -337,14 +432,15 @@ boolean CA_ReadFile(char *filename, memptr *ptr)
 boolean CA_LoadFile(char *filename, memptr *ptr, mminfo_t *mm, mminfotype *mmi)\r
 {\r
        int handle;\r
-       long size;\r
+       sdword size;\r
+       //long size;\r
 \r
        if((handle = open(filename,O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
                return false;\r
 \r
        size = filelength (handle);\r
        MM_GetPtr(ptr,size, mm, mmi);\r
-       if(!CA_FarRead(handle,*ptr,size))\r
+       if(!CA_FarRead(handle,*ptr,size, mm))\r
        {\r
                close(handle);\r
                return false;\r
@@ -824,7 +920,7 @@ asm mov     ds,ax
 =\r
 ======================\r
 */\r
-\r
+////++++ enable!\r
 /*void CAL_SetupGrFile (void)\r
 {\r
        int handle;\r
@@ -1019,12 +1115,20 @@ asm     mov     ds,ax
 ======================\r
 */\r
 \r
-void CA_Startup(void)\r
+void CA_Startup(global_game_variables_t *gvar)\r
 {\r
 #ifdef PROFILE\r
-       unlink("PROFILE.TXT");\r
-       profilehandle = open("PROFILE.TXT", O_CREAT | O_WRONLY | O_TEXT);\r
+#ifdef __BORLANDC__\r
+       unlink("profile.16b");\r
+       gvar->handle.profilehandle = open("profile.16b", O_CREAT | O_WRONLY | O_TEXT);\r
+#endif\r
+#ifdef __WATCOMC__\r
+       unlink("profile.16w");\r
+       gvar->handle.profilehandle = open("profile.16w", O_CREAT | O_WRONLY | O_TEXT);\r
 #endif\r
+#endif\r
+//     unlink("debug0.16");\r
+//     gvar->handle.showmemhandle = open("debug0.16", O_CREAT | O_WRONLY | O_TEXT);\r
 /*++++\r
 // MDM begin - (GAMERS EDGE)\r
 //\r
@@ -1081,11 +1185,12 @@ void CA_Startup(void)
 ======================\r
 */\r
 \r
-void CA_Shutdown(void)\r
+void CA_Shutdown(global_game_variables_t *gvar)\r
 {\r
 #ifdef PROFILE\r
-       close(profilehandle);\r
+       close(gvar->handle.profilehandle);\r
 #endif\r
+//     close(gvar->handle.showmemhandle);\r
 /*++++\r
        close(maphandle);\r
        close(grhandle);\r
@@ -1872,9 +1977,14 @@ void CA_ClearAllMarks (void)
 ======================\r
 */\r
 /*++++\r
-void CA_FreeGraphics (void)\r
+void CA_SetGrPurge (void)\r
 {\r
-       int     i;\r
+       int i;\r
+\r
+//\r
+// free graphics\r
+//\r
+       CA_ClearMarks ();\r
 \r
        for (i=0;i<NUMCHUNKS;i++)\r
                if (grsegs[i])\r