rnd-20001203-4-src
authorHolger Schemel <info@artsoft.org>
Sun, 3 Dec 2000 21:06:26 +0000 (22:06 +0100)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:35:23 +0000 (10:35 +0200)
17 files changed:
src/files.c
src/files.h
src/init.c
src/init.h
src/libgame/gadgets.c
src/libgame/libgame.c
src/libgame/libgame.h
src/libgame/misc.c
src/libgame/misc.h
src/libgame/msdos.h
src/libgame/system.c
src/libgame/system.h
src/libgame/x11.c
src/main.c
src/main.h
src/tools.c
src/tools.h

index f8bbea80a85ffde79aaacdc092af0171e55117f8..2c0117ddb77d3a9792fe362c25ba8d62b58a102d 100644 (file)
@@ -47,7 +47,6 @@
 
 /* file names and filename extensions */
 #if !defined(PLATFORM_MSDOS)
-#define USERDATA_DIRECTORY     ".rocksndiamonds"
 #define LEVELSETUP_DIRECTORY   "levelsetup"
 #define SETUP_FILENAME         "setup.conf"
 #define LEVELSETUP_FILENAME    "levelsetup.conf"
@@ -56,7 +55,6 @@
 #define TAPEFILE_EXTENSION     "tape"
 #define SCOREFILE_EXTENSION    "score"
 #else
-#define USERDATA_DIRECTORY     "userdata"
 #define LEVELSETUP_DIRECTORY   "lvlsetup"
 #define SETUP_FILENAME         "setup.cnf"
 #define LEVELSETUP_FILENAME    "lvlsetup.cnf"
 #define SCOREFILE_EXTENSION    "sco"
 #endif
 
-#if !defined(PLATFORM_UNIX)
-#define ERROR_FILENAME         "error.out"
-#endif
-
 #if defined(PLATFORM_WIN32)
 #ifndef S_IRGRP
 #define S_IRGRP S_IRUSR
@@ -95,7 +89,6 @@
 #define MODE_R_ALL             (S_IRUSR | S_IRGRP | S_IROTH)
 #define MODE_W_ALL             (S_IWUSR | S_IWGRP | S_IWOTH)
 #define MODE_X_ALL             (S_IXUSR | S_IXGRP | S_IXOTH)
-#define USERDATA_DIR_MODE      (MODE_R_ALL | MODE_X_ALL | S_IWUSR)
 #define LEVEL_PERMS            (MODE_R_ALL | MODE_W_ALL)
 #define SCORE_PERMS            LEVEL_PERMS
 #define TAPE_PERMS             LEVEL_PERMS
@@ -211,21 +204,6 @@ char *getLevelClassDescription(struct LevelDirInfo *ldi)
 static void SaveUserLevelInfo();               /* for 'InitUserLevelDir()' */
 static char *getSetupLine(char *, int);                /* for 'SaveUserLevelInfo()' */
 
-char *getUserDataDir()
-{
-  static char *userdata_dir = NULL;
-
-  if (!userdata_dir)
-  {
-    char *home_dir = getHomeDir();
-    char *data_dir = USERDATA_DIRECTORY;
-
-    userdata_dir = getPath2(home_dir, data_dir);
-  }
-
-  return userdata_dir;
-}
-
 static char *getSetupDir()
 {
   return getUserDataDir();
@@ -345,22 +323,6 @@ static char *getScoreFilename(int nr)
   return filename;
 }
 
-static void createDirectory(char *dir, char *text)
-{
-  if (access(dir, F_OK) != 0)
-#if defined(PLATFORM_WIN32)
-    if (mkdir(dir) != 0)
-#else
-    if (mkdir(dir, USERDATA_DIR_MODE) != 0)
-#endif
-      Error(ERR_WARN, "cannot create %s directory '%s'", text, dir);
-}
-
-static void InitUserDataDirectory()
-{
-  createDirectory(getUserDataDir(), "user data");
-}
-
 static void InitTapeDirectory(char *level_subdir)
 {
   createDirectory(getUserDataDir(), "user data");
@@ -2216,46 +2178,3 @@ void SaveLevelSetup_SeriesInfo()
 
   chmod(filename, SETUP_PERMS);
 }
