[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);

のようにしたらいいんじゃないかと思うんですか、どうでしょうか?