view system/system_config.h @ 57:6d9146f56ccf

* Move some opcodes * Merge last changes from xclannad
author Thibaut GIRKA <thib@sitedethib.com>
date Sat, 14 Nov 2009 23:31:51 +0100
parents c7bcc0ec2267
children 4416cfac86ae
line wrap: on
line source

/*  system_config.h
 *      gameexe.ini ファイルの読み込み
 */

/*
 *
 *  Copyright (C) 2000-   Kazunori Ueno(JAGARL) <jagarl@creator.club.ne.jp>
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License along
 *  with this program; if not, write to the Free Software Foundation, Inc.,
 *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 *
*/

#ifndef __SYSTEM_CONFIG_H__
#define __SYSTEM_CONFIG_H__

#include <string>

/* CD Track 名 <-> Track 番号の変換を行う */
class TrackName {
	private:
		char** track;
		int* track_num;
		char** track_wave;
		int* track_start;
		int deal;
		void Expand(void);
		char** se_track;
		int se_deal;
		void ExpandSE(int num);

	public:
		TrackName(void);
		~TrackName(void);
		void AddCDROM(char* name, int track);
		void AddWave(char* name, char* wave, int start_pt);
		void AddSE(int num, char* se);
		int CDTrack(char* name);
		int TrackStart(char* name);
		const char* WaveTrack(char* name);
		const char* SETrack(int num);
};
/* gameexe.ini で設定されるパラメータ */
/* まず初めに、設定項目を SetOrigPara* でセットする
** ただし、設定名は255文字以下である必要がある。
**
** SetPara* で設定項目は変更できる
** また、GetPara* で設定項目を得られる。
*/

class AyuSysConfig {
	public:
		static AyuSysConfig* GetInstance(void);
		static void Quit(void);

		bool LoadInitFile(void);
		/* パラメータを検索する */
		/* str なら 1, int なら 2, 見つからないなら 0 */
		int SearchParam(const char* name) const;
		/* パラメータを得る */
		const char* GetParaStr(const char* name) const; /* str */
		int GetParam(const char* name, int deal, ...) const; /* int, error -> return -1, no error -> return 0 */
		int GetOriginalParam(const char* name, int deal, ...) const; /* int, error -> return -1, no error -> return 0 */
		int GetParaInt(const char* name) const {
			int n;
			if (GetParam(name,1,&n)) return 0;
			return n;
		}
		const int* GetParamArray(const char* name, int& deal) const;
		/* パラメータを変更する */
		void SetParaStr(const char* name, const char* var); /* str */
		void SetParam(const char* name, int deal, ...); /* int */

		/* オリジナルの設定関係
		** SetOriginal : 全ての設定を初めの状態に戻す
		** DiffOriginal : 初めの状態と現在の状態の変更分を得る
		** PatchOriginal: DiffOriginal で得た文字列を引数に
		**   渡す。DiffOriginal 呼び出し時の状態に戻す
		*/
		void SetOriginal(void);
		void DiffOriginal(std::string&);
		const char* PatchOriginal(const char*);
		/* config の内容を表示する */
		void Dump(FILE* f) const;

	private:
		/* 元設定を行う */
		/* AyuSys からのみ可能 */
		void SetOrigParaStr(const char* name, const char* var); /* str */
		void SetOrigParam(const char* name, int para_deal, ...); /* int */
		void SetOrigParamArray(const char* name, int deal, int* array); /* 上とおなじ */
		AyuSysConfig(void);
		~AyuSysConfig();

	public:
		TrackName track_name;

	private:
		int change_flag;
		int dirty_flag;
		class AyuSysConfigString* str_config;
		class AyuSysConfigIntlist* int_config;
		static AyuSysConfig* _singleton;
};

#endif