]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/16_ca.c
updated the copyleft wwww i am not deAD! i just been 2 busy last 6 monthes
[16.git] / src / lib / 16_ca.c
index d69989c32b1102853c861a77417c2aa1cb8d262d..2ed42cd88e713061eab42f57ad006bf47f0007f6 100755 (executable)
@@ -1,19 +1,23 @@
-/* Catacomb Apocalypse Source Code\r
- * Copyright (C) 1993-2014 Flat Rock Software\r
+/* Project 16 Source Code~\r
+ * Copyright (C) 2012-2018 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover\r
  *\r
- * This program is free software; you can redistribute it and/or modify\r
+ * This file is part of Project 16.\r
+ *\r
+ * Project 16 is free software; you can redistribute it and/or modify\r
  * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
+ * the Free Software Foundation; either version 3 of the License, or\r
  * (at your option) any later version.\r
  *\r
- * This program is distributed in the hope that it will be useful,\r
+ * Project 16 is distributed in the hope that it will be useful,\r
  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
  * GNU General Public License for more details.\r
  *\r
- * You should have received a copy of the GNU General Public License along\r
- * with this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>, or\r
+ * write to the Free Software Foundation, Inc., 51 Franklin Street,\r
+ * Fifth Floor, Boston, MA 02110-1301 USA.\r
+ *\r
  */\r
 \r
 // ID_CA.C\r
@@ -163,6 +167,8 @@ CASVT GRFILEPOS(int c, global_game_variables_t *gvar)
 }\r
 #endif\r
 \r
