changed internal version number format
authorHolger Schemel <holger.schemel@virtion.de>
Sun, 24 Nov 2024 11:39:24 +0000 (12:39 +0100)
committerHolger Schemel <holger.schemel@virtion.de>
Sun, 24 Nov 2024 13:35:30 +0000 (14:35 +0100)
17 files changed:
src/events.c
src/files.c
src/game.c
src/game.h
src/game_mm/export_mm.h
src/game_mm/mm_files.c
src/init.c
src/init.h
src/libgame/misc.c
src/libgame/misc.h
src/libgame/setup.c
src/libgame/setup.h
src/libgame/system.c
src/libgame/system.h
src/main.h
src/tape.c
src/tape.h

index b25bce3e87bc34884728c64ec0bac1bf55944af0..b6e4bc94c75653450e9a1f2607d66c495f6e0daa 100644 (file)
@@ -2077,8 +2077,8 @@ boolean HandleKeysDebug(Key key, int key_status)
     }
     else if (key == KSYM_v)
     {
-      Debug("event:key:debug", "currently using game engine version %d",
-           game.engine_version);
+      Debug("event:key:debug", "currently using game engine version %s",
+           getVersionString(game.engine_version));
 
       return TRUE;
     }
index 6ec7f0b88b80e071de3035e969fa31d50301efa4..c42b676d988049b38fb28ba716ba65b311b450cc 100644 (file)
@@ -3140,7 +3140,7 @@ int getMappedElement(int element)
   return element;
 }
 
-static int getMappedElementByVersion(int element, int game_version)
+static int getMappedElementByVersion(int element, VersionType game_version)
 {
   // remap some elements due to certain game version
 
@@ -9091,8 +9091,9 @@ void DumpLevel(struct LevelInfo *level)
   }
 
   PrintLine("-", 79);
-  Print("Level xxx (file version %08d, game version %08d)\n",
-       level->file_version, level->game_version);
+  Print("Level xxx (file version %s, game version %s)\n",
+       getVersionString(level->file_version),
+       getVersionString(level->game_version));
   PrintLine("-", 79);
 
   Print("Level author: '%s'\n", level->author);
@@ -9299,7 +9300,7 @@ static int LoadTape_HEAD(File *file, int chunk_size, struct TapeInfo *tape)
   if (tape->file_version >= FILE_VERSION_1_2)
   {
     byte store_participating_players = getFile8Bit(file);
-    int engine_version;
+    VersionType engine_version;
 
     // since version 1.2, tapes store which players participate in the tape
     tape->num_participating_players = 0;
@@ -9689,12 +9690,12 @@ void LoadTapeFromFilename(char *filename)
   tape.length_seconds = GetTapeLengthSeconds();
 
 #if 0
-  Debug("files:LoadTapeFromFilename", "tape file version: %d",
-       tape.file_version);
-  Debug("files:LoadTapeFromFilename", "tape game version: %d",
-       tape.game_version);
-  Debug("files:LoadTapeFromFilename", "tape engine version: %d",
-       tape.engine_version);
+  Debug("files:LoadTapeFromFilename", "tape file version:   %s",
+        getVersionString(tape.file_version));
+  Debug("files:LoadTapeFromFilename", "tape game version:   %s",
+       getVersionString(tape.game_version));
+  Debug("files:LoadTapeFromFilename", "tape engine version: %s",
+       getVersionString(tape.engine_version));
 #endif
 }
 
@@ -9948,10 +9949,12 @@ void DumpTape(struct TapeInfo *tape)
 
   PrintLine("-", 79);
 
-  Print("Tape of Level %03d (file version %08d, game version %08d)\n",
-       tape->level_nr, tape->file_version, tape->game_version);
-  Print("                  (effective engine version %08d)\n",
-       tape->engine_version);
+  Print("Tape of Level %03d (file version %s, game version %s)\n",
+       tape->level_nr,
+       getVersionString(tape->file_version),
+       getVersionString(tape->game_version));
+  Print("                  (effective engine version %s)\n",
+       getVersionString(tape->engine_version));
   Print("Level series identifier: '%s'\n", tape->level_identifier);
 
   Print("Solution tape: %s\n",
index 0842b9d343261fa126bbaac9a8b948df3184d55f..00a1012badd61061b7fe39555efb19a1ff4241b2 100644 (file)
@@ -3032,16 +3032,16 @@ static void InitGameEngine(void)
   }
 
 #if 0
