[chocolate-doom] 72/79: Move savegame header read/write code into p_saveg.c

Jonathan Dowland jmtd at moszumanska.debian.org
Mon Jan 30 15:07:27 UTC 2017


This is an automated email from the git hooks/post-receive script.

jmtd pushed a commit to annotated tag chocolate-doom-0.1.3
in repository chocolate-doom.

commit 717673ef80aff9ae1a271b73d3c7f43f2bb27a1a
Author: Simon Howard <fraggle at gmail.com>
Date:   Thu Jan 19 18:46:24 2006 +0000

    Move savegame header read/write code into p_saveg.c
    
    Subversion-branch: /trunk/chocolate-doom
    Subversion-revision: 300
---
 src/g_game.c  | 69 ++++++++++++++----------------------------
 src/p_saveg.c | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 src/p_saveg.h | 18 ++++++++++-
 3 files changed, 133 insertions(+), 50 deletions(-)

diff --git a/src/g_game.c b/src/g_game.c
index 9afe6ac..8c1da54 100644
--- a/src/g_game.c
+++ b/src/g_game.c
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*- 
 //-----------------------------------------------------------------------------
 //
-// $Id: g_game.c 291 2006-01-13 23:56:00Z fraggle $
+// $Id: g_game.c 300 2006-01-19 18:46:24Z fraggle $
 //
 // Copyright(C) 1993-1996 Id Software, Inc.
 // Copyright(C) 2005 Simon Howard
@@ -22,6 +22,9 @@
 // 02111-1307, USA.
 //
 // $Log$
+// Revision 1.20  2006/01/19 18:46:24  fraggle
+// Move savegame header read/write code into p_saveg.c
+//
 // Revision 1.19  2006/01/13 23:56:00  fraggle
 // Add text-mode I/O functions.
 // Use text-mode screen for the waiting screen.
@@ -102,7 +105,7 @@
 
 
 static const char
-rcsid[] = "$Id: g_game.c 291 2006-01-13 23:56:00Z fraggle $";
+rcsid[] = "$Id: g_game.c 300 2006-01-19 18:46:24Z fraggle $";
 
 #include <string.h>
 #include <stdlib.h>
@@ -155,7 +158,6 @@ rcsid[] = "$Id: g_game.c 291 2006-01-13 23:56:00Z fraggle $";
 
 
 #define SAVEGAMESIZE	0x2c000
-#define SAVESTRINGSIZE	24
 
 
 