+//#define EXTENSION    "hb1"\r
+\r
 /*\r
 =============================================================================\r
 \r
@@ -231,21 +237,9 @@ void CAL_GetGrChunkLength (int chunk,global_game_variables_t *gvar)
 boolean CA_FarRead(int handle, byte far *dest, dword length, global_game_variables_t *gvar)\r
 {\r
        boolean flag=0;\r
-       //dword fat=0;\r
-       //word segm=0;\r
-       if(gvar->pm.emm.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
+       if (length>0xfffflu)\r
+               Quit (gvar, "CA_FarRead doesn't support 64K reads yet!");//TODO: EXPAND!!!\r
 \r
-       //if(!fat&&!segm)\r
-       //{\r
        __asm {\r
                push    ds\r
                mov     bx,[handle]\r
@@ -293,7 +287,7 @@ End:
 /*\r
 ==========================\r
 =\r
-= CA_SegWrite\r
+= CA_FarWrite\r
 =\r
 = Write from a file to a far pointer\r
 =\r
@@ -303,21 +297,9 @@ End:
 boolean CA_FarWrite(int handle, byte far *source, dword length, global_game_variables_t *gvar)\r
 {\r
        boolean flag=0;\r
-       //dword fat=0;\r
-       //word segm=0;\r
-       if(gvar->pm.emm.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_FarWrite doesn't support 64K reads yet!\n");\r
-               return 0;\r
-       }\r
+       if (length>0xfffflu)\r
+               Quit (gvar, "CA_FarWrite doesn't support 64K reads yet!");//TODO: EXPAND!!!\r
 \r
-       //if(!fat&&!segm)\r
-       //{\r
        __asm {\r
                push    ds\r
                mov     bx,[handle]\r
@@ -1045,7 +1027,9 @@ void CAL_SetupGrFile (global_game_variables_t *gvar)
 {\r
        char fname[13];\r
        int handle;\r
+#if NUMPICS>0\r
        memptr compseg;\r
+#endif\r
 \r
 #ifdef GRHEADERLINKED\r
 \r
@@ -1061,7 +1045,7 @@ void CAL_SetupGrFile (global_game_variables_t *gvar)
 //\r
 \r
        strcpy(fname,GDICTNAME);\r
-       strcat(fname,EXTENSION);\r
+       strcat(fname,"hb1");\r
 \r
        if ((handle = open(fname,\r
                 O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
@@ -1076,7 +1060,7 @@ void CAL_SetupGrFile (global_game_variables_t *gvar)
        MM_GetPtr (MEMPTRCONV gvar->ca.grstarts,(NUMCHUNKS+1)*FILEPOSSIZE, gvar);\r
 \r
        strcpy(fname,GHEADNAME);\r
-       strcat(fname,EXTENSION);\r
+       strcat(fname,"hb1");\r
 \r
        if ((handle = open(fname,\r
                 O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
@@ -1093,7 +1077,7 @@ void CAL_SetupGrFile (global_game_variables_t *gvar)
 // Open the graphics file, leaving it open until the game is finished\r
 //\r
        strcpy(fname,GFILENAME);\r
-       strcat(fname,EXTENSION);\r
+       strcat(fname,"hb1");\r
 \r
        gvar->ca.file.grhandle = open(fname, O_RDONLY | O_BINARY);\r
        if (gvar->ca.file.grhandle == -1)\r
@@ -1108,23 +1092,23 @@ void CAL_SetupGrFile (global_game_variables_t *gvar)
        CAL_GetGrChunkLength(STRUCTPIC,gvar);           // position file pointer\r
        printf("CAL_SetupGrFile:\n");\r
        printf("        gvar->ca.chunkcomplen size is %lu\n", gvar->ca.chunkcomplen);\r
-       MM_GetPtr(&compseg,gvar->ca.chunkcomplen,gvar);\r
-       IN_Ack(gvar);\r
+       MM_GetPtr(MEMPTRANDPERCONV compseg,gvar->ca.chunkcomplen,gvar);                                                         IN_Ack(gvar);\r
        CA_FarRead (gvar->ca.file.grhandle,compseg,gvar->ca.chunkcomplen,gvar);\r
        CAL_HuffExpand (compseg, (byte far *)gvar->video.pictable,NUMPICS*sizeof(pictabletype),gvar->ca.grhuffman);\r
-       MM_FreePtr(&compseg,gvar);\r
+       MM_FreePtr(MEMPTRANDPERCONV compseg,gvar);\r
 #endif\r
 \r
-#if NUMPICM>0\r
+#if 0\r
+       //NUMPICM>0\r
        MM_GetPtr(MEMPTRCONV picmtable,NUMPICM*sizeof(pictabletype));\r
        CAL_GetGrChunkLength(STRUCTPICM);               // position file pointer\r
        MM_GetPtr(&compseg,gvar->ca.chunkcomplen);\r
        CA_FarRead (gvar->ca.file.grhandle,compseg,gvar->ca.chunkcomplen);\r
        CAL_HuffExpand (compseg, (byte far *)picmtable,NUMPICS*sizeof(pictabletype),gvar->ca.grhuffman);\r
        MM_FreePtr(&compseg);\r
-#endif\r
+//#endif\r
 \r
-#if NUMSPRITES>0\r
+//#if NUMSPRITES>0\r
        MM_GetPtr(MEMPTRCONV spritetable,NUMSPRITES*sizeof(spritetabletype));\r
        CAL_GetGrChunkLength(STRUCTSPRITE);     // position file pointer\r
        MM_GetPtr(&compseg,gvar->ca.chunkcomplen);\r
@@ -1159,12 +1143,12 @@ void CAL_SetupMapFile (global_game_variables_t *gvar)
 #ifndef MAPHEADERLINKED\r
        if ((handle = open("maphead.mph",\r
                 O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-               Quit ("Can't open maphead.mph");\r
+               Quit (gvar, "Can't open maphead.mph");\r
        length = filelength(handle);\r
        MM_GetPtr (MEMPTRCONV gvar->ca.tinf,length,gvar);\r
        CA_FarRead(handle, gvar->ca.tinf, length,gvar);\r
        close(handle);\r
-//#else\r
+#else\r
 \r
        gvar->ca.tinf = (byte _seg *)FP_SEG(&maphead);\r
 \r
@@ -1176,15 +1160,15 @@ void CAL_SetupMapFile (global_game_variables_t *gvar)
 //TODO: multiple files\r
        if ((gvar->ca.file.maphandle = open("data/test.map",\r
                 O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-               Quit ("Can't open data/test.map!");\r
+               Quit (gvar, "Can't open data/test.map!");\r
 /*#ifdef MAPHEADERLINKED\r
        if ((maphandle = open("GAMEMAPS.16"ENSION,\r
                 O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-               Quit ("Can't open GAMEMAPS.16"ENSION"!");\r
+               Quit (gvar, "Can't open GAMEMAPS.16"ENSION"!");\r
 #else\r
        if ((maphandle = open("MAPTEMP.16"ENSION,\r
                 O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-               Quit ("Can't open MAPTEMP.16"ENSION"!");\r
+               Quit (gvar, "Can't open MAPTEMP.16"ENSION"!");\r
 #endif*/\r
 }\r
 \r
