diff -ur dc400b26-src/init.txt dc400b26-src.new/init.txt --- dc400b26-src/init.txt 2003-03-20 06:13:46.000000000 +0000 +++ dc400b26-src.new/init.txt 2005-04-25 18:18:57.800954880 +0100 @@ -24,10 +24,15 @@ # name=kernel -# Directory for reading macro.txt and init.txt, and dumping characters. +# Directory for reading macro.txt and init.txt. # It should end with the path delimiter. # crawl_dir=/home/bwross/crawl/ +# Directory for dumping character files (morgue.txt) +# Setting this different from crawl_dir allows configuration +# to be in a separate directory. +# It should end with the path delimiter. +morgue_dir=/var/games/crawl/ # Here's a list of autopickup types: # diff -ur dc400b26-src/source/chardump.cc dc400b26-src.new/source/chardump.cc --- dc400b26-src/source/chardump.cc 2003-03-08 04:56:38.000000000 +0000 +++ dc400b26-src.new/source/chardump.cc 2005-04-25 18:22:49.875674160 +0100 @@ -847,7 +847,9 @@ char file_name[kPathLen] = "\0"; - if (SysEnv.crawl_dir) + if (SysEnv.morgue_dir) + strncpy(file_name, SysEnv.morgue_dir, kPathLen); + else if (SysEnv.crawl_dir) strncpy(file_name, SysEnv.crawl_dir, kPathLen); strncat(file_name, fname, kPathLen); diff -ur dc400b26-src/source/initfile.cc dc400b26-src.new/source/initfile.cc --- dc400b26-src/source/initfile.cc 2003-03-20 05:09:26.000000000 +0000 +++ dc400b26-src.new/source/initfile.cc 2005-04-25 18:16:34.133795608 +0100 @@ -473,6 +473,7 @@ // some fields want capitals... none care about external spaces trim_string( field ); if (key != "name" && key != "crawl_dir" + && key != "morgue_dir" && key != "race" && key != "class" && key != "ban_pickup" && key != "stop_travel" && key != "sound" && key != "drop_filter") @@ -737,6 +738,19 @@ SysEnv.crawl_dir[ kNameLen - 1 ] = '\0'; } } + else if (key == "morgue_dir") + { + // We shouldn't bother to allocate this a second time + // if the user puts two morgue_dir lines in the init file. + if (!SysEnv.morgue_dir) + SysEnv.morgue_dir = (char *) calloc(kPathLen, sizeof(char)); + + if (SysEnv.morgue_dir) + { + strncpy(SysEnv.morgue_dir, field.c_str(), kNameLen - 1); + SysEnv.morgue_dir[ kNameLen - 1 ] = '\0'; + } + } else if (key == "race") { Options.race = str_to_race( field ); diff -ur dc400b26-src/source/externs.h dc400b26-src.new/source/externs.h --- dc400b26-src/source/externs.h 2005-04-25 22:09:56.547105224 +0100 +++ dc400b26-src.new/source/externs.h 2005-04-25 22:09:45.761744848 +0100 @@ -445,6 +445,7 @@ char *crawl_pizza; char *crawl_rc; char *crawl_dir; + char *morgue_dir; char *home; // only used by MULTIUSER systems bool board_with_nail; // Easter Egg silliness };