1 /* 2000-08-10T16:43:50Z
19 #if defined(TARGET_X11)
21 struct cave_node *cave_list;
23 static void setLevelInfoToDefaults_EM(void)
25 native_em_level.lev = &lev;
26 native_em_level.ply1 = &ply1;
27 native_em_level.ply2 = &ply2;
40 /* attempt load a cave
42 * completely initializes the level structure, ready for a game
44 int OLD_cave_convert(char *filename)
50 unsigned char buffer[16384];
52 /* always start with reliable default values */
53 setLevelInfoToDefaults_EM();
55 file = fopen(filename, "rb");
58 fprintf(stderr, "%s: \"%s\": %s: %s\n", progname, filename, "open error",
64 actual = fread(buffer, 1, 16384, file);
67 fprintf(stderr, "%s: \"%s\": %s: %s\n", progname, filename, "read error",
77 if (!cleanup_em_level(buffer, &length))
79 fprintf(stderr, "%s: \"%s\": %s\n", progname, filename,
80 "unrecognized format");
85 convert_em_level(buffer);
98 #define MAX_EM_LEVEL_SIZE 16384
100 boolean LoadNativeLevel_EM(char *filename)
102 unsigned char raw_leveldata[MAX_EM_LEVEL_SIZE];
103 int raw_leveldata_length;
106 /* always start with reliable default values */
107 setLevelInfoToDefaults_EM();
109 if (!(file = fopen(filename, MODE_READ)))
111 Error(ERR_WARN, "cannot open level '%s' -- using empty level", filename);
116 raw_leveldata_length = fread(raw_leveldata, 1, MAX_EM_LEVEL_SIZE, file);
120 if (raw_leveldata_length <= 0)
122 Error(ERR_WARN, "cannot read level '%s' -- using empty level", filename);
127 if (!cleanup_em_level(raw_leveldata, &raw_leveldata_length))
129 Error(ERR_WARN, "unknown EM level '%s' -- using empty level", filename);
134 convert_em_level(raw_leveldata);
140 void read_cave_list(void)
142 char name[MAXNAME+2];
143 struct cave_node *node, **prev;
145 struct dirent *entry;
149 free_cave_list(); /* delete old list if i forgot to before */
154 snprintf(name, MAXNAME+2, "%s/%s", arg_basedir, EM_LVL_DIR);
158 snprintf(name, MAXNAME+2, "%s", EM_LVL_DIR);
162 snprintf_overflow("read cave/ directory");
168 while ((entry = readdir(dir)))
170 if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
173 node = malloc(sizeof(*node)); if (node == 0) break;
174 *prev = node; prev = &node->next;
176 node->path[MAXNAME] = 0;
177 snprintf(node->path, MAXNAME+2, "%s/%s", name, entry->d_name);
178 if (node->path[MAXNAME])
179 snprintf_overflow("read cave/ directory");
181 cut = strrchr(node->path, '/'); cut = cut ? cut + 1 : node->path;
185 strncpy(node->name, cut, 32);
189 snprintf(node->name, 32, "%.8s..%s", cut, cut + len - 16);
198 fprintf(stderr, "%s: \"%s\": %s: %s\n", progname, name,
199 "failed to open directory", strerror(errno));
203 void free_cave_list(void)
205 struct cave_node *node, *next;
207 for (node = cave_list; node; node = next)