]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/16_ca.c
ca_t added
[16.git] / src / lib / 16_ca.c
index 8cd819e26be4d4d689e40b0acdcfdb4040d3b2ce..d9dc6a1f5a1e8d5736614be435e604717b1a87ad 100755 (executable)
@@ -227,18 +227,16 @@ boolean CA_FarRead(int handle, byte huge *dest, dword length, mminfo_t *mm)
        boolean flag;\r
        //dword fat=0;\r
        //word segm=0;\r
-       //if(mm->EMSVer<0x40)\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;\r
+               printf("CA_FarRead doesn't support 64K reads yet!\n");\r
+               return 0;//TODO: EXPAND!!!\r
        }\r
-       else\r
-       {\r
 \r
        //if(!fat&&!segm)\r
        //{\r
@@ -283,8 +281,6 @@ End:
                }\r
 #endif\r
        return flag;\r
-       //}else return 0;//todo: EXPAND!!!\r
-       }\r
 }\r
 \r
 \r
@@ -303,18 +299,16 @@ boolean CA_FarWrite(int handle, byte huge *source, dword length, mminfo_t *mm)
        boolean flag;\r
        //dword fat=0;\r
        //word segm=0;\r
-       //if(mm->EMSVer<0x40)\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;\r
+               printf("CA_FarRead doesn't support 64K reads yet!\n");\r
+               return 0;\r
        }\r
-       else\r
-       {\r
 \r
        //if(!fat&&!segm)\r
        //{\r
@@ -359,8 +353,6 @@ End:
                }\r
 #endif\r
        return flag;\r
-       //}else return 0;\r
-       }\r
 }\r
 \r
 \r
@@ -385,6 +377,38 @@ boolean CA_ReadFile(char *filename, memptr *ptr, mminfo_t *mm)
 \r
        size = filelength(handle);\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
@@ -896,7 +920,7 @@ asm mov     ds,ax
 =\r
 ======================\r
 */\r
-\r
+////++++ enable!\r
 /*void CAL_SetupGrFile (void)\r
 {\r
        int handle;\r
@@ -1689,7 +1713,7 @@ void CA_CacheGrChunk (int chunk)
        byte    far *source;\r
        int             next;\r
 \r
-       grneeded[chunk] |= ca_levelbit;         // make sure it doesn't get removed\r
+       gvar->video.grneeded[chunk] |= ca_levelbit;             // make sure it doesn't get removed\r
        if (grsegs[chunk])\r
        {\r
                MM_SetPurge (&grsegs[chunk],0);\r
@@ -1913,15 +1937,13 @@ void CA_DownLevel (void)
 =\r
 ======================\r
 */\r
-/*\r
-void CA_ClearMarks (void)\r
+void CA_ClearMarks (global_game_variables_t *gvar)\r
 {\r
        int i;\r
 \r
        for (i=0;i<NUMCHUNKS;i++)\r
-               grneeded[i]&=~ca_levelbit;\r
+               gvar->video.grneeded[i]&=~gvar->ca.ca_levelbit;\r
 }\r
-*/\r
 \r
 //===========================================================================\r
 \r
@@ -1934,14 +1956,12 @@ void CA_ClearMarks (void)
 =\r
 ======================\r
 */\r
-/*\r
-void CA_ClearAllMarks (void)\r
+void CA_ClearAllMarks (global_game_variables_t *gvar)\r
 {\r
-       _fmemset (grneeded,0,sizeof(grneeded));\r
-       ca_levelbit = 1;\r
-       ca_levelnum = 0;\r
+       _fmemset (gvar->video.grneeded,0,sizeof(gvar->video.grneeded));\r
+       gvar->ca.ca_levelbit = 1;\r
+       gvar->ca.ca_levelnum = 0;\r
 }\r
-*/\r
 \r
 //===========================================================================\r
 \r
@@ -1953,9 +1973,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
@@ -2163,7 +2188,7 @@ void CA_CacheMarks (char *title)
 // go through and make everything not needed purgable\r
 //\r
        for (i=0;i<NUMCHUNKS;i++)\r
-               if (grneeded[i]&ca_levelbit)\r
+               if (gvar->video.grneeded[i]&ca_levelbit)\r
                {\r
                        if (grsegs[i])                                  // its allready in memory, make\r
                                MM_SetPurge(&grsegs[i],0);      // sure it stays there!\r
@@ -2202,7 +2227,7 @@ void CA_CacheMarks (char *title)
        bufferstart = bufferend = 0;            // nothing good in buffer now\r
 \r
        for (i=0;i<NUMCHUNKS;i++)\r
-               if ( (grneeded[i]&ca_levelbit) && !grsegs[i])\r
+               if ( (gvar->video.grneeded[i]&ca_levelbit) && !grsegs[i])\r
                {\r
 //\r
 // update thermometer\r
@@ -2236,7 +2261,7 @@ void CA_CacheMarks (char *title)
                                        while ( next < NUMCHUNKS )\r
                                        {\r
                                                while (next < NUMCHUNKS &&\r
-                                               !(grneeded[next]&ca_levelbit && !grsegs[next]))\r
+                                               !(gvar->video.grneeded[next]&ca_levelbit && !grsegs[next]))\r
                                                        next++;\r
                                                if (next == NUMCHUNKS)\r
                                                        continue;\r