From 050d28da3358d5c1434fda542ec11adbee182ea5 Mon Sep 17 00:00:00 2001 From: sparky4 Date: Sun, 23 Apr 2017 14:04:55 -0500 Subject: [PATCH] xcrollbroke --- __seguse.txt | 164 +++++++++++++++++++++------------------------ src/lib/16_ca.c | 20 +++--- src/lib/16_dbg.h | 2 +- src/lib/16_mm.c | 165 +++++++++++++++++++++++++++++++++------------- src/lib/16_mm.h | 32 +++++---- src/lib/16_pm.c | 70 ++++++++++---------- src/lib/16_tail.c | 7 +- src/lib/16_tail.h | 5 +- src/lib/16_tdef.h | 7 +- src/sountest.c | 2 +- src/xcroll.c | 4 +- 11 files changed, 270 insertions(+), 208 deletions(-) diff --git a/__seguse.txt b/__seguse.txt index d9d49f56..720dc06a 100755 --- a/__seguse.txt +++ b/__seguse.txt @@ -1,6 +1,6 @@ -------------------------------------------------------------------------------- - ./qkeen.sh start -------------------------------------------------------------------------------- +------------------------------------------------------------------------------- + ./qkeen.sh start +------------------------------------------------------------------------------- 16/keen/id_ca.c:byte _seg *tinf; 16/keen/id_ca.c:unsigned _seg *mapsegs[3]; 16/keen/id_ca.c:maptype _seg *mapheaderseg[NUMMAPS]; @@ -66,11 +66,11 @@ 16/keen/id_vw.h:extern pictabletype _seg *pictable; 16/keen/id_vw.h:extern pictabletype _seg *picmtable; 16/keen/id_vw.h:extern spritetabletype _seg *spritetable; -=============== ./qkeen.sh end =============== -------------------------------------------------------------------------------- - ./qwolf.sh start -------------------------------------------------------------------------------- -==== 16/wf3d8086 ==== +=============== ./qkeen.sh end =============== +------------------------------------------------------------------------------- + ./qwolf.sh start +------------------------------------------------------------------------------- +==== 16/wf3d8086 ==== 16/wf3d8086/contigsc.c:byte _seg *endscalermemory; 16/wf3d8086/contigsc.c: endscalermemory = (void _seg *)(seg+ofs/16); 16/wf3d8086/contigsc.c: t_compshape _seg *shape; @@ -103,13 +103,6 @@ 16/wf3d8086/id_vh.c: src = (byte _seg *)grsegs[STARTTILE8]; 16/wf3d8086/id_vh.c: src = (byte _seg *)grsegs[STARTTILE16]; 16/wf3d8086/id_vh.c: src = (byte _seg *)grsegs[STARTTILE16+i]; -16/wf3d8086/oldscale.c:t_compscale _seg *scaledirectory[MAXSCALEHEIGHT+1]; -16/wf3d8086/oldscale.c:t_compscale _seg *work; -16/wf3d8086/oldscale.c: _fmemcpy ((byte _seg *)(*finalspot),(byte _seg *)work,totalsize); -16/wf3d8086/oldscale.c: t_compshape _seg *shape; -16/wf3d8086/oldscale.c: t_compscale _seg *comptable; -16/wf3d8086/oldscale.c: t_compshape _seg *shape; -16/wf3d8086/oldscale.c: t_compscale _seg *comptable; 16/wf3d8086/wl_debug.c: spritetype _seg *block; 16/wf3d8086/wl_debug.c:extern word _seg *DigiList; 16/wf3d8086/wl_menu.c: fontstruct _seg *font; @@ -137,78 +130,71 @@ 16/wf3d8086/id_vh.h:extern pictabletype _seg *picmtable; 16/wf3d8086/id_vh.h:extern spritetabletype _seg *spritetable; 16/wf3d8086/wl_def.h:extern t_compscale _seg *scaledirectory[MAXSCALEHEIGHT+1]; -==== 16/wolf3d/WOLFSRC ==== -16/wolf3d/WOLFSRC/CONTIGSC.C:byte _seg *endscalermemory; -16/wolf3d/WOLFSRC/CONTIGSC.C: endscalermemory = (void _seg *)(seg+ofs/16); -16/wolf3d/WOLFSRC/CONTIGSC.C: t_compshape _seg *shape; -16/wolf3d/WOLFSRC/CONTIGSC.C: t_compshape _seg *shape; -16/wolf3d/WOLFSRC/ID_CA.C:byte _seg *tinf; -16/wolf3d/WOLFSRC/ID_CA.C:unsigned _seg *mapsegs[MAPPLANES]; -16/wolf3d/WOLFSRC/ID_CA.C:maptype _seg *mapheaderseg[NUMMAPS]; -16/wolf3d/WOLFSRC/ID_CA.C:byte _seg *audiosegs[NUMSNDCHUNKS]; -16/wolf3d/WOLFSRC/ID_CA.C:void _seg *grsegs[NUMCHUNKS]; -16/wolf3d/WOLFSRC/ID_CA.C:long _seg *grstarts; // array of offsets in egagraph, -1 for sparse -16/wolf3d/WOLFSRC/ID_CA.C:long _seg *audiostarts; // array of offsets in audio / audiot -16/wolf3d/WOLFSRC/ID_CA.C: grstarts = (long _seg *)FP_SEG(&EGAhead); -16/wolf3d/WOLFSRC/ID_CA.C: tinf = (byte _seg *)FP_SEG(&maphead); -16/wolf3d/WOLFSRC/ID_CA.C: pos = ((mapfiletype _seg *)tinf)->headeroffsets[i]; -16/wolf3d/WOLFSRC/ID_CA.C: audiostarts = (long _seg *)FP_SEG(&audiohead); -16/wolf3d/WOLFSRC/ID_CA.C: ((mapfiletype _seg *)tinf)->RLEWtag); -16/wolf3d/WOLFSRC/ID_CA.C: ((mapfiletype _seg *)tinf)->RLEWtag); -16/wolf3d/WOLFSRC/ID_CA.C: source = (byte _seg *)bufferseg+(pos-bufferstart); -16/wolf3d/WOLFSRC/ID_IN.C: byte _seg *DemoBuffer; -16/wolf3d/WOLFSRC/ID_PM.C: _seg *PMSegPages; -16/wolf3d/WOLFSRC/ID_PM.C: void _seg *buf; -16/wolf3d/WOLFSRC/ID_PM.C: MM_FreePtr(&(void _seg *)PMSegPages); -16/wolf3d/WOLFSRC/ID_SD.C: word *SoundTable; // Really * _seg *SoundTable, but that don't work -16/wolf3d/WOLFSRC/ID_SD.C: word _seg *DigiList; -16/wolf3d/WOLFSRC/ID_VH.C:pictabletype _seg *pictable; -16/wolf3d/WOLFSRC/ID_VH.C: byte _seg *temp, far *dest, far *srcline; -16/wolf3d/WOLFSRC/ID_VH.C: , fontstruct _seg *font) -16/wolf3d/WOLFSRC/ID_VH.C: VWL_MeasureString(string,width,height,(fontstruct _seg *)grsegs[STARTFONT+fontnumber]); -16/wolf3d/WOLFSRC/ID_VH.C: VWL_MeasureString(string,width,height,(fontstruct _seg *)grsegs[STARTFONTM+fontnumber]); -16/wolf3d/WOLFSRC/ID_VH.C: src = (byte _seg *)grsegs[STARTTILE8]; -16/wolf3d/WOLFSRC/ID_VH.C: src = (byte _seg *)grsegs[STARTTILE16]; -16/wolf3d/WOLFSRC/ID_VH.C: src = (byte _seg *)grsegs[STARTTILE16+i]; -16/wolf3d/WOLFSRC/OLDSCALE.C:t_compscale _seg *scaledirectory[MAXSCALEHEIGHT+1]; -16/wolf3d/WOLFSRC/OLDSCALE.C:t_compscale _seg *work; -16/wolf3d/WOLFSRC/OLDSCALE.C: _fmemcpy ((byte _seg *)(*finalspot),(byte _seg *)work,totalsize); -16/wolf3d/WOLFSRC/OLDSCALE.C: t_compshape _seg *shape; -16/wolf3d/WOLFSRC/OLDSCALE.C: t_compscale _seg *comptable; -16/wolf3d/WOLFSRC/OLDSCALE.C: t_compshape _seg *shape; -16/wolf3d/WOLFSRC/OLDSCALE.C: t_compscale _seg *comptable; -16/wolf3d/WOLFSRC/WL_DEBUG.C: spritetype _seg *block; -16/wolf3d/WOLFSRC/WL_DEBUG.C:extern word _seg *DigiList; -16/wolf3d/WOLFSRC/WL_MENU.C: fontstruct _seg *font; -16/wolf3d/WOLFSRC/WL_SCALE.C:t_compscale _seg *scaledirectory[MAXSCALEHEIGHT+1]; -16/wolf3d/WOLFSRC/WL_SCALE.C:t_compscale _seg *work; -16/wolf3d/WOLFSRC/WL_SCALE.C: _fmemcpy ((byte _seg *)(*finalspot),(byte _seg *)work,totalsize); -16/wolf3d/WOLFSRC/WL_SCALE.C: t_compshape _seg *shape; -16/wolf3d/WOLFSRC/WL_SCALE.C: t_compscale _seg *comptable; -16/wolf3d/WOLFSRC/WL_SCALE.C: t_compshape _seg *shape; -16/wolf3d/WOLFSRC/WL_SCALE.C: t_compscale _seg *comptable; -16/wolf3d/WOLFSRC/WL_TEXT.C: text = (char _seg *)grsegs[artnum]; -16/wolf3d/WOLFSRC/WL_TEXT.C: text = (char _seg *)layout; -16/wolf3d/WOLFSRC/WL_TEXT.C: text = (char _seg *)grsegs[artnum]; -16/wolf3d/WOLFSRC/WL_TEXT.C: text = (char _seg *)layout; -16/wolf3d/WOLFSRC/ID_CA.H:extern byte _seg *tinf; -16/wolf3d/WOLFSRC/ID_CA.H:extern unsigned _seg *mapsegs[MAPPLANES]; -16/wolf3d/WOLFSRC/ID_CA.H:extern maptype _seg *mapheaderseg[NUMMAPS]; -16/wolf3d/WOLFSRC/ID_CA.H:extern byte _seg *audiosegs[NUMSNDCHUNKS]; -16/wolf3d/WOLFSRC/ID_CA.H:extern void _seg *grsegs[NUMCHUNKS]; -16/wolf3d/WOLFSRC/ID_CA.H:extern long _seg *grstarts; // array of offsets in egagraph, -1 for sparse -16/wolf3d/WOLFSRC/ID_CA.H:extern long _seg *audiostarts; // array of offsets in audio / audiot -16/wolf3d/WOLFSRC/ID_IN.H:extern byte _seg *DemoBuffer; -16/wolf3d/WOLFSRC/ID_MM.H:typedef void _seg * memptr; -16/wolf3d/WOLFSRC/ID_VH.H:extern pictabletype _seg *pictable; -16/wolf3d/WOLFSRC/ID_VH.H:extern pictabletype _seg *picmtable; -16/wolf3d/WOLFSRC/ID_VH.H:extern spritetabletype _seg *spritetable; -16/wolf3d/WOLFSRC/WL_DEF.H:extern t_compscale _seg *scaledirectory[MAXSCALEHEIGHT+1]; -=============== ./qwolf.sh end =============== -------------------------------------------------------------------------------- - ./qcata.sh start -------------------------------------------------------------------------------- -==== 16/Catacomb3D ==== +==== 16/wolf3d/WOLFSRC ==== +16/wolf3d/WOLFSRC/CONTIGSC.C:byte _seg *endscalermemory; +16/wolf3d/WOLFSRC/CONTIGSC.C: endscalermemory = (void _seg *)(seg+ofs/16); +16/wolf3d/WOLFSRC/CONTIGSC.C: t_compshape _seg *shape; +16/wolf3d/WOLFSRC/CONTIGSC.C: t_compshape _seg *shape; +16/wolf3d/WOLFSRC/ID_CA.C:byte _seg *tinf; +16/wolf3d/WOLFSRC/ID_CA.C:unsigned _seg *mapsegs[MAPPLANES]; +16/wolf3d/WOLFSRC/ID_CA.C:maptype _seg *mapheaderseg[NUMMAPS]; +16/wolf3d/WOLFSRC/ID_CA.C:byte _seg *audiosegs[NUMSNDCHUNKS]; +16/wolf3d/WOLFSRC/ID_CA.C:void _seg *grsegs[NUMCHUNKS]; +16/wolf3d/WOLFSRC/ID_CA.C:long _seg *grstarts; // array of offsets in egagraph, -1 for sparse +16/wolf3d/WOLFSRC/ID_CA.C:long _seg *audiostarts; // array of offsets in audio / audiot +16/wolf3d/WOLFSRC/ID_CA.C: grstarts = (long _seg *)FP_SEG(&EGAhead); +16/wolf3d/WOLFSRC/ID_CA.C: tinf = (byte _seg *)FP_SEG(&maphead); +16/wolf3d/WOLFSRC/ID_CA.C: pos = ((mapfiletype _seg *)tinf)->headeroffsets[i]; +16/wolf3d/WOLFSRC/ID_CA.C: audiostarts = (long _seg *)FP_SEG(&audiohead); +16/wolf3d/WOLFSRC/ID_CA.C: ((mapfiletype _seg *)tinf)->RLEWtag); +16/wolf3d/WOLFSRC/ID_CA.C: ((mapfiletype _seg *)tinf)->RLEWtag); +16/wolf3d/WOLFSRC/ID_CA.C: source = (byte _seg *)bufferseg+(pos-bufferstart); +16/wolf3d/WOLFSRC/ID_IN.C: byte _seg *DemoBuffer; +16/wolf3d/WOLFSRC/ID_PM.C: _seg *PMSegPages; +16/wolf3d/WOLFSRC/ID_PM.C: void _seg *buf; +16/wolf3d/WOLFSRC/ID_PM.C: MM_FreePtr(&(void _seg *)PMSegPages); +16/wolf3d/WOLFSRC/ID_SD.C: word *SoundTable; // Really * _seg *SoundTable, but that don't work +16/wolf3d/WOLFSRC/ID_SD.C: word _seg *DigiList; +16/wolf3d/WOLFSRC/ID_VH.C:pictabletype _seg *pictable; +16/wolf3d/WOLFSRC/ID_VH.C: byte _seg *temp, far *dest, far *srcline; +16/wolf3d/WOLFSRC/ID_VH.C: , fontstruct _seg *font) +16/wolf3d/WOLFSRC/ID_VH.C: VWL_MeasureString(string,width,height,(fontstruct _seg *)grsegs[STARTFONT+fontnumber]); +16/wolf3d/WOLFSRC/ID_VH.C: VWL_MeasureString(string,width,height,(fontstruct _seg *)grsegs[STARTFONTM+fontnumber]); +16/wolf3d/WOLFSRC/ID_VH.C: src = (byte _seg *)grsegs[STARTTILE8]; +16/wolf3d/WOLFSRC/ID_VH.C: src = (byte _seg *)grsegs[STARTTILE16]; +16/wolf3d/WOLFSRC/ID_VH.C: src = (byte _seg *)grsegs[STARTTILE16+i]; +16/wolf3d/WOLFSRC/WL_DEBUG.C: spritetype _seg *block; +16/wolf3d/WOLFSRC/WL_DEBUG.C:extern word _seg *DigiList; +16/wolf3d/WOLFSRC/WL_MENU.C: fontstruct _seg *font; +16/wolf3d/WOLFSRC/WL_SCALE.C:t_compscale _seg *scaledirectory[MAXSCALEHEIGHT+1]; +16/wolf3d/WOLFSRC/WL_SCALE.C:t_compscale _seg *work; +16/wolf3d/WOLFSRC/WL_SCALE.C: _fmemcpy ((byte _seg *)(*finalspot),(byte _seg *)work,totalsize); +16/wolf3d/WOLFSRC/WL_SCALE.C: t_compshape _seg *shape; +16/wolf3d/WOLFSRC/WL_SCALE.C: t_compscale _seg *comptable; +16/wolf3d/WOLFSRC/WL_SCALE.C: t_compshape _seg *shape; +16/wolf3d/WOLFSRC/WL_SCALE.C: t_compscale _seg *comptable; +16/wolf3d/WOLFSRC/WL_TEXT.C: text = (char _seg *)grsegs[artnum]; +16/wolf3d/WOLFSRC/WL_TEXT.C: text = (char _seg *)layout; +16/wolf3d/WOLFSRC/WL_TEXT.C: text = (char _seg *)grsegs[artnum]; +16/wolf3d/WOLFSRC/WL_TEXT.C: text = (char _seg *)layout; +16/wolf3d/WOLFSRC/ID_CA.H:extern byte _seg *tinf; +16/wolf3d/WOLFSRC/ID_CA.H:extern unsigned _seg *mapsegs[MAPPLANES]; +16/wolf3d/WOLFSRC/ID_CA.H:extern maptype _seg *mapheaderseg[NUMMAPS]; +16/wolf3d/WOLFSRC/ID_CA.H:extern byte _seg *audiosegs[NUMSNDCHUNKS]; +16/wolf3d/WOLFSRC/ID_CA.H:extern void _seg *grsegs[NUMCHUNKS]; +16/wolf3d/WOLFSRC/ID_CA.H:extern long _seg *grstarts; // array of offsets in egagraph, -1 for sparse +16/wolf3d/WOLFSRC/ID_CA.H:extern long _seg *audiostarts; // array of offsets in audio / audiot +16/wolf3d/WOLFSRC/ID_IN.H:extern byte _seg *DemoBuffer; +16/wolf3d/WOLFSRC/ID_MM.H:typedef void _seg * memptr; +16/wolf3d/WOLFSRC/ID_VH.H:extern pictabletype _seg *pictable; +16/wolf3d/WOLFSRC/ID_VH.H:extern pictabletype _seg *picmtable; +16/wolf3d/WOLFSRC/ID_VH.H:extern spritetabletype _seg *spritetable; +16/wolf3d/WOLFSRC/WL_DEF.H:extern t_compscale _seg *scaledirectory[MAXSCALEHEIGHT+1]; +=============== ./qwolf.sh end =============== +------------------------------------------------------------------------------- + ./qcata.sh start +------------------------------------------------------------------------------- +==== 16/Catacomb3D ==== 16/Catacomb3D/C3_DEBUG.C: spritetype _seg *block; 16/Catacomb3D/C3_GAME.C: text = (char _seg *)grsegs[LEVEL1TEXT+mapon]; 16/Catacomb3D/C3_GAME.C: src = (byte _seg *)grsegs[STARTTILE8]; @@ -277,7 +263,7 @@ 16/Catacomb3D/ID_VW.H:extern pictabletype _seg *pictable; 16/Catacomb3D/ID_VW.H:extern pictabletype _seg *picmtable; 16/Catacomb3D/ID_VW.H:extern spritetabletype _seg *spritetable; -==== 16/CatacombApocalypse ==== +==== 16/CatacombApocalypse ==== 16/CatacombApocalypse/C6_GAME.C: text = (char _seg *)grsegs[LEVEL1TEXT+mapon]; 16/CatacombApocalypse/C6_GAME.C: src = (byte _seg *)grsegs[STARTTILE8]; 16/CatacombApocalypse/C6_GAME.C: src = (byte _seg *)grsegs[STARTTILE16]; @@ -349,4 +335,4 @@ 16/CatacombApocalypse/ID_VW.H:extern pictabletype _seg *picmtable; 16/CatacombApocalypse/ID_VW.H:extern spritetabletype _seg *spritetable; 16/CatacombApocalypse/ID_VW.H:void VWL_MeasureString (char far *string, word *width, word *height, fontstruct _seg *font); -=============== ./qcata.sh end =============== +=============== ./qcata.sh end =============== diff --git a/src/lib/16_ca.c b/src/lib/16_ca.c index d55ac7f0..d69989c3 100755 --- a/src/lib/16_ca.c +++ b/src/lib/16_ca.c @@ -1159,7 +1159,7 @@ void CAL_SetupMapFile (global_game_variables_t *gvar) #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 (MEMPTRCONV gvar->ca.tinf,length,gvar); CA_FarRead(handle, gvar->ca.tinf, length,gvar); @@ -1176,7 +1176,7 @@ 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.16"ENSION, O_RDONLY | O_BINARY, S_IREAD)) == -1) @@ -1210,7 +1210,7 @@ void CAL_SetupMapFile (global_game_variables_t *gvar) #ifndef AUDIOHEADERLINKED if ((handle = open("AUDIOHED.16", O_RDONLY | O_BINARY, S_IREAD)) == -1) - Quit (gvar, "Can't open AUDIOHED.16""!"); + Quit ("Can't open AUDIOHED.16""!"); length = filelength(handle); MM_GetPtr (MEMPTRCONV audiostarts,length); CA_FarRead(handle, (byte far *)audiostarts, length); @@ -1227,11 +1227,11 @@ void CAL_SetupMapFile (global_game_variables_t *gvar) #ifndef AUDIOHEADERLINKED if ((audiohandle = open("AUDIOT.16", O_RDONLY | O_BINARY, S_IREAD)) == -1) - Quit (gvar, "Can't open AUDIOT.16""!"); + 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.16""!"); + Quit ("Can't open AUDIO.16""!"); #endif }*/ @@ -1343,7 +1343,7 @@ void CA_CacheAudioChunk (int chunk) // MDM begin - (GAMERS EDGE) // if (!FindFile("AUDIO.16",NULL,2)) - Quit (gvar, "CA_CacheAudioChunk(): Can't find audio files."); + Quit ("CA_CacheAudioChunk(): Can't find audio files."); // // MDM end @@ -1705,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 @@ -1864,7 +1864,7 @@ void CA_CacheGrChunk (int chunk) // MDM begin - (GAMERS EDGE) // if (!FindFile("EGAGRAPH.16",NULL,2)) - Quit (gvar, "CA_CacheGrChunk(): Can't find graphics files."); + Quit ("CA_CacheGrChunk(): Can't find graphics files."); // // MDM end @@ -2331,7 +2331,7 @@ void CAL_CacheMarks (char *title, global_game_variables_t *gvar) // MDM begin - (GAMERS EDGE) // // if (!FindFile("EGAGRAPH.16",NULL,2)) -// Quit (gvar, "CA_CacheMarks(): Can't find graphics files."); +// Quit ("CA_CacheMarks(): Can't find graphics files."); // // MDM end @@ -2443,5 +2443,5 @@ void CA_CannotOpen(char *string, global_game_variables_t *gvar) strcpy(str,"Can't open "); strcat(str,string); strcat(str,"!\n"); - Quit (gvar, str); + Quit (str); } diff --git a/src/lib/16_dbg.h b/src/lib/16_dbg.h index 31666821..295b7146 100755 --- a/src/lib/16_dbg.h +++ b/src/lib/16_dbg.h @@ -12,7 +12,7 @@ //#define __DEBUG_2__ //#define __DEBUG_CA__ //#define __DEBUG_PM__ -#define __DEBUG_MM__ +//#define __DEBUG_MM__ //#define __DEBUG_RF__ #define __DEBUG_SPRI__ diff --git a/src/lib/16_mm.c b/src/lib/16_mm.c index b6d2a267..c14632ab 100755 --- a/src/lib/16_mm.c +++ b/src/lib/16_mm.c @@ -1,19 +1,23 @@ -/* Catacomb Apocalypse Source Code - * Copyright (C) 1993-2014 Flat Rock Software +/* Project 16 Source Code~ + * Copyright (C) 2012-2017 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover * - * This program is free software; you can redistribute it and/or modify + * This file is part of Project 16. + * + * Project 16 is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or + * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * - * This program is distributed in the hope that it will be useful, + * Project 16 is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see , or + * write to the Free Software Foundation, Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301 USA. + * */ // NEWMM.C @@ -28,7 +32,7 @@ Primary coder: John Carmack RELIES ON --------- -Quit (global_game_variables_t *gvar, char *error) function +Quit (char *error) function WORK TO DO @@ -54,6 +58,37 @@ Open Watcom port by sparky4 #pragma warn -pro #pragma warn -use +/* +============================================================================= + + LOCAL INFO + +============================================================================= +*/ + +#define LOCKBIT 0x80 // if set in attributes, block cannot be moved +#define PURGEBITS 3 // 0-3 level, 0= unpurgable, 3= purge first +#define PURGEMASK 0xfffc +#define BASEATTRIBUTES 0 // unlocked, non purgable + +//#define MAXUMBS 10 + +/*typedef struct mmblockstruct +{ + unsigned start,length; + unsigned attributes; + memptr *useptr; // pointer to the segment start + struct mmblockstruct far *next; +} mmblocktype;*/ + + +//#define GETNEWBLOCK {if(!(mmnew=mmfree))Quit("MM_GETNEWBLOCK: No free blocks!") ;mmfree=mmfree->next;} +// + +#define GETNEWBLOCK {if(!gvar->mm.mmfree)MML_ClearBlock(gvar);gvar->mm.mmnew=gvar->mm.mmfree;gvar->mm.mmfree=gvar->mm.mmfree->next;} + +#define FREEBLOCK(x) {*x->useptr=NULL;x->next=gvar->mm.mmfree;gvar->mm.mmfree=x;} + /* ============================================================================= @@ -62,9 +97,12 @@ Open Watcom port by sparky4 ============================================================================= */ +/*mminfotype mminfo; +memptr bufferseg; +boolean mmerror;*/ + void (* beforesort) (void); void (* aftersort) (void); -void (* XMSaddr) (void); // far pointer to XMS driver /* ============================================================================= @@ -73,6 +111,38 @@ void (* XMSaddr) (void); // far pointer to XMS driver ============================================================================= */ + +/*boolean mmstarted; + +void far *farheap; +void *nearheap; + +mmblocktype far mmblocks[MAXBLOCKS] + ,far *mmhead,far *mmfree,far *mmrover,far *mmnew; + +boolean bombonerror;*/ + +//unsigned totalEMSpages,freeEMSpages,EMSpageframe,EMSpagesmapped,EMShandle; + +void (* XMSaddr) (void); // far pointer to XMS driver + +/*unsigned numUMBs,UMBbase[MAXUMBS];*/ + +//========================================================================== + +// +// local prototypes +// + +boolean MML_CheckForEMS (void); +void MML_ShutdownEMS (void); +void MM_MapEMS (void); +boolean MML_CheckForXMS (void); +void MML_ShutdownXMS (void); +//void MML_UseSpace (unsigned segstart, unsigned seglength); +//void MML_ClearBlock (void); + +//========================================================================== #ifndef __16_PM__ #if 0 static char *ParmStringsexmm[] = {"noems","noxms",""}; @@ -319,7 +389,7 @@ void MML_ShutdownEMS(global_game_variables_t *gvar) } #endif if(errorflag==true) - Quit (gvar, "MML_ShutdownEMS: Error freeing EMS!\n"); //++++ add something + Quit ("MML_ShutdownEMS: Error freeing EMS!\n"); //++++ add something } /* @@ -624,10 +694,10 @@ void MML_ShutdownXMS(global_game_variables_t *gvar) } //++++todo: linked list of segment! */ -void MML_UseSpace(word segstart, dword seglength, global_game_variables_t *gvar) +void MML_UseSpace (unsigned segstart, unsigned seglength, global_game_variables_t *gvar) { mmblocktype far *scan,far *last; - word oldend; + unsigned oldend; sdword extra; //word segm=1; @@ -656,8 +726,9 @@ void MML_UseSpace(word segstart, dword seglength, global_game_variables_t *gvar) // take the given range out of the block // oldend = scan->start + scan->length; - extra = oldend - (segstart+((unsigned)seglength)); + extra = oldend - (segstart+seglength); if (extra < 0) +#ifdef __DEBUG_MM__ { printf("========================================\n"); printf("start=%x ", scan->start); @@ -671,6 +742,9 @@ void MML_UseSpace(word segstart, dword seglength, global_game_variables_t *gvar) printf("========================================\n"); //return; } +#else + Quit ("MML_UseSpace: Segment spans two blocks!"); +#endif if (segstart == scan->start) { @@ -707,7 +781,7 @@ void MML_UseSpace(word segstart, dword seglength, global_game_variables_t *gvar) ==================== */ -void MML_ClearBlock(global_game_variables_t *gvar) +void MML_ClearBlock (global_game_variables_t *gvar) { mmblocktype far *scan;//,far *last; @@ -723,7 +797,7 @@ void MML_ClearBlock(global_game_variables_t *gvar) scan = scan->next; } - printf("MM_ClearBlock: No purgable blocks!\n"); + Quit ("MM_ClearBlock: No purgable blocks!\n"); } @@ -740,26 +814,24 @@ void MML_ClearBlock(global_game_variables_t *gvar) =================== */ -void MM_Startup(global_game_variables_t *gvar) +void MM_Startup (global_game_variables_t *gvar) { int i; - //dword length,seglength; - dword length; word seglength; + dword length; void far *start; - word segstart;//,endfree; + unsigned segstart,seglength;//,endfree; if(gvar->mm.mmstarted) - MM_Shutdown(gvar); + MM_Shutdown (gvar); gvar->mm.mmstarted = true; gvar->mm.bombonerror = true; - // // set up the linked list (everything in the free list; // gvar->mm.mmhead = NULL; gvar->mm.mmfree = &(gvar->mm.mmblocks[0]); - for(i=0;imm.mmblocks[i].next = &(gvar->mm.mmblocks[i+1]); gvar->mm.mmblocks[i].next = NULL; @@ -774,6 +846,7 @@ void MM_Startup(global_game_variables_t *gvar) gvar->mm.mmnew->next = NULL; gvar->mm.mmrover = gvar->mm.mmhead; + // // get all available near conventional memory segments // @@ -793,7 +866,7 @@ void MM_Startup(global_game_variables_t *gvar) length -= SAVENEARHEAP; seglength = length / 16; // now in paragraphs segstart = FP_SEG(start)+(FP_OFF(start)+15)/16; - MML_UseSpace(segstart,seglength, gvar); + MML_UseSpace (segstart,seglength, gvar); gvar->mmi.nearheap = length; //0000printf("near: start=%Fp segstart=%x seglen=%lu len=%lu\n", start, segstart, (dword)seglength, length); @@ -814,7 +887,7 @@ void MM_Startup(global_game_variables_t *gvar) length -= SAVEFARHEAP; seglength = length / 16; // now in paragraphs segstart = FP_SEG(start)+(FP_OFF(start)+15)/16; - MML_UseSpace(segstart,seglength, gvar); + MML_UseSpace (segstart,seglength, gvar); gvar->mmi.farheap = length; //0000printf("far: start=%Fp segstart=%x seglen=%lu len=%lu\n", start, segstart, (dword)seglength, length); @@ -869,7 +942,7 @@ xmsskip: // gvar->mm.mmrover = gvar->mm.mmhead; // start looking for space after low block - MM_GetPtr(&(gvar->mm.bufferseg),BUFFERSIZE, gvar); + MM_GetPtr (&(gvar->mm.bufferseg),BUFFERSIZE, gvar); } //========================================================================== @@ -884,7 +957,7 @@ xmsskip: ==================== */ -void MM_Shutdown(global_game_variables_t *gvar) +void MM_Shutdown (global_game_variables_t *gvar) { if(!(gvar->mm.mmstarted)) return; @@ -922,10 +995,10 @@ void MM_Shutdown(global_game_variables_t *gvar) ==================== */ -void MM_GetPtr (memptr *baseptr, dword size, global_game_variables_t *gvar) +void MM_GetPtr (memptr *baseptr,dword size, global_game_variables_t *gvar) { mmblocktype far *scan,far *lastscan,far *endscan - ,far *purge,far *next; + ,far *purge,far *next; int search; unsigned needed,startseg; @@ -934,6 +1007,7 @@ void MM_GetPtr (memptr *baseptr, dword size, global_game_variables_t *gvar) GETNEWBLOCK; // fill in start and next after a spot is found gvar->mm.mmnew->length = needed; gvar->mm.mmnew->useptr = baseptr; + gvar->mm.mmnew->attributes = BASEATTRIBUTES; //if(gvar->mm.mmnew->useptr==NULL){ #ifdef __DEBUG_MM__ printf("MM_GetPtr\n"); @@ -946,7 +1020,6 @@ void MM_GetPtr (memptr *baseptr, dword size, global_game_variables_t *gvar) printf(" size is %lu\n", size); #endif //Quit(gvar, "gvar->mm.mmnew->useptr==NULL"); } - gvar->mm.mmnew->attributes = BASEATTRIBUTES; //tryagain: for (search = 0; search<3; search++) @@ -1024,7 +1097,7 @@ void MM_GetPtr (memptr *baseptr, dword size, global_game_variables_t *gvar) //heapdump(); #endif printf(OUT_OF_MEM_MSG,(size-gvar->mmi.nearheap)); - Quit(gvar, "for stability reasons the program will shut down! wwww\n"); + Quit("for stability reasons the program will shut down! wwww\n"); } else gvar->mm.mmerror = true; @@ -1052,14 +1125,14 @@ void MM_FreePtr (memptr *baseptr, global_game_variables_t *gvar) if (baseptr == gvar->mm.mmrover->useptr) // removed the last allocated block gvar->mm.mmrover = gvar->mm.mmhead; - while(scan->useptr != baseptr && scan) + while (scan->useptr != baseptr && scan) { last = scan; scan = scan->next; } - if(!scan) - Quit (gvar, "MM_FreePtr: Block not found!"); + if (!scan) + Quit ("MM_FreePtr: Block not found!"); last->next = scan->next; @@ -1093,9 +1166,9 @@ void MM_SetPurge (memptr *baseptr, int purge, global_game_variables_t *gvar) if (!gvar->mm.mmrover) gvar->mm.mmrover = gvar->mm.mmhead; else if (gvar->mm.mmrover == start) - Quit (gvar, "MM_SetPurge: Block not found!"); + Quit ("MM_SetPurge: Block not found!"); - } while(1); + } while (1); gvar->mm.mmrover->attributes &= ~PURGEBITS; gvar->mm.mmrover->attributes |= purge; @@ -1129,7 +1202,7 @@ void MM_SetLock (memptr *baseptr, boolean locked, global_game_variables_t *gvar) if (!gvar->mm.mmrover) gvar->mm.mmrover = gvar->mm.mmhead; else if (gvar->mm.mmrover == start) - Quit (gvar, "MM_SetLock: Block not found!"); + Quit ("MM_SetLock: Block not found!"); } while(1); @@ -1170,7 +1243,7 @@ void MM_SortMem (global_game_variables_t *gvar) playing += STARTADLIBSOUNDS; break; } - MM_SetLock((memptr *)&audiosegs[playing],true); + MM_SetLock(MEMPTRCONV audiosegs[playing],true); } @@ -1178,16 +1251,16 @@ void MM_SortMem (global_game_variables_t *gvar) oldborder = gvar->video.bordercolor; gvar->video.bordercolor = modexPalOverscan(15); - if(beforesort) + if (beforesort) beforesort(); scan = gvar->mm.mmhead; last = NULL; // shut up compiler warning - while(scan) + while (scan) { - if(scan->attributes & LOCKBIT) + if (scan->attributes & LOCKBIT) { // // block is locked, so try to pile later blocks right after it @@ -1196,7 +1269,7 @@ void MM_SortMem (global_game_variables_t *gvar) } else { - if(scan->attributes & PURGEBITS) + if (scan->attributes & PURGEBITS) { // // throw out the purgable block @@ -1212,12 +1285,12 @@ void MM_SortMem (global_game_variables_t *gvar) // // push the non purgable block on top of the last moved block // - if(scan->start != start) + if (scan->start != start) { length = scan->length; source = scan->start; dest = start; - while(length > 0xf00) + while (length > 0xf00) { movedata(source,0,dest,0,0xf00*16); length -= 0xf00; @@ -1239,7 +1312,7 @@ void MM_SortMem (global_game_variables_t *gvar) gvar->mm.mmrover = gvar->mm.mmhead; - if(aftersort) + if (aftersort) aftersort(); VL_ColorBorder (oldborder, &gvar->video); @@ -1312,7 +1385,7 @@ void MM_ShowMemory (global_game_variables_t *gvar) ultoa (scan->start,str,10); strcat (scratch,str); write(gvar->handle.debughandle,scratch,strlen(scratch)); - Quit (gvar, "MM_ShowMemory: Memory block order currupted!"); + Quit ("MM_ShowMemory: Memory block order currupted!"); } end = scan->length-1; y = scan->start/width; diff --git a/src/lib/16_mm.h b/src/lib/16_mm.h index c5e89a2b..4516571d 100755 --- a/src/lib/16_mm.h +++ b/src/lib/16_mm.h @@ -1,19 +1,23 @@ -/* Catacomb Apocalypse Source Code - * Copyright (C) 1993-2014 Flat Rock Software +/* Project 16 Source Code~ + * Copyright (C) 2012-2017 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover * - * This program is free software; you can redistribute it and/or modify + * This file is part of Project 16. + * + * Project 16 is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or + * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * - * This program is distributed in the hope that it will be useful, + * Project 16 is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see , or + * write to the Free Software Foundation, Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301 USA. + * */ // ID_MM.H @@ -37,8 +41,8 @@ #define FREEBLOCK(x) {*x->useptr=NULL;x->next=gvar->mm.mmfree;gvar->mm.mmfree=x;} -#define SAVENEARHEAP 0x200 // space to leave in data segment -#define SAVEFARHEAP 0x400 // space to leave in far heap +#define SAVENEARHEAP 0x400 // space to leave in data segment +#define SAVEFARHEAP 0 // space to leave in far heap #define BUFFERSIZE 0x1000 // miscelanious, allways available buffer @@ -102,7 +106,7 @@ extern void (* beforesort) (void); extern void (* aftersort) (void); -extern void (* XMSaddr) (void); // far pointer to XMS driver +//extern void (* XMSaddr) (void); // far pointer to XMS driver extern dword XMSDriver; extern word XMSVer; @@ -178,13 +182,13 @@ typedef struct boolean MML_CheckForEMS(void); //byte MML_SetupEMS(mminfo_t *mm); //void MML_ShutdownEMS(mminfo_t *mm); -byte MM_MapEMS(global_game_variables_t *gvar); +//byte MM_MapEMS(global_game_variables_t *gvar); //byte MM_MapXEMS(global_game_variables_t *gvar); boolean MML_CheckForXMS(void); //void MML_SetupXMS(mminfo_t *mm, mminfotype *mmi); //void MML_ShutdownXMS(mminfo_t *mm); -void MML_UseSpace(word segstart, dword seglength, global_game_variables_t *gvar); -void MML_ClearBlock(global_game_variables_t *gvar); + void MML_UseSpace (unsigned segstart, unsigned seglength, global_game_variables_t *gvar); + void MML_ClearBlock (global_game_variables_t *gvar); void MM_Startup(global_game_variables_t *gvar); void MM_Shutdown(global_game_variables_t *gvar); diff --git a/src/lib/16_pm.c b/src/lib/16_pm.c index 858bd4b9..55a7d371 100755 --- a/src/lib/16_pm.c +++ b/src/lib/16_pm.c @@ -139,7 +139,7 @@ PML_MapEMS(word logical, byte physical, global_game_variables_t *gvar) strcpy(str,"MM_MapEMS: EMS error "); MM_EMSerr(str, err); printf("%s\n",str); - Quit (gvar, "PML_MapEMS: Page mapping failed\n"); + Quit ("PML_MapEMS: Page mapping failed\n"); return err; } return 0; @@ -326,7 +326,7 @@ PML_ShutdownEMS(global_game_variables_t *gvar) strcpy(str,"PML_ShutdownEMS: Error freeing EMS "); MM_EMSerr(str, err); printf("%s\n",str); - Quit (gvar, "PML_ShutdownEMS: Error freeing EMS\n"); + Quit ("PML_ShutdownEMS: Error freeing EMS\n"); //return; } } @@ -506,7 +506,7 @@ PML_XMSCopy(boolean toxms,byte far *addr,word xmspage,word length, global_game_v if (!addr) { - Quit (gvar, "PML_XMSCopy: zero address\n"); + Quit ("PML_XMSCopy: zero address\n"); } xoffset = (dword)xmspage * PMPageSize; @@ -527,7 +527,7 @@ PML_XMSCopy(boolean toxms,byte far *addr,word xmspage,word length, global_game_v } if (!_AX) { - Quit (gvar, "PML_XMSCopy: Error on copy"); + Quit ("PML_XMSCopy: Error on copy"); //return; } } @@ -594,7 +594,7 @@ PML_ShutdownXMS(global_game_variables_t *gvar) #endif if(errorflag==true) { - Quit (gvar, "PML_ShutdownXMS: Error freeing XMS"); + Quit ("PML_ShutdownXMS: Error freeing XMS"); //return; } } @@ -631,7 +631,7 @@ PM_SetMainMemPurge(int level, global_game_variables_t *gvar) else { - Quit (gvar, "MainPresent IS NULL\n"); + Quit ("MainPresent IS NULL\n"); } } @@ -740,7 +740,7 @@ PML_StartupMainMem(global_game_variables_t *gvar) gvar->mm.mmerror = false; if (gvar->pm.mm.MainPagesAvail < PMMinMainMem) { - Quit (gvar, "PM_SetupMainMem: Not enough main memory"); + Quit ("PM_SetupMainMem: Not enough main memory"); //return; } gvar->pm.mm.MainPresent = true; @@ -776,22 +776,22 @@ PML_ReadFromFile(byte far *buf,long offset,word length, global_game_variables_t { if (!buf) { - Quit (gvar, "PML_ReadFromFile: Null pointer"); + Quit ("PML_ReadFromFile: Null pointer"); //return; } if (!offset) { - Quit (gvar, "PML_ReadFromFile: Zero offset"); + Quit ("PML_ReadFromFile: Zero offset"); //return; } if (lseek(gvar->pm.fi.PageFile,offset,SEEK_SET) != offset) { - Quit (gvar, "PML_ReadFromFile: Seek failed"); + Quit ("PML_ReadFromFile: Seek failed"); //return; } if (!CA_FarRead(gvar->pm.fi.PageFile,buf,length, gvar)) { - Quit (gvar, "PML_ReadFromFile: Read failed"); + Quit ("PML_ReadFromFile: Read failed"); //return; } } @@ -812,7 +812,7 @@ PML_OpenPageFile(global_game_variables_t *gvar) gvar->pm.fi.PageFile = open(gvar->pm.fi.PageFileName,O_RDONLY + O_BINARY); if (gvar->pm.fi.PageFile == -1) { - Quit (gvar, "PML_OpenPageFile: Unable to open page file"); + Quit ("PML_OpenPageFile: Unable to open page file"); //return; } @@ -833,7 +833,7 @@ PML_OpenPageFile(global_game_variables_t *gvar) MM_GetPtr((memptr *)&buf, size, gvar); if (!CA_FarRead(gvar->pm.fi.PageFile,(byte far *)buf,size, gvar)) { - Quit (gvar, "PML_OpenPageFile: Offset read failed"); + Quit ("PML_OpenPageFile: Offset read failed"); //return; } offsetptr = (dword far *)buf; @@ -846,7 +846,7 @@ PML_OpenPageFile(global_game_variables_t *gvar) MM_GetPtr(&buf,size, gvar); if (!CA_FarRead(gvar->pm.fi.PageFile,(byte far *)buf,size, gvar)) { - Quit (gvar, "PML_OpenPageFile: Length read failed"); + Quit ("PML_OpenPageFile: Length read failed"); //return; } lengthptr = (word far *)buf; @@ -923,7 +923,7 @@ PML_GetEMSAddress(int page,PMLockType lock, global_game_variables_t *gvar) } if (emspage == -1) - Quit (gvar, "PML_GetEMSAddress: EMS find failed"); + Quit ("PML_GetEMSAddress: EMS find failed"); gvar->pm.emm.EMSList[emspage].lastHit = gvar->pm.PMFrameCount; offset = emspage * EMSPageSizeSeg; @@ -992,7 +992,7 @@ PML_GiveLRUPage(boolean mainonly, global_game_variables_t *gvar) } if (lru == -1) - Quit (gvar, "PML_GiveLRUPage: LRU Search failed"); + Quit ("PML_GiveLRUPage: LRU Search failed"); return(lru); } @@ -1047,7 +1047,7 @@ PML_PutPageInXMS(int pagenum, global_game_variables_t *gvar) { usexms = PML_GiveLRUXMSPage(gvar); if (usexms == -1) - Quit (gvar, "PML_PutPageInXMS: No XMS LRU"); + Quit ("PML_PutPageInXMS: No XMS LRU"); page->xmsPage = gvar->pm.PMPages[usexms].xmsPage; gvar->pm.PMPages[usexms].xmsPage = -1; } @@ -1065,16 +1065,16 @@ PML_TransferPageSpace(int orig,int new, global_game_variables_t *gvar) PageListStruct far *origpage,far *newpage; if (orig == new) - Quit (gvar, "PML_TransferPageSpace: Identity replacement"); + Quit ("PML_TransferPageSpace: Identity replacement"); origpage = &gvar->pm.PMPages[orig]; newpage = &gvar->pm.PMPages[new]; if (origpage->locked != pml_Unlocked) - Quit (gvar, "PML_TransferPageSpace: Killing locked page"); + Quit ("PML_TransferPageSpace: Killing locked page"); if ((origpage->emsPage == -1) && (origpage->mainPage == -1)) - Quit (gvar, "PML_TransferPageSpace: Reusing non-existent page"); + Quit ("PML_TransferPageSpace: Reusing non-existent page"); // Copy page that's about to be purged into XMS PML_PutPageInXMS(orig, gvar); @@ -1090,7 +1090,7 @@ PML_TransferPageSpace(int orig,int new, global_game_variables_t *gvar) origpage->mainPage = origpage->emsPage = -1; if (!addr) - Quit (gvar, "PML_TransferPageSpace: Zero replacement"); + Quit ("PML_TransferPageSpace: Zero replacement"); return(addr); } @@ -1131,10 +1131,10 @@ PML_GetAPageBuffer(int pagenum,boolean mainonly, global_game_variables_t *gvar) } } if (n == -1) - Quit (gvar, "PML_GetPageBuffer: MainPagesAvail lied"); + Quit ("PML_GetPageBuffer: MainPagesAvail lied"); addr = gvar->pm.mm.MainMemPages[n]; if (!addr) - Quit (gvar, "PML_GetPageBuffer: Purged main block"); + Quit ("PML_GetPageBuffer: Purged main block"); page->mainPage = n; gvar->pm.MainPagesUsed++; } @@ -1142,7 +1142,7 @@ PML_GetAPageBuffer(int pagenum,boolean mainonly, global_game_variables_t *gvar) addr = PML_TransferPageSpace(PML_GiveLRUPage(mainonly, gvar),pagenum, gvar); if (!addr) - Quit (gvar, "PML_GetPageBuffer: Search failed"); + Quit ("PML_GetPageBuffer: Search failed"); return(addr); } @@ -1168,7 +1168,7 @@ PML_GetPageFromXMS(int pagenum,boolean mainonly, global_game_variables_t *gvar) gvar->pm.xmm.XMSProtectPage = pagenum; checkaddr = PML_GetAPageBuffer(pagenum,mainonly, gvar); if (FP_OFF(checkaddr)) - Quit (gvar, "PML_GetPageFromXMS: Non segment pointer"); + Quit ("PML_GetPageFromXMS: Non segment pointer"); addr = (memptr)FP_SEG(checkaddr); PML_CopyFromXMS(addr,page->xmsPage,page->length, gvar); gvar->pm.xmm.XMSProtectPage = -1; @@ -1206,7 +1206,7 @@ PM_GetPage(int pagenum, global_game_variables_t *gvar) memptr result; if (pagenum >= gvar->pm.fi.ChunksInFile) - Quit (gvar, "PM_GetPage: Invalid page request"); + Quit ("PM_GetPage: Invalid page request"); //#ifdef __DEBUG_2__ // for debugging __asm { @@ -1224,7 +1224,7 @@ PM_GetPage(int pagenum, global_game_variables_t *gvar) { boolean mainonly = (pagenum >= gvar->pm.fi.PMSoundStart); if (!gvar->pm.PMPages[pagenum].offset) // JDC: sparse page - Quit (gvar, "Tried to load a sparse page!"); + Quit ("Tried to load a sparse page!"); if (!(result = PML_GetPageFromXMS(pagenum,mainonly, gvar))) { if (gvar->pm.PMPages[pagenum].lastHit == gvar->pm.PMFrameCount) @@ -1265,7 +1265,7 @@ void PM_SetPageLock(int pagenum,PMLockType lock, global_game_variables_t *gvar) { if (pagenum < gvar->pm.fi.PMSoundStart) - Quit (gvar, "PM_SetPageLock: Locking/unlocking non-sound page"); + Quit ("PM_SetPageLock: Locking/unlocking non-sound page"); gvar->pm.PMPages[pagenum].locked = lock; } @@ -1332,7 +1332,7 @@ PM_Preload(boolean (*update)(word current,word total), global_game_variables_t * page++; if (page >= gvar->pm.fi.ChunksInFile) - Quit (gvar, "PM_Preload: Pages>=gvar->pm.fi.ChunksInFile"); + Quit ("PM_Preload: Pages>=gvar->pm.fi.ChunksInFile"); PM_GetPage(page, gvar); @@ -1351,7 +1351,7 @@ PM_Preload(boolean (*update)(word current,word total), global_game_variables_t * ; addr = PM_GetPage(oogypage, gvar); if (!addr) - Quit (gvar, "PM_Preload: XMS buffer failed"); + Quit ("PM_Preload: XMS buffer failed"); while (xmstotal) { @@ -1359,15 +1359,15 @@ PM_Preload(boolean (*update)(word current,word total), global_game_variables_t * page++; if (page >= gvar->pm.fi.ChunksInFile) - Quit (gvar, "PM_Preload: Pages>=gvar->pm.fi.ChunksInFile"); + Quit ("PM_Preload: Pages>=gvar->pm.fi.ChunksInFile"); p = &gvar->pm.PMPages[page]; p->xmsPage = gvar->pm.XMSPagesUsed++; if (gvar->pm.XMSPagesUsed > gvar->pm.xmm.XMSPagesAvail) - Quit (gvar, "PM_Preload: Exceeded XMS pages"); + Quit ("PM_Preload: Exceeded XMS pages"); if (p->length > PMPageSize) - Quit (gvar, "PM_Preload: Page too long"); + Quit ("PM_Preload: Page too long"); PML_ReadFromFile((byte far *)addr,p->offset,p->length, gvar); PML_CopyToXMS((byte far *)addr,p->xmsPage,p->length, gvar); @@ -1420,7 +1420,7 @@ PM_NextFrame(global_game_variables_t *gvar) { char buf[40]; sprintf(buf,"PM_NextFrame: Page %d is locked",i); - Quit(gvar, buf); + Quit (buf); } } //#endif @@ -1511,7 +1511,7 @@ PM_Startup(global_game_variables_t *gvar) if (!gvar->pm.mm.MainPresent && !gvar->pm.emm.EMSPresent && !gvar->pm.xmm.XMSPresent) { - Quit (gvar, "PM_Startup: No main or EMS\n"); + Quit ("PM_Startup: No main or EMS\n"); //return; } diff --git a/src/lib/16_tail.c b/src/lib/16_tail.c index 742e1132..e9b0be9a 100755 --- a/src/lib/16_tail.c +++ b/src/lib/16_tail.c @@ -475,12 +475,13 @@ void ClearMemory (global_game_variables_t *gvar) ========================== */ -void Quit (global_game_variables_t *gvar, char *error) +void Quit (char *error) { + //unsigned finscreen; memptr screen=0; - ClearMemory (gvar); + ClearMemory (ggvv); if (!*error) { // #ifndef JAPAN @@ -494,7 +495,7 @@ void Quit (global_game_variables_t *gvar, char *error) // CA_CacheGrChunk (ERRORSCREEN); // screen = grsegs[ERRORSCREEN]; } - Shutdown16(gvar); + Shutdown16(ggvv); if (error && *error) { diff --git a/src/lib/16_tail.h b/src/lib/16_tail.h index 93022c26..ef3b9066 100755 --- a/src/lib/16_tail.h +++ b/src/lib/16_tail.h @@ -41,7 +41,8 @@ #include #endif -//gvar.video.ofs.bufferofs,gvar.video.ofs.displayofs, +extern struct glob_game_vars *ggvv; + #define FIZZLEFADEFUNCTION \ if(gvar.in.inst->Keyboard[sc_F]){ FizzleFade(\ atoi(gvar.video.page[0].data),atoi(gvar.video.page[1].data),\ @@ -135,7 +136,7 @@ void TL_VidInit(global_game_variables_t *gvar); boolean FizzleFade (unsigned source, unsigned dest, unsigned width, unsigned height, unsigned frames, boolean abortable, global_game_variables_t *gvar); void DebugMemory_(global_game_variables_t *gvar, boolean q); void ClearMemory (global_game_variables_t *gvar); -void Quit (global_game_variables_t *gvar, char *error); +void Quit (char *error); void turboXT(byte bakapee); void nibbletest(); void booleantest(); diff --git a/src/lib/16_tdef.h b/src/lib/16_tdef.h index 1aa8b53f..3fa1feb3 100755 --- a/src/lib/16_tdef.h +++ b/src/lib/16_tdef.h @@ -468,14 +468,11 @@ typedef struct //from 16_mm //========================================================================== -#define MAXBLOCKS 1024//kd=1300 wolf3d=700 cata=600 -//----#define MAXUMBS 12 +#define MAXBLOCKS 800//kd=1300 wolf3d=700 cata=600 typedef struct mmblockstruct { - word start,length; - //word start; dword length; -//++++ word blob; //for data larger than 64k + unsigned start,length; unsigned attributes; memptr *useptr; // pointer to the segment start struct mmblockstruct far *next; diff --git a/src/sountest.c b/src/sountest.c index d15a5462..e734a8c7 100755 --- a/src/sountest.c +++ b/src/sountest.c @@ -70,7 +70,7 @@ void main(int argc, char near *argv[]) //FMSetVoice(0, &testInst); if(!init_adlib()) { - Quit(&gvar, "Cannot init library"); + Quit ("Cannot init library"); } if (adlib_fm_voices > 9) diff --git a/src/xcroll.c b/src/xcroll.c index 9e968ae5..189746da 100755 --- a/src/xcroll.c +++ b/src/xcroll.c @@ -138,7 +138,7 @@ void main(int argc, char *argv[]) #ifdef FADE modexFadeOff(4, &gvar.video.palette); #endif - Quit (&gvar, "Wrong ID for sprite"); + Quit ("Wrong ID for sprite"); #ifdef FADE modexFadeOn(4, &gvar.video.dpal); #endif @@ -219,7 +219,7 @@ void main(int argc, char *argv[]) #endif if(gvar.in.inst->Keyboard[sc_R]){ modexPalOverscan(rand()%56); } //r - if((gvar.player[0].enti.q==1) && !(gvar.player[0].enti.x%TILEWH==0 && gvar.player[0].enti.y%TILEWH==0)) Quit (&gvar, "PLAYER OFF THE RAILS!");//break; //incase things go out of sync! + if((gvar.player[0].enti.q==1) && !(gvar.player[0].enti.x%TILEWH==0 && gvar.player[0].enti.y%TILEWH==0)) Quit ("PLAYER OFF THE RAILS!");//break; //incase things go out of sync! } /* fade back to text mode */ -- 2.39.2