TwlIPL/build/debugsoft/treenand2sd/src/MyStrings.c
yosiokat 5da514b20d treenand2sdの追加。
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2396 b08762b0-b915-fc4b-9d8c-17b2551a87ff
2008-09-04 05:16:01 +00:00

314 lines
8.2 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/************************************************************************
タイトル:
文字、文字列表示ルーチン集
************************************************************************/
#include <string.h>
#include "basicdef.h"
#include "MyStrings.h"
/************************************************************************
☆動作モード
************************************************************************/
#define USE_SDK_PRINTF //SDKのPrintf関係を使用するときに定義
/************************************************************************
☆実体宣言
************************************************************************/
//標準のコンソール
CONSOLE_TYPE StdConsole = { { 0, 0},
COLOR_BLACK,
0, SCREEN_HEIGHT-2,
&wText
};
CONSOLE_TYPE *Console = &StdConsole;
/************************************************************************
☆プロトタイプ宣言
************************************************************************/
static void ScrollDown( CONSOLE_TYPE *Console );
/************************************************************************
*************************************************************************
*************************************************************************
☆文字出力関係のユーティリティ
*************************************************************************
*************************************************************************
*************************************************************************/
/************************************************************************
 一文字表示
概要:
引数の文字コードをテキストVRAM上に表示させる
( putchar とコンパチかな?)
引数:
Console 表示コンソール
Character 文字コード
戻り値:
文字コードputcharとなるべく仕様をあわせるため
***********************************************************************/
extern int wcPutchar( CONSOLE_TYPE *Console, int Character ){
int i;
u16 *Pointer;
switch( Character ){
case '\n': /* 改行コードの処理 */
Console->Cursor.y++;
Console->Cursor.x = 0;
break;
case '\t': /* タブコードの処理(4タブ) */
Console->Cursor.x +=4 - ( (StdConsole.Cursor.x) % 4 );
break;
case '\f': /* 改ページコードの処理 */
Pointer = &(Console->Text->Map[0][0] );
for( i=0 ; i<SCREEN_HEIGHT*SCREEN_WIDTH ; i++ ) *Pointer++=CLEAR_CHARACTER;
wcGotoxy( Console, 0, 0 );
break;
default:
/* 文字の表示 */
Console->Text->Map[ Console->Cursor.y ][ Console->Cursor.x++ ]
= (u16)( (Console->Palette << 12 ) | Character );
}
/* 行あふれの処理 */
if( Console->Cursor.x > SCREEN_WIDTH-1 ){
Console->Cursor.x = 0;
Console->Cursor.y++;
}
/* 列あふれの処理 */
if( Console->Cursor.y > Console->ScrollEnd ){
--Console->Cursor.y;
ScrollDown( Console );
}
return Character;
}
/************************************************************************
 一文字表示(制御コード処理なし)
概要:
引数の文字コードをテキストVRAM上に表示させる
wcPutcharの制御コード判定なしバージョン
引数:
Console 表示コンソール
Character 文字コード
戻り値:
文字コードputcharとなるべく仕様をあわせるため
***********************************************************************/
extern int wcPutcharNC( CONSOLE_TYPE *Console, int Character ){
/* 文字の表示 */
Console->Text->Map[ Console->Cursor.y ][ Console->Cursor.x++ ]
= (u16)( (Console->Palette << 12) | Character );
/* 行あふれの処理 */
if( Console->Cursor.x > SCREEN_WIDTH-1 ){
Console->Cursor.x = 0;
Console->Cursor.y++;
}
/* 列あふれの処理 */
if( Console->Cursor.y > Console->ScrollEnd ){
--Console->Cursor.y;
ScrollDown( Console );
}
return Character;
}
/************************************************************************
 文字列表示(改行なし版)
概要:
引数の文字列を表示させる(最後に改行コードが入らないので注意)
引数:
Console 表示コンソール
String 表示文字列
※ 0x80-0xffの文字コードに対応するため、(u8 *)へのキャストをしています。
***********************************************************************/
extern void _cPuts( CONSOLE_TYPE *Console, const char *String ){
int CurrentCharacter;
while( CurrentCharacter = *(u8 *)String++ ) wcPutchar( Console, CurrentCharacter );
}
/************************************************************************
 文字列表示
概要:
引数の文字列を画面に表示させる(最後に改行コードが入ります)
引数:
 Console 表示コンソール
 String 表示文字列
戻り値:
 常に0 putsとのコンパチビリティを保つため
***********************************************************************/
extern int wcPuts( CONSOLE_TYPE *Console, const char *String ){
_cPuts( Console, String ); /* 文字列の表示 */
_cPuts( Console, "\n" ); /* 改行 */
return 0;
}
/************************************************************************
テキスト画面を下にスクロールさせる
引数:
Console 該当コンソール
***********************************************************************/
static void ScrollDown( CONSOLE_TYPE *Console ){
int i;
for( i=Console->ScrollStart+1 ; i<=Console->ScrollEnd ; i++ ){
/* 一列上にコピーする */
memcpy( Console->Text->Map[i-1], Console->Text->Map[i], SCREEN_WIDTH* sizeof(u16) );
}
/* 最終行のクリア */
for( i=0 ; i<SCREEN_WIDTH ; i++ ){
Console->Text->Map[ Console->ScrollEnd ][i] = CLEAR_CHARACTER;
}
}
/************************************************************************
カーソル位置の設定
引数:
Console 該当コンソール
x X座標
y Y座標
************************************************************************/
extern void wcGotoxy( CONSOLE_TYPE *Console, int x, int y ){
/* とりあえず座標のコピー */
Console->Cursor.x = x;
Console->Cursor.y = y;
/* 範囲制限をするこれをしないとオーバーランを起こす */
if( Console->Cursor.x < 0 ) Console->Cursor.x = 0;
if( Console->Cursor.x > SCREEN_WIDTH-1 ) Console->Cursor.x = SCREEN_WIDTH-1;
if( Console->Cursor.y < 0 ) Console->Cursor.y = 0;
if( Console->Cursor.y > SCREEN_HEIGHT-1 ) Console->Cursor.y = SCREEN_HEIGHT-1;
}
/************************************************************************
パレットの設定
引数:
Console 該当コンソール
Palette 設定パレット
************************************************************************/
extern void wcSetPalette( CONSOLE_TYPE *Console, int Palette ){
Console->Palette = Palette;
}
/************************************************************************
☆Printf
※NitroSDKのOS_Printfを参考にしています。
Printfもどき
※標準のコンソールに表示されます。
引数:
fmt: フォーマット付き文字列
...: パラメータ
************************************************************************/
extern void wPrintf( const char *fmt , ... ){
char common_buffer[0x100];
va_list vlist;
//引数取得
va_start( vlist, fmt );
//vprintf相当部分
#ifdef USE_SDK_PRINTF
OS_VSNPrintf( common_buffer, sizeof(common_buffer), fmt, vlist );
#else
vsnprintf( common_buffer, sizeof(common_buffer), fmt, vlist );
#endif
_Puts( common_buffer );
//引数後処理
va_end( vlist );
}
/************************************************************************
文字列の行数のカウントする
引数:
Str 文字列
戻り値:
行数
************************************************************************/
extern int wCountLine( const char *Str ){
int Line;
if( *Str=='\0' ) return 0; //空文字列の判定
Line=1;
while( *Str!='\0' ){
if( *Str=='\n' ) Line++;
Str++;
}
return Line;
}