-  Debug("game:init:level", "level %d: level.game_version  == %06d", level_nr,
-       level.game_version);
-  Debug("game:init:level", "          tape.file_version   == %06d",
-       tape.file_version);
-  Debug("game:init:level", "          tape.game_version   == %06d",
-       tape.game_version);
-  Debug("game:init:level", "          tape.engine_version == %06d",
-       tape.engine_version);
-  Debug("game:init:level", "       => game.engine_version == %06d [tape mode: %s]",
-       game.engine_version, (tape.playing ? "PLAYING" : "RECORDING"));
+  Debug("game:init:level", "level %d: level.game_version  == %s", level_nr,
+       getVersionString(level.game_version));
+  Debug("game:init:level", "          tape.file_version   == %s",
+       getVersionString(tape.file_version));
+  Debug("game:init:level", "          tape.game_version   == %s",
+       getVersionString(tape.game_version));
+  Debug("game:init:level", "          tape.engine_version == %s",
+       getVersionString(tape.engine_version));
+  Debug("game:init:level", "       => game.engine_version == %s [tape mode: %s]",
+       getVersionString(game.engine_version), (tape.playing ? "PLAYING" : "RECORDING"));
 #endif
 
   // --------------------------------------------------------------------------
index 0a5b7c2694305507b05932d99d4bb310fa28debd..0553d8da8208ae7f839bc2a8338c2e22819dfbe3 100644 (file)
@@ -182,7 +182,7 @@ struct GameInfo
   boolean use_native_bd_sound_engine;
 
   // constant within running game
-  int engine_version;
+  VersionType engine_version;
   int emulation;
   int initial_move_delay[MAX_PLAYERS];
   int initial_move_delay_value[MAX_PLAYERS];
index 47ced95c2e0eae4e525b4cbf0df3f187ec2918bf..51b5ccecfef79bdf716b2534a27225a749eb8397 100644 (file)
@@ -172,8 +172,8 @@ struct GameInfo_MM
 
 struct LevelInfo_MM
 {
-  int file_version;            // version of file the level was stored with
-  int game_version;            // version of game engine to play this level
+  VersionType file_version;            // version of file the level was stored with
+  VersionType game_version;            // version of game engine to play this level
   boolean encoding_16bit_field;                // level contains 16-bit elements
 
   int fieldx;
index 4a85360925f4b409d969d114a3fca4718a6195ce..d56b01c04e90241456b7735bc5c44d3468a50fcf 100644 (file)
@@ -44,10 +44,10 @@ int default_score[LEVEL_SCORE_ELEMENTS] =
 // level file functions
 // ============================================================================
 
-static void ReadChunk_MM_VERS(File *file, int *file_version, int *game_version)
+static void ReadChunk_MM_VERS(File *file, VersionType *file_version, VersionType *game_version)
 {
-  int file_version_major, file_version_minor, file_version_patch;
-  int game_version_major, game_version_minor, game_version_patch;
+  VersionSubType file_version_major, file_version_minor, file_version_patch;
+  VersionSubType game_version_major, game_version_minor, game_version_patch;
 
   file_version_major = getFile8Bit(file);
   file_version_minor = getFile8Bit(file);
@@ -68,14 +68,14 @@ static void ReadChunk_MM_VERS(File *file, int *file_version, int *game_version)
                                   game_version_patch);
 }
 
-static void WriteChunk_MM_VERS(FILE *file, int file_version, int game_version)
+static void WriteChunk_MM_VERS(FILE *file, VersionType file_version, VersionType game_version)
 {
-  int file_version_major = MM_VERSION_MAJOR(file_version);
-  int file_version_minor = MM_VERSION_MINOR(file_version);
-  int file_version_patch = MM_VERSION_PATCH(file_version);
-  int game_version_major = MM_VERSION_MAJOR(game_version);
-  int game_version_minor = MM_VERSION_MINOR(game_version);
-  int game_version_patch = MM_VERSION_PATCH(game_version);
+  VersionSubType file_version_major = MM_VERSION_MAJOR(file_version);
+  VersionSubType file_version_minor = MM_VERSION_MINOR(file_version);
+  VersionSubType file_version_patch = MM_VERSION_PATCH(file_version);
+  VersionSubType game_version_major = MM_VERSION_MAJOR(game_version);
+  VersionSubType game_version_minor = MM_VERSION_MINOR(game_version);
+  VersionSubType game_version_patch = MM_VERSION_PATCH(game_version);
 
   fputc(file_version_major, file);
   fputc(file_version_minor, file);
index a5cce8a4dbf5baba9362efe7736cbfb548ed35c2..acb258747e24370c58d5fdc2c194497eb479a271 100644 (file)
@@ -4836,7 +4836,7 @@ void InitElementPropertiesStatic(void)
   clipboard_elements_initialized = TRUE;
 }
 
