English
SGL User's ManualPROGRAMMER'S TUTORIAL
戻る進む

8-12. 文字数値表示

 ここで解説するSGLライブラリ関数は、主にプログラムのデバッグに使用するためのものです。関数は指定された文字列・数値・マトリクスをモニター上にスクロール面を利用して表示します。 スクロールデータにはASCIIセルデータを、スクロール面には回転スクロール画面を使用し、それぞれデフォルト(システム初期化の段階)で使用可能なように設定されています。

<図8-30 文字数値表示イメージ>

文字数値表示関数は、大きく次の4つに分類することができます。

表示位置の計算 :関数に使用するための表示位置パラメータを作成します。
文字列の表示  :指定された文字列を画面に表示します。
数値の表示   :指定された数値を画面に表示します。
マトリクスの表示:指定されたマトリクスを画面に表示します。

 以下、これら4つの関数群について、それぞれ解説していきます。

1)表示位置の計算
 文字及び数値の表示位置をセル単位で設定し、以下の関数が使用できる形に変換します。

【void *slLocate ( Uint16 cell_x , Uint16 cell_y ) ;】
 文字数値表示関数で使用できる形の表示位置パラメータ変数(void *型)を作成します。パラメータにはモニター画面中の表示位置を示すXY座標値をセル単位(8ドットを1セルとカウント)で代入します。

2)文字列の表示
 半角英数字で構成された文字列を画面に表示します。

【void slPrint ( char *disp_character , void *disp_pos ) ;】
 指定された文字列を画面に表示します。 パラメータには、表示する文字列(“”で囲んだchar型変数)、表示位置(“slLocate”でvoid *型にコンバートされたもの)をそれぞれ代入します。ただし、文字列は半角英数字に限られます。

3)数値の表示
 数値を画面に表示します。

【void slPrintFX ( FIXED disp_num , void *disp_pos ) ;】
 指定されたFIXED型数値を画面に表示します。
パラメータには、表示する数値(FIXED型変数)、表示位置(“slLocate”でvoid *型にコンバートされたもの)をそれぞれ代入します。

【void slPrintHex ( Uint32 disp_num , void *disp_pos ) ;】
 指定されたHEX型数値を画面に表示します。パラメータには、表示する数値(HEX型変数)、表示位置(“slLocate”でvoid *型にコンバートされたもの)をそれぞれ代入します。
関数“slPrintHex”は、数値表示の際、上位ビットの0を表示しません(代わりにスペースが挿入される)。

【void slDispHex ( Uint32 disp_num , void *disp_pos ) ;】
 指定されたHEX型数値を画面に表示します。パラメータには、表示する数値(HEX型変数)、表示位置(“slLocate”でvoid *型にコンバートされたもの)をそれぞれ代入します。
関数“slDispHex”の場合は“slPrintHex”と異なり、数値表示の際に上位ビットの0も表示します。

関数“slPrintHex”と“slDispHex”は、ともにHEX型の数値を画面に表示するためのものですが、それぞれ上位ビットの0を表示するかしないかという点で異なっています。 ただし、数値は常に右詰めで表示されます。

表8-26 “slPrintHex”と“slDispHex”の差異
代入値出力値
slPrintHex000011111111
slDispHex0000111100001111
注)出力値が実際に画面に描画される数値です。

4)マトリクスの表示
 マトリクスを画面に表示します。

【void slPrintMatrix ( MATRIX disp_matrix , void * dsp_pos) ;】
指定されたマトリクスを画面に表示します。パラメータには、表示するマトリクス変数、表示位置(slLocateでvoid *型にコンバートされたもの)をそれぞれ代入します。

 次のサンプルプログラム(リスト8-10)は文字数値表示関数群を実際に使用して、スクロール画面を利用した文字列および数値の画面表示を実現したものです。

リスト8-10 sample_8_12:文字数値表示

/*----------------------------------------------------------------------*/
/*	Text & Value Display						*/
/*----------------------------------------------------------------------*/
#include	"sgl.h"

extern	PDATA PD_PLANE1 , PD_PLANE2 , PD_PLANE3;

static void set_poly(ANGLE ang[XYZ] , FIXED pos[XYZ])
{
	slTranslate(pos[X] , pos[Y] , pos[Z]);
	slRotX(ang[X]);
	slRotY(ang[Y]);
	slRotZ(ang[Z]);
}

void ss_main(void)
{
	static ANGLE ang1[XYZ], ang2[XYZ], ang3[XYZ];
	static FIXED pos1[XYZ], pos2[XYZ], pos3[XYZ];
	static MATRIX mtptr;
	static ANGLE adang = DEGtoANG(0.5);
	static ANGLE tmp = DEGtoANG(0.0);

	slInitSystem(TV_320x224,NULL,1);

	slPrint("Sample program 8.12" , slLocate(6,2));

	ang1[X] = ang1[Y] = ang1[Z] = DEGtoANG(0.0);
	ang2[X] = ang2[Y] = ang2[Z] = DEGtoANG(0.0);
	ang3[X] = ang3[Y] = ang3[Z] = DEGtoANG(0.0);
	pos1[X] = toFIXED(  0.0);
	pos1[Y] = toFIXED( 40.0);
	pos1[Z] = toFIXED(170.0);
	pos2[X] = toFIXED(  0.0);
	pos2[Y] = toFIXED(-40.0);
	pos2[Z] = toFIXED(  0.0);
	pos3[X] = toFIXED(  0.0);
	pos3[Y] = toFIXED(-40.0);
	pos3[Z] = toFIXED(  0.0);

	slPrint("POLYGON ANGLE [Hex]    =", slLocate(1,4));
	slPrint("POLYGON ANGLE [Dec]    =", slLocate(1,6));
	slPrint("POLYGON ANGLE [Hex&0]  =", slLocate(1,8));
	slPrint("POLYGON ANGLE [Dec&0]  =", slLocate(1,10));
	slPrint("POLYGON ANGLE [FIX]    =", slLocate(1,12));
	slPrint("DISPLAY Matrix :", slLocate(1,18));

	while(-1){
		slUnitMatrix(CURRENT);
		ang1[Z] = tmp;
		ang2[Z] = tmp;
		tmp += adang;
		if(tmp < DEGtoANG(-90.0)){
			adang = DEGtoANG(0.5);
		} else if(tmp > DEGtoANG(90.0)){
			adang = DEGtoANG(-0.5);
		}

		slDispHex(slAng2Hex(tmp) , slLocate(26,4));
		slDispHex(slAng2Dec(tmp) , slLocate(26,6));
		slPrintHex(slAng2Hex(tmp) , slLocate(26,8));
		slPrintHex(slAng2Dec(tmp) , slLocate(26,10));
		slPrintFX(slAng2FX(tmp) , slLocate(26,12));

		slPushMatrix();
		{
			set_poly(ang1 , pos1);
			slPutPolygon(&PD_PLANE1);

			slPushMatrix();
			{
				set_poly(ang2 , pos2);
				slPutPolygon(&PD_PLANE2);

				slPushMatrix();
				{
					set_poly(ang3 , pos3);
					ang3[Y] += DEGtoANG(5.0);
					slPutPolygon(&PD_PLANE3);
					slGetMatrix(mtptr);
					slPrintMatrix(mtptr , slLocate(0,20));
				}
				slPopMatrix();
			}	
			slPopMatrix();
		}
		slPopMatrix();

		slSynch();
	}
}

フロー8-14 sample_8_12:文字数値表示


戻る進む
SGL User's ManualPROGRAMMER'S TUTORIAL
Copyright SEGA ENTERPRISES, LTD., 1997