-
-#if !defined(PLATFORM_UNIX)
-void initErrorFile()
-{
-  char *filename;
-
-  InitUserDataDirectory();
-
-  filename = getPath2(getUserDataDir(), ERROR_FILENAME);
-  unlink(filename);
-  free(filename);
-}
-
-FILE *openErrorFile()
-{
-  char *filename;
-  FILE *error_file;
-
-  filename = getPath2(getUserDataDir(), ERROR_FILENAME);
-  error_file = fopen(filename, "a");
-  free(filename);
-
-  return error_file;
-}
-
-void dumpErrorFile()
-{
-  char *filename;
-  FILE *error_file;
-
-  filename = getPath2(getUserDataDir(), ERROR_FILENAME);
-  error_file = fopen(filename, "r");
-  free(filename);
-
-  if (error_file != NULL)
-  {
-    while (!feof(error_file))
-      fputc(fgetc(error_file), stderr);
-
-    fclose(error_file);
-  }
-}
-#endif
index e920328e43b282a43360316c54669ec4ba5e6336..994a503e947bac57e586f8365214334eeb051942 100644 (file)
@@ -33,10 +33,4 @@ void SaveLevelSetup_LastSeries(void);
 void LoadLevelSetup_SeriesInfo(void);
 void SaveLevelSetup_SeriesInfo(void);
 
-#if !defined(PLATFORM_UNIX)
-void initErrorFile();
-FILE *openErrorFile();
-void dumpErrorFile();
-#endif
-
 #endif /* FILES_H */
index 241849cef7285e13a119562ecbef5195d5767b8b..8f30094d77fec06f1ff6edbfc9c09c265b02211f 100644 (file)
@@ -45,7 +45,7 @@ static void LoadGfx(int, struct PictureFileInfo *);
 static void InitGadgets(void);
 static void InitElementProperties(void);
 
-void OpenAll(int argc, char *argv[])
+void OpenAll(void)
 {
 #if !defined(PLATFORM_UNIX)
   initErrorFile();
@@ -63,6 +63,11 @@ void OpenAll(int argc, char *argv[])
     exit(0);
   }
 
+  InitProgramInfo(UNIX_USERDATA_DIRECTORY,
+                 PROGRAM_TITLE_STRING, WINDOW_TITLE_STRING,
+                 ICON_TITLE_STRING, X11_ICON_FILENAME, X11_ICONMASK_FILENAME,
+                 MSDOS_POINTER_FILENAME);
+
   InitPlayerInfo();
 
   InitCounter();
@@ -310,17 +315,6 @@ void InitJoysticks()
 
 void InitDisplay()
 {
-  char *gfx_dir = getPath2(options.ro_base_directory, GRAPHICS_DIRECTORY);
-  char *x11_icon_filename = getPath2(gfx_dir, X11_ICON_FILENAME);
-  char *x11_iconmask_filename = getPath2(gfx_dir, X11_ICONMASK_FILENAME);
-  char *msdos_pointer_filename = getPath2(gfx_dir, MSDOS_POINTER_FILENAME);
-
-  free(gfx_dir);
-
-  InitProgramInfo(program_name, PROGRAM_TITLE_STRING, WINDOW_TITLE_STRING,
-                 ICON_TITLE_STRING, x11_icon_filename, x11_iconmask_filename,
-                 msdos_pointer_filename);
-
   InitVideoDisplay();
   InitVideoBuffer(&backbuffer, &window, WIN_XSIZE, WIN_YSIZE, DEFAULT_DEPTH,
                  setup.fullscreen);
@@ -420,8 +414,12 @@ void InitGfx()
   };
 #endif
 
-  /* initialize screen properties */
+  /* initialize some global variables */
+  global.frames_per_second = 0;
+  global.fps_slowdown = FALSE;
+  global.fps_slowdown_factor = 1;
 
+  /* initialize screen properties */
   InitGfxFieldInfo(SX, SY, SXSIZE, SYSIZE,
                   REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE);
   InitGfxDoor1Info(DX, DY, DXSIZE, DYSIZE);
@@ -429,7 +427,6 @@ void InitGfx()
   InitGfxScrollbufferInfo(FXSIZE, FYSIZE);
 
   /* create additional image buffers for double-buffering */
-
   pix[PIX_DB_DOOR] = CreateBitmap(3 * DXSIZE, DYSIZE + VYSIZE, DEFAULT_DEPTH);
   pix[PIX_DB_FIELD] = CreateBitmap(FXSIZE, FYSIZE, DEFAULT_DEPTH);
 
index b8bc9b0b5c04c2f700c90932b651199919927934..714078361bade3108bf20941ea754f48e9f62986 100644 (file)
@@ -16,7 +16,7 @@
 
 #include "main.h"
 
-void OpenAll(int, char **);
+void OpenAll(void);
 void CloseAllAndExit(int);
 void InitJoysticks(void);
 
index aeb5ec9cbeee81e88136c84a43d63fa0c2d338ac..bace632babb8573e8fbf73fa306652f2033ce96f 100644 (file)
 ***********************************************************/
 
 #include <stdarg.h>
+#include <string.h>
 
 #include "libgame.h"
 
-#if 0
-#include "main_TMP.h"
-#endif
-
 #include "gadgets.h"
 
 
