view scn2k/scn2k_flags.h @ 71:1fd20d231376

Fix objScale with 2D zoom; implement objWidth and objHeight.
author Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
date Fri, 01 Apr 2011 23:49:12 +0200
parents 4416cfac86ae
children
line wrap: on
line source

#ifndef __SCN2K_FLAGS_H__
#define __SCN2K_FLAGS_H__

#include <set>
#include <string>

struct VarInfo {
#define TYPE_NONSYSVARMAX 5
#define TYPE_VARMAX 9
#define TYPE_VARLOCSTR 10
#define TYPE_VARSYSSTR 12
#define TYPE_VARSTR 18
#define TYPE_STR 58
#define TYPE_VAL 68
#define TYPE_SYS 0xc8
#define TYPE_END 0x7f

#define TYPE_SYS_SYS 0
#define TYPE_SYS_SKIPMODE 1
	int type;
	int number;
	int value;
	VarInfo() { type = TYPE_VAL; value = 0;}
	VarInfo(int n) { type = TYPE_VAL; value = n;}
	VarInfo(const VarInfo& i) { type = i.type; number = i.number; value = i.value;}
};

class Flags {
/* flag:
**  type 0-5 : ローカル整数、各2000個
**  type 6, 25 : グローバル整数、2000個
**      type 10,11: ローカル整数??、各2000個
**	type 12 : グローバル文字列、2000個 (今は無視しても良いが)
**	type 18 : ローカル文字列、2000個
**	type 25: システム変数(マウス座標など?) 1000 個?
**  type 26-32, 51 : 1-bit access to 0-6, 25
**  type 52-58, 77 : 2-bit access to 0-6, 25
**  type 78-84, 103 : 4-bit access to 0-6, 25
**  type 104-110, 129 : 8-bit access to 0-6, 25
*/
	private:
		typedef unsigned int uint;
		int sys;
		int var[TYPE_VARMAX+1][2000];
		std::string str[2000];
		std::string sys_str[2000];
		std::string loc_str[3];
	public:
		Flags(void);
		int operator () () const;
		int operator () (VarInfo info) const;
		void Str(int type, unsigned int number, char* buf, int sz) const;
		std::string Str(int type, unsigned int number) const;
		std::set<int> cgm_data;

		bool IsInt(int type) const;
		int MaxIndex(int type) const;

		void Set(VarInfo info, int value);
		int Get(int type, int number) const;
		void SetSys(int value);
		void SetStr(VarInfo info, std::string val);

		bool Exec(class Cmd& cmd);

		void Load(const char* str);
		void LoadSys(const char* str);
		void Load(const char* str, bool sys);

		void Save(std::string& str);
		void SaveSys(std::string& str);
};

#endif