#if defined _sys_included
  #endinput
#endif
#define _sys_included


// パッドの状態を取得する
native PadState(&state=0,&press=0,&release=0,&repeat=0);

// パッドのアナログ値を取得する
native PadAnalog( &SLUD=0, &SLLR=0,
				  &SRUD=0, &SRLD=0,
                  &LR=0, &LL=0, &LU=0, &LD=0,
                  &RR=0, &RL=0, &RU=0, &RD=0,
                  &L1=0, &L2=0, &R1=0, &R2=0 );


// アプリに文字列でコマンドを投げる
native System(const cmd[]);


// スクリプトをアタッチする
native AttachScript( obj:target, const funcname[]="", const xml_id[]="", const argtable[]="" );

// スクリプトを強制終了する
native Abort( obj:target );

// 他のスクリプトの公開変数を 取得/変更 する
native bool:SetPubVar( obj:target, const varname[], val );
native GetPubVar( obj:target, const varname[] );

// スクリプトの引数テーブルを取得する
native bool:GetArg( const key[], val[], bufsize = sizeof val );

// スクリプトの動作状態を取得する
native ScriptState( obj:target );
enum
{
	SCRIPT_NOTATTACHED = 0,
	SCRIPT_RUNNING,
	SCRIPT_FINISHED,
}

// Cookieの設定／取得
native SetCookie( const str[] );
native GetCookie( const name[], buf[], bufsize = sizeof buf );


// BNの様々な状態を取得/変更する
native SetSystemParam( _id_, _value_ );
native GetSystemParam( _id_ );
native SetSystemParamStr( _id_, const _value_[] );
native GetSystemParamStr( _id_, _value_[], bufsize = sizeof _value_ );

// SetSystemParam / GetSystemParam の引数
enum
{
    // ジオメトリ情報
    SYSTEM_PARAM_VIEWPORT_W = 0,
    SYSTEM_PARAM_VIEWPORT_H,

    // ビジー状態
    SYSTEM_PARAM_NETWORK_BUSY = 100,
    SYSTEM_PARAM_IMGDEC_BUSY,
    SYSTEM_PARAM_XMLLOAD_BUSY,
    SYSTEM_PARAM_DATABASE_BUSY,

    // メールチェック
    SYSTEM_PARAM_MAILEXIST = 200,

    // デバイス状態取得
    SYSTEM_PARAM_CDVD_STATE = 300,
    SYSTEM_PARAM_NETWORK_UP,

    // ログインダイアログ
    SYSTEM_PARAM_AUTH_SAVE = 400,
    SYSTEM_PARAM_AUTH_OK,

    // FGの情報表示
    SYSTEM_PARAM_PADHELP_ONOFF = 500,
    SYSTEM_PARAM_PAGE_MAX,
    SYSTEM_PARAM_PAGE_NO,
    SYSTEM_PARAM_FG_COLOR_A,
    SYSTEM_PARAM_FGBAR_COLOR_A,

    // 機能を有効/無効化
    SYSTEM_PARAM_ENABLE_SE = 600,
    SYSTEM_PARAM_ENABLE_BGM,
    SYSTEM_PARAM_ENABLE_NAVIMENU,
    SYSTEM_PARAM_ALERT_ILLEGAL_DISC,

    // システム設定
    SYSTEM_PARAM_LANG = 700,
    SYSTEM_PARAM_KEYBORAD_TYPE,					// 0:106 1:101
    SYSTEM_PARAM_KEYREPEAT_WAIT,				// 0:short 1:middle 2:long
    SYSTEM_PARAM_KEYREPAET_SPEED,				// 0:fast 1:middle 2:slow
    SYSTEM_PARAM_MOUSE_SPEED,					// 0:fast 1:middle 2:slow
    SYSTEM_PARAM_MOUSE_DBLCLK,					// 0:fast 1:middle 2:slow
    SYSTEM_PARAM_MOUSE_LR,						// 0:left hand 1:right hand
    SYSTEM_PARAM_ATOK_MODE,						// 0:roma 1:kana
    SYSTEM_PARAM_ATOK_KEYBIND,					// 0:setting 1  1:setting 2
    SYSTEM_PARAM_SOFTKB_ONOFF,					// 0:off 1:on
    SYSTEM_PARAM_SOFTKB_QWERTY,					// 0:ABCDEF 1:QWERTY
    SYSTEM_PARAM_SPDIF,							// 0:on 1:off
    SYSTEM_PARAM_ASPECT,						// 0:4:3 1:full 2:16:9
    SYSTEM_PARAM_VIDEO,							// 0:RGB 1:YCbCr
    SYSTEM_PARAM_TIMEZONE,						// minute
    SYSTEM_PARAM_TZCITY,						// city no
    SYSTEM_PARAM_SUMMERTIME,					// 0:off 1:on
    SYSTEM_PARAM_CLOCKTYPE,						// 0:24h 1:12h
    SYSTEM_PARAM_DATEFORMAT,					// 0:YYYYMDD 1:MMDDYYYY 2:DDMMYYYY
	SYSTEM_PARAM_AUTODIAG,						// 0:off 1:on

    // ハードウェア情報
    SYSTEM_PARAM_USELESS_MECHACON = 800,
};

// SetSystemParamStr / GetSystemParamStr の引数
enum
{
    // ログインダイアログ
    SYSTEM_PARAM_STR_AUTH_ID = 400,
    SYSTEM_PARAM_STR_AUTH_PASS,