index 8c000c209f141379d94fdf59face602de6588b84..00d7c13e436da73b53c1379a335f5ba789a6222a 100644 (file)
 ***********************************************************/
 
 #include "libgame.h"
+
+
+/* ========================================================================= */
+/* exported variables                                                        */
+/* ========================================================================= */
+
+struct ProgramInfo     program;
+struct OptionInfo      options;
+struct VideoSystemInfo video;
+struct AudioSystemInfo audio;
+struct GfxInfo         gfx;
+
+struct LevelDirInfo    *leveldir_first = NULL;
+struct LevelDirInfo    *leveldir_current = NULL;
+
+Display        *display = NULL;
+Visual        *visual = NULL;
+int            screen = 0;
+Colormap       cmap = None;
+
+DrawWindow     window = NULL;
+DrawBuffer     backbuffer = NULL;
+DrawBuffer     drawto = NULL;
+
+int            button_status = MB_NOT_PRESSED;
+boolean                motion_status = FALSE;
+
+int            redraw_mask = REDRAW_NONE;
+int            redraw_tiles = 0;
+
+int            FrameCounter = 0;
index fd613b9ce9cd97339d5f81743b838d4dc571c92e..e8956034534b13b741986acc5b26263d128b8135 100644 (file)
 #include "misc.h"
 
 
+/* default name for empty highscore entry */
+#define EMPTY_PLAYER_NAME      "no name"
+
+/* default name for unknown player names */
+#define ANONYMOUS_NAME         "anonymous"
+
+/* default name for new levels */
+#define NAMELESS_LEVEL_NAME    "nameless level"
+
+/* definitions for game sub-directories */
+#ifndef RO_GAME_DIR
+#define RO_GAME_DIR            "."
+#endif
+
+#ifndef RW_GAME_DIR
+#define RW_GAME_DIR            "."
+#endif
+
+#define RO_BASE_PATH           RO_GAME_DIR
+#define RW_BASE_PATH           RW_GAME_DIR
+
+#define GRAPHICS_DIRECTORY     "graphics"
+#define SOUNDS_DIRECTORY       "sounds"
+#define LEVELS_DIRECTORY       "levels"
+#define TAPES_DIRECTORY                "tapes"
+#define SCORES_DIRECTORY       "scores"
+
 /* areas in bitmap PIX_DOOR */
 /* meaning in PIX_DB_DOOR: (3 PAGEs)
    PAGEX1: 1. buffer for DOOR_1
 #define DOOR_GFX_PAGEY1                (0)
 #define DOOR_GFX_PAGEY2                (gfx.dysize)
 
+struct LevelDirInfo
+{
+  char *filename;      /* level series single directory name */
+  char *fullpath;      /* complete path relative to level directory */
+  char *basepath;      /* absolute base path of level directory */
+  char *name;          /* level series name, as displayed on main screen */
+  char *name_short;    /* optional short name for level selection screen */
+  char *name_sorting;  /* optional sorting name for correct level sorting */
+  char *author;                /* level series author name levels without author */
+  char *imported_from; /* optional comment for imported level series */
+  int levels;          /* number of levels in level series */
+  int first_level;     /* first level number (to allow start with 0 or 1) */
+  int last_level;      /* last level number (automatically calculated) */
+  int sort_priority;   /* sort levels by 'sort_priority' and then by name */
+  boolean level_group; /* directory contains more level series directories */
+  boolean parent_link; /* entry links back to parent directory */
+  boolean user_defined;        /* user defined levels are stored in home directory */
+  boolean readonly;    /* readonly levels can not be changed with editor */
+  int color;           /* color to use on selection screen for this level */
+  char *class_desc;    /* description of level series class */
+  int handicap_level;  /* number of the lowest unsolved level */
+  int cl_first;                /* internal control field for "choose level" screen */
+  int cl_cursor;       /* internal control field for "choose level" screen */
+
+  struct LevelDirInfo *node_parent;    /* parent level directory info */
+  struct LevelDirInfo *node_group;     /* level group sub-directory info */
+  struct LevelDirInfo *next;           /* next level series structure node */
+};
+
+
+/* ========================================================================= */
+/* exported variables                                                        */
+/* ========================================================================= */
+
+extern struct ProgramInfo      program;
+extern struct OptionInfo       options;
+extern struct VideoSystemInfo  video;
+extern struct AudioSystemInfo  audio;
+extern struct GfxInfo          gfx;
+
+extern struct LevelDirInfo     *leveldir_first;
+extern struct LevelDirInfo     *leveldir_current;
+
+extern Display        *display;
+extern Visual         *visual;
+extern int             screen;
+extern Colormap                cmap;
+
+extern DrawWindow      window;
+extern DrawBuffer      backbuffer;
+extern DrawBuffer      drawto;
+
+extern int             button_status;
+extern boolean         motion_status;
+
+extern int             redraw_mask;
+extern int             redraw_tiles;
+
+extern int             FrameCounter;
+
 #endif /* LIBGAME_H */
