SmaugWizard/Backup/
SmaugWizard/Backup/L/
SmaugWizard/Boards/
SmaugWizard/Building/
SmaugWizard/Corpses/
SmaugWizard/Councils/
SmaugWizard/Deity/
SmaugWizard/Gods/
SmaugWizard/MudProgs/
SmaugWizard/Player/L/
SmaugWizard/Src/
SmaugWizard/Src/res/
/****************************************************************************
 * [S]imulated [M]edieval [A]dventure multi[U]ser [G]ame      |				*
 * -----------------------------------------------------------|   \\._.//	*
 * SmaugWiz (C) 1998 by Russ Pillsbury (Windows NT version)   |   (0...0)	*
 * -----------------------------------------------------------|    ).:.(	*
 * SMAUG (C) 1994, 1995, 1996 by Derek Snider                 |    {o o}	*
 * -----------------------------------------------------------|   / ' ' \	*
 * SMAUG code team: Thoric, Altrag, Blodkai, Narn, Haus,      |~'~.VxvxV.~'~*
 * Scryn, Swordbearer, Rennard, Tricops, and Gorog.           |				*
 * ------------------------------------------------------------------------ *
 * Merc 2.1 Diku Mud improvments copyright (C) 1992, 1993 by Michael        *
 * Chastain, Michael Quan, and Mitchell Tse.                                *
 * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer,          *
 * Michael Seifert, Hans Henrik Staerfeldt, Tom Madsen, and Katja Nyboe.    *
 * ------------------------------------------------------------------------ *
 *			    SmaugFiles Interface file									*
 ****************************************************************************/

#ifndef	SMAUGFILES_H
#define	SMAUGFILES_H

// Data files used by the server.
// AREA_LIST contains a list of areas to boot.
// All files are read in completely at bootup.
// Most output files (bug, idea, typo, shutdown) are append-only.
#define PLAYER_DIR		"player"		// Player files
#define AREA_DIR		"area"			// Area files
#define BACKUP_DIR		"backup"		// Backup Player files
#define GOD_DIR			"gods"			// God Info Dir
#define BOARD_DIR		"boards"		// Board data dir
#define CLAN_DIR		"clans"			// Clan data dir
#define COUNCIL_DIR 	"councils"		// Council data dir
#define GUILD_DIR		"guilds"		// Guild data dir
#define DEITY_DIR		"deity"			// Deity data dir
#define BUILD_DIR		"building"		// Online building save dir
#define SYSTEM_DIR		"system"		// Main system files
#define PROG_DIR		"mudprogs"		// MUDProg files
#define CORPSE_DIR		"corpses"		// Corpses
#define	CLASS_DIR		"classes"		// Classes
#define	RACE_DIR		"races"			// Races

static char	 *DirectoryNames [] = {
	PLAYER_DIR, AREA_DIR, BACKUP_DIR, GOD_DIR, BOARD_DIR,
	CLAN_DIR, COUNCIL_DIR, GUILD_DIR, DEITY_DIR, BUILD_DIR,
	SYSTEM_DIR, PROG_DIR, CORPSE_DIR, CLASS_DIR, RACE_DIR
};

enum SmaugDirType {
	SD_PLAYER_DIR, SD_AREA_DIR, SD_BACKUP_DIR, SD_GOD_DIR, SD_BOARD_DIR,
	SD_CLAN_DIR, SD_COUNCIL_DIR, SD_GUILD_DIR, SD_DEITY_DIR, SD_BUILD_DIR,
	SD_SYSTEM_DIR, SD_PROG_DIR, SD_CORPSE_DIR, SD_CLASS_DIR, SD_RACE_DIR,
	SD_LAST_DIR
};

// The NULL_FILE is held open so that we have a stream handle in reserve,
// so players can go ahead and telnet to all the other descriptors.
// Then we close it whenever we need to open a file (e.g. a save file).
#define NULL_FILE		SYSTEM_DIR	"/Nullfile.txt"	// To reserve one stream
#define AREA_LIST		AREA_DIR	"/Area.lst"		// List of areas
#define BAN_LIST        SYSTEM_DIR	"/Ban.lst"		// List of bans
#define CLAN_LIST		CLAN_DIR	"/Clan.lst"		// List of clans
#define COUNCIL_LIST	COUNCIL_DIR	"/Council.lst"	// List of councils
#define GUILD_LIST      GUILD_DIR	"/Guild.lst"	// List of guilds
#define GOD_LIST		GOD_DIR		"/Gods.lst"		// List of gods
#define DEITY_LIST		DEITY_DIR	"/Deity.lst"	// List of deities
#define	CLASS_LIST		CLASS_DIR	"/Class.lst"	// List of classes
#define	RACE_LIST		RACE_DIR	"/Race.lst"		// List of racees

#define BOARD_FILE		BOARD_DIR "/Boards.txt"		// For bulletin boards
#define SHUTDOWN_FILE	SYSTEM_DIR "/Shutdown.txt"	// For 'shutdown'

