]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/16_ca.c
meh ca needs huge amounts of work
[16.git] / src / lib / 16_ca.c
index 7298ca3f6639ae93daa497da0a3419d8dbe68b25..6ef9806c0d37446c800cbdfb7bbf2c3f233529d6 100755 (executable)
@@ -132,17 +132,17 @@ void      CAL_DialogFinish (void);*/
 //void CAL_CarmackExpand (unsigned far *source, unsigned far *dest,unsigned length);\r
 \r
 \r
-/*++++#ifdef THREEBYTEGRSTARTS\r
+#ifdef THREEBYTEGRSTARTS\r
 #define FILEPOSSIZE    3\r
 //#define      GRFILEPOS(c) (*(long far *)(((byte far *)grstarts)+(c)*3)&0xffffff)\r
-long GRFILEPOS(int c)\r
+long GRFILEPOS(int c, global_game_variables_t *gvar)\r
 {\r
        long value;\r
        int     offset;\r
 \r
        offset = c*3;\r
 \r
-       value = *(long far *)(((byte far *)grstarts)+offset);\r
+       value = *(long far *)(((byte far *)gvar->ca.grstarts)+offset);\r
 \r
        value &= 0x00ffffffl;\r
 \r
@@ -153,8 +153,8 @@ long GRFILEPOS(int c)
 };\r
 #else\r
 #define FILEPOSSIZE    4\r
-#define        GRFILEPOS(c) (grstarts[c])\r
-#endif*/\r
+#define        GRFILEPOS(c) (gvar->ca.grstarts[c])\r
+#endif\r
 \r
 /*\r
 =============================================================================\r
@@ -221,7 +221,7 @@ void CAL_GetGrChunkLength (int chunk)
 ==========================\r
 */\r
 \r
-boolean CA_FarRead(int handle, byte huge *dest, dword length, global_game_variables_t *gvar)\r
+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
@@ -293,7 +293,7 @@ End:
 ==========================\r
 */\r
 \r
-boolean CA_FarWrite(int handle, byte huge *source, dword length, global_game_variables_t *gvar)\r
+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
@@ -305,7 +305,7 @@ boolean CA_FarWrite(int handle, byte huge *source, dword length, global_game_var
                //segm=(length%0xfffflu)-1;\r
                //fat=segm*0xfffflu;\r
                //length-=fat;\r
-               printf("CA_FarRead doesn't support 64K reads yet!\n");\r
+               printf("CA_FarWrite doesn't support 64K reads yet!\n");\r
                return 0;\r
        }\r
 \r
@@ -377,10 +377,10 @@ boolean CA_ReadFile(char *filename, memptr *ptr, global_game_variables_t *gvar)
        size = filelength(handle);\r
        if(!CA_FarRead(handle,*ptr,size, gvar))\r
        {\r
-               close (handle);\r
+               close(handle);\r
                return false;\r
        }\r
-       close (handle);\r
+       close(handle);\r
        return true;\r
 }\r
 \r
@@ -438,7 +438,28 @@ boolean CA_LoadFile(char *filename, memptr *ptr, global_game_variables_t *gvar)
                return false;\r
 \r
        size = filelength(handle);\r
+#ifdef __DEBUG_CA__\r
+       if(dbg_debugca>0){\r
+               printf("===============================================================================\n");\r
+               printf("                CA_LoadFile\n");\r
+               printf("===============================================================================\n");\r
+               //%04x\r
+               printf("        ptr=%Fp\n", ptr);\r
+               printf("        *ptr=%Fp\n", *ptr);\r
+               printf("        &ptr=%Fp\n", &ptr);\r
+       }\r
+#endif\r
        MM_GetPtr(ptr,size, gvar);\r