index 771918ea96bf9d07c5aff8e501367f61fe9bec52..b2ee47177cb9131596f4558f04c17d946091151b 100644 (file)
 #include <time.h>
 #include <sys/time.h>
 #include <sys/types.h>
+#include <sys/stat.h>
 #include <stdarg.h>
 #include <ctype.h>
+#include <string.h>
+#include <unistd.h>
 
 #include "platform.h"
 
@@ -26,8 +29,6 @@
 
 #include "libgame.h"
 
-#include "main_TMP.h"
-
 #include "misc.h"
 
 #if 0
@@ -417,37 +418,6 @@ char *getStringToLower(char *s)
   return s_copy;
 }
 
-void MarkTileDirty(int x, int y)
-{
-  int xx = redraw_x1 + x;
-  int yy = redraw_y1 + y;
-
-  if (!redraw[xx][yy])
-    redraw_tiles++;
-
-  redraw[xx][yy] = TRUE;
-  redraw_mask |= REDRAW_TILES;
-}
-
-void SetBorderElement()
-{
-  int x, y;
-
-  BorderElement = EL_LEERRAUM;
-
-  for(y=0; y<lev_fieldy && BorderElement == EL_LEERRAUM; y++)
-  {
-    for(x=0; x<lev_fieldx; x++)
-    {
-      if (!IS_MASSIVE(Feld[x][y]))
-       BorderElement = EL_BETON;
-
-      if (y != 0 && y != lev_fieldy - 1 && x != lev_fieldx - 1)
-       x = lev_fieldx - 2;
-    }
-  }
-}
-
 void GetOptions(char *argv[])
 {
   char **options_left = &argv[1];
@@ -464,11 +434,6 @@ void GetOptions(char *argv[])
   options.verbose = FALSE;
   options.debug = FALSE;
 
-  /* initialize some more global variables */
-  global.frames_per_second = 0;
-  global.fps_slowdown = FALSE;
-  global.fps_slowdown_factor = 1;
-
   while (*options_left)
   {
     char option_str[MAX_OPTION_LEN];
@@ -513,7 +478,7 @@ void GetOptions(char *argv[])
             "  -s, --serveronly              only start network server\n"
             "  -n, --network                 network multiplayer game\n"
             "  -v, --verbose                 verbose mode\n",
-            program_name);
+            program.command_basename);
       exit(0);
     }
     else if (strncmp(option, "-display", option_len) == 0)
@@ -599,7 +564,7 @@ void Error(int mode, char *format, ...)
   if ((error = openErrorFile()) == NULL)
   {
     printf("Cannot write to error output file!\n");
-    CloseAllAndExit(1);
+    program.exit_function(1);
   }
 #endif
 
@@ -614,7 +579,7 @@ void Error(int mode, char *format, ...)
   {
     va_list ap;
 
-    fprintf(error, "%s%s: ", program_name, process_name);
+    fprintf(error, "%s%s: ", program.command_basename, process_name);
 
     if (mode & ERR_WARN)
       fprintf(error, "warning: ");
@@ -628,10 +593,10 @@ void Error(int mode, char *format, ...)
   
   if (mode & ERR_HELP)
     fprintf(error, "%s: Try option '--help' for more information.\n",
-           program_name);
+           program.command_basename);
 
   if (mode & ERR_EXIT)
-    fprintf(error, "%s%s: aborting\n", program_name, process_name);
+    fprintf(error, "%s%s: aborting\n", program.command_basename, process_name);
 
   if (error != stderr)
     fclose(error);
@@ -641,7 +606,7 @@ void Error(int mode, char *format, ...)
     if (mode & ERR_FROM_SERVER)
       exit(1);                         /* child process: normal exit */
     else
-      CloseAllAndExit(1);              /* main process: clean up stuff */
+      program.exit_function(1);                /* main process: clean up stuff */
   }
 }
 
@@ -1287,9 +1252,101 @@ inline void swap_number_pairs(int *x1, int *y1, int *x2, int *y2)
 }
 
 
