1: 2003-10-24 (金) 07:33:00 [5] | 現: 2024-01-08 (月) 12:58:56 ゲスト [6] | ||
---|---|---|---|
Line 7: | Line 7: | ||
int x_size, int y_size, int x_pos, int y_pos, | int x_size, int y_size, int x_pos, int y_pos, | ||
LIB_WINDOW *window, int charset, int init_char) : | LIB_WINDOW *window, int charset, int init_char) : | ||
+ | |||
機能:ウィンドウにテキストボックスを貼る。 | 機能:ウィンドウにテキストボックスを貼る。 | ||
+ | |||
textboxを0にすると、自動的にmalloc(64 + x_size * y_size * 8)をやって、 | textboxを0にすると、自動的にmalloc(64 + x_size * y_size * 8)をやって、 | ||
そのアドレスを返す。textboxが0でなければ、返値はtextboxがそのまま返る。 | そのアドレスを返す。textboxが0でなければ、返値はtextboxがそのまま返る。 | ||
+ | |||
・opt == 0x1000 のとき | ・opt == 0x1000 のとき | ||
+ | |||
ウィンドウタイトル専用のテキストボックスを作ります(ウィンドウ一つに対して一 | ウィンドウタイトル専用のテキストボックスを作ります(ウィンドウ一つに対して一 | ||
つ必要です)。backcolorとx_posとy_posとinit_charは必ず0にしてください。windowは | つ必要です)。backcolorとx_posとy_posとinit_charは必ず0にしてください。windowは | ||
Line 22: | Line 22: | ||
以下の値にしなければいけません。長いウィンドウタイトルを付けたければ、この条件 | 以下の値にしなければいけません。長いウィンドウタイトルを付けたければ、この条件 | ||
が満たされるようにウィンドウサイズを大きくしておく必要があります。 | が満たされるようにウィンドウサイズを大きくしておく必要があります。 | ||
+ | |||
この関係式はもっと分かりやすくかけます。以下の不等式が成立するようにサイズを | この関係式はもっと分かりやすくかけます。以下の不等式が成立するようにサイズを | ||
決定してください。 | 決定してください。 | ||
+ | |||
タイトルのx_size * 8 + 80 <= ウィンドウのx_size | タイトルのx_size * 8 + 80 <= ウィンドウのx_size | ||
+ | |||
・opt == 0 のとき | ・opt == 0 のとき | ||
+ | |||
一般のテキストボックスを作ります。backcolorとinit_charは必ず0で、charsetは必 | 一般のテキストボックスを作ります。backcolorとinit_charは必ず0で、charsetは必 | ||
ず0xc0です。x_sizeとy_sizeはテキストボックスの大きさです。単位はキャラクター単 | ず0xc0です。x_sizeとy_sizeはテキストボックスの大きさです。単位はキャラクター単 | ||
Line 41: | Line 41: | ||
クスは1つのウィンドウにいくつでも付けられますが、テキストボックスが重なること | クスは1つのウィンドウにいくつでも付けられますが、テキストボックスが重なること | ||
は許されません。 | は許されません。 | ||
+ | |||
ウィンドウタイトル用のテキストボックスでなければ、charsetで自分で作ったキャ | ウィンドウタイトル用のテキストボックスでなければ、charsetで自分で作ったキャ | ||
ラクタセットを指定することも可能。この場合、空白に相当する文字コードをinit_char | ラクタセットを指定することも可能。この場合、空白に相当する文字コードをinit_char | ||
に指定すること。 | に指定すること。 | ||
+ | |||
参考になるサンプル:helloc4(introa) | 参考になるサンプル:helloc4(introa) | ||
***lib_putstring1 | ***lib_putstring1 | ||
- | void lib_putstring1(int opt, int x, int y, struct LIB_TEXTBOX textbox, | + | void lib_putstring1(int opt, int x, int y, struct LIB_TEXTBOX *textbox, |
int color, int backcolor, int base, int length, unsigned char *str) : | int color, int backcolor, int base, int length, unsigned char *str) : | ||
+ | |||
機能: テキストボックスに文字列を書き込む。改行や折り返しはまったく無い。 | 機能: テキストボックスに文字列を書き込む。改行や折り返しはまったく無い。 | ||
+ | |||
optはビットごとに意味がある。 | optはビットごとに意味がある。 | ||
bit0 (0x0001): 0だと文字の背景色はテキストボックスのデフォルトを使う。 | bit0 (0x0001): 0だと文字の背景色はテキストボックスのデフォルトを使う。 | ||
Line 60: | Line 60: | ||
bit1 (0x0002): 0だとフォントは二色。 | bit1 (0x0002): 0だとフォントは二色。 | ||
1だとフォントはカラー。このときcolorもbackcolorも0を渡す。 | 1だとフォントはカラー。このときcolorもbackcolorも0を渡す。 | ||
- | bit12-13 0x1000にすると、32bitベース+符号なし8ビットのストリングを | + | bit12-13 0x1000にすると、32bitのbase値+符号なし8ビットのストリングを |
使うという意味。ほかはCでは使いにくそうなので省略。 | 使うという意味。ほかはCでは使いにくそうなので省略。 | ||
+ | 'むやみに0x0000にしないこと!' | ||
bit14(0x4000): guigui00.hでは1に固定されている (マクロに書いてある)。 | bit14(0x4000): guigui00.hでは1に固定されている (マクロに書いてある)。 | ||
+ | |||
x,yはテキストボックス中での座標。キャラクタ単位。 | x,yはテキストボックス中での座標。キャラクタ単位。 | ||
textboxはテキストボックスのポインタ。 | textboxはテキストボックスのポインタ。 | ||
Line 70: | Line 71: | ||
strは符号なし8ビット整数の配列へのポインタ。これにbaseを足したものが | strは符号なし8ビット整数の配列へのポインタ。これにbaseを足したものが | ||
テキストボックスにずらずらと書き込まれる。 | テキストボックスにずらずらと書き込まれる。 | ||
+ | |||
基本: base=0, strにASCII文字列。 | 基本: base=0, strにASCII文字列。 | ||
+ | 例:lib_putstring1(0x1000, 0, 0, wtitle, 0, 0, 0, 8, "wintitle"); | ||
応用: baseに'0', strに0~9の値など。 | 応用: baseに'0', strに0~9の値など。 | ||
+ | |||
+ | |||
***lib_loadfontset | ***lib_loadfontset | ||
void lib_loadfontset(int opt, int slot, int len, void *font) : | void lib_loadfontset(int opt, int slot, int len, void *font) : | ||
+ | |||
機能: ユーザ定義のフォント集合をスロットに割り当てる。 | 機能: ユーザ定義のフォント集合をスロットに割り当てる。 | ||
+ | |||
フォントは8x16 (または8x8) のドットパターンであり、これを羅列したものを | フォントは8x16 (または8x8) のドットパターンであり、これを羅列したものを | ||
フォントセットと呼ぶ。 | フォントセットと呼ぶ。 | ||
+ | |||
slotはフォントセットを割り当てるスロット。一つ消費する。 | slotはフォントセットを割り当てるスロット。一つ消費する。 | ||
numはフォント数。 | numはフォント数。 | ||
fontはフォントセットのポインタ。 | fontはフォントセットのポインタ。 | ||
+ | |||
・opt==1 | ・opt==1 | ||
フォントは8x16のモノクロパターンである。1のビットが文字色、0のビットが | フォントは8x16のモノクロパターンである。1のビットが文字色、0のビットが | ||
背景色となる。1バイト中では上位のビットが左。 | 背景色となる。1バイト中では上位のビットが左。 | ||
+ | |||
(以下未完成) | (以下未完成) | ||
参考になるプログラム: introc/fnttstc0.c | 参考になるプログラム: introc/fnttstc0.c | ||
Line 95: | Line 99: | ||
***lib_loadfontset0 | ***lib_loadfontset0 | ||
void lib_loadfontset0(int opt, int slot) : | void lib_loadfontset0(int opt, int slot) : | ||
+ | |||
機能: システム内蔵フォントをスロットに割り当てる。 | 機能: システム内蔵フォントをスロットに割り当てる。 | ||
+ | |||
・opt=0x80000001 | ・opt=0x80000001 | ||
slotにANKフォントセットを割り当てる……というのが公式見解だが、その | slotにANKフォントセットを割り当てる……というのが公式見解だが、その | ||
フォントセットはどう見てもANKのK (Kana) が含まれていない。IBMのターミナル | フォントセットはどう見てもANKのK (Kana) が含まれていない。IBMのターミナル | ||
フォントが256個入ったフォントセットが割り当てられる。 | フォントが256個入ったフォントセットが割り当てられる。 | ||
+ | |||
(以下未完成) | (以下未完成) | ||
参考になるプログラム: introc/fnttstc0.c | 参考になるプログラム: introc/fnttstc0.c | ||
Line 108: | Line 112: | ||
***lib_makecharset | ***lib_makecharset | ||
void lib_makecharset(int opt, int charset, int fontset, int len, int from, int base) : | void lib_makecharset(int opt, int charset, int fontset, int len, int from, int base) : | ||
+ | |||
機能: フォントセットに含まれるフォントを文字集合空間にマッピングする。 | 機能: フォントセットに含まれるフォントを文字集合空間にマッピングする。 | ||
+ | |||
フォントセットに含まれるフォントの一部を文字集合空間にマッピングして、 | フォントセットに含まれるフォントの一部を文字集合空間にマッピングして、 | ||
実際にテキストボックスで使えるようにする。複数のフォントセットをあわせて | 実際にテキストボックスで使えるようにする。複数のフォントセットをあわせて | ||
使う場合は、一連のスロットでマッピングして最後に終端を定義し、最初の | 使う場合は、一連のスロットでマッピングして最後に終端を定義し、最初の | ||
スロットを文字集合のスロットとしてopentextboxに与える。 | スロットを文字集合のスロットとしてopentextboxに与える。 | ||
+ | |||
optは0。fontset, charsetはスロット。 | optは0。fontset, charsetはスロット。 | ||
fontsetのfrom番からlen個のフォントを、文字集合charsetのbase番から | fontsetのfrom番からlen個のフォントを、文字集合charsetのbase番から | ||
割り当てる。 | 割り当てる。 | ||
+ | |||
+ | fontset = len = from = base = 0 にすると終端の定義となる。 | ||
- | fontset = len = from = base = 0 にすると終端の定義となる。 | + | ***lib_wsjis2gg00jpn0 |
+ | lib_wsjis2gg00jpn0(len, sjis, gg00jpn, 0x400, 0x4e00) : | ||
+ | 機能:シフトJISで書かれた文字列をOSASK自動拡張フォント向けにデコードします。 | ||
+ | len:変換結果の長さで, 単位はダブルワードです。 | ||
+ | sjis:変換前のシフトJISの文字列のポインタです。 | ||
+ | gg00jpn:変換後文字列のポインタです。(たぶん・・) | ||
+ | |||
+ | ***lib_loadfontset1 | ||
+ | void lib_loadfontset1(0xc0ffffff, 0, int sig) : | ||
+ | |||
+ | 機能:OSASKで拡張フォント(日本語全角とか、韓国語など)を使う準備を要請します。 | ||
+ | |||
+ | 結局はフォントを読み込んでいるだけです。読み込みが完了するとsigを返しますので、 | ||
+ | フォントの利用はsigがくるまで待っていてください。成功するとsig、失敗するとsig+1~sig+15を返します。 | ||
+ | しかし失敗は原則としてないので気にすることはありません(OSがフォントを読めなくても失敗にはならない)。 | ||
+ | |||
+ | sigが返ってきたら、 | ||
+ | lib_makecharset(0, slot, 0x0021, 0x1000000, 0, 0); | ||
+ | とすることで、slotに拡張フォントのキャラクタセットができます。 | ||
+ | これはスロットを4つ使います。もちろん、キャラクタセットの最後には | ||
+ | lib_makecharset(0, slot, 0, 0, 0, 0); | ||
+ | が必要です。文字コード(フォントコード)0~0xffffffは拡張フォントが使っていますが、 | ||
+ | それ以降は自由に使えます。使わない場合も上記のターミネータをお忘れなく。 | ||
+ | |||
+ | 参考になるプログラム:tviewc5cとか | ||
+ | (tviewc5cは http://koya.marokun.net/osask/download.html のtviewc/teditcパックから入手できます) | ||
* こめんと欄 | * こめんと欄 | ||
#comment | #comment |
(This host) = http://osask.net