    // FGの情報表示
    SYSTEM_PARAM_STR_PADHELP_RR = 500,
    SYSTEM_PARAM_STR_PADHELP_RD,
    SYSTEM_PARAM_STR_PADHELP_RU,
    SYSTEM_PARAM_STR_PADHELP_RL,

	SYSTEM_PARAM_STR_PADHELP_DEF_RL = 600,
	SYSTEM_PARAM_STR_PADHELP_DEF_RD,
	SYSTEM_PARAM_STR_PADHELP_DEF_RR,
	SYSTEM_PARAM_STR_PADHELP_DEF_RU,
};

// SetSystemParam(SYSTEM_PARAM_PADHELP_ONOFF,  )
// GetSystemParam(SYSTEM_PARAM_PADHELP_ONOFF,  )
// の引数 ( 論理和をとって渡す )
enum
{
	/*
	PAD_HELP_RR = (1<<( 5+8)),
	PAD_HELP_RD = (1<<( 6+8)),
	PAD_HELP_RU = (1<<( 4+8)),
	PAD_HELP_RL = (1<<( 7+8)),
	PAD_HELP_L1 = (1<<( 2+8)),
	PAD_HELP_R1 = (1<<( 3+8)),
	*/

	PAD_HELP_RR = 1<<0,
	PAD_HELP_RD = 1<<1,
	PAD_HELP_RU = 1<<2,
	PAD_HELP_RL = 1<<3,
	PAD_HELP_L1 = 1<<4,
	PAD_HELP_R1 = 1<<5,
};

// FIXME : もっと抽象化したほうがいい
enum
{
	CDVD_NODISC					= 0x00,	// DISCが入っていない
	CDVD_DETECTING				= 0x01,	// Mediaの判別中
	CDVD_DETECTING_CD			= 0x02,	// CDの自動調整中
	CDVD_DETECTING_DVDS			= 0x03,	// 1層DVDの自動調整中
	CDVD_DETECTING_DVDD			= 0x04,	// 2層DVDの自動調整中
	CDVD_DETECTING_UNKNOWN		= 0x05,	// 不明Media
	CDVD_PS_CD_WITHOUT_AUDIO	= 0x10,	// PSのCDMediaで有り、かつ、CDレイヤーが無いDISC
	CDVD_PS_CD_WITH_AUDIO		= 0x11,	// 	PSのCDMediaで有り、かつ、CDレイヤーが有るDISC
	CDVD_PS2_CD_WITHOUT_AUDIO	= 0x12,	// PS2のCDMediaで有り、かつ、CDレイヤーが無いDISC
	CDVD_PS2_CD_WITH_AUDIO		= 0x13,	// PS2のCDMediaで有り、かつ、CDレイヤーが有るDISC
	CDVD_PS2_DVD				= 0x14,	// PSのDVD DISC
	CDVD_SAWCD_WITHOUT_AUDIO	= 111,	// Spuer Audio CD Mediaで有り、かつ、CDレイヤーが無いDISC
	CDVD_SAWCD_WITH_AUDIO		= 112,	// Super Audio CD Mediaで有り、かつ、CDレイヤーが有るDISC
	CDVD_SAWOCD_AUDIO			= 113,	// 不明。っていうかもう無い？
	CDVD_CDDA					= 0xfd,	// CD AudioDISC
	CDVD_DVD_VIDEO				= 0xfe,	// DVD Video DISC
	CDVD_ILLEGAL				= 0xff,	// 駄目DISC
};

enum
{
    MC_NOCARD = 0,			// メモリーカード未接続
    MC_PS1    = 1,			// 128KBメモリーカード
    MC_PS2	  = 2,			// メモリーカード（PS2)
    MC_PDA	  = 3,			// PocketStation
};

enum
{
	NETOWRK_DOWN = 0,		// ps2netcfgでエラー（ネットワーク接続できなかった）
	NETWORK_UP = 1,			// ps2netcfgで成功（ネットワーク接続できた）
};

// フレームレートを取得する
native FrameRate();
native float: FrameRateF();

// ミリ秒単位からフレームに換算する
stock MSEC_TO_FRAME(n)
	return n * FrameRate() / 1000;

// 絶対値を取得
stock abs(n)
    return ( (n>0) ? n : -n );


// 秒単位でウェイト
stock wait(n)
{
	new count = n*FrameRate()/1000;
    for( new i=0 ; i<count ; i++ ) sleep;
}

// 無限ループに入る
stock halt()
    for(;;)sleep;


#define ePADLleft				(1<<(15-8))
#define ePADLdown				(1<<(14-8))
#define ePADLright				(1<<(13-8))
#define ePADLup					(1<<(12-8))

#define ePADstart				(1<<(11-8))
#define ePADRstick				(1<<(10-8))
#define ePADLstick				(1<<( 9-8))
#define ePADselect				(1<<( 8-8))

#define ePADRleft				(1<<( 7+8))
#define ePADRdown				(1<<( 6+8))
#define ePADRright				(1<<( 5+8))
#define ePADRup					(1<<( 4+8))

#define ePADR1					(1<<( 3+8))
#define ePADL1					(1<<( 2+8))
#define ePADR2					(1<<( 1+8))
#define ePADL2					(1<<( 0+8))

// BNの本体インストールされているパス
stock ELF_DIR[] = "/opt0/bn/";

// BNのスクリプトのインストールされているパス
stock SCRIPT_DIR[] = "/opt0/bn/script/";

// TOPチャンネルスクリプト
stock TOP_URL[] = "/opt0/bn/script/top.xml";