-/* ------------------------------------------------------------------------- */
+/* ========================================================================= */
+/* some stuff from "files.c"                                                 */
+/* ========================================================================= */
+
+#define MODE_R_ALL             (S_IRUSR | S_IRGRP | S_IROTH)
+#define MODE_W_ALL             (S_IWUSR | S_IWGRP | S_IWOTH)
+#define MODE_X_ALL             (S_IXUSR | S_IXGRP | S_IXOTH)
+#define USERDATA_DIR_MODE      (MODE_R_ALL | MODE_X_ALL | S_IWUSR)
+
+char *getUserDataDir(void)
+{
+  static char *userdata_dir = NULL;
+
+  if (!userdata_dir)
+  {
+    char *home_dir = getHomeDir();
+    char *data_dir = program.userdata_directory;
+
+    userdata_dir = getPath2(home_dir, data_dir);
+  }
+
+  return userdata_dir;
+}
+
+void createDirectory(char *dir, char *text)
+{
+  if (access(dir, F_OK) != 0)
+#if defined(PLATFORM_WIN32)
+    if (mkdir(dir) != 0)
+#else
+    if (mkdir(dir, USERDATA_DIR_MODE) != 0)
+#endif
+      Error(ERR_WARN, "cannot create %s directory '%s'", text, dir);
+}
+
+void InitUserDataDirectory()
+{
+  createDirectory(getUserDataDir(), "user data");
+}
+
+
+/* ========================================================================= */
+/* functions only needed for non-Unix (non-command-line) systems */
+/* ========================================================================= */
+
+#if !defined(PLATFORM_UNIX)
+
+#define ERROR_FILENAME         "error.out"
+
+void initErrorFile()
+{
+  char *filename;
+
+  InitUserDataDirectory();
+
+  filename = getPath2(getUserDataDir(), ERROR_FILENAME);
+  unlink(filename);
+  free(filename);
+}
+
+FILE *openErrorFile()
+{
+  char *filename;
+  FILE *error_file;
+
+  filename = getPath2(getUserDataDir(), ERROR_FILENAME);
+  error_file = fopen(filename, "a");
+  free(filename);
+
+  return error_file;
+}
+
+void dumpErrorFile()
+{
+  char *filename;
+  FILE *error_file;
+
+  filename = getPath2(getUserDataDir(), ERROR_FILENAME);
+  error_file = fopen(filename, "r");
+  free(filename);
+
+  if (error_file != NULL)
+  {
+    while (!feof(error_file))
+      fputc(fgetc(error_file), stderr);
+
+    fclose(error_file);
+  }
+}
+#endif
+
+
+/* ========================================================================= */
 /* the following is only for debugging purpose and normally not used         */
-/* ------------------------------------------------------------------------- */
+/* ========================================================================= */
 
 #define DEBUG_NUM_TIMESTAMPS   3
 
index 3002844e00ff8dd397c948e8790b9009f5c870b9..28b073ff0b3e5a5ce7bfb818acbdfb85305618e5 100644 (file)
@@ -61,8 +61,6 @@ char *getPath2(char *, char *);
 char *getPath3(char *, char *, char*);
 char *getStringCopy(char *);
 char *getStringToLower(char *);
-void MarkTileDirty(int, int);
-void SetBorderElement();
 void GetOptions(char **);
 void Error(int, char *, ...);
 void *checked_malloc(unsigned long);