@@ -1210,7 +1194,7 @@ void CAL_SetupMapFile (global_game_variables_t *gvar)
 #ifndef AUDIOHEADERLINKED\r
        if ((handle = open("AUDIOHED.16",\r
                 O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-               Quit ("Can't open AUDIOHED.16""!");\r
+               Quit (gvar, "Can't open AUDIOHED.16""!");\r
        length = filelength(handle);\r
        MM_GetPtr (MEMPTRCONV audiostarts,length);\r
        CA_FarRead(handle, (byte far *)audiostarts, length);\r
@@ -1227,11 +1211,11 @@ void CAL_SetupMapFile (global_game_variables_t *gvar)
 #ifndef AUDIOHEADERLINKED\r
        if ((audiohandle = open("AUDIOT.16",\r
                 O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-               Quit ("Can't open AUDIOT.16""!");\r
+               Quit (gvar, "Can't open AUDIOT.16""!");\r
 #else\r
        if ((audiohandle = open("AUDIO.16",\r
                 O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-               Quit ("Can't open AUDIO.16""!");\r
+               Quit (gvar, "Can't open AUDIO.16""!");\r
 #endif\r
 }*/\r
 \r
@@ -1261,6 +1245,7 @@ void CA_Startup(global_game_variables_t *gvar)
 #endif\r
 #endif//profile\r
 \r
+#ifdef SHOWMEMINFO\r
 #ifdef __BORLANDC__\r
        unlink("meminfo.16b");\r
        gvar->handle.showmemhandle = open("meminfo.16b", O_CREAT | O_WRONLY | O_TEXT);\r
@@ -1269,6 +1254,7 @@ void CA_Startup(global_game_variables_t *gvar)
        unlink("meminfo.16w");\r
        gvar->handle.showmemhandle = open("meminfo.16w", O_CREAT | O_WRONLY | O_TEXT);\r
 #endif\r
+#endif\r
 \r
 \r
 #ifndef NOMAPS\r
@@ -1281,7 +1267,7 @@ void CA_Startup(global_game_variables_t *gvar)
        CAL_SetupMapFile (gvar);\r
 #endif\r
 \r
-       gvar->ca.camap.mapon = -1;\r
+       gvar->ca.mapon = -1;\r
        gvar->ca.ca_levelbit = 1;\r
        gvar->ca.ca_levelnum = 0;\r
 \r
@@ -1308,7 +1294,9 @@ void CA_Shutdown(global_game_variables_t *gvar)
 #ifdef PROFILE\r
        close(gvar->handle.profilehandle);\r
 #endif\r
+#ifdef SHOWMEMINFO\r
        close(gvar->handle.showmemhandle);\r
+#endif\r
 \r
        close(gvar->ca.file.maphandle);\r
        close(gvar->ca.file.grhandle);\r
@@ -1343,7 +1331,7 @@ void CA_CacheAudioChunk (int chunk)
 // MDM begin - (GAMERS EDGE)\r
 //\r
        if (!FindFile("AUDIO.16",NULL,2))\r
-               Quit ("CA_CacheAudioChunk(): Can't find audio files.");\r
+               Quit (gvar, "CA_CacheAudioChunk(): Can't find audio files.");\r
 //\r
 // MDM end\r
 \r
@@ -1449,7 +1437,6 @@ cachein:
 //===========================================================================\r
 \r
 //????#if GRMODE == EGAGR\r
-#if 0\r
 \r
 /*\r
 ======================\r
@@ -1460,12 +1447,12 @@ cachein:
 =\r
 ======================\r
 */\r
-\r
+/*++++\r
 unsigned       static  sheight,swidth;\r
 boolean static dothemask;\r
 \r
 void CAL_ShiftSprite (unsigned segment,unsigned source,unsigned dest,\r
-       unsigned width, unsigned height, unsigned pixshift, boolean domask)\r
+       unsigned width, unsigned height, unsigned pixshift, boolean domask, global_game_variables_t *gvar)\r
 {\r
 \r
        sheight = height;               // because we are going to reassign bp\r
@@ -1482,6 +1469,7 @@ void CAL_ShiftSprite (unsigned segment,unsigned source,unsigned dest,
                mov     bp,[pixshift]\r
                shl     bp,1\r
                mov     bp,WORD PTR [shifttabletable+bp]        // bp holds pointer to shift table\r
+//             mov     bp,WORD PTR [gvar->video.shifttabletable+bp]    // bp holds pointer to shift table\r
 \r
                cmp     [ss:dothemask],0\r
                je              skipmask\r
@@ -1579,7 +1567,7 @@ dodatabyte:
 }\r
 \r
 #endif\r
-\r
+*/\r
 //===========================================================================\r
 \r
 /*\r
@@ -1592,7 +1580,7 @@ dodatabyte:
 ======================\r
 */\r
 /*++++\r
-void CAL_CacheSprite (int chunk, byte far *compressed)\r
+void CAL_CacheSprite (int chunk, byte far *compressed, global_game_variables_t *gvar)\r
 {\r
        int i;\r
        unsigned shiftstarts[5];\r
@@ -1600,11 +1588,12 @@ void CAL_CacheSprite (int chunk, byte far *compressed)
        spritetabletype far *spr;\r
        spritetype _seg *dest;\r
 \r
-#if GRMODE == CGAGR\r
+#if 0\r
+//GRMODE == CGAGR\r
 //\r
 // CGA has no pel panning, so shifts are never needed\r
 //\r
-       spr = &spritetable[chunk-STARTSPRITES];\r
+       spr = &gvar->video.spritetable[chunk-STARTSPRITES];\r
        smallplane = spr->width*spr->height;\r
        MM_GetPtr (&grsegs[chunk],smallplane*2+MAXSHIFTS*6);\r
        if (mmerror)\r
@@ -1622,12 +1611,12 @@ void CAL_CacheSprite (int chunk, byte far *compressed)
 #endif\r
 \r
 \r
-#if GRMODE == EGAGR\r
+//#if GRMODE == EGAGR\r
 \r
 //\r
 // calculate sizes\r
 //\r
-       spr = &spritetable[chunk-STARTSPRITES];\r
+       spr = &gvar->video.spritetable[chunk-STARTSPRITES];\r
        smallplane = spr->width*spr->height;\r
        bigplane = (spr->width+1)*spr->height;\r
 \r
@@ -1638,10 +1627,10 @@ void CAL_CacheSprite (int chunk, byte far *compressed)
        shiftstarts[4] = shiftstarts[3] + bigplane*5;   // nothing ever put here\r
 \r
        expanded = shiftstarts[spr->shifts];\r
-       MM_GetPtr (&grsegs[chunk],expanded);\r
-       if (mmerror)\r
+       MM_GetPtr (MEMPTRCONV gvar->ca.grsegs[chunk],expanded, gvar);\r
+       if (gvar->mm.mmerror)\r
                return;\r
-       dest = (spritetype _seg *)grsegs[chunk];\r
+       dest = (spritetype _seg *)gvar->ca.grsegs[chunk];\r
 \r
 //\r
 // expand the unshifted shape\r
@@ -1675,8 +1664,8 @@ void CAL_CacheSprite (int chunk, byte far *compressed)
                        dest->planesize[i] = bigplane;\r
                        dest->width[i] = spr->width+1;\r
                }\r
-               CAL_ShiftSprite ((unsigned)grsegs[chunk],dest->sourceoffset[0],\r
-                       dest->sourceoffset[2],spr->width,spr->height,4,true);\r
+               CAL_ShiftSprite ((unsigned)gvar->ca.grsegs[chunk],dest->sourceoffset[0],\r
+                       dest->sourceoffset[2],spr->width,spr->height,4,true,gvar);\r
                break;\r
 \r
        case    4:\r
@@ -1687,28 +1676,28 @@ void CAL_CacheSprite (int chunk, byte far *compressed)
                dest->sourceoffset[1] = shiftstarts[1];\r
                dest->planesize[1] = bigplane;\r
                dest->width[1] = spr->width+1;\r
-               CAL_ShiftSprite ((unsigned)grsegs[chunk],dest->sourceoffset[0],\r
-                       dest->sourceoffset[1],spr->width,spr->height,2,true);\r
+               CAL_ShiftSprite ((unsigned)gvar->ca.grsegs[chunk],dest->sourceoffset[0],\r
+                       dest->sourceoffset[1],spr->width,spr->height,2,true,gvar);\r
 \r
                dest->sourceoffset[2] = shiftstarts[2];\r
                dest->planesize[2] = bigplane;\r
                dest->width[2] = spr->width+1;\r
-               CAL_ShiftSprite ((unsigned)grsegs[chunk],dest->sourceoffset[0],\r
-                       dest->sourceoffset[2],spr->width,spr->height,4,true);\r
+               CAL_ShiftSprite ((unsigned)gvar->ca.grsegs[chunk],dest->sourceoffset[0],\r
+                       dest->sourceoffset[2],spr->width,spr->height,4,true,gvar);\r
 \r
                dest->sourceoffset[3] = shiftstarts[3];\r
                dest->planesize[3] = bigplane;\r
                dest->width[3] = spr->width+1;\r
-               CAL_ShiftSprite ((unsigned)grsegs[chunk],dest->sourceoffset[0],\r
-                       dest->sourceoffset[3],spr->width,spr->height,6,true);\r
+               CAL_ShiftSprite ((unsigned)gvar->ca.grsegs[chunk],dest->sourceoffset[0],\r
+                       dest->sourceoffset[3],spr->width,spr->height,6,true,gvar);\r
 \r
                break;\r
 \r
        default:\r
-               Quit ("CAL_CacheSprite: Bad shifts number!");\r
+               Quit (gvar, "CAL_CacheSprite: Bad shifts number!");\r
        }\r
 \r
-#endif\r
+//#endif\r
 }*/\r
 \r
 //===========================================================================\r
@@ -1864,7 +1853,7 @@ void CA_CacheGrChunk (int chunk)
 // MDM begin - (GAMERS EDGE)\r
 //\r
        if (!FindFile("EGAGRAPH.16",NULL,2))\r
-               Quit ("CA_CacheGrChunk(): Can't find graphics files.");\r
+               Quit (gvar, "CA_CacheGrChunk(): Can't find graphics files.");\r
 //\r
 // MDM end\r
 \r
@@ -1900,7 +1889,7 @@ void CA_CacheGrChunk (int chunk)
        CAL_ExpandGrChunk (chunk,source);\r
 \r
        if (compressed>BUFFERSIZE)\r
-               MM_FreePtr(&bigbufferseg);\r
+               MM_FreePtr (MEMPTRCONV bigbufferseg);\r
 }\r
 */\r
 \r
@@ -1914,7 +1903,7 @@ void CA_CacheGrChunk (int chunk)
 =\r
 ======================\r
 */\r
-/*++++ segments!\r
+\r
 void CA_CacheMap (global_game_variables_t *gvar)\r
 {\r
        long    pos,compressed;\r
@@ -1931,33 +1920,43 @@ void CA_CacheMap (global_game_variables_t *gvar)
 //\r
 // free up memory from last map\r
 //\r
-       if (gvar->ca.camap.mapon>-1 && gvar->ca.camap.mapheaderseg[gvar->ca.camap.mapon])\r
-               MM_SetPurge (((memptr)gvar->ca.camap.mapheaderseg[(gvar->ca.camap.mapon)]), 3, gvar);\r
+       if (gvar->ca.mapon>-1 && gvar->ca.mapheaderseg[gvar->ca.mapon])\r
+               MM_SetPurge ((MEMPTRCONV gvar->ca.mapheaderseg[(gvar->ca.mapon)]), 3, gvar);\r
        for (plane=0;plane<MAPPLANES;plane++)\r
-               if (gvar->ca.camap.mapsegs[plane])\r
-                       MM_FreePtr ((memptr)gvar->ca.camap.mapsegs[plane], gvar);\r
+               if (gvar->ca.mapsegs[plane])\r
+                       MM_FreePtr (MEMPTRCONV gvar->ca.mapsegs[plane], gvar);\r
 \r
-       gvar->ca.camap.mapon = gvar->ca.camap.mapnum;\r
+       gvar->ca.mapon = gvar->ca.mapnum;\r
 \r
 \r
 //\r
 // load map header\r
 // The header will be cached if it is still around\r
 //\r
-//     if (!gvar->ca.camap.mapheaderseg[gvar->ca.camap.mapnum])\r
-//     {\r
-//             //pos = ((mapfiletype   _seg *)tinf)->headeroffsets[mapnum];\r
-//             //pos = ((_seg *)gvar->ca.camap.tinf)->headeroffsets[gvar->ca.camap.mapnum];\r
-//             pos = ((memptr)gvar->ca.camap.tinf)->headeroffsets[gvar->ca.camap.mapnum];\r
-//             if (pos<0)                                              // $FFFFFFFF start is a sparse map\r
-//               printf("CA_CacheMap: Tried to load a non existent map!");\r
+       if (!gvar->ca.mapheaderseg[gvar->ca.mapnum])\r
+       {\r
+               pos = ((mapfiletype     _seg *)gvar->ca.tinf)->headeroffsets[gvar->ca.mapnum];\r
+               if (pos<0)                                              // $FFFFFFFF start is a sparse map\r
+                       Quit (gvar, "CA_CacheMap: Tried to load a non existent map!");\r
 \r
-//             MM_GetPtr(MEMPTRCONV gvar->ca.camapheaderseg[mapnum],sizeof(maptype));\r
-//             lseek(maphandle,pos,SEEK_SET);\r
-//             CA_FarRead (maphandle,(memptr)mapheaderseg[mapnum],sizeof(maptype));\r
-//     }\r
-//     else\r
-//             MM_SetPurge (MEMPTRCONV mapheaderseg[mapnum], 0, &(gvar->mm));\r
+               MM_GetPtr(MEMPTRCONV gvar->ca.mapheaderseg[gvar->ca.mapnum],sizeof(maptype), gvar);\r
+               lseek(gvar->ca.file.maphandle,pos,SEEK_SET);\r
+#ifdef MAPHEADERLINKED\r
+//#if BUFFERSIZE < sizeof(maptype)\r
+//The general buffer size is too small!\r
+//#endif\r
+               //\r
+               // load in, then unhuffman to the destination\r
+               //\r
+               CA_FarRead (gvar->ca.file.maphandle,gvar->mm.bufferseg,((mapfiletype    _seg *)gvar->ca.tinf)->headersize[gvar->ca.mapnum], gvar);\r
+               CAL_HuffExpand ((byte huge *)bufferseg,\r
+                       (byte huge *)gvar->ca.mapheaderseg[gvar->ca.mapnum],sizeof(maptype),maphuffman, gvar);\r
+#else\r
+               CA_FarRead (gvar->ca.file.maphandle,(memptr)gvar->ca.mapheaderseg[gvar->ca.mapnum],sizeof(maptype), gvar);\r
+#endif\r
+       }\r
+       else\r
+               MM_SetPurge (MEMPTRCONV gvar->ca.mapheaderseg[gvar->ca.mapnum], 0, gvar);\r
 \r
 //\r
 // load the planes in\r
@@ -1965,30 +1964,30 @@ void CA_CacheMap (global_game_variables_t *gvar)
 // allways reloaded, never cached)\r
 //\r
 \r
-       size = mapheaderseg[mapnum]->width * mapheaderseg[mapnum]->height * 2;\r
+       size = gvar->ca.mapheaderseg[gvar->ca.mapnum]->width * gvar->ca.mapheaderseg[gvar->ca.mapnum]->height * 2;\r
 \r
        for (plane = 0; plane<MAPPLANES; plane++)\r
        {\r
-               //pos = mapheaderseg[mapnum]->planestart[plane];\r
-               //compressed = mapheaderseg[mapnum]->planelength[plane];\r
+               pos = gvar->ca.mapheaderseg[gvar->ca.mapnum]->planestart[plane];\r
+               compressed = gvar->ca.mapheaderseg[gvar->ca.mapnum]->planelength[plane];\r
 \r
                if (!compressed)\r
                        continue;               // the plane is not used in this game\r
 \r
-               dest = MEMPTRCONV mapsegs[plane];\r
-               MM_GetPtr(dest,size);\r
+               dest = MEMPTRCONV gvar->ca.mapsegs[plane];\r
+               MM_GetPtr(dest,size, gvar);\r
 \r
-               lseek(maphandle,pos,SEEK_SET);\r
+               lseek(gvar->ca.file.maphandle,pos,SEEK_SET);\r
                if (compressed<=BUFFERSIZE)\r
-                       source = bufferseg;\r
+                       source = gvar->mm.bufferseg;\r
                else\r
                {\r
-                       MM_GetPtr(&bigbufferseg,compressed);\r
-                       MM_SetLock (&bigbufferseg,true);\r
+                       MM_GetPtr(MEMPTRCONV bigbufferseg,compressed, gvar);\r
+                       MM_SetLock (MEMPTRCONV bigbufferseg,true, gvar);\r
                        source = bigbufferseg;\r
                }\r
 \r
-               CA_FarRead(maphandle,(byte far *)source,compressed);\r
+               CA_FarRead(gvar->ca.file.maphandle,(byte far *)source,compressed, gvar);\r
 #ifdef MAPHEADERLINKED\r
                //\r
                // unhuffman, then unRLEW\r
@@ -1998,7 +1997,7 @@ void CA_CacheMap (global_game_variables_t *gvar)
                //\r
                expanded = *source;\r
                source++;\r
-               MM_GetPtr (&buffer2seg,expanded);\r
+               MM_GetPtr (&buffer2seg,expanded, gvar);\r
                CAL_CarmackExpand (source, (unsigned far *)buffer2seg,expanded);\r
                CA_RLEWexpand (((unsigned far *)buffer2seg)+1,*dest,size,\r
                ((mapfiletype _seg *)tinf)->RLEWtag);\r
@@ -2009,13 +2008,13 @@ void CA_CacheMap (global_game_variables_t *gvar)
                // unRLEW, skipping expanded length\r
                //\r
                CA_RLEWexpand (source+1, *dest,size,\r
-               ((mapfiletype _seg *)tinf)->RLEWtag);\r
+               ((mapfiletype _seg *)gvar->ca.tinf)->RLEWtag);\r
 #endif\r
 \r
                if (compressed>BUFFERSIZE)\r
-                       MM_FreePtr(&bigbufferseg);\r
+                       MM_FreePtr(MEMPTRCONV bigbufferseg, gvar);\r
        }\r
-}//*/\r
+}\r
 \r
 //===========================================================================\r
 \r
@@ -2121,7 +2120,7 @@ void CA_SetGrPurge (global_game_variables_t *gvar)
 \r
        for (i=0;i<NUMCHUNKS;i++)\r
                if (gvar->ca.grsegs[i])\r
-                       MM_SetPurge (gvar->ca.grsegs[i],3, gvar);\r
+                       MM_SetPurge (MEMPTRCONV gvar->ca.grsegs[i],3, gvar);\r
 }\r
 \r
 \r
@@ -2149,20 +2148,20 @@ void CA_SetAllPurge (global_game_variables_t *gvar)
 //\r
 // free map headers and map planes\r
 //\r
-//     for (i=0;i<NUMMAPS;i++)\r
-//             if (gvar->ca.camap.mapheaderseg[i])\r
-//                     MM_SetPurge (gvar->ca.camap.mapheaderseg[i],3, gvar);\r
+       for (i=0;i<NUMMAPS;i++)\r
+               if (gvar->ca.mapheaderseg[i])\r
+                       MM_SetPurge (MEMPTRCONV gvar->ca.mapheaderseg[i],3, gvar);\r
 \r
        for (i=0;i<3;i++)\r
                if (gvar->ca.mapsegs[i])\r
-                       MM_FreePtr ((memptr *)&gvar->ca.mapsegs[i], gvar);\r
+                       MM_FreePtr (MEMPTRCONV gvar->ca.mapsegs[i], gvar);\r
 \r
 //\r
 // free sounds\r
 //\r
        for (i=0;i<NUMSNDCHUNKS;i++)\r
                if (gvar->ca.audiosegs[i])\r
-                       MM_SetPurge ((memptr *)&gvar->ca.audiosegs[i],3, gvar);\r
+                       MM_SetPurge (MEMPTRCONV gvar->ca.audiosegs[i],3, gvar);\r
 \r
 //\r
 // free graphics\r
@@ -2293,9 +2292,9 @@ void      CAL_DialogFinish (void)
 = CA_CacheMarks\r
 =\r
 ======================\r
-*//*++++\r
+*/\r
 #define MAXEMPTYREAD   1024\r
-\r
+/*++++ segments\r
 void CAL_CacheMarks (char *title, global_game_variables_t *gvar)\r
 {\r
        boolean dialog;\r
@@ -2330,8 +2329,8 @@ void CAL_CacheMarks (char *title, global_game_variables_t *gvar)
 \r
 // MDM begin - (GAMERS EDGE)\r
 //\r
-//     if (!FindFile("EGAGRAPH.16",NULL,2))\r
-//             Quit ("CA_CacheMarks(): Can't find graphics files.");\r
+//???? if (!FindFile("EGAGRAPH.16",NULL,2))\r
+//????         Quit (gvar, "CA_CacheMarks(): Can't find graphics files.");\r
 //\r
 // MDM end\r
 \r
@@ -2434,7 +2433,7 @@ void CAL_CacheMarks (char *title, global_game_variables_t *gvar)
 //\r
                if (dialog && finishcachebox)\r
                        finishcachebox();\r
-}*/\r
+}//*/\r
 \r
 void CA_CannotOpen(char *string, global_game_variables_t *gvar)\r
 {\r
@@ -2443,5 +2442,5 @@ void CA_CannotOpen(char *string, global_game_variables_t *gvar)
  strcpy(str,"Can't open ");\r
  strcat(str,string);\r
  strcat(str,"!\n");\r
- Quit (str);\r
+ Quit (gvar, str);\r
 }\r