git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@2077 c06c8d41-db1a-0410-9941-cceddc491573
QHUJATUWL3I7TJOLOY55LPZSAU3EB5X2AKRKTBVN7VSZD527VAXQC
DBM *shoutDB;
DBM *speakDB;
// shout and speak databases are all generated from a single
// text file in the data directory and stored as .db files in the
// save directory. New databases that follow this same pattern should
// add themselves to the db_id enum and the singleFileDBs array below.
enum db_id
{
DB_SHOUT,
DB_SPEAK,
MAX_DBID
};
#define DESC_BASE_NAME "descript"
#define DESC_TXT_DIR "descript"
#define DESC_DB (DESC_BASE_NAME ".db")
struct SingleFileDB
{
SingleFileDB(const char *_base_name) :
base_name(_base_name), db(NULL) {}
check_newer(shoutPath, shoutText, generate_shout_db);
std::string dbPath = get_savedir_path(
singleFileDBs[i].base_name + ".db");
std::string dbText = datafile_path(
singleFileDBs[i].base_name + ".txt");
std::string dbBase = get_savedir_path(
singleFileDBs[i].base_name);
shoutPath.erase(shoutPath.length() - 3);
if (!(shoutDB = openDB(shoutPath.c_str())))
end(1, true, "Failed to open DB: %s", shoutPath.c_str());
}
if (!speakDB)
{
std::string speakPath = get_savedir_path(SPEAK_DB);
std::string speakText = datafile_path(SPEAK_TXT);
if (!is_newer(dbPath, dbText))
{
file_lock lock(get_savedir_path(
singleFileDBs[i].base_name + ".lk"), "wb");
unlink( dbPath.c_str() );
speakPath.erase(speakPath.length() - 3);
if (!(speakDB = openDB(speakPath.c_str())))
end(1, true, "Failed to open DB: %s", speakPath.c_str());
if (!(singleFileDBs[i].db = openDB(dbBase.c_str())))
end(1, true, "Failed to open DB: %s", dbBase.c_str());
static void generate_shout_db()
{
std::string db_path = get_savedir_path(SHOUT_BASE_NAME);
std::string full_db_path = get_savedir_path(SHOUT_DB);
std::string txt_path = datafile_path(SHOUT_TXT);
file_lock lock(get_savedir_path(SHOUT_BASE_NAME ".lk"), "wb");
unlink( full_db_path.c_str() );
store_text_db(txt_path, db_path);
DO_CHMOD_PRIVATE(full_db_path.c_str());
return getRandomizedStr(get_dbm(DB_SHOUT), monst, suffix,
num_replacements);
static void generate_speak_db()
{
std::string db_path = get_savedir_path(SPEAK_BASE_NAME);
std::string full_db_path = get_savedir_path(SPEAK_DB);
std::string txt_path = datafile_path(SPEAK_TXT);
file_lock lock(get_savedir_path(SPEAK_BASE_NAME ".lk"), "wb");
unlink( full_db_path.c_str() );
store_text_db(txt_path, db_path);
DO_CHMOD_PRIVATE(full_db_path.c_str());
}