#include "sgl.h" void slInitEvent( void );
void - 何も与えません。
void - 何も返しません。
イベント、ワーク管理用のバッファを初期化します。イベントは64個、 ワークは256個が用意されます。
void *eventtbl[] = { init_camera, init_player1, init_player2, init_enemyctrl }; void InitGame(){ void **evrdptr; EVENT *evptr; int cnt; slInitEvent(); /* イベント管理用変数の初期化 */ evrptr = eventtbl; for( cnt = sizeof( eventtbl ) / sizeof( void * ) ; cnt-- > 0 ; ) { evptr = slSetEvent( *evrptr++ ); } slSetSprTVMode( TV_320x224 ); } void Game(){ slExecuteEvent(); /* イベントの実行 */ slSynch(); /* ポリゴンデータの出力とビデオ表示同期 */ }
イベント、ワーク用のRAM自体は初期化されないので、領域を取り出した時に、 ユーザープログラムが初期化してください。
slGetEvent |
slSetEvent |
slSetEventNext |
slCloseEvent |
slReturnEvent |
slExecuteEvent |
slGetWork |
slReturnWork |
#include "sgl.h" EVENT *slGetEvent( void );
void - 何も与えません。
EVENT* - 取得したイベント用RAMのアドレスを示すポインタ。
イベント用に割り付けられたRAM領域を取り出し、そのポインタを返します。
void func() { /* This is executed in event loop. */ } EVENT *evnt1, *evnt2; evnt1 = slGetEvent(); evnt2 = slSetEvent( func ); evnt2->user = ( Uint8 * )evnt1;
128バイトの領域で、ユーザーが自由に使用できます。64個分用意されていますが、 使い切っている場合にはNULLコードを返します。
slInitEvent |
slSetEvent |
slSetEventNext |
slCloseEvent |
slReturnEvent |
EventTop |
EventCount |
#include "sgl.h" void *( func )( void ); EVENT *slSetEvent( func );
void *( func )( void ) - イベントに登録する実行関数。
EVENT* - 取得したイベントへの EVENT型ポインタ。
イベントを取り出し、実行リストの末尾に追加します。この際、指定された関数を 実行関数として登録します。
slInitEvent(); slSetEvent( user_func1 ); slSetEvent( user_func2 ); : while( -1 ) { : slExecuteEvent(); slSynch(); }
128バイトの領域ですが、先頭の16バイトはシステムにより使用されます。
イベントが残っていない場合には NULLコードを返します。
slInitEvent |
slSetEvent |
slSetEventNext |
slCloseEvent |
slReturnEvent |
slExecuteEvent |
#include "sgl.h" EVENT *evnt; void *( func )( void ); EVENT *slSetEventNext( evnt, func );
EVENT *evnt - 登録するイベントの前のイベント。
void *( func )( void ) - 登録する実行関数。
EVENT* - 取り出されたイベントを示す、 EVENT型構造体へのポインタ。
イベントを取り出し、指定されたイベントの次に実行されるように、実行リスト に追加します。この際、指定された関数を実行関数として登録します。
void func() { /* This is executed in event loop. */ } ss_main() { EVENT *evnt; evnt = slGetEvent(); evnt->work = ... : slSetEventNext( evnt, func ); :
128バイトの領域ですが、先頭の16バイトはシステムにより使用されます。
イベントが残っていない場合には NULLコードを返します。
slInitEvent |
slSetEvent |
slGetEvent |
slCloseEvent |
slReturnEvent |
slExecuteEvent |
#include "sgl.h" EVENT *evnt; void slReturnEvent( evnt );
EVENT *evnt - 解放を要求するイベントを表す EVENT型構造体へのポインタ。
void - 何も返しません。
実行リストに登録されていないイベントをシステムに返す。
EVENT *evnt; evnt = slGetEvent(); slReturnEvent( evnt );
実行リストに登録されているイベントに対して、この関数を実行するとリストに 登録されたままになるため、実行は継続されます。戻されたポインタはシステムの バッファに再登録されますが、この際に登録済みであってもチェックされません ので、同じポインタを複数回返却すると、この後実行される、 slGetEvent()、slSetEvent()、slSetEventNext() において不具合が発生します。
slInitEvent |
slGetEvent |
slSetEvent |
slSetEventNext |
slCloseEvent |
EventLast |
#include "sgl.h" EVENT *evnt; void slCloseEvent( evnt );
EVENT *evnt - 削除するイベントを表す EVENT型構造体へのポインタ。
void - 何も返しません。
実行リストに登録されたイベントをリストから切り離し、システムに返します。
また、ワークがセットされている場合、これらも戻します。
EVENT *evnt; evnt = slSetEvent( user_func ); : slCloseEvent( evnt );
実行リストに登録されていないイベントを指定すると、リスト情報が正しくない ため、不当なイベントに対して、リスト変更処理をすることになり、予測できない アドレスに対する書き込みが発生し、最悪の場合、CPUが停止する場合があります。
戻されたポインタはシステムのバッファに再登録されますが、この際に登録済みで あってもチェックされないので、同じポインタを複数回返却すると、この後 実行される、 slGetEvent()、slSetEvent()、slSetEventNext() において不具合が発生します。
slInitEvent |
slGetEvent |
slSetEvent |
slSetEventNext |
slReturnEvent |
#include "sgl.h" void slExecuteEvent( void );
void - 何も与えません。
void - 何も返しません。
実行リストに登録されたイベントを先頭から順に実行します。
slInitEvent(); slSetEvent( ... ); : while( -1 ) { slExecuteEvent(); slSynch(); }
メインループごとに実行してください。
slInitEvent |
slSetEvent |
slSetEventNext |
slSynch |
slInitSynch |
EventTop |
EventNow |
EventCount |
#include "sgl.h" WORK *slGetWork( void );
void - 何も与えません。
WORK* - 割り当てられたワークエリアを示す WORK型構造体へのポインタ。
ワーク用に割り付けられたRAM領域を取り出し、そのポインタを返します。
WORK *work; EVENT *evnt; work = slGetWork(); evnt = slSetEvent(); evnt->work = work;
ワークは64バイトの領域で、先頭の4バイトをリスト用のポインタとして、 システムで使用します。残りの60バイトはユーザーが自由に使用できます。
EVENT構造体のWORKに ポインタをセットしていればイベントをクローズする 場合に、システムに返却されます。
slInitEvent |
slReturnWork |
WorkCount |
#include "sgl.h" WORK *wk; void slReturnWork( wk );
WORK *wk - 解放するワークRAMを表す、WORK構造体のポインタ。
void - 何も返しません。
ワークとして使用していたRAM領域をシステムに戻す。
WORK *work; work = slGetWork(); : slReturnWork( work );
戻されたポインタはシステムのバッファに再登録されますが、この際に登録済みで あってもチェックされないので、同じポインタを複数回返却すると、この後に 実行される slGetWork() において不具合が発生します。
slInitEvent |
slGetWork |
WorkCount |
#include "sgl.h" extern EVENT EventBuf []; /* buffer for Event use */
slInitEvent |
slGetEvent |
slReturnEvent |
#include "sgl.h" extern WORK WorkBuf []; /* buffer for Work use */
slGetWork |
#include "sgl.h" extern EVENT* RemainEvent[] ; /* Remain Event address buffer */
slSetEvent |
slSetEventNext |
slReturnEvent |
slExecuteEvent |
#include "sgl.h" extern WORK* RemainWork[] ; /* Remain Work address buffer */
slReturnWork |