-void InitElementPropertiesEngine(int engine_version)
+void InitElementPropertiesEngine(VersionType engine_version)
 {
   static int no_wall_properties[] =
   {
index 7fcbfcd6795d842612617b2c2b2456001105f617..9479f0f842c1128d9748ced07e8a0df5d6bd5b91 100644 (file)
@@ -28,7 +28,7 @@ boolean getBitfieldProperty(int *, int, int);
 
 void ResolveGroupElement(int);
 void InitElementPropertiesStatic(void);
-void InitElementPropertiesEngine(int);
+void InitElementPropertiesEngine(VersionType);
 void InitElementPropertiesGfxElement(void);
 
 void ReloadCustomArtwork(int);
index 5cc80f793b6c4333e441fed7a00dccba21dc47c2..9bc779e17a1cddabbcd6b11f92ffffdb11e97857 100644 (file)
@@ -2227,25 +2227,24 @@ int putFileChunk(FILE *file, char *chunk_name, int chunk_size,
   return num_bytes;
 }
 
-int getFileVersion(File *file)
+VersionType getFileVersion(File *file)
 {
-  int version_super = getByteFromFile(file);
-  int version_major = getByteFromFile(file);
-  int version_minor = getByteFromFile(file);
-  int version_patch = getByteFromFile(file);
+  VersionSubType version_super = getByteFromFile(file);
+  VersionSubType version_major = getByteFromFile(file);
+  VersionSubType version_minor = getByteFromFile(file);
+  VersionSubType version_patch = getByteFromFile(file);
 
-  return VERSION_IDENT(version_super, version_major, version_minor,
-                      version_patch);
+  return VERSION_IDENT(version_super, version_major, version_minor, version_patch);
 }
 
-int putFileVersion(FILE *file, int version)
+int putFileVersion(FILE *file, VersionType version)
 {
   if (file != NULL)
   {
-    int version_super = VERSION_SUPER(version);
-    int version_major = VERSION_MAJOR(version);
-    int version_minor = VERSION_MINOR(version);
-    int version_patch = VERSION_PATCH(version);
+    VersionSubType version_super = VERSION_SUPER(version);
+    VersionSubType version_major = VERSION_MAJOR(version);
+    VersionSubType version_minor = VERSION_MINOR(version);
+    VersionSubType version_patch = VERSION_PATCH(version);
 
     fputc(version_super, file);
     fputc(version_major, file);
index 2b927e57423ed35ac57a8396c2154c854d6e4f91..640ef0921a4177a5e91f4d22acbb472f55086883 100644 (file)
@@ -229,8 +229,8 @@ int putFile32BitInteger(FILE *, int, int);
 
 boolean getFileChunk(File *, char *, int *, int);
 int putFileChunk(FILE *, char *, int, int);
-int getFileVersion(File *);
-int putFileVersion(FILE *, int);
+VersionType getFileVersion(File *);
+int putFileVersion(FILE *, VersionType);
 
 void ReadBytesFromFile(File *, byte *, unsigned int);
 void WriteBytesToFile(FILE *, byte *, unsigned int);
index f2680ef55204c1e2237cfc8eb797a635dd1bfcc1..aa0a44f54d19cb42a6024dfdc0290c7f5dad0f33 100644 (file)
@@ -2221,7 +2221,7 @@ void fprintFileHeader(FILE *file, char *basename)
   fprintf(file, "\n");
 }
 
-int getFileVersionFromCookieString(const char *cookie)
+VersionType getFileVersionFromCookieString(const char *cookie)
 {
   const char *ptr_cookie1, *ptr_cookie2;
   const char *pattern1 = "_FILE_VERSION_";
@@ -2230,7 +2230,7 @@ int getFileVersionFromCookieString(const char *cookie)
   const int len_pattern1 = strlen(pattern1);
   const int len_pattern2 = strlen(pattern2);
   const int len_pattern = len_pattern1 + len_pattern2;
-  int version_super, version_major;
+  VersionSubType version_super, version_major;
 
   if (len_cookie <= len_pattern)
     return -1;
index bb0dd84221bfe01c7979f719acb0a90a7b1bb447..028a11420b6cfd54986a153b38a875f14a8e407b 100644 (file)
@@ -354,7 +354,7 @@ void InitUserDataDirectory(void);
 void SetFilePermissions(char *, int);
 
 void fprintFileHeader(FILE *, char *);
-int getFileVersionFromCookieString(const char *);
+VersionType getFileVersionFromCookieString(const char *);
 boolean checkCookieString(const char *, const char *);
 
 char *getFormattedSetupEntry(char *, char *);
index 4ceca3c3d6983eaf0087904a20eab1d9dcd25dac..7a18fcf620b6f978c6f09b097dbe8aa87d221663 100644 (file)
@@ -73,7 +73,7 @@ void InitProgramInfo(char *command_filename,
                     char *config_filename, char *userdata_subdir,
                     char *program_basename, char *program_title,
                     char *icon_filename, char *cookie_prefix,
-                    char *program_version_string, int program_version)
+                    char *program_version_string, VersionType program_version)
 {
   program.command_basepath = getBasePath(command_filename);
   program.command_basename = getBaseName(command_filename);
@@ -1925,6 +1925,28 @@ void ClearJoystickState(void)
 }
 
 
+// ============================================================================
+// version functions
+// ============================================================================
+
+char *getVersionString(VersionType version)
+{
+  // this function can be called up to ten times before version string gets overwritten
+  static char version_string_array[10][32];
+  static int version_string_nr = 0;
+  char *version_string = version_string_array[version_string_nr];
+
+  version_string_nr = (version_string_nr + 1) % 10;
+
+  sprintf(version_string, "%d.%d.%d.%d",
+          VERSION_PART_1(version),
+          VERSION_PART_2(version),
+          VERSION_PART_3(version),
+          VERSION_PART_4(version));
+
+  return version_string;
+}
+
 // ============================================================================
 // Emscripten functions
 // ============================================================================
index 0f01fd9767f7bc68826e14cd40307f27f719090a..7b25e15ed1f2856af126557f2896f1bc560f067a 100644 (file)
 
 
 // macros for version handling
-#define VERSION_PART_1(x)              ((x) / 1000000)
-#define VERSION_PART_2(x)              (((x) % 1000000) / 10000)
-#define VERSION_PART_3(x)              (((x) % 10000) / 100)
-#define VERSION_PART_4(x)              ((x) % 100)
+#define VERSION_PART_1(x)              ((VersionSubType)(((x) >> 56) & 0xff))
+#define VERSION_PART_2(x)              ((VersionSubType)(((x) >> 48) & 0xff))
+#define VERSION_PART_3(x)              ((VersionSubType)(((x) >> 40) & 0xff))
+#define VERSION_PART_4(x)              ((VersionSubType)(((x) >> 32) & 0xff))
 
 #define VERSION_SUPER(x)               VERSION_PART_1(x)
 #define VERSION_MAJOR(x)               VERSION_PART_2(x)
 #define VERSION_MINOR(x)               VERSION_PART_3(x)
 #define VERSION_PATCH(x)               VERSION_PART_4(x)
-#define VERSION_IDENT(a,b,c,d)         ((a) * 1000000 + (b) * 10000 + (c) * 100 + (d))
+
+#define VERSION_IDENT(a,b,c,d)         (((VersionType)(a) << 56) |     \
+                                        ((VersionType)(b) << 48) |     \
+                                        ((VersionType)(c) << 40) |     \
+                                        ((VersionType)(d) << 32))
 
 
 // macros for parent/child process identification
 }
 
 
+// type definitions
+
+typedef unsigned long VersionType;
+typedef unsigned char VersionSubType;
+
+
 // structure definitions
 
+struct VersionInfo
+{
+  // this structure is currently only used to document the content bytes of "VersionType"
+
+  // standard version info
+  VersionSubType super;                // incremented for extraordinary changes (almost never)
+  VersionSubType major;                // incremented for major changes
+  VersionSubType minor;                // incremented for minor changes
+  VersionSubType patch;                // incremented for bug fixes only
+
+  // extended version info
+  VersionSubType stable;       // set to "1" for stable versions, "0" for test versions
+  VersionSubType extra;                // set to extra (test or pre-release) version number
+  unsigned short build;                // set to build number
+};
+
 struct ProgramInfo
 {
   char *command_basepath;      // path to the program binary
@@ -1005,11 +1031,11 @@ struct ProgramInfo
   FILE *log_file;              // file handle for log files
   FILE *log_file_default;      // default log file handle
 
-  int version_super;
-  int version_major;
-  int version_minor;
-  int version_patch;
-  int version_ident;
+  VersionSubType version_super;
+  VersionSubType version_major;
+  VersionSubType version_minor;
+  VersionSubType version_patch;
+  VersionType version_ident;
 
   char *version_string;
 
@@ -1953,7 +1979,7 @@ extern int                        FrameCounter;
 // function definitions
 
 void InitProgramInfo(char *, char *, char *, char *, char *, char *, char *,
-                    char *, int);
+                    char *, VersionType);
 void InitNetworkInfo(boolean, boolean, boolean, char *, int);
 void InitRuntimeInfo(void);
 
@@ -2081,6 +2107,8 @@ boolean ReadJoystick(int, int *, int *, boolean *, boolean *);
 boolean CheckJoystickOpened(int);
 void ClearJoystickState(void);
 
+char *getVersionString(VersionType);
+
 void InitEmscriptenFilesystem(void);
 void SyncEmscriptenFilesystem(void);
 
index befd24d54fb1563aa796f1e3f6e4a3fb5d006107..0819dd51743707ed98123412a9336658c7b8fd4c 100644 (file)
@@ -3660,8 +3660,8 @@ struct ScoreEntry
 
 struct ScoreInfo
 {
-  int file_version;    // file format version the score is stored with
-  int game_version;    // game release version the score was created with
+  VersionType file_version;            // file format version the score is stored with
+  VersionType game_version;            // game release version the score was created with
 
   char level_identifier[MAX_FILENAME_LEN + 1];
   int level_nr;
@@ -3733,8 +3733,8 @@ struct LevelInfo
   struct LevelInfo_SP *native_sp_level;
   struct LevelInfo_MM *native_mm_level;
 
-  int file_version;                    // file format version the level is stored with
-  int game_version;                    // game release version the level was created with
+  VersionType file_version;            // file format version the level is stored with
+  VersionType game_version;            // game release version the level was created with
 
   struct DateInfo creation_date;
 
index 10e495fe53597be010a8c978d9b7ef722c76fc58..c6eeee4e0df613910b0c2f65f81d497decbe884b 100644 (file)
@@ -1739,7 +1739,7 @@ static int AutoPlayTapesExt(boolean initialize)
 
     NULL
   };
-  static int patch_version_first[] =
+  static VersionType patch_version_first[] =
   {
     VERSION_IDENT(0,0,0,0),
     VERSION_IDENT(3,3,1,0),
@@ -1748,7 +1748,7 @@ static int AutoPlayTapesExt(boolean initialize)
 
     -1
   };
-  static int patch_version_last[] =
+  static VersionType patch_version_last[] =
   {
     VERSION_IDENT(9,9,9,9),
     VERSION_IDENT(4,0,1,1),
index dc10d986117104e0e88c7b8d2b90063e24176f0a..1c909cd5b7666218e283789314f3d526c5fb1ed8 100644 (file)
@@ -192,9 +192,9 @@ struct TapeTextInfo
 
 struct TapeInfo
 {
-  int file_version;            // file format version the tape is stored with
-  int game_version;            // game release version the tape was created with
-  int engine_version;          // game engine version the tape was recorded with
+  VersionType file_version;            // file format version the tape is stored with
+  VersionType game_version;            // game release version the tape was created with
+  VersionType engine_version;          // game engine version the tape was recorded with
 
   char score_tape_basename[MAX_FILENAME_LEN + 1];
   char level_identifier[MAX_FILENAME_LEN + 1];