@@ -1318,45 +1320,34 @@ void G_LoadGame (char* name)
 
 void G_DoLoadGame (void) 
 { 
-    int		length; 
-    int		i; 
-    int		a,b,c; 
-    char        vcheck[VERSIONSIZE]; 
+    int	length; 
+    int savedleveltime;
 	 
     gameaction = ga_nothing; 
 	 
     length = M_ReadFile (savename, &savebuffer); 
-    save_p = savebuffer + SAVESTRINGSIZE;
-    
-    // skip the description field 
-    memset (vcheck,0,sizeof(vcheck)); 
-    sprintf (vcheck,"version %i",DOOM_VERSION); 
-    if (strcmp ((char *) save_p, vcheck)) 
-	return;				// bad version 
-    save_p += VERSIONSIZE; 
-			 
-    gameskill = *save_p++; 
-    gameepisode = *save_p++; 
-    gamemap = *save_p++; 
-    for (i=0 ; i<MAXPLAYERS ; i++) 
-	playeringame[i] = *save_p++; 
+    save_p = savebuffer;
 
+    if (!P_ReadSaveGameHeader())
+    {
+        Z_Free(savebuffer);
+        return;
+    }
+
+    savedleveltime = leveltime;
+    
     // load a base level 
     G_InitNew (gameskill, gameepisode, gamemap); 
  
-    // get the times 
-    a = *save_p++; 
-    b = *save_p++; 
-    c = *save_p++; 
-    leveltime = (a<<16) + (b<<8) + c; 
-	 
+    leveltime = savedleveltime;
+
     // dearchive all the modifications
     P_UnArchivePlayers (); 
     P_UnArchiveWorld (); 
     P_UnArchiveThinkers (); 
     P_UnArchiveSpecials (); 
  
-    if (*save_p != 0x1d) 
+    if (!P_ReadSaveGameEOF())
 	I_Error ("Bad savegame");
     
     // done 
@@ -1388,10 +1379,8 @@ G_SaveGame
 void G_DoSaveGame (void) 
 { 
     char	name[100]; 
-    char	name2[VERSIONSIZE]; 
     char*	description; 
     int		length; 
-    int		i; 
 	
     strcpy(name, P_SaveGameFile(savegameslot));
 
@@ -1399,35 +1388,21 @@ void G_DoSaveGame (void)
 	 
     save_p = savebuffer = screens[1]+0x4000; 
 	 
-    memcpy (save_p, description, SAVESTRINGSIZE); 
-    save_p += SAVESTRINGSIZE; 
-    memset (name2,0,sizeof(name2)); 
-    sprintf (name2,"version %i",DOOM_VERSION); 
-    memcpy (save_p, name2, VERSIONSIZE); 
-    save_p += VERSIONSIZE; 
-	 
-    *save_p++ = gameskill; 
-    *save_p++ = gameepisode; 
-    *save_p++ = gamemap; 
-    for (i=0 ; i<MAXPLAYERS ; i++) 
-	*save_p++ = playeringame[i]; 
-    *save_p++ = leveltime>>16; 
-    *save_p++ = leveltime>>8; 
-    *save_p++ = leveltime; 
+    P_WriteSaveGameHeader(description);
  
     P_ArchivePlayers (); 
     P_ArchiveWorld (); 
     P_ArchiveThinkers (); 
     P_ArchiveSpecials (); 
 	 
-    *save_p++ = 0x1d;		// consistancy marker 
+    P_WriteSaveGameEOF();
 	 
     length = save_p - savebuffer; 
     if (length > SAVEGAMESIZE) 
 	I_Error ("Savegame buffer overrun"); 
     M_WriteFile (name, savebuffer, length); 
     gameaction = ga_nothing; 
-    savedescription[0] = 0;		 
+    strcpy(savedescription, "");
 	 
     players[consoleplayer].message = DEH_String(GGSAVED);
 
diff --git a/src/p_saveg.c b/src/p_saveg.c
index 7391fe4..fbec93a 100644
--- a/src/p_saveg.c
+++ b/src/p_saveg.c
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*- 
 //-----------------------------------------------------------------------------
 //
-// $Id: p_saveg.c 299 2006-01-19 00:17:01Z fraggle $
+// $Id: p_saveg.c 300 2006-01-19 18:46:24Z fraggle $
 //
 // Copyright(C) 1993-1996 Id Software, Inc.
 // Copyright(C) 2005 Simon Howard
@@ -22,6 +22,9 @@
 // 02111-1307, USA.
 //
 // $Log$
+// Revision 1.7  2006/01/19 18:46:24  fraggle
+// Move savegame header read/write code into p_saveg.c
+//
 // Revision 1.6  2006/01/19 00:17:01  fraggle
 // Remove now-redundant note about structure packing.
 //
@@ -52,18 +55,22 @@
 //-----------------------------------------------------------------------------
 
 static const char
-rcsid[] = "$Id: p_saveg.c 299 2006-01-19 00:17:01Z fraggle $";
+rcsid[] = "$Id: p_saveg.c 300 2006-01-19 18:46:24Z fraggle $";
 
 #include "dstrings.h"
 #include "deh_main.h"
 #include "i_system.h"
 #include "z_zone.h"
 #include "p_local.h"
+#include "p_saveg.h"
 
 // State.
 #include "doomstat.h"
 #include "r_state.h"
 
+#define SAVEGAME_EOF 0x1d
+#define VERSIONSIZE 16 
+
 byte*		save_p;
 
 
@@ -1305,6 +1312,91 @@ static void saveg_write_glow_t(glow_t *str)
     saveg_write32(str->direction);
 }
 
+//
+// Write the header for a savegame
+//
+
+void P_WriteSaveGameHeader(char *description)
+{
+    char name[VERSIONSIZE]; 
+    int i; 
+	
+    memcpy (save_p, description, SAVESTRINGSIZE); 
+    save_p += SAVESTRINGSIZE; 
+
+    memset (name,0,sizeof(name)); 
+    sprintf (name,"version %i",DOOM_VERSION); 
+    memcpy (save_p, name, VERSIONSIZE); 
+    save_p += VERSIONSIZE; 
+	 
+    saveg_write8(gameskill);
+    saveg_write8(gameepisode);
+    saveg_write8(gamemap);
+
+    for (i=0 ; i<MAXPLAYERS ; i++) 
+        saveg_write8(playeringame[i]);
+
+    saveg_write8((leveltime >> 16) & 0xff);
+    saveg_write8((leveltime >> 8) & 0xff);
+    saveg_write8(leveltime & 0xff);
+}
+
+// 
+// Read the header for a savegame
+//
+
+boolean P_ReadSaveGameHeader(void)
+{
+    int	 i; 
+    byte a, b, c; 
+    char vcheck[VERSIONSIZE]; 
+	 
+    save_p += SAVESTRINGSIZE;
+    
+    // skip the description field 
+    memset (vcheck,0,sizeof(vcheck)); 
+    sprintf (vcheck,"version %i",DOOM_VERSION); 
+    if (strcmp ((char *) save_p, vcheck)) 
+	return false;				// bad version 
+    save_p += VERSIONSIZE; 
+			 
+    gameskill = saveg_read8();
+    gameepisode = saveg_read8();
+    gamemap = saveg_read8();
+
+    for (i=0 ; i<MAXPLAYERS ; i++) 
+	playeringame[i] = saveg_read8();
+
+    // get the times 
+    a = saveg_read8();
+    b = saveg_read8();
+    c = saveg_read8();
+    leveltime = (a<<16) + (b<<8) + c; 
+
+    return true;
+}
+
+//
+// Read the end of file marker.  Returns true if read successfully.
+// 
+
+boolean P_ReadSaveGameEOF(void)
+{
+    int value;
+
+    value = saveg_read8();
+
+    return value == SAVEGAME_EOF;
+}
+
+//
+// Write the end of file marker
+//
+
+void P_WriteSaveGameEOF(void)
+{
+    saveg_write8(SAVEGAME_EOF);
+}
 
 //
 // P_ArchivePlayers
diff --git a/src/p_saveg.h b/src/p_saveg.h
index d6f95f1..3217e9d 100644
--- a/src/p_saveg.h
+++ b/src/p_saveg.h
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*- 
 //-----------------------------------------------------------------------------
 //
-// $Id: p_saveg.h 202 2005-10-16 01:18:10Z fraggle $
+// $Id: p_saveg.h 300 2006-01-19 18:46:24Z fraggle $
 //
 // Copyright(C) 1993-1996 Id Software, Inc.
 // Copyright(C) 2005 Simon Howard
@@ -30,10 +30,23 @@
 #ifndef __P_SAVEG__
 #define __P_SAVEG__
 
+// maximum size of a savegame description
+
+#define SAVESTRINGSIZE 24
+
 // filename to use for a savegame slot
 
 char *P_SaveGameFile(int slot);
 
+// Savegame file header read/write functions
+
+boolean P_ReadSaveGameHeader(void);
+void P_WriteSaveGameHeader(char *description);
+
+// Savegame end-of-file read/write functions
+
+boolean P_ReadSaveGameEOF(void);
+void P_WriteSaveGameEOF(void);
 
 // Persistent storage/archiving.
 // These are the load / save game routines.
@@ -53,6 +66,9 @@ extern byte*		save_p;
 //-----------------------------------------------------------------------------
 //
 // $Log$
+// Revision 1.5  2006/01/19 18:46:24  fraggle
+// Move savegame header read/write code into p_saveg.c
+//
 // Revision 1.4  2005/10/16 01:18:10  fraggle
 // Global "configdir" variable with directory to store config files in.
 // Create a function to find the filename for a savegame slot.  Store

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/chocolate-doom.git



More information about the Pkg-games-commits mailing list