1 /* 2000-08-10T16:43:50Z
19 #if defined(TARGET_X11)
21 struct cave_node *cave_list;
23 static void setLevelInfoToDefaults_EM(void)
36 /* attempt load a cave
38 * completely initializes the level structure, ready for a game
40 int OLD_cave_convert(char *filename)
46 unsigned char buffer[16384];
48 /* always start with reliable default values */
49 setLevelInfoToDefaults_EM();
51 file = fopen(filename, "rb");
54 fprintf(stderr, "%s: \"%s\": %s: %s\n", progname, filename, "open error",
60 actual = fread(buffer, 1, 16384, file);
63 fprintf(stderr, "%s: \"%s\": %s: %s\n", progname, filename, "read error",
73 if (!cleanup_em_level(buffer, &length))
75 fprintf(stderr, "%s: \"%s\": %s\n", progname, filename,
76 "unrecognized format");
81 convert_em_level(buffer);
94 #define MAX_EM_LEVEL_SIZE 16384
96 boolean LoadNativeLevel_EM(char *filename)
98 unsigned char raw_leveldata[MAX_EM_LEVEL_SIZE];
99 int raw_leveldata_length;
102 /* always start with reliable default values */
103 setLevelInfoToDefaults_EM();
105 if (!(file = fopen(filename, MODE_READ)))
107 Error(ERR_WARN, "cannot open level '%s' -- using empty level", filename);
112 raw_leveldata_length = fread(raw_leveldata, 1, MAX_EM_LEVEL_SIZE, file);
116 if (raw_leveldata_length <= 0)
118 Error(ERR_WARN, "cannot read level '%s' -- using empty level", filename);
123 if (!cleanup_em_level(raw_leveldata, &raw_leveldata_length))
125 Error(ERR_WARN, "unknown EM level '%s' -- using empty level", filename);
130 convert_em_level(raw_leveldata);
136 void read_cave_list(void)
138 char name[MAXNAME+2];
139 struct cave_node *node, **prev;
141 struct dirent *entry;
145 free_cave_list(); /* delete old list if i forgot to before */
150 snprintf(name, MAXNAME+2, "%s/%s", arg_basedir, EM_LVL_DIR);
154 snprintf(name, MAXNAME+2, "%s", EM_LVL_DIR);
158 snprintf_overflow("read cave/ directory");
164 while ((entry = readdir(dir)))
166 if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
169 node = malloc(sizeof(*node)); if (node == 0) break;
170 *prev = node; prev = &node->next;
172 node->path[MAXNAME] = 0;
173 snprintf(node->path, MAXNAME+2, "%s/%s", name, entry->d_name);
174 if (node->path[MAXNAME])
175 snprintf_overflow("read cave/ directory");
177 cut = strrchr(node->path, '/'); cut = cut ? cut + 1 : node->path;
181 strncpy(node->name, cut, 32);
185 snprintf(node->name, 32, "%.8s..%s", cut, cut + len - 16);
194 fprintf(stderr, "%s: \"%s\": %s: %s\n", progname, name,
195 "failed to open directory", strerror(errno));
199 void free_cave_list(void)
201 struct cave_node *node, *next;
203 for (node = cave_list; node; node = next)