VGA コンソールで漢字を出したい [NetBSD]
FreeBSD の kon2 とか、Linux の jfbterm みたいなのが欲しいけど、NetBSD では現在
これ!っていうのがないような・・・
(あったら教えてください)
仕方がないので、ここ↓のパッチを見てみる。
http://www.jp.netbsd.org/ja/JP/ml/tech-pkg-ja/200501/msg00033.html
マルチリンガルと銘打って encoding を切り替えようとしたりしてるのでややこしい。
EUC-JP 固定(3バイト文字なし)で、src/sys/dev/ic/vga_raster.c の
vga_raster_copyrows()
vga_raste_eraserows()
vga_raster_allocattr()
あたりを、2バイト文字でよさげに処理してあげればよさそう。
パッチで加えている
vga_raster_getstride() は使ってない
vga_raster_setencoding() は encoding を切り替えなければいらない。
byteseq_to_dbchar() → ISO-2022-JP の uchar シーケンスから1文字分取ってくる
byteseq_to_dbchar_euc() → EUC-JP/EUC-KR の uchar シーケンスから1文字分取ってくる
結果を、src/sys/dev/wscons/wsemul_vt100.c の vt100_output_normal() で表示
ここ大事↑
byteseq_to_dbchar_euc() の引数 buf, nbytes の意味がよくわからん
・・・たぶん、
ASCII --> 文字コードを返す。*buf, *nbytes は 0
2バイト文字の1文字目 --> 0 を返す。*buf に入ってきた文字を取っておく。*nbytes は 2を設定。
2バイト文字の2文字目 --> 1バイト目とあわせて jis コードで返す。*buf, *nbytes は 0
2バイト文字の2文字目かどうかは *nbytes が2かどうかで判定
vga_raster_font 構造体の中の、encoding, firstchar, stride, numchars を見る必要があるか?
(とりあえず、なさそう?)
WSDISPLAY_FONTENC_JIS を定義して、vga_rastert_font の encoding に設定する必要があるか?
(WSDISPLAY_FONTENC_PCVT でごまかしちゃだめか?)
wsfont_find() を、width=16, height=16 で呼んでいるところがないのは、大丈夫なのか?
wsfontload(8) に加えた処理のうち、readbdffont() は、参考になる。
wsfontload とは別のコマンドにするのが良さそう。
bdfフォントを、wsfontload(8) で読み込める形式に変換するツールを作るのがいいかも。
kon2 のフォントを読み込んでいる処理も見ておくといいかも。
wscons のガイドも見ておくべし
http://nobug.tukusi.ne.jp/netbsd-guide/trans/chap-cons.html#AEN4160
コメント 0