@@ -98,6 +96,16 @@ void sortLevelDirInfo(struct LevelDirInfo **,
 inline void swap_numbers(int *, int *);
 inline void swap_number_pairs(int *, int *, int *, int *);
 
+char *getUserDataDir(void);
+void createDirectory(char *, char *);
+void InitUserDataDirectory(void);
+
+#if !defined(PLATFORM_UNIX)
+void initErrorFile();
+FILE *openErrorFile();
+void dumpErrorFile();
+#endif
+
 void debug_print_timestamp(int, char *);
 
 #endif /* MISC_H */
index f2bfabef2bb0db198e703babbfd441fe811f6198..c265b0d7cebab54133634387633ad12df4146114 100644 (file)
@@ -15,8 +15,8 @@
 #ifndef MSDOS_H
 #define MSDOS_H
 
-#include <allegro.h>
 #include <time.h>
+#include "allegro.h"
 
 /* symbol 'window' is defined in DJGPP cross-compiler in libc.a(conio.o) */
 #define window window_djgpp
index 471c614f70af6c2783dad96b0a267d21b1c1cafd..0304be812529fa19b895a5eb9d59bbd11e3db7bb 100644 (file)
 *  system.c                                                *
 ***********************************************************/
 
-#include "libgame.h"
+#include <string.h>
+
+#include "platform.h"
 
+#if defined(PLATFORM_MSDOS)
+#include <fcntl.h>
+#endif
 
+#include "libgame.h"
+
+#if 0
 /* ========================================================================= */
 /* exported variables                                                        */
 /* ========================================================================= */
@@ -42,18 +50,48 @@ int         redraw_tiles = 0;
 
 int            FrameCounter = 0;
 
+#endif
 
 /* ========================================================================= */
-/* video functions                                                           */
+/* init functions                                                            */
 /* ========================================================================= */
 
-inline void InitProgramInfo(char *command_name, char *program_title,
-                           char *window_title, char *icon_title,
-                           char *x11_icon_filename,
-                           char *x11_iconmask_filename,
-                           char *msdos_pointer_filename)
+void InitCommandName(char *argv0)
+{
+  program.command_basename =
+    (strrchr(argv0, '/') ? strrchr(argv0, '/') + 1 : argv0);
+}
+
+void InitExitFunction(void (*exit_function)(int))
+{
+  program.exit_function = exit_function;
+}
+
+void InitPlatformDependantStuff(void)
 {
-  program.command_name = command_name;
+#if defined(PLATFORM_MSDOS)
+  _fmode = O_BINARY;
+#endif
+}
+
+void InitProgramInfo(char *unix_userdata_directory, char *program_title,
+                    char *window_title, char *icon_title,
+                    char *x11_icon_basename, char *x11_iconmask_basename,
+                    char *msdos_pointer_basename)
+{
+  char *gfx_dir = getPath2(options.ro_base_directory, GRAPHICS_DIRECTORY);
+  char *x11_icon_filename = getPath2(gfx_dir, x11_icon_basename);
+  char *x11_iconmask_filename = getPath2(gfx_dir, x11_iconmask_basename);
+  char *msdos_pointer_filename = getPath2(gfx_dir, msdos_pointer_basename);
+
+  free(gfx_dir);
+
+#if defined(PLATFORM_UNIX)
+  program.userdata_directory = unix_userdata_directory;
+#else
+  program.userdata_directory = "userdata";
+#endif
+
   program.program_title = program_title;
   program.window_title = window_title;
   program.icon_title = icon_title;
@@ -62,9 +100,9 @@ inline void InitProgramInfo(char *command_name, char *program_title,
   program.msdos_pointer_filename = msdos_pointer_filename;
 }
 
-inline void InitGfxFieldInfo(int sx, int sy, int sxsize, int sysize,
-                            int real_sx, int real_sy,
-                            int full_sxsize, int full_sysize)
+void InitGfxFieldInfo(int sx, int sy, int sxsize, int sysize,
+                     int real_sx, int real_sy,
+                     int full_sxsize, int full_sysize)
 {
   gfx.sx = sx;
   gfx.sy = sy;
@@ -76,7 +114,7 @@ inline void InitGfxFieldInfo(int sx, int sy, int sxsize, int sysize,
   gfx.full_sysize = full_sysize;
 }
 
-inline void InitGfxDoor1Info(int dx, int dy, int dxsize, int dysize)
+void InitGfxDoor1Info(int dx, int dy, int dxsize, int dysize)
 {
   gfx.dx = dx;
   gfx.dy = dy;
@@ -84,7 +122,7 @@ inline void InitGfxDoor1Info(int dx, int dy, int dxsize, int dysize)
   gfx.dysize = dysize;
 }
 
-inline void InitGfxDoor2Info(int vx, int vy, int vxsize, int vysize)
+void InitGfxDoor2Info(int vx, int vy, int vxsize, int vysize)
 {
   gfx.vx = vx;
   gfx.vy = vy;
@@ -92,14 +130,18 @@ inline void InitGfxDoor2Info(int vx, int vy, int vxsize, int vysize)
   gfx.vysize = vysize;
 }
 
-inline void InitGfxScrollbufferInfo(int scrollbuffer_width,
-                                   int scrollbuffer_height)
+void InitGfxScrollbufferInfo(int scrollbuffer_width, int scrollbuffer_height)
 {
   /* currently only used by MSDOS code to alloc VRAM buffer, if available */
   gfx.scrollbuffer_width = scrollbuffer_width;
   gfx.scrollbuffer_height = scrollbuffer_height;
 }
 
+
+/* ========================================================================= */
+/* video functions                                                           */
+/* ========================================================================= */
+
 inline static int GetRealDepth(int depth)
 {
   return (depth == DEFAULT_DEPTH ? video.default_depth : depth);
index a16fb4c5561e9e1974f09dd1cebc2bdb3d8b2474..9899f7280d5863d9b5b0f23c5701147c81b4a29b 100644 (file)
@@ -82,13 +82,17 @@ typedef int (*EventFilter)(const Event *);
 
 struct ProgramInfo
 {
-  char *command_name;
+  char *command_basename;
+  char *userdata_directory;
+
   char *program_title;
   char *window_title;
   char *icon_title;
   char *x11_icon_filename;
   char *x11_iconmask_filename;
   char *msdos_pointer_filename;
+
+  void (*exit_function)(int);
 };
 
 struct OptionInfo
@@ -139,6 +143,7 @@ struct GfxInfo
 };
 
 
+#if 0
 /* ========================================================================= */
 /* exported variables                                                        */
 /* ========================================================================= */
@@ -166,16 +171,20 @@ extern int                redraw_tiles;
 
 extern int             FrameCounter;
 
+#endif
 
 /* function definitions */
 
-inline void InitProgramInfo(char *, char *, char *, char *, char *, char *,
-                           char *);
+void InitCommandName(char *);
+void InitExitFunction(void (*exit_function)(int));
+void InitPlatformDependantStuff(void);
+
+void InitProgramInfo(char *, char *, char *, char *, char *, char *, char *);
 
-inline void InitGfxFieldInfo(int, int, int, int, int, int, int, int);
-inline void InitGfxDoor1Info(int, int, int, int);
-inline void InitGfxDoor2Info(int, int, int, int);
-inline void InitGfxScrollbufferInfo(int, int);
+void InitGfxFieldInfo(int, int, int, int, int, int, int, int);
+void InitGfxDoor1Info(int, int, int, int);
+void InitGfxDoor2Info(int, int, int, int);
+void InitGfxScrollbufferInfo(int, int);
 
 inline void InitVideoDisplay(void);
 inline void InitVideoBuffer(DrawBuffer *,DrawWindow *, int, int, int, boolean);
index 4ac4f4fd3b80bdf99662fa7f1a550ed85e6e0a5e..fef8bcf9ed2e74590ac69efa2bc97bde04f0fef8 100644 (file)
@@ -185,7 +185,7 @@ static DrawWindow X11InitWindow()
   wm_hints.icon_mask = iconmask_pixmap;
   wm_hints.flags = StateHint | IconPixmapHint | IconMaskHint | InputHint;
 
-  class_hints.res_name = program.command_name;
+  class_hints.res_name = program.command_basename;
   class_hints.res_class = program.program_title;
 
   XSetWMProperties(display, new_window->drawable, &windowName, &iconName, 
index c31ace49ffa462879952156ce24152e67917fbf4..40a19333c34cb2f928e5ca636a988e0cfeaa4473 100644 (file)
 #include "events.h"
 #include "joystick.h"
 
+#if 0
 #if defined(PLATFORM_MSDOS)
 #include <fcntl.h>
 #endif
+#endif
 
 #if 0
 DrawWindow     window = None;
@@ -65,7 +67,9 @@ char         *joystick_device_name[MAX_PLAYERS] =
   DEV_JOYSTICK_3
 };
 
+#if 0
 char          *program_name = NULL;
+#endif
 
 int            game_status = MAINMENU;
 boolean                level_editor_test_game = FALSE;
@@ -132,7 +136,9 @@ int         TimeFrames, TimePlayed, TimeLeft;
 
 boolean                network_player_action_received = FALSE;
 
+#if 0
 struct LevelDirInfo    *leveldir_first = NULL, *leveldir_current = NULL;
+#endif
 struct LevelInfo       level;
 struct PlayerInfo      stored_player[MAX_PLAYERS], *local_player = NULL;
 struct HiScore         highscore[MAX_SCORE_ENTRIES];
@@ -988,15 +994,23 @@ void TEST_SDL_JOYSTICK()
 
 int main(int argc, char *argv[])
 {
+#if 0
   program_name = (strrchr(argv[0],'/') ? strrchr(argv[0],'/') + 1 : argv[0]);
+#endif
+
+  InitCommandName(argv[0]);
+  InitExitFunction(CloseAllAndExit);
+  InitPlatformDependantStuff();
 
+#if 0
 #if defined(PLATFORM_MSDOS)
   _fmode = O_BINARY;
 #endif
+#endif
 
 #if 1
   GetOptions(argv);
-  OpenAll(argc,argv);
+  OpenAll();
 #endif
 
 #if 0
index fc70fcc94fb00eabb75b09ab17275d22f9270546..b41c3829ae6ff7b3cf92d78dcfff1ba2914d48cb 100644 (file)
@@ -368,35 +368,6 @@ struct LevelInfo
   boolean gravity;
 };
 
-struct LevelDirInfo
-{
-  char *filename;      /* level series single directory name */
-  char *fullpath;      /* complete path relative to level directory */
-  char *basepath;      /* absolute base path of level directory */
-  char *name;          /* level series name, as displayed on main screen */
-  char *name_short;    /* optional short name for level selection screen */
-  char *name_sorting;  /* optional sorting name for correct level sorting */
-  char *author;                /* level series author name levels without author */
-  char *imported_from; /* optional comment for imported level series */
-  int levels;          /* number of levels in level series */
-  int first_level;     /* first level number (to allow start with 0 or 1) */
-  int last_level;      /* last level number (automatically calculated) */
-  int sort_priority;   /* sort levels by 'sort_priority' and then by name */
-  boolean level_group; /* directory contains more level series directories */
-  boolean parent_link; /* entry links back to parent directory */
-  boolean user_defined;        /* user defined levels are stored in home directory */
-  boolean readonly;    /* readonly levels can not be changed with editor */
-  int color;           /* color to use on selection screen for this level */
-  char *class_desc;    /* description of level series class */
-  int handicap_level;  /* number of the lowest unsolved level */
-  int cl_first;                /* internal control field for "choose level" screen */
-  int cl_cursor;       /* internal control field for "choose level" screen */
-
-  struct LevelDirInfo *node_parent;    /* parent level directory info */
-  struct LevelDirInfo *node_group;     /* level group sub-directory info */
-  struct LevelDirInfo *next;           /* next level series structure node */
-};
-
 struct TapeInfo
 {
   int level_nr;
@@ -474,7 +445,9 @@ extern char        *sound_device_name;
 extern int             joystick_device;
 extern char           *joystick_device_name[];
 
+#if 0
 extern char           *program_name;
+#endif
 
 extern int             game_status;
 extern boolean         level_editor_test_game;
@@ -541,7 +514,9 @@ extern int          SiebCount;
 
 extern boolean         network_player_action_received;
 
+#if 0
 extern struct LevelDirInfo     *leveldir_first, *leveldir_current;
+#endif
 extern struct LevelInfo                level;
 extern struct PlayerInfo       stored_player[], *local_player;
 extern struct HiScore          highscore[];
@@ -1671,6 +1646,7 @@ extern int                num_element_info;
 #define SETUPINPUT             9
 #define CALIBRATION            10
 
+#if 0
 #ifndef RO_GAME_DIR
 #define RO_GAME_DIR            "."
 #endif
@@ -1687,6 +1663,7 @@ extern int                num_element_info;
 #define LEVELS_DIRECTORY       "levels"
 #define TAPES_DIRECTORY                "tapes"
 #define SCORES_DIRECTORY       "scores"
+#endif
 
 #define PROGRAM_VERSION_STRING "1.5.0"
 #define PROGRAM_TITLE_STRING   "Rocks'n'Diamonds"
@@ -1697,11 +1674,13 @@ extern int              num_element_info;
 #define WINDOW_TITLE_STRING    PROGRAM_TITLE_STRING " " PROGRAM_IDENT_STRING
 #define WINDOW_SUBTITLE_STRING PROGRAM_RIGHTS_STRING " " PROGRAM_AUTHOR_STRING
 #define ICON_TITLE_STRING      PROGRAM_TITLE_STRING
+#define UNIX_USERDATA_DIRECTORY        ".rocksndiamonds"
 
 #define X11_ICON_FILENAME      "rocks_icon.xbm"
 #define X11_ICONMASK_FILENAME  "rocks_iconmask.xbm"
 #define MSDOS_POINTER_FILENAME "mouse.pcx"
 
+#if 0
 /* default name for empty highscore entry */
 #define EMPTY_PLAYER_NAME      "no name"
 
@@ -1710,6 +1689,7 @@ extern int                num_element_info;
 
 /* default name for new levels */
 #define NAMELESS_LEVEL_NAME    "nameless level"
+#endif
 
 #if 0
 /* values for button_status */
index 521328f605ebde34d6f8730fc897602423cde02a..13512839ad64c9c39d409be12909e73923e635e8 100644 (file)
@@ -494,6 +494,37 @@ void DrawTextExt(DrawBuffer d, GC gc, int x, int y,
 #endif
 
 
+void MarkTileDirty(int x, int y)
+{
+  int xx = redraw_x1 + x;
+  int yy = redraw_y1 + y;
+
+  if (!redraw[xx][yy])
+    redraw_tiles++;
+
+  redraw[xx][yy] = TRUE;
+  redraw_mask |= REDRAW_TILES;
+}
+
+void SetBorderElement()
+{
+  int x, y;
+
+  BorderElement = EL_LEERRAUM;
+
+  for(y=0; y<lev_fieldy && BorderElement == EL_LEERRAUM; y++)
+  {
+    for(x=0; x<lev_fieldx; x++)
+    {
+      if (!IS_MASSIVE(Feld[x][y]))
+       BorderElement = EL_BETON;
+
+      if (y != 0 && y != lev_fieldy - 1 && x != lev_fieldx - 1)
+       x = lev_fieldx - 2;
+    }
+  }
+}
+
 void DrawAllPlayers()
 {
   int i;
index bbfa8b01bb12936237c2367c612d5a9203766e2f..277faf693e8d474cdd8c9f1563729963e182c492 100644 (file)
@@ -73,6 +73,9 @@ void DrawText(int, int, char *, int, int);
 void DrawTextExt(DrawBuffer, GC, int, int, char *, int, int);
 #endif
 
+void MarkTileDirty(int, int);
+void SetBorderElement();
+
 void DrawAllPlayers(void);
 void DrawPlayerField(int, int);
 void DrawPlayer(struct PlayerInfo *);