[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]
[OSASK 3094] from OSASK BOARD
このメールは、OSASK伝言板に書き込まれた内容です。
この書き込みに返事を書く場合は、下のURLから書き込みを行なって下さい。
http://www.imasy.or.jp/~mone/osask/index.cgi?REFER=3c5903af_bca5
From: 川合秀実
Message-ID: 3c5903af_bca5
Date: 2002/01/31 17:43
Subject: Re: OSASKアプリ(非実用的)です。
[OSASK 3091]へのレスです。
>ください。また,何かお気付きの点がありましたらアドバイス
>の方もよろしくお願い致します。
>http://home.catv.ne.jp/ff/karin/osask/stpw1.lzh
みてみました。・・・実は、ちょっとまずいところがあります。たぶん、かり
んさんはかなり古い資料を元にstpw1を作られたんだと思いますが・・・。正し
い記述はintrob07の中のdblcntc0.txtにありますので、確認してください。
lib_settimertime()のoptに許されているのは、0x32と0x12だけなんです(厳密
には0x30や0x10などもいいんですが)。そんなわけで、case 5の最初のif文の中
は以下のようにするとよいでしょう。
if (flg == TIMER_STOP) {
/* 時刻基点を現在にし,1ミリ秒後にシグナルを要求 */
lib_settimertime(0x32, SYSTEM_TIMER, 4296967, 0, 0);
flg = TIMER_MOVE;
}
後続のelse節はそのままでかまいません。
またこれだけではもちろん1回しかシグナルが来なくてまずいので、さらにcase
6の部分もいじります。
if (flg == TIMER_STOP)
continue;
/* 前回シグナル発生時を時刻基点にし,1ミリ秒後にシグナルを要求 */
lib_settimertime(0x12, SYSTEM_TIMER, 4296967, 0, 0);
if (++time == 360000000 /* 100H */)
time = 0;
/* 表示 */
こんな感じでうまく行くでしょう。
この修正をしないと、stpw1を2つ起動して両方をスタートさせた時に、マシン
パワーがないとハングアップしてしまいます。将来のOSASKでは安全のために、0
x32と0x12以外のオプションは無条件でエラーにさせる予定です。0x32と0x12だ
けを使う限りハングアップすることはありません(代わりに速度が狂うようにな
りますが)。
僕はよく知らないのですが、ミリ秒を表示するなら
char zero[] = "00:00:00.000";
の方がいいんじゃないでしょうか?それともコロンにするのが普通のなのかな?
??・・・これをstaticにすればさらに良しだと思います。
表示の部分も、
static char s[] = "00:00:00.000";
としておいて、
setdec3(time % 1000, s + 9); /* msec */
setdec2((time / 1000) % 60, s + 6); /* sec */
setdec2((time / 60000) % 60, s + 3); /* min */
setdec2((time / 3600000) % 60, s + 0); /* hour */
lib_putstring_ASCII(0x0000, 0, 0, textbox, 0, 0, s);
のようにしたらいいんじゃないかと思うんですか、どうでしょうか?