#define RIPSCREEN_FILE	SYSTEM_DIR "/Mudrip.rip"
#define RIPTITLE_FILE	SYSTEM_DIR "/Mudtitle.rip"
#define ANSITITLE_FILE	SYSTEM_DIR "/Mudtitle.ans"
#define ASCTITLE_FILE	SYSTEM_DIR "/Mudtitle.asc"
#define BOOTLOG_FILE	SYSTEM_DIR "/Boot.txt"		// Boot up error file
#define BUG_FILE		SYSTEM_DIR "/Bugs.txt"		// For 'bug' and bug()
#define IDEA_FILE		SYSTEM_DIR "/Ideas.txt"		// For 'idea'
#define TYPO_FILE		SYSTEM_DIR "/Typos.txt"		// For 'typo'
#define LOG_FILE		SYSTEM_DIR "/Log.txt"		// For talking in logged rooms
#define WIZLIST_FILE	SYSTEM_DIR "/Wizlist.txt"	// Wizlist
#define WHO_FILE		SYSTEM_DIR "/Who.txt"		// Who output file
#define WEBWHO_FILE		SYSTEM_DIR "/WebWho.txt"	// WWW Who output file
#define REQUEST_PIPE	SYSTEM_DIR "/Requests.txt"	// Request FIFO
#define SKILL_FILE		SYSTEM_DIR "/Skills.dat"	// Skill table
#define HERB_FILE		SYSTEM_DIR "/Herbs.dat"		// Herb table
#define SOCIAL_FILE		SYSTEM_DIR "/Socials.dat"	// Socials
#define COMMAND_FILE	SYSTEM_DIR "/Commands.dat"	// Commands
#define USAGE_FILE		SYSTEM_DIR "/Usage.txt"		// How many people are on 
													// every half hour -
													// trying to determine
													// best reboot time
#define	SYS_FILE		SYSTEM_DIR "/Sysdata.dat"


static char	*FileNameList [] = {
	NULL_FILE, AREA_LIST, BAN_LIST, CLAN_LIST, COUNCIL_LIST,
	GUILD_LIST, GOD_LIST, DEITY_LIST, CLASS_LIST, RACE_LIST,
	BOARD_FILE, SHUTDOWN_FILE, RIPSCREEN_FILE, RIPTITLE_FILE,
	ANSITITLE_FILE, ASCTITLE_FILE, BOOTLOG_FILE, BUG_FILE,
	IDEA_FILE, TYPO_FILE, LOG_FILE, WIZLIST_FILE, WHO_FILE,
	WEBWHO_FILE, REQUEST_PIPE, SKILL_FILE, HERB_FILE,
	SOCIAL_FILE, COMMAND_FILE, USAGE_FILE, SYS_FILE,
};

// Note this list must agree in count and position with the above
// file name list.
enum SmaugFileType {
	SM_NULL_FILE, SM_AREA_LIST, SM_BAN_LIST, SM_CLAN_LIST, SM_COUNCIL_LIST,
	SM_GUILD_LIST, SM_GOD_LIST, SM_DEITY_LIST, SM_CLASS_LIST, SM_RACE_LIST,
	SM_BOARD_FILE, SM_SHUTDOWN_FILE, SM_RIPSCREEN_FILE, SM_RIPTITLE_FILE,
	SM_ANSITITLE_FILE, SM_ASCTITLE_FILE, SM_BOOTLOG_FILE, SM_BUG_FILE,
	SM_IDEA_FILE, SM_TYPO_FILE, SM_LOG_FILE, SM_WIZLIST_FILE, SM_WHO_FILE,
	SM_WEBWHO_FILE, SM_REQUEST_PIPE, SM_SKILL_FILE, SM_HERB_FILE,
	SM_SOCIAL_FILE, SM_COMMAND_FILE, SM_USAGE_FILE, SM_SYS_FILE,
	SM_LAST_FILE
};


class CSmaugFiles {
public:
				~CSmaugFiles () { m_FileRoot.Empty (); }

	CString		GetDir (SmaugDirType d)
				{ return m_FileRoot + '/' + DirectoryNames [d]; }
	CString		GetName (SmaugFileType file)
				{ return m_FileRoot + '/' + FileNameList [file]; }
	CString		MakeName (SmaugDirType d, const char* n)
				{ return GetDir (d) + '/' + n; }
	CString		PlayerName (const char* n)
				{ return GetDir (SD_PLAYER_DIR) +
				  '/' + n[0] + '/' + n + ".dat"; }
	CString		BackupPlayerName (const char* n)
				{ return GetDir (SD_BACKUP_DIR) +
				  '/' + n[0] + '/' + n + ".bak"; }
	BOOL		CreatePlayerDirectory (CString& Path, const char* name,
					 BOOL bBackup = FALSE);
	CString		MakeDeityName (const char* n)
				{ return GetDir (SD_DEITY_DIR) + '/' + n + ".dat"; }
	CString		MakeRaceName (const char* n)
				{ return GetDir (SD_RACE_DIR) + '/' + n + ".race"; }
	CString		MakeCorpseName (const char* n)
				{ return GetDir (SD_CORPSE_DIR) + '/' + n + ".dat"; }
	CString		MakeBuildName (const char* n)
				{ return GetDir (SD_BUILD_DIR) + '/' + n + ".are"; }
	CString		MakeAreaName (const char* n, BOOL bBuild = FALSE)
				{ return GetDir (bBuild ? SD_BUILD_DIR : SD_AREA_DIR)
				  + '/' + n + ".are"; }
	CString		MakeBackupName (const char* n);

	BOOL		Exists (const char* Fname);
	int			Remove (const char* Fname);
	int			Rename (const char* OldName, const char* NewName);

	CString		m_FileRoot;
};


#ifdef	SMAUGSERVER_CPP
	CSmaugFiles		FileTable;
#endif

extern CSmaugFiles		FileTable;


#endif