+ ptr = ptr->next;
+ }
+}
+
+
+
+extern void init_map_object_defs(char * filename)
+{
+ char * f_name = "init_map_object_defs()";
+ FILE * file = try_fopen(filename, "r", f_name);
+ uint16_t linemax = textfile_sizes(file, NULL);
+ struct MapObjDef ** last_mod_ptr_ptr = &world.map_obj_defs;
+ char * delim = " ";
+ char line[linemax + 1];
+ while (try_fgets(line, linemax + 1, file, f_name))
+ {
+ struct MapObjDef * mod = try_malloc(sizeof(struct MapObjDef), f_name);
+ mod->next = NULL;
+ mod->id = atoi(strtok(line, delim));
+ mod->corpse_id = atoi(strtok(NULL, delim));
+ mod->char_on_map = * strtok(NULL, delim);
+ mod->lifepoints = atoi(strtok(NULL, delim));
+ char * name = strtok(NULL, "\n");
+ mod->name = try_malloc(strlen(name) + 1, f_name);
+ memcpy(mod->name, name, strlen(name) + 1);
+ * last_mod_ptr_ptr = mod;
+ last_mod_ptr_ptr = &mod->next;
+ }
+ try_fclose(file, f_name);
+}
+
+
+
+extern void free_map_object_defs(struct MapObjDef * mod_start)
+{
+ if (NULL == mod_start)
+ {
+ return;
+ }
+ free_map_object_defs(mod_start->next);
+ free(mod_start->name);
+ free(mod_start);
+}
+
+
+
+extern void write_map_objects(FILE * file)
+{
+ struct MapObj * mo = world.map_objs;
+ while (NULL != mo)
+ {
+ write_map_object(file, mo);
+ mo = mo->next;