/* (c) Beer/Won-wan 2002.4.20 */ WonderWitch Programing Tips よく見かける間違い、誤解、勘違い等 1。init screen for text 設定の順序 text_set_mode , text_set_screen の後で text_screen_init , text_window_init を行うのが正解。 実際に何が行われているか(推測) text_set_mode 表示モードを設定するだけ。 これにより以後text関係の関数の動作が変わる。 text_set_screen テキスト表示に使うスクリーンを設定するだけ。 これにより以後text関係の関数のターゲットが変わる。 text_screen_init 表示モードにより動作が異なる。この処理に上記設定が使われる。 1. ANKmodeの場合 キャラクタ384-511に0x00-0x7fのフォントをセットする。 スクリーンをクリアする。 2. SJISmodeの場合 スクリーン(0,0)-(27,17)に対しキャラクタ8-511を対応させる。 キャラクタ8-511をクリアする。 text_window_init text_screen_initとほぼ同じ。SJISmodeの場合はキャラクタを節約できる。 1. ANKmodeの場合 キャラクタbase-(base+0x7f)に0x00-0x7fのフォントをセットする。 スクリーンのウィンドウ範囲をクリアする。 2. SJISmodeの場合 スクリーン(x,y)-(x+w-1,y+h-1)に対しキャラクタbase-(base+w*h)を対応させる。 対応させたキャラクタをクリアする。 text...(表示関数) 1. ANKmodeの場合 スクリーンの該当箇所のキャラクタ番号を書き換える。 2. SJISmodeの場合 スクリーンの該当箇所に対応するキャラクタのフォントを書き換える。 テキスト表示を行うとキャラクタが足りない(8つしか残らない)と思われがちですが、 漢字を使わない場合、ANKmodeにすることで384個のキャラクタが自由に使用出来ます。 漢字を使う場合でも表示範囲をtext_window_initで制限すると、空きキャラクタが増加します。 BeWitch等32bit系の環境でも動作させるために。。。 1。int型でデータを記述するのは避けましょう 例えばキャラクタ定義をパレット等の属性付きで(set_color_fontで使うため) static int xxx={ 0x1234,0x5678,0x1234,0x5678,0x1234,0x5678,0x1234,0x5678}; とすると、int=16bit環境ではメモリ上に 0x34,0x12,0x78,0x56,0x34,0x12,0x78,0x56,0x34,0x12,0x78,0x56,0x34,0x12,0x78,0x56 と格納されますが、int=32bit環境では 0x34,0x12,0x00,0x00,0x78,0x56,0x00,0x00,0x34,0x12,0x00,0x00,0x78,0x56,0x00,0x00, 0x34,0x12,0x00,0x00,0x78,0x56,0x00,0x00,0x34,0x12,0x00,0x00,0x78,0x56,0x00,0x00 となります。 これをset_color_font関数に引き渡すと、 0x34,0x12,0x00,0x00,0x78,0x56,0x00,0x00,0x34,0x12,0x00,0x00,0x78,0x56,0x00,0x00 がフォントとして登録され、1ライン毎の間延びしたキャラクタになってしまいます。 2byteのデータが並んでいることを前程としている場合はintではなくshortを使いましょう。 ファイル操作を含むプログラムをBeWitchで動かすには。。 1。ディレクトリの違いに注意して下さい。また、mmapが使えないので、以下のようにして下さい。 (例) #ifdef __BEOS__ char dt[0x1000]; FILE *fp=fopen(/boot/home/bewitch/ram0/data"); fread(dt,0x1000,1,fp) fclose(fp); #else char far *dt; dt=mmap(/ram0/data"); #endif __BEOS__