+#ifdef __DEBUG_CA__\r
+       if(dbg_debugca>0){\r
+               //%04x\r
+               printf("---------------------------------------\n");\r
+               printf("        ptr=%Fp\n", ptr);\r
+               printf("        *ptr=%Fp\n", *ptr);\r
+               printf("        &ptr=%Fp\n", &ptr);\r
+               printf("-------------------------------------------------------------------------------\n");\r
+       }\r
+#endif\r
        if(!CA_FarRead(handle,*ptr,size, gvar))\r
        {\r
                close(handle);\r
@@ -498,7 +519,7 @@ void CAL_OptimizeNodes(huffnode *table)
 ======================\r
 */\r
 \r
-void CAL_HuffExpand (byte huge *source, byte huge *dest,\r
+void CAL_HuffExpand (byte far *source, byte far *dest,\r
   long length,huffnode *hufftable)\r
 {\r
 //  unsigned bit,byte,node,code;\r
@@ -795,12 +816,12 @@ void CAL_CarmackExpand (unsigned far *source, unsigned far *dest, unsigned lengt
 ======================\r
 */\r
 \r
-long CA_RLEWCompress (unsigned huge *source, long length, unsigned huge *dest,\r
+long CA_RLEWCompress (unsigned far *source, long length, unsigned far *dest,\r
   unsigned rlewtag)\r
 {\r
   long complength;\r
   unsigned value,count,i;\r
-  unsigned huge *start,huge *end;\r
+  unsigned far *start,far *end;\r
 \r
   start = dest;\r
 \r
@@ -852,11 +873,11 @@ long CA_RLEWCompress (unsigned huge *source, long length, unsigned huge *dest,
 ======================\r
 */\r
 \r
-void CA_RLEWexpand (unsigned huge *source, unsigned huge *dest,long length,\r
+void CA_RLEWexpand (unsigned far *source, unsigned far *dest,long length,\r
   unsigned rlewtag)\r
 {\r
 //  unsigned value,count,i;\r
-  unsigned huge *end;\r
+  unsigned far *end;\r
   unsigned sourceseg,sourceoff,destseg,destoff,endseg,endoff;\r
 \r
 \r
@@ -1028,7 +1049,7 @@ dinorm:
 \r
        if ((handle = open(GREXT"DICT."EXT,\r
                 O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-               Quit ("Can't open "GREXT"DICT."EXT"!");\r
+               Quit (gvar, "Can't open "GREXT"DICT."EXT"!");\r
 \r
        read(handle, &grhuffman, sizeof(grhuffman));\r
        close(handle);\r
@@ -1040,7 +1061,7 @@ dinorm:
 \r
        if ((handle = open(GREXT"HEAD."EXT,\r
                 O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-               Quit ("Can't open "GREXT"HEAD."EXT"!");\r
+               Quit (gvar, "Can't open "GREXT"HEAD."EXT"!");\r
 \r
        CA_FarRead(handle, (memptr)grstarts, (NUMCHUNKS+1)*FILEPOSSIZE);\r
 \r
@@ -1054,7 +1075,7 @@ dinorm:
 //\r
        grhandle = open(GREXT"GRAPH."EXT, O_RDONLY | O_BINARY);\r
        if (grhandle == -1)\r
-               Quit ("Cannot open "GREXT"GRAPH."EXT"!");\r
+               Quit (gvar, "Cannot open "GREXT"GRAPH."EXT"!");\r
 \r
 \r
 //\r
@@ -1065,7 +1086,7 @@ dinorm:
        CAL_GetGrChunkLength(STRUCTPIC);                // position file pointer\r
        MM_GetPtr(&compseg,chunkcomplen);\r
        CA_FarRead (grhandle,compseg,chunkcomplen);\r
-       CAL_HuffExpand (compseg, (byte huge *)pictable,NUMPICS*sizeof(pictabletype),grhuffman);\r
+       CAL_HuffExpand (compseg, (byte far *)pictable,NUMPICS*sizeof(pictabletype),grhuffman);\r
        MM_FreePtr(&compseg);\r
 #endif\r
 \r
@@ -1074,7 +1095,7 @@ dinorm:
        CAL_GetGrChunkLength(STRUCTPICM);               // position file pointer\r
        MM_GetPtr(&compseg,chunkcomplen);\r
        CA_FarRead (grhandle,compseg,chunkcomplen);\r
-       CAL_HuffExpand (compseg, (byte huge *)picmtable,NUMPICS*sizeof(pictabletype),grhuffman);\r
+       CAL_HuffExpand (compseg, (byte far *)picmtable,NUMPICS*sizeof(pictabletype),grhuffman);\r
        MM_FreePtr(&compseg);\r
 #endif\r
 \r
@@ -1083,7 +1104,7 @@ dinorm:
        CAL_GetGrChunkLength(STRUCTSPRITE);     // position file pointer\r
        MM_GetPtr(&compseg,chunkcomplen);\r
        CA_FarRead (grhandle,compseg,chunkcomplen);\r
-       CAL_HuffExpand (compseg, (byte huge *)spritetable,NUMSPRITES*sizeof(spritetabletype),grhuffman);\r
+       CAL_HuffExpand (compseg, (byte far *)spritetable,NUMSPRITES*sizeof(spritetabletype),grhuffman);\r
        MM_FreePtr(&compseg);\r
 #endif\r
 \r
@@ -1102,25 +1123,25 @@ dinorm:
 \r
 void CAL_SetupMapFile (global_game_variables_t *gvar)\r
 {\r
-//     int handle;\r
-//     long length;\r
+/*     int handle;\r
+       long length;\r
 \r
 //\r
 // load maphead.ext (offsets and tileinfo for map file)\r
 //\r
-// #ifndef MAPHEADERLINKED\r
-//     if ((handle = open("MAPHEAD."EXT,\r
-//              O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-//             printf("Can't open MAPHEAD."EXT"!");\r
-//     length = filelength(handle);\r
-//     MM_GetPtr (&(memptr)tinf,length);\r
-//     CA_FarRead(handle, tinf, length);\r
-//     close(handle);\r
-// //#else\r
-//\r
-//     tinf = (byte _seg *)FP_SEG(&maphead);\r
-//\r
-// #endif\r
+#ifndef MAPHEADERLINKED\r
+       if ((handle = open("MAPHEAD."EXT,\r
+                O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
+               printf("Can't open MAPHEAD."EXT"!");\r
+       length = filelength(handle);\r
+       MM_GetPtr (&(memptr)tinf,length);\r
+       CA_FarRead(handle, tinf, length);\r
+       close(handle);\r
+//#else\r
+\r
+       tinf = (byte _seg *)FP_SEG(&maphead);\r
+\r
+#endif*/\r
 \r
 //\r
 // open the data file\r
@@ -1134,11 +1155,11 @@ void CAL_SetupMapFile (global_game_variables_t *gvar)
 // #ifdef MAPHEADERLINKED\r
 //     if ((maphandle = open("GAMEMAPS."EXT,\r
 //              O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-//             Quit ("Can't open GAMEMAPS."EXT"!");\r
+//             Quit (gvar, "Can't open GAMEMAPS."EXT"!");\r
 // //#else\r
 //     if ((maphandle = open("MAPTEMP."EXT,\r
 //              O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-//             Quit ("Can't open MAPTEMP."EXT"!");\r
+//             Quit (gvar, "Can't open MAPTEMP."EXT"!");\r
 // #endif\r
 }\r
 \r
@@ -1164,7 +1185,7 @@ void CAL_SetupMapFile (global_game_variables_t *gvar)
 #ifndef AUDIOHEADERLINKED\r
        if ((handle = open("AUDIOHED."EXT,\r
                 O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-               Quit ("Can't open AUDIOHED."EXT"!");\r
+               Quit (gvar, "Can't open AUDIOHED."EXT"!");\r
        length = filelength(handle);\r
        MM_GetPtr (&(memptr)audiostarts,length);\r
        CA_FarRead(handle, (byte far *)audiostarts, length);\r
@@ -1181,11 +1202,11 @@ void CAL_SetupMapFile (global_game_variables_t *gvar)
 #ifndef AUDIOHEADERLINKED\r
        if ((audiohandle = open("AUDIOT."EXT,\r
                 O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-               Quit ("Can't open AUDIOT."EXT"!");\r
+               Quit (gvar, "Can't open AUDIOT."EXT"!");\r
 #else\r
        if ((audiohandle = open("AUDIO."EXT,\r
                 O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-               Quit ("Can't open AUDIO."EXT"!");\r
+               Quit (gvar, "Can't open AUDIO."EXT"!");\r
 #endif\r
 }*/\r
 \r
@@ -1291,7 +1312,7 @@ void CA_CacheAudioChunk (int chunk)
 // MDM begin - (GAMERS EDGE)\r
 //\r
        if (!FindFile("AUDIO."EXT,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
@@ -1630,7 +1651,7 @@ void CAL_CacheSprite (int chunk, byte far *compressed)
                break;\r
 \r
        default:\r
-               Quit ("CAL_CacheSprite: Bad shifts number!");\r
+               Quit (gvar, "CAL_CacheSprite: Bad shifts number!");\r
        }\r
 \r
 #endif\r
@@ -1789,7 +1810,7 @@ void CA_CacheGrChunk (int chunk)
 // MDM begin - (GAMERS EDGE)\r
 //\r
        if (!FindFile("EGAGRAPH."EXT,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
@@ -1856,32 +1877,33 @@ void CA_CacheMap (global_game_variables_t *gvar)
 //\r
 // free up memory from last map\r
 //\r
-       if (gvar->ca.map.mapon>-1 && gvar->ca.map.mapheaderseg[gvar->ca.map.mapon])\r
-               MM_SetPurge (&((memptr)gvar->ca.map.mapheaderseg[(gvar->ca.map.mapon)]), 3, &(gvar->mm));\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
        for (plane=0;plane<MAPPLANES;plane++)\r
-               if (gvar->ca.map.mapsegs[plane])\r
-                       MM_FreePtr (&(memptr)gvar->ca.map.mapsegs[plane], &(gvar->mm));\r
+               if (gvar->ca.camap.mapsegs[plane])\r
+                       MM_FreePtr ((memptr)gvar->ca.camap.mapsegs[plane], gvar);\r
 \r
-       gvar->ca.map.mapon = gvar->ca.map.mapnum;\r
+       gvar->ca.camap.mapon = gvar->ca.camap.mapnum;\r
 \r
 \r
 //\r
 // load map header\r
 // The header will be cached if it is still around\r
 //\r
-       if (!gvar->ca.map.mapheaderseg[gvar->ca.map.mapnum])\r
-       {\r
-               //pos = ((mapfiletype   _seg *)tinf)->headeroffsets[mapnum];\r
-               pos = ((_seg *)gvar->ca.map.tinf)->headeroffsets[gvar->ca.map.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.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
 \r
-               MM_GetPtr(&(memptr)gvar->ca.mapheaderseg[mapnum],sizeof(maptype));\r
-               lseek(maphandle,pos,SEEK_SET);\r
-               CA_FarRead (maphandle,(memptr)mapheaderseg[mapnum],sizeof(maptype));\r
-       }\r
-       else\r
-               MM_SetPurge (&(memptr)mapheaderseg[mapnum], 0, &(gvar->mm));\r
+//             MM_GetPtr(&(memptr)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 (&(memptr)mapheaderseg[mapnum], 0, &(gvar->mm));\r
 \r
 //\r
 // load the planes in\r
@@ -1893,8 +1915,8 @@ void CA_CacheMap (global_game_variables_t *gvar)
 \r
        for (plane = 0; plane<MAPPLANES; plane++)\r
        {\r
-               pos = mapheaderseg[mapnum]->planestart[plane];\r
-               compressed = mapheaderseg[mapnum]->planelength[plane];\r
+               //pos = mapheaderseg[mapnum]->planestart[plane];\r
+               //compressed = mapheaderseg[mapnum]->planelength[plane];\r
 \r
                if (!compressed)\r
                        continue;               // the plane is not used in this game\r
@@ -2033,21 +2055,21 @@ void CA_ClearAllMarks (global_game_variables_t *gvar)
 =\r
 ======================\r
 */\r
-/*++++\r
-void CA_SetGrPurge (void)\r
+\r
+void CA_SetGrPurge (global_game_variables_t *gvar)\r
 {\r
        int i;\r
 \r
 //\r
 // free graphics\r
 //\r
-       CA_ClearMarks ();\r
+       CA_ClearMarks (gvar);\r
 \r
        for (i=0;i<NUMCHUNKS;i++)\r
-               if (grsegs[i])\r
-                       MM_SetPurge (&(memptr)grsegs[i],3);\r
+               if (gvar->ca.grsegs[i])\r
+                       MM_SetPurge (gvar->ca.grsegs[i],3, gvar);\r
 }\r
-*/\r
+\r
 \r
 /*\r
 ======================\r
@@ -2058,12 +2080,12 @@ void CA_SetGrPurge (void)
 =\r
 ======================\r
 */\r
-/*++++++++\r
-void CA_SetAllPurge (void)\r
+\r
+void CA_SetAllPurge (global_game_variables_t *gvar)\r
 {\r
        int i;\r
 \r
-       CA_ClearMarks ();\r
+       CA_ClearMarks (gvar);\r
 \r
 //\r
 // free cursor sprite and background save\r
@@ -2073,26 +2095,26 @@ void CA_SetAllPurge (void)
 //\r
 // free map headers and map planes\r
 //\r
-       for (i=0;i<NUMMAPS;i++)\r
-               if (mapheaderseg[i])\r
-                       MM_SetPurge (&(memptr)mapheaderseg[i],3);\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
 \r
        for (i=0;i<3;i++)\r
-               if (mapsegs[i])\r
-                       MM_FreePtr (&(memptr)mapsegs[i]);\r
+               if (gvar->ca.mapsegs[i])\r
+                       MM_FreePtr (gvar->ca.mapsegs[i], gvar);\r
 \r
 //\r
 // free sounds\r
 //\r
        for (i=0;i<NUMSNDCHUNKS;i++)\r
-               if (audiosegs[i])\r
-                       MM_SetPurge (&(memptr)audiosegs[i],3);\r
+               if (gvar->ca.audiosegs[i])\r
+                       MM_SetPurge (gvar->ca.audiosegs[i],3, gvar);\r
 \r
 //\r
 // free graphics\r
 //\r
-       CA_SetGrPurge ();\r
-}*/\r
+       CA_SetGrPurge (gvar);\r
+}\r
 \r
 \r
 //===========================================================================\r
@@ -2217,10 +2239,10 @@ void    CAL_DialogFinish (void)
 = CA_CacheMarks\r
 =\r
 ======================\r
-*//*\r
+*//*++++\r
 #define MAXEMPTYREAD   1024\r
 \r
-void CA_CacheMarks (char *title)\r
+void CAL_CacheMarks (char *title, global_game_variables_t *gvar)\r
 {\r
        boolean dialog;\r
        int     i,next,numcache;\r
@@ -2236,17 +2258,17 @@ void CA_CacheMarks (char *title)
 // go through and make everything not needed purgable\r
 //\r
        for (i=0;i<NUMCHUNKS;i++)\r
-               if (gvar->video.grneeded[i]&ca_levelbit)\r
+               if (gvar->ca.grneeded[i]&(gvar->ca.ca_levelbit))//if (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
+                       if (gvar->ca.grsegs[i])                                 // its allready in memory, make\r
+                               MM_SetPurge(gvar->ca.grsegs[i],0,gvar); // sure it stays there!\r
                        else\r
                                numcache++;\r
                }\r
                else\r
                {\r
-                       if (grsegs[i])                                  // not needed, so make it purgeable\r
-                               MM_SetPurge(&grsegs[i],3);\r
+                       if (gvar->ca.grsegs[i])                                 // not needed, so make it purgeable\r
+                               MM_SetPurge(gvar->ca.grsegs[i],3,gvar);\r
                }\r
 \r
        if (!numcache)                  // nothing to cache!\r
@@ -2254,8 +2276,8 @@ void CA_CacheMarks (char *title)
 \r
 // MDM begin - (GAMERS EDGE)\r
 //\r
-       if (!FindFile("EGAGRAPH."EXT,NULL,2))\r
-               Quit("CA_CacheMarks(): Can't find graphics files.");\r
+//     if (!FindFile("EGAGRAPH."EXT,NULL,2))\r
+//             Quit (gvar, "CA_CacheMarks(): Can't find graphics files.");\r
 //\r
 // MDM end\r
 \r
@@ -2275,7 +2297,7 @@ void CA_CacheMarks (char *title)
        bufferstart = bufferend = 0;            // nothing good in buffer now\r
 \r
        for (i=0;i<NUMCHUNKS;i++)\r
-               if ( (gvar->video.grneeded[i]&ca_levelbit) && !grsegs[i])\r
+               if ( (gvar->ca.grneeded[i]&(gvar->ca.ca_levelbit)) && !gvar->ca.grsegs[i])\r
                {\r
 //\r
 // update thermometer\r
@@ -2326,7 +2348,7 @@ void CA_CacheMarks (char *title)
                                        }\r
 \r
                                        lseek(grhandle,pos,SEEK_SET);\r
-                                       CA_FarRead(grhandle,bufferseg,endpos-pos);\r
+                                       CA_FarRead(grhandle,(gvar->mm.bufferseg),endpos-pos,gvar);\r
                                        bufferstart = pos;\r
                                        bufferend = endpos;\r
                                        source = bufferseg;\r
@@ -2335,12 +2357,12 @@ void CA_CacheMarks (char *title)
                        else\r
                        {\r
                        // big chunk, allocate temporary buffer\r
-                               MM_GetPtr(&bigbufferseg,compressed);\r
+                               MM_GetPtr(&bigbufferseg,compressed,gvar);\r
                                if (mmerror)\r
                                        return;\r
                                MM_SetLock (&bigbufferseg,true);\r
                                lseek(grhandle,pos,SEEK_SET);\r
-                               CA_FarRead(grhandle,bigbufferseg,compressed);\r
+                               CA_FarRead(grhandle,bigbufferseg,compressed,gvar);\r
                                source = bigbufferseg;\r
                        }\r
 \r