ハローワールド大作戦!その2。(2)


RGKT-NDS-STDY-006(001)


console.c 読んでる最中でつ。
俺メモな内容ですまんこ。


現在のフォントの情報(今現在のポジション情報とか)は
currentCopy て PrintConsole 構造体で持ってて
currentCopy は *currentConsole を経由してアクセスしているのね。
グローバルなとこにあるから弄ろうと思えば弄れるんじゃないかと。


2chのスレで見かけた consoleDemoInit() が128文字までしか表示できないってのは
初期化時の設定でそう定義されちゃってるみたいですね
(defaultConsole ていう PrintConsole 構造体に128文字までとか色々定義されてて
こいつでもって初期化を行ってる)。
キャラデータ自体はちゃんとCode Page 437フルで持ってるんで
256文字使いたいとかANKコードでカタカナ使いたいとかって場合
consoleInit() を使いましょうってことなんだろう。
consoleDemoInit() も関数内では consoleInit() されてるし。


iprintf() の独特なエスケープシーケンスは
con_write() 内で定義されてるので iprintf() から更に con_write() を経由してるんかな?


とりあえず妙なエスケープシーケンスが実は結構存在してた。


即知だと思われるのは

\x1b[2J


でコンソールクリアとか。
consoleClear() の中身も実はこれ1行だったw
'2'ってのは
static void consoleCls(char mode) の mode の為の引数みたい
(クリア処理するときに呼ばれる console 内の関数)。
詳しくは理解できてないけどソース内で色々やってる。
ソース見た方が早いってのはコレのことか?<逃げ

\x1b[%d;%df

または

\x1b[%d;%dH


が表示位置指定なのはサンプル見てればわかる通りで。
Y、Xの順で指定するのがややこしいが。

\x1b[%dA

現在のポジションから上に%d進める

\x1b[%dB

現在のポジションから下に%d進める

\x1b[%dC

現在のポジションから右に%d進める

\x1b[%dD

現在のポジションから左に%d進める


これもややこしい。
現在のポジションてのは
最後にiprintf()で表示させたキャラクターの次ってことで。
ABCD て表示させたとしたら現在のポジションは D の右横。
これ使って縦に揃えて表示させたいときとか工夫が必要っぽい。


でもこれ、 D が画面の一番右端だと現在のポジションは D の位置。
次行左端に移ってないw


あと現在の画面範囲以上の数を指定してもそれ以上先が無い場合、
画面範囲いっぱいのところを現在の開始位置としてる。


他にもあと4つはエスケープシーケンスあるみたいだけど
今日はもういいかなーて気分になってきたです。