★ libgcl リファレンス



--------------------------------------------------------------------------------

■ 概要

--------------------------------------------------------------------------------



libgclはgclconv, gclkで変換されたバイナリ形式のgcxスクリプトを解釈するための

ライブラリである。

以下の機能を持つ。



・関数登録

・Proc, Block実行

・値取得

・オプション取得

・変数値取得／設定

・文字列リソース取得

・フォントデータ取得



--------------------------------------------------------------------------------

■ 起動

--------------------------------------------------------------------------------



void GCL_Initialize( void );

void GCL_ResetSystem( void );



void GCL_ChangeSenerioCode( int code );

	// デフォルトはscenario.gcxを読み込むが、この関数でファイル名を変更することが

	// 可能



--------------------------------------------------------------------------------

■ 関数登録

--------------------------------------------------------------------------------



すべてのGCLコマンドはこの関数により登録され、実行される。



typedef struct {

	int id;

	GCL_COMMANDFUNC	*func;

} GCL_COMMANDLIST;



typedef struct _gcl_commanddef {

	struct _gcl_commanddef *next;

	int n_commlist;

	GCL_COMMANDLIST *commlist;

} GCL_COMMANDDEF;



int GCL_AddCommMulti( GCL_COMMANDDEF *def );

int GCL_DelCommMulti( GCL_COMMANDDEF *def );



コマンドテーブルをシステムに登録／解除する。



--------------------------------------------------------------------------------

■ proc, block実行

--------------------------------------------------------------------------------



void GCL_ExecScript( void );

	// スクリプトの実行を開始。



int GCL_ExecProc( int proc_id, GCL_ARGS *arg );

int GCL_ExecBlock( char *top, GCL_ARGS *args );



--------------------------------------------------------------------------------

■ 値取得

--------------------------------------------------------------------------------





char *GCL_GetNextValue( char *top, int *type_p, int *value_p );

	// 基本関数。以下の関数はすべてこれを使用。



void GCL_SetArgTop( char *top );

	// 次のデータへのポインタを設定。以下Next系はこれを内部で使用。

	// Nextがつかない系もあるが、基本的にNext系を使用する。



int GCL_GetNextInt( void );

int GCL_GetNextIV( int *vec );

int GCL_GetNextSV( short *vec );

char *GCL_GetNextString( void );

void *GCL_GetNextResource( void );

int GCL_GetNextResourceNo( void );



--------------------------------------------------------------------------------

■ オプション取得

--------------------------------------------------------------------------------



オプションは、command.defで指定した1文字で取得する。



char *GCL_GetOption( char c );

	// オプションがなかった場合NULLを返す。

int GCL_GetOptionValue( char c, int default_value );

	// オプションがなかった場合、default_valueを返す。



int GCL_GetNextOption( void );



--------------------------------------------------------------------------------

■ 変数値取得／設定

--------------------------------------------------------------------------------



GCLの変数は、libgcl内でstaticにとられた領域にマップされる。

通常変数と、link変数( include/linkvar.h によって、プログラム中からも名前で参照が可能 )

の2つの種類がある。



通常変数には以下の構造体を使って、アクセスすることが可能。



typedef struct _gcl_var_ref {

	unsigned char code[4];

	unsigned short max;

	unsigned short offset;

} GCL_VAR_REF;



void GCL_GetNextVarRef( GCL_VAR_REF *ref );



void GCL_SetVarRef( GCL_VAR_REF *ref, int offset, int value );

int GCL_ReadVarRef( GCL_VAR_REF *ref, int offset );



void GCL_SaveVar( void );

void GCL_RestoreVar( void );

void GCL_SaveLinkVar( void *ptr, int size ) ;



int GCL_ReadSavedVar( char *top );

char *GCL_VarSaveBuffer( char *top );



--------------------------------------------------------------------------------

■ 文字列リソース取得

--------------------------------------------------------------------------------



char *GCL_GetStringResource( int id );



--------------------------------------------------------------------------------

■ フォントデータ取得

--------------------------------------------------------------------------------



char *GCL_GetFontDataTop( void );

