rnd-19991005-1-src
[rocksndiamonds.git] / src / main.h
index 27acc1e1591a774482368562027d7a292482676d..9a58655c938dcde2be92647ef6ca913e5c1c7244 100644 (file)
@@ -217,7 +217,6 @@ typedef unsigned char byte;
 #define MAX_LEVEL_NAME_LEN     32
 #define MAX_LEVEL_AUTHOR_LEN   32
 #define MAX_TAPELEN            (1000 * 50)     /* max. time * framerate */
-#define MAX_LEVDIR_ENTRIES     250             /* max. level directories */
 #define MAX_SCORE_ENTRIES      100
 #define MAX_ELEMENTS           700             /* 500 static + 200 runtime */
 #define MAX_NUM_AMOEBA         100
@@ -385,7 +384,9 @@ struct LevelInfo
 
 struct LevelDirInfo
 {
-  char *filename;      /* level series sub-directory inside level directory */
+  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 */
@@ -395,11 +396,19 @@ struct LevelDirInfo
   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
@@ -495,7 +504,7 @@ extern short                AmoebaCnt[MAX_NUM_AMOEBA], AmoebaCnt2[MAX_NUM_AMOEBA];
 extern unsigned long   Elementeigenschaften1[MAX_ELEMENTS];
 extern unsigned long   Elementeigenschaften2[MAX_ELEMENTS];
 
-extern int             level_nr, leveldir_nr, num_leveldirs;
+extern int             level_nr;
 extern int             lev_fieldx,lev_fieldy, scroll_x,scroll_y;
 
 extern int             FX,FY, ScrollStepSize;
@@ -514,7 +523,7 @@ extern int          SiebCount;
 
 extern boolean         network_player_action_received;
 
-extern struct LevelDirInfo     leveldir[];
+extern struct LevelDirInfo     *leveldir_first, *leveldir_current;
 extern struct LevelInfo                level;
 extern struct PlayerInfo       stored_player[], *local_player;
 extern struct HiScore          highscore[];