SC1602互換、バックライト付液晶を試してみました 6 [電子工作]
※SilentCのシリアルからコントロール出来るようになりました。ビデオは今夜にアップ予定、、、誰も観ないか。
さて困った。SilentCのシリアルライブラリを上手く動かせないぞ!。
確認はダイレクト実行で行っています。
例えばSciPutcでは出力する文字が全て0になってしまう。
SciPutsにおいても、一部の制御コードは正しく変換されない。例えば以下の文字列は
”\a\thamayan"
最初の\aは'a'と変換されてしまい、7にはならない。\tは正しく9に変換されている。
例えば以下の様な16進文字を入れても
”\x1b[2J”
”x1b[2J”となってしまう。
俺だけか?、きっと俺だけだな。
※とりあえず以下の様にしました。
さて困った。SilentCのシリアルライブラリを上手く動かせないぞ!。
確認はダイレクト実行で行っています。
例えばSciPutcでは出力する文字が全て0になってしまう。
SciPutsにおいても、一部の制御コードは正しく変換されない。例えば以下の文字列は
”\a\thamayan"
最初の\aは'a'と変換されてしまい、7にはならない。\tは正しく9に変換されている。
例えば以下の様な16進文字を入れても
”\x1b[2J”
”x1b[2J”となってしまう。
俺だけか?、きっと俺だけだな。
※とりあえず以下の様にしました。
void main( void ) { bell(); esc_prt( "[2J" ); SciPuts( "モウスグHIMANガ ウゴキソウデス" ); Sleep( 500 ); esc_prt( "[6;0H" ); esc_prt( "[0J" ); Sleep( 500 ); SciPuts( "UMANガ ウゴキソウデス" ); Sleep( 500 ); esc_prt( "[2J" ); Sleep( 100 ); esc_prt( "[2;0H" ); SciPuts( "designed by Sexy Butyou" ); Sleep( 500 ); esc_prt( "[14;0H" ); esc_prt( "[0J" ); Sleep( 100 ); esc_prt( "[0;1H" ); esc_prt( "[0J" ); Sleep( 100 ); esc_prt( "[2;1H" ); SciPuts( "Sexy Butyou" ); Sleep( 100 ); esc_prt( "[>5h" ); } void esc_prt( char *msg ) { char *buf = MemoryAlloc( 2 ); *buf = 0x1b; *(buf + 1) = 0; SciPuts( buf ); SciPuts( msg ); MemoryFree( buf ); } void bell( void ) { char *buf = MemoryAlloc( 2 ); *buf = 0x07; *(buf + 1) = 0; SciPuts( buf ); MemoryFree( buf ); }
2008-10-21 00:18
nice!(0)
コメント(11)
トラックバック(0)
私は、 \a や \x1b は、知らなかったもので、ちょいと調べました。
こんな本しか見つけられなかった。
http://www.amazon.com/dp/067248420X
Programming in C (Hayden Books C Library)
by Stephen G. Kochan
これによると、受け入れ可能なエスケープ文字は、 \b \f \n \r \t \v \\ \" \' \(carriage return) \nnn (octal) だそうで、 \a \xhh は入っていません。
と、いうのは K&R の時代のことで、この本には ANSI C の話も出てきます。 ANSI C では、これらに加えて \xhh \a \? が追加されたそうです。
私の予想では、 SilentC では \x1b は使えなくても \033 なら使えるんじゃないかと思います。
by noritan (2008-10-21 09:16)
なるほど8進ですか。それは試していなかった。
ちょっと今の解決方法では気持ちが悪いので、8進でも良いから使えれば、随分すっきりしますよね。
by hamayan (2008-10-21 09:33)
> by Stephen G. Kochan
こーちゃん(*^_^*)
「Cでプログラミング」ですか。こーちゃんのこの本の翻訳本はこれになるのかな?
http://www.amazon.co.jp/%E6%A8%99%E6%BA%96-C%E8%A8%80%E8%AA%9E%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E6%95%99%E6%9C%AC%E2%80%95%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E3%81%AE%E4%BA%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE-Computer-science-No-09/dp/4833780062/ref=sr_1_6?ie=UTF8&s=books&qid=1224549739&sr=1-6
by hamayan (2008-10-21 09:43)
"SciPutc" 関数の件、
Interface 誌の関数一覧表には誤りがあります。 "SciPutc" 関数は、引数を二つ取り、一つ目の引数は無視されています。二つ目の引数に文字コードを入れてください。
《参考サイト》
http://noritan-micon.blog.so-net.ne.jp/2008-09-26
SilentCの知られざる世界 (1)
by noritan (2008-10-21 12:38)
ああ、そうでした、そうでした。
と言うかコンテストの時もこれで嵌っていたよな。
OS-1のマニュアルだと第一引数がデータで第二引数がポートを示すのだけれど、それも間違っていると。なんと言うトラップ。
ドキュメントの類位はなるべく先に直して欲しいなぁ。
by hamayan (2008-10-21 13:42)
> ビデオは今夜にアップ予定、、、誰も観ないか。
見る見る~(^-^)
by たけまる (2008-10-21 19:10)
予想がはずれました。
m::d("\b\f\n\r\t\v\\\"\'\033\a\?\x1b")
20003b68 62 66 0a 0d 09 76 5c 22 bf...v\"
20003b70 27 1b 61 3f 78 31 62 00 '.a?x1b.
20003b78 00 00 00 00 0f 43 1b 5b .....C.[
\a と \x1b はもちろん、\b \f \v の三つも取り扱っていないそうです。
文字列内の8進数表記は、受け付けてもらえました。
文字定数の方は、
PrHexByte('\b','\f','\n','\r','\t','\v','\\','\"','\'','\a','\?')
62 66 0a 0d 09 76 5c 22 27 61 3f
この結果は、文字列の場合と一貫性があるからいいとして、
PrHexByte('\x1b','\033')
78
PrHexByte('\033','\x1b')
00
なんで、二つ目が表示されないんだ?
バグっぽいぞ。
by noritan (2008-10-21 20:37)
でもでも、これだけ動いてくれれば、取り敢えず充分かな。
あまり高機能だと、今度はこっちが馬脚を露わすしね。
by hamayan (2008-10-21 21:16)
たけまるさん!Network stickの布教用に、これのプリント基板を作りません。
by hamayan (2008-10-21 21:21)
おおお。しかーし、社の予算は今週 発売予定のインターフェース誌の企画で全弾撃ち尽くしてしまいました~ (T^T)
by たけまろ (2008-10-22 07:35)
ををを、残念!。T社長、なんとか予算追加お願いします。
音声再生専用ICのライターを入手したので、今までのデモではない音声のデモビデオを今夜にでもアップできるかも。
by hamayan (2008-10-22 09:26)