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つはエスケープシーケンスあるみたいだけど
今日はもういいかなーて気分になってきたです。