[OSASK 5876] Re: ウィンドウを移動するとエラーが…。

  こんにちは、川合です。


ZAKKY さんは 2003/03/30 07:51:16 の「[OSASK 5875] Re: ウィンドウ
を移動するとエラーが…。」で書きました:

>ウィンドウを移動するとエラーが出るのはウィンドウタイトルが規定の文字数を
>オーバーしているときだそうです。文字数の計算方法はintroaに書いていると思
>います。
>私も以前そのバグを指摘されまして(汗

  それについては、

    wintitle = lib_opentextbox(0x1000, Null, 0, 10, 1, 0, 0, window, 0x00c0, 0);
    lib_putstring_ASCII(0x0000, 0, 0, wintitle, 0, 0, "C.V.T.G 01");

を見る限り問題ないように見えます。

  じゃあどこが問題なのか、ということになりますが、実はまだチェッ
クしていないのではっきりしたことは言えません。しかし明らかに間違
っている部分は見つけたので、それを指摘しておきます。

    lib_loadfontset(1, 0x0210, 3, fontset);
    lib_loadfontset0(0x80000001, 0x0220);
1:  lib_makecharset(0, 0x0230, 0x0210, 3, 0, 'a');
2:  lib_makecharset(0, 0x0240, 0x0220, 0x40, '@', '@');
    lib_makecharset(0, 0x0250, 0, 0, 0, 0);

3:  textbox = lib_opentextbox(1, Null, 0, 49, 14, 0, 0, window, 0x0230, 0);

  これはキャラクターセットを作って、テキストボックスを用意してい
るところです。説明のために、部分的に行番号をふっています。どこが
おかしいかと言う前に、まずは文の説明を書きます。

1: キャラクターコード97,98,99を0x210のフォントの最初から割り当て
2: キャラクターコード64〜127を0220のフォントの64番目から割り当て
3: 使用するキャラクターセットは0x230、空白キャラクターコードは0

  ええと誤解のないように言っておくと、

    'a' == 97, 0x40 == 64, '@' == 64

です。

  これはちょっとおかしいと思いませんか?

(1)キャラクターコード97,98,99は1:と2:とで思いっきり重複している
(2)空白のキャラクターコードが0に指定されているが、キャラクターコ
   ードは64〜127までしか設定されていない

  じゃあどうすればいいのか?・・・たとえばこうするのはどうでしょ
うか?

(1)キャラクターコード0〜96を0x220から持ってくる
(2)97〜99を0x210から持ってくる

  この場合だと、3:はそのままでよくて、1:と2:が次のように変更にな
ります。

1:  lib_makecharset(0, 0x0230, 0x0210, 3, 0, 'a');
2:  lib_makecharset(0, 0x0240, 0x0220, 0x61, 0, 0);

この方法ではなくてもいいですが、とにかく未定義のフォントを利用さ
せたり、定義を重複させたりはしないようにしてください。

  しかしこの修正でバグが直るかどうかは分かりません。直らなかった
らまた質問してください。今度こそちゃんとどこが原因が突き止めて、
テストしてから指摘しますので。


  それでは。

--
    川合 秀実(KAWAI Hidemi)
OSASK計画代表 / システム設計開発担当
E-mail:kawai !Atmark! imasy.org
Homepage http://www.imasy.org/~kawai/



ML番号でジャンプ
ML単語検索