+ thing = thing->next;
+ }
+}
+
+
+
+static void record_msg(char * msg)
+{
+ char * f_name = "record_msg()";
+ uint16_t size = strlen(s[PATH_RECORD]) + strlen(s[PATH_SUFFIX_TMP]) + 1;
+ char * path_tmp = try_malloc(size, f_name);
+ int test = sprintf(path_tmp, "%s%s", s[PATH_RECORD], s[PATH_SUFFIX_TMP]);
+ exit_trouble(test < 0, f_name, "sprintf()");
+ FILE * file_tmp = try_fopen(path_tmp, "w", f_name);
+ if (!access(s[PATH_RECORD], F_OK))
+ {
+ FILE * file_read = try_fopen(s[PATH_RECORD], "r", f_name);
+ uint32_t linemax = textfile_width(file_read);
+ char * line = try_malloc(linemax + 1, f_name);
+ while (try_fgets(line, linemax + 1, file_read, f_name))
+ {
+ try_fwrite(line, strlen(line), 1, file_tmp, f_name);
+ }
+ free(line);
+ try_fclose(file_read, f_name);
+ }
+ try_fwrite(msg, strlen(msg), 1, file_tmp, f_name);
+ try_fputc('\n', file_tmp, f_name);
+ try_fclose_unlink_rename(file_tmp, path_tmp, s[PATH_RECORD], f_name);
+ free(path_tmp);
+}
+
+
+
+extern void obey_msg(char * msg, uint8_t do_record)
+{
+ set_err_line_options("Trouble with message: ", msg, 0, 0);
+ char * msg_copy = strdup(msg);
+ char * tok0 = token_from_line(msg_copy);
+ char * tok1 = token_from_line(NULL);
+ char * tok2 = token_from_line(NULL);
+ if (err_line(!(tok0 && tok1) || tok2, "Bad number of tokens."))
+ {
+ return;
+ }
+ if ( parse_thing_manipulation(tok0, tok1)
+ || parse_player_command(tok0, tok1)
+ || parse_val(tok0, tok1, s[CMD_SEED_RAND], 'U', (char *) &world.seed)
+ || parse_val(tok0, tok1, s[CMD_TURN], 'u', (char *) &world.turn)
+ || parse_do_fov(tok0, tok1));
+ else if (parse_val(tok0, tok1, s[CMD_SEED_MAP],'U',(char *)&world.seed_map))
+
+ {
+ remake_map();
+ }
+ else if (parse_val(tok0, tok1, s[CMD_MAKE_WORLD],'U', (char *) &world.seed))
+ {
+ remake_world();
+ }
+ else
+ {
+ err_line(1, "Unknown command.");
+ free(msg_copy);
+ return;
+ }
+ world.last_update_turn = 0;
+ free(msg_copy);
+ if (do_record)
+ {
+ save_world();
+ record_msg(msg);