X-Git-Url: http://4ch.mooo.com/gitweb/?p=16.git;a=blobdiff_plain;f=src%2Flib%2F16_ca.c;h=d69989c32b1102853c861a77417c2aa1cb8d262d;hp=95fa54460becb9526796e0124d327fd9a03d82df;hb=050d28da3358d5c1434fda542ec11adbee182ea5;hpb=5d9205e1e89bb330c1930f0260039edb846091eb diff --git a/src/lib/16_ca.c b/src/lib/16_ca.c index 95fa5446..d69989c3 100755 --- a/src/lib/16_ca.c +++ b/src/lib/16_ca.c @@ -36,8 +36,9 @@ loaded into the data segment #pragma warn -pro #pragma warn -use -//#define THREEBYTEGRSTARTS +#define THREEBYTEGRSTARTS //https://github.com/open-watcom/open-watcom-v2/issues/279#issuecomment-244587566 for _seg +//http://www.shikadi.net/moddingwiki/GameMaps_Format for info on the code /* ============================================================================= @@ -97,16 +98,17 @@ extern byte EGAdict; extern byte far maphead; extern byte mapdict; extern byte far audiohead; -extern byte audiodict; +extern byte audiodict;*/ +void CA_CannotOpen(char *string, global_game_variables_t *gvar); -long _seg *grstarts; // array of offsets in egagraph, -1 for sparse +/*long _seg *grstarts; // array of offsets in egagraph, -1 for sparse long _seg *audiostarts; // array of offsets in audio / audiot #ifdef GRHEADERLINKED -huffnode *grhuffman; +huffnode *gvar->ca.grhuffman; #else -huffnode grhuffman[255]; +huffnode gvar->ca.grhuffman[255]; #endif #ifdef AUDIOHEADERLINKED @@ -119,9 +121,9 @@ huffnode audiohuffman[255]; int grhandle; // handle to EGAGRAPH int maphandle; // handle to MAPTEMP / GAMEMAPS int audiohandle; // handle to AUDIOT / AUDIO - +*/ long chunkcomplen,chunkexplen; - +/* SDMode oldsoundmode; @@ -129,20 +131,21 @@ SDMode oldsoundmode; void CAL_DialogDraw (char *title,unsigned numcache); void CAL_DialogUpdate (void); void CAL_DialogFinish (void);*/ -//void CAL_CarmackExpand (unsigned far *source, unsigned far *dest,unsigned length); +void CAL_CarmackExpand (unsigned far *source, unsigned far *dest, + unsigned length); #ifdef THREEBYTEGRSTARTS #define FILEPOSSIZE 3 //#define GRFILEPOS(c) (*(long far *)(((byte far *)grstarts)+(c)*3)&0xffffff) -long GRFILEPOS(int c, global_game_variables_t *gvar) +CASVT GRFILEPOS(int c, global_game_variables_t *gvar) { - long value; + CASVT value; int offset; offset = c*3; - value = *(long far *)(((byte far *)gvar->ca.grstarts)+offset); + value = *(CASVT far *)(((byte far *)gvar->ca.grstarts)+offset); value &= 0x00ffffffl; @@ -153,7 +156,11 @@ long GRFILEPOS(int c, global_game_variables_t *gvar) }; #else #define FILEPOSSIZE 4 -#define GRFILEPOS(c) (gvar->ca.grstarts[c]) +//#define GRFILEPOS(c) (gvar->ca.grstarts[c]) +CASVT GRFILEPOS(int c, global_game_variables_t *gvar) +{ + return gvar->ca.grstarts[c]; +} #endif /* @@ -202,13 +209,13 @@ void CA_CloseDebug(global_game_variables_t *gvar) = ============================ */ -/*++++ -void CAL_GetGrChunkLength (int chunk) + +void CAL_GetGrChunkLength (int chunk,global_game_variables_t *gvar) { - lseek(grhandle,GRFILEPOS(chunk),SEEK_SET); - read(grhandle,&chunkexplen,sizeof(chunkexplen)); - chunkcomplen = GRFILEPOS(chunk+1)-GRFILEPOS(chunk)-4; -}*/ + lseek(gvar->ca.file.grhandle,GRFILEPOS(chunk,gvar),SEEK_SET); + read(gvar->ca.file.grhandle,&gvar->ca.chunkexplen,sizeof(gvar->ca.chunkexplen)); + gvar->ca.chunkcomplen = GRFILEPOS(chunk+1,gvar)-GRFILEPOS(chunk,gvar)-4; +} /* @@ -375,6 +382,17 @@ boolean CA_ReadFile(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_ReadFile\n"); + printf("===============================================================================\n"); + //%04x + printf(" ptr=%Fp\n", ptr); + printf(" *ptr=%Fp\n", *ptr); + printf(" &ptr=%Fp\n", &ptr); + } +#endif if(!CA_FarRead(handle,*ptr,size, gvar)) { close(handle); @@ -1022,24 +1040,19 @@ dinorm: = ====================== */ -////++++ enable! -/*void CAL_SetupGrFile (void) + +void CAL_SetupGrFile (global_game_variables_t *gvar) { + char fname[13]; int handle; memptr compseg; #ifdef GRHEADERLINKED -#if GRMODE == EGAGR - grhuffman = (huffnode *)&EGAdict; - grstarts = (long _seg *)FP_SEG(&EGAhead); -#endif -#if GRMODE == CGAGR - grhuffman = (huffnode *)&CGAdict; - grstarts = (long _seg *)FP_SEG(&CGAhead); -#endif + gvar->ca.grhuffman = (huffnode *)&VGAdict; + grstarts = (long _seg *)FP_SEG(&VGAhead); - CAL_OptimizeNodes (grhuffman); + CAL_OptimizeNodes (gvar->ca.grhuffman); #else @@ -1047,23 +1060,29 @@ dinorm: // load ???dict.ext (huffman dictionary for graphics files) // - if ((handle = open(GREXT"DICT."EXT, + strcpy(fname,GDICTNAME); + strcat(fname,EXTENSION); + + if ((handle = open(fname, O_RDONLY | O_BINARY, S_IREAD)) == -1) - Quit (gvar, "Can't open "GREXT"DICT."EXT"!"); + CA_CannotOpen(fname,gvar); - read(handle, &grhuffman, sizeof(grhuffman)); + read(handle, &gvar->ca.grhuffman, sizeof(gvar->ca.grhuffman)); close(handle); - CAL_OptimizeNodes (grhuffman); + CAL_OptimizeNodes (gvar->ca.grhuffman); // // load the data offsets from ???head.ext // - MM_GetPtr (MEMPTR grstarts,(NUMCHUNKS+1)*FILEPOSSIZE); + MM_GetPtr (MEMPTRCONV gvar->ca.grstarts,(NUMCHUNKS+1)*FILEPOSSIZE, gvar); - if ((handle = open(GREXT"HEAD."EXT, + strcpy(fname,GHEADNAME); + strcat(fname,EXTENSION); + + if ((handle = open(fname, O_RDONLY | O_BINARY, S_IREAD)) == -1) - Quit (gvar, "Can't open "GREXT"HEAD."EXT"!"); + CA_CannotOpen(fname,gvar); - CA_FarRead(handle, (memptr)grstarts, (NUMCHUNKS+1)*FILEPOSSIZE); + CA_FarRead(handle, (memptr)gvar->ca.grstarts, (NUMCHUNKS+1)*FILEPOSSIZE, gvar); close(handle); @@ -1073,42 +1092,48 @@ dinorm: // // Open the graphics file, leaving it open until the game is finished // - grhandle = open(GREXT"GRAPH."EXT, O_RDONLY | O_BINARY); - if (grhandle == -1) - Quit (gvar, "Cannot open "GREXT"GRAPH."EXT"!"); + strcpy(fname,GFILENAME); + strcat(fname,EXTENSION); + + gvar->ca.file.grhandle = open(fname, O_RDONLY | O_BINARY); + if (gvar->ca.file.grhandle == -1) + CA_CannotOpen(fname,gvar); // // load the pic and sprite headers into the arrays in the data segment // #if NUMPICS>0 - MM_GetPtr(MEMPTR pictable,NUMPICS*sizeof(pictabletype)); - CAL_GetGrChunkLength(STRUCTPIC); // position file pointer - MM_GetPtr(&compseg,chunkcomplen); - CA_FarRead (grhandle,compseg,chunkcomplen); - CAL_HuffExpand (compseg, (byte far *)pictable,NUMPICS*sizeof(pictabletype),grhuffman); - MM_FreePtr(&compseg); + MM_GetPtr(MEMPTRCONV gvar->video.pictable,NUMPICS*sizeof(pictabletype),gvar); + CAL_GetGrChunkLength(STRUCTPIC,gvar); // position file pointer + printf("CAL_SetupGrFile:\n"); + printf(" gvar->ca.chunkcomplen size is %lu\n", gvar->ca.chunkcomplen); + MM_GetPtr(&compseg,gvar->ca.chunkcomplen,gvar); + IN_Ack(gvar); + CA_FarRead (gvar->ca.file.grhandle,compseg,gvar->ca.chunkcomplen,gvar); + CAL_HuffExpand (compseg, (byte far *)gvar->video.pictable,NUMPICS*sizeof(pictabletype),gvar->ca.grhuffman); + MM_FreePtr(&compseg,gvar); #endif #if NUMPICM>0 - MM_GetPtr(MEMPTR picmtable,NUMPICM*sizeof(pictabletype)); + MM_GetPtr(MEMPTRCONV picmtable,NUMPICM*sizeof(pictabletype)); CAL_GetGrChunkLength(STRUCTPICM); // position file pointer - MM_GetPtr(&compseg,chunkcomplen); - CA_FarRead (grhandle,compseg,chunkcomplen); - CAL_HuffExpand (compseg, (byte far *)picmtable,NUMPICS*sizeof(pictabletype),grhuffman); + MM_GetPtr(&compseg,gvar->ca.chunkcomplen); + CA_FarRead (gvar->ca.file.grhandle,compseg,gvar->ca.chunkcomplen); + CAL_HuffExpand (compseg, (byte far *)picmtable,NUMPICS*sizeof(pictabletype),gvar->ca.grhuffman); MM_FreePtr(&compseg); #endif #if NUMSPRITES>0 - MM_GetPtr(MEMPTR spritetable,NUMSPRITES*sizeof(spritetabletype)); + MM_GetPtr(MEMPTRCONV spritetable,NUMSPRITES*sizeof(spritetabletype)); CAL_GetGrChunkLength(STRUCTSPRITE); // position file pointer - MM_GetPtr(&compseg,chunkcomplen); - CA_FarRead (grhandle,compseg,chunkcomplen); - CAL_HuffExpand (compseg, (byte far *)spritetable,NUMSPRITES*sizeof(spritetabletype),grhuffman); + MM_GetPtr(&compseg,gvar->ca.chunkcomplen); + CA_FarRead (gvar->ca.file.grhandle,compseg,gvar->ca.chunkcomplen); + CAL_HuffExpand (compseg, (byte far *)spritetable,NUMSPRITES*sizeof(spritetabletype),gvar->ca.grhuffman); MM_FreePtr(&compseg); #endif -}*/ +} //========================================================================== @@ -1123,25 +1148,27 @@ dinorm: void CAL_SetupMapFile (global_game_variables_t *gvar) { -//++ int handle; -//++ long length; +#ifndef MAPHEADERLINKED + int handle; + long length; +#endif // // load maphead.ext (offsets and tileinfo for map file) // -/*#ifndef MAPHEADERLINKED +#ifndef MAPHEADERLINKED if ((handle = open("maphead.mph", O_RDONLY | O_BINARY, S_IREAD)) == -1) - Quit (gvar, "Can't open maphead.mph"); + Quit ("Can't open maphead.mph"); length = filelength(handle); - MM_GetPtr (MEMPTR gvar->ca.tinf,length,gvar); + MM_GetPtr (MEMPTRCONV gvar->ca.tinf,length,gvar); CA_FarRead(handle, gvar->ca.tinf, length,gvar); close(handle); //#else gvar->ca.tinf = (byte _seg *)FP_SEG(&maphead); -#endif*/ +#endif // // open the data file @@ -1149,15 +1176,15 @@ void CAL_SetupMapFile (global_game_variables_t *gvar) //TODO: multiple files if ((gvar->ca.file.maphandle = open("data/test.map", O_RDONLY | O_BINARY, S_IREAD)) == -1) - Quit (gvar, "Can't open data/test.map!"); + Quit ("Can't open data/test.map!"); /*#ifdef MAPHEADERLINKED - if ((maphandle = open("GAMEMAPS."EXTENSION, + if ((maphandle = open("GAMEMAPS.16"ENSION, O_RDONLY | O_BINARY, S_IREAD)) == -1) - Quit ("Can't open GAMEMAPS."EXTENSION"!"); + Quit ("Can't open GAMEMAPS.16"ENSION"!"); #else - if ((maphandle = open("MAPTEMP."EXTENSION, + if ((maphandle = open("MAPTEMP.16"ENSION, O_RDONLY | O_BINARY, S_IREAD)) == -1) - Quit ("Can't open MAPTEMP."EXTENSION"!"); + Quit ("Can't open MAPTEMP.16"ENSION"!"); #endif*/ } @@ -1172,45 +1199,41 @@ void CAL_SetupMapFile (global_game_variables_t *gvar) ====================== */ -void CAL_SetupAudioFile (global_game_variables_t *gvar) +/*void CAL_SetupAudioFile (void) { -//++ int handle; -//++ long length; + int handle; + long length; // // load maphead.ext (offsets and tileinfo for map file) // -/*#ifndef AUDIOHEADERLINKED - if ((handle = open("audihead.adh, +#ifndef AUDIOHEADERLINKED + if ((handle = open("AUDIOHED.16", O_RDONLY | O_BINARY, S_IREAD)) == -1) - Quit (gvar, "Can't open audihead.adh!"); + Quit ("Can't open AUDIOHED.16""!"); length = filelength(handle); - MM_GetPtr (MEMPTR audiostarts,length); + MM_GetPtr (MEMPTRCONV audiostarts,length); CA_FarRead(handle, (byte far *)audiostarts, length); close(handle); #else audiohuffman = (huffnode *)&audiodict; CAL_OptimizeNodes (audiohuffman); audiostarts = (long _seg *)FP_SEG(&audiohead); -#endif*/ +#endif // // open the data file // -//TODO: multiple files - if ((gvar->ca.file.audiohandle = open("data/02.imf", - O_RDONLY | O_BINARY, S_IREAD)) == -1) - Quit (gvar, "Can't open data/02.imf!"); -/*#ifndef AUDIOHEADERLINKED - if ((audiohandle = open("AUDIOT."EXT, +#ifndef AUDIOHEADERLINKED + if ((audiohandle = open("AUDIOT.16", O_RDONLY | O_BINARY, S_IREAD)) == -1) - Quit (gvar, "Can't open AUDIOT."EXT"!"); -//#else - if ((audiohandle = open("AUDIO."EXT, + Quit ("Can't open AUDIOT.16""!"); +#else + if ((audiohandle = open("AUDIO.16", O_RDONLY | O_BINARY, S_IREAD)) == -1) - Quit (gvar, "Can't open AUDIO."EXT"!"); -#endif*/ -} + Quit ("Can't open AUDIO.16""!"); +#endif +}*/ //========================================================================== @@ -1255,7 +1278,7 @@ void CA_Startup(global_game_variables_t *gvar) CAL_SetupGrFile (gvar); #endif #ifndef NOAUDIO - CAL_SetupAudioFile (gvar); + CAL_SetupMapFile (gvar); #endif gvar->ca.camap.mapon = -1; @@ -1313,14 +1336,14 @@ void CA_CacheAudioChunk (int chunk) if (audiosegs[chunk]) { - MM_SetPurge (MEMPTR audiosegs[chunk],0); + MM_SetPurge (MEMPTRCONV audiosegs[chunk],0); return; // allready in memory } // MDM begin - (GAMERS EDGE) // - if (!FindFile("AUDIO."EXT,NULL,2)) - Quit (gvar, "CA_CacheAudioChunk(): Can't find audio files."); + if (!FindFile("AUDIO.16",NULL,2)) + Quit ("CA_CacheAudioChunk(): Can't find audio files."); // // MDM end @@ -1335,7 +1358,7 @@ void CA_CacheAudioChunk (int chunk) #ifndef AUDIOHEADERLINKED - MM_GetPtr (MEMPTR audiosegs[chunk],compressed); + MM_GetPtr (MEMPTRCONV audiosegs[chunk],compressed); if (mmerror) return; @@ -1360,7 +1383,7 @@ void CA_CacheAudioChunk (int chunk) expanded = *(long far *)source; source += 4; // skip over length - MM_GetPtr (MEMPTR audiosegs[chunk],expanded); + MM_GetPtr (MEMPTRCONV audiosegs[chunk],expanded); if (mmerror) goto done; CAL_HuffExpand (source,audiosegs[chunk],expanded,audiohuffman); @@ -1401,7 +1424,7 @@ void CA_LoadAllSounds (void) for (i=0;idata[0],smallplane*2,grhuffman); + CAL_HuffExpand (compressed, &dest->data[0],smallplane*2,gvar->ca.grhuffman); #endif @@ -1600,7 +1646,7 @@ void CAL_CacheSprite (int chunk, byte far *compressed) // // expand the unshifted shape // - CAL_HuffExpand (compressed, &dest->data[0],smallplane*5,grhuffman); + CAL_HuffExpand (compressed, &dest->data[0],smallplane*5,gvar->ca.grhuffman); // // make the shifts! @@ -1659,7 +1705,7 @@ void CAL_CacheSprite (int chunk, byte far *compressed) break; default: - Quit (gvar, "CAL_CacheSprite: Bad shifts number!"); + Quit ("CAL_CacheSprite: Bad shifts number!"); } #endif @@ -1732,7 +1778,7 @@ void CAL_ExpandGrChunk (int chunk, byte far *source) MM_GetPtr (&grsegs[chunk],expanded); if (mmerror) return; - CAL_HuffExpand (source,grsegs[chunk],expanded,grhuffman); + CAL_HuffExpand (source,grsegs[chunk],expanded,gvar->ca.grhuffman); } } */ @@ -1758,21 +1804,21 @@ void CAL_ReadGrChunk (int chunk) // load the chunk into a buffer, either the miscbuffer if it fits, or allocate // a larger buffer // - pos = GRFILEPOS(chunk); + pos = GRFILEPOS(chunk,gvar); if (pos<0) // $FFFFFFFF start is a sparse tile return; next = chunk +1; - while (GRFILEPOS(next) == -1) // skip past any sparse tiles + while (GRFILEPOS(next,gvar) == -1) // skip past any sparse tiles next++; - compressed = GRFILEPOS(next)-pos; + compressed = GRFILEPOS(next,gvar)-pos; - lseek(grhandle,pos,SEEK_SET); + lseek(gvar->ca.file.grhandle,pos,SEEK_SET); if (compressed<=BUFFERSIZE) { - CA_FarRead(grhandle,bufferseg,compressed); + CA_FarRead(gvar->ca.file.grhandle,bufferseg,compressed); source = bufferseg; } else @@ -1781,7 +1827,7 @@ void CAL_ReadGrChunk (int chunk) if (mmerror) return; MM_SetLock (&bigbufferseg,true); - CA_FarRead(grhandle,bigbufferseg,compressed); + CA_FarRead(gvar->ca.file.grhandle,bigbufferseg,compressed); source = bigbufferseg; } @@ -1817,8 +1863,8 @@ void CA_CacheGrChunk (int chunk) // MDM begin - (GAMERS EDGE) // - if (!FindFile("EGAGRAPH."EXT,NULL,2)) - Quit (gvar, "CA_CacheGrChunk(): Can't find graphics files."); + if (!FindFile("EGAGRAPH.16",NULL,2)) + Quit ("CA_CacheGrChunk(): Can't find graphics files."); // // MDM end @@ -1826,7 +1872,7 @@ void CA_CacheGrChunk (int chunk) // load the chunk into a buffer, either the miscbuffer if it fits, or allocate // a larger buffer // - pos = GRFILEPOS(chunk); + pos = GRFILEPOS(chunk,gvar); if (pos<0) // $FFFFFFFF start is a sparse tile return; @@ -1834,20 +1880,20 @@ void CA_CacheGrChunk (int chunk) while (GRFILEPOS(next) == -1) // skip past any sparse tiles next++; - compressed = GRFILEPOS(next)-pos; + compressed = GRFILEPOS(next,gvar)-pos; - lseek(grhandle,pos,SEEK_SET); + lseek(gvar->ca.file.grhandle,pos,SEEK_SET); if (compressed<=BUFFERSIZE) { - CA_FarRead(grhandle,bufferseg,compressed); + CA_FarRead(gvar->ca.file.grhandle,bufferseg,compressed); source = bufferseg; } else { MM_GetPtr(&bigbufferseg,compressed); MM_SetLock (&bigbufferseg,true); - CA_FarRead(grhandle,bigbufferseg,compressed); + CA_FarRead(gvar->ca.file.grhandle,bigbufferseg,compressed); source = bigbufferseg; } @@ -1906,12 +1952,12 @@ void CA_CacheMap (global_game_variables_t *gvar) // if (pos<0) // $FFFFFFFF start is a sparse map // printf("CA_CacheMap: Tried to load a non existent map!"); -// MM_GetPtr(MEMPTR gvar->ca.camapheaderseg[mapnum],sizeof(maptype)); +// MM_GetPtr(MEMPTRCONV 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)); +// MM_SetPurge (MEMPTRCONV mapheaderseg[mapnum], 0, &(gvar->mm)); // // load the planes in @@ -1929,7 +1975,7 @@ void CA_CacheMap (global_game_variables_t *gvar) if (!compressed) continue; // the plane is not used in this game - dest = MEMPTR mapsegs[plane]; + dest = MEMPTRCONV mapsegs[plane]; MM_GetPtr(dest,size); lseek(maphandle,pos,SEEK_SET); @@ -2284,8 +2330,8 @@ void CAL_CacheMarks (char *title, global_game_variables_t *gvar) // MDM begin - (GAMERS EDGE) // -// if (!FindFile("EGAGRAPH."EXT,NULL,2)) -// Quit (gvar, "CA_CacheMarks(): Can't find graphics files."); +// if (!FindFile("EGAGRAPH.16",NULL,2)) +// Quit ("CA_CacheMarks(): Can't find graphics files."); // // MDM end @@ -2313,7 +2359,7 @@ void CAL_CacheMarks (char *title, global_game_variables_t *gvar) if (dialog && updatecachebox) updatecachebox (); - pos = GRFILEPOS(i); + pos = GRFILEPOS(i,gvar); if (pos<0) continue; @@ -2321,7 +2367,7 @@ void CAL_CacheMarks (char *title, global_game_variables_t *gvar) while (GRFILEPOS(next) == -1) // skip past any sparse tiles next++; - compressed = GRFILEPOS(next)-pos; + compressed = GRFILEPOS(next,gvar)-pos; endpos = pos+compressed; if (compressed<=BUFFERSIZE) @@ -2344,10 +2390,10 @@ void CAL_CacheMarks (char *title, global_game_variables_t *gvar) if (next == NUMCHUNKS) continue; - nextpos = GRFILEPOS(next); - while (GRFILEPOS(++next) == -1) // skip past any sparse tiles + nextpos = GRFILEPOS(next,gvar); + while (GRFILEPOS(++next,gvar) == -1) // skip past any sparse tiles ; - nextendpos = GRFILEPOS(next); + nextendpos = GRFILEPOS(next,gvar); if (nextpos - endpos <= MAXEMPTYREAD && nextendpos-pos <= BUFFERSIZE) endpos = nextendpos; @@ -2355,8 +2401,8 @@ void CAL_CacheMarks (char *title, global_game_variables_t *gvar) next = NUMCHUNKS; // read pos to posend } - lseek(grhandle,pos,SEEK_SET); - CA_FarRead(grhandle,(gvar->mm.bufferseg),endpos-pos,gvar); + lseek(gvar->ca.file.grhandle,pos,SEEK_SET); + CA_FarRead(gvar->ca.file.grhandle,(gvar->mm.bufferseg),endpos-pos,gvar); bufferstart = pos; bufferend = endpos; source = bufferseg; @@ -2369,8 +2415,8 @@ void CAL_CacheMarks (char *title, global_game_variables_t *gvar) if (mmerror) return; MM_SetLock (&bigbufferseg,true); - lseek(grhandle,pos,SEEK_SET); - CA_FarRead(grhandle,bigbufferseg,compressed,gvar); + lseek(gvar->ca.file.grhandle,pos,SEEK_SET); + CA_FarRead(gvar->ca.file.grhandle,bigbufferseg,compressed,gvar); source = bigbufferseg; } @@ -2389,3 +2435,13 @@ void CAL_CacheMarks (char *title, global_game_variables_t *gvar) if (dialog && finishcachebox) finishcachebox(); }*/ + +void CA_CannotOpen(char *string, global_game_variables_t *gvar) +{ + char str[30]; + + strcpy(str,"Can't open "); + strcat(str,string); + strcat(str,"!\n"); + Quit (str); +}