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