X680x0 Ko-Window 用ライブラリ corlib.a Version +14 関数マニュアル Copyright 1991-1995 小笠原博之(COR.) 0. はじめに このライブラリには以下の関数群が納められています。 1. Sheet 操作に関する補助関数 2. ウィンドウ関のデータ通信 3. アイコン化 4. ウィンドウタイトルアクセス 5. ファイル名関連 6. 文字列操作 7. Clip & Paste 8. EventInterval 用時間管理 9. ウィンドウプロセス関連 10. Consoleライブラリ 11. マウスカーソル関係 12. DefGraphic ライブラリ(簡単グラフィックウィンドウ) 13. Mg Window ライブラリ(簡単ウィンドウオープン) 14. MgButton ライブラリ(簡単プッシュボタン) 15. MgInput ライブラリ(簡単行入力) 16. Gpos ライブラリ(Graphicポジション管理) 17. Dialog ライブラリ 18. その他ウィンドウ関連 これらのライブラリを使う時は corlib.h をインクルードして下さい。 1. Sheet 操作に関する補助ライブラリ int SheetGetSize( fp, sp ) ---------------------------------------------------------------------------- FILE *fp; ファイルポインタ Sheet *sp; 値を返すバッファ sp->h, sp->v, sp->hword に値を返す ファイルから必要な Sheet サイズを得ます。戻り値は必要なワード数、つまり sp->v * sp->hword です。 ---------------------------------------------------------------------------- void SheetLoad( fp, sp ) ---------------------------------------------------------------------------- FILE *fp; ファイルポインタ Sheet *sp; 値を返すバッファ sp->buf1, sp->buf2 にバッファを返す ファイルからバッファに Sheet データを読み込みます。 - - - - - 使用例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [LOAD] Sheet sp; int size; size= SheetGetSize( fp, &sp ); sp.buf2= ( sp.buf1= MALLOC( size*sizeof(short)*2 ) )+size; SheetLoad( fp, &sp ); [SAVE] SheetSave( fp, &sp, mode ); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ---------------------------------------------------------------------------- void SheetSave( fp, sp, mode, name ) ---------------------------------------------------------------------------- FILE *fp; ファイルポインタ Sheet *sp; ファイルに書き出すデータ int mode; mode=0:Source mode=1:Include char *name; 書き込むデータの名前 バッファの Sheet データをファイルに書き出します。 ---------------------------------------------------------------------------- void SheetCut( sp, cp, x, y ) ---------------------------------------------------------------------------- Sheet *sp; 元のデータ Sheet *cp; 切り出すバッファ int x, y; 切り出す左上の座標 Sheet データの任意の位置から、任意の大きさの Sheet を取り出します。cp->h, cp->v, cp->word には切り出す画像の大きさを設定し、cp->buf1, cp->buf2 に切 り出す画像の大きさに合わせてバッファを用意してから呼び出す必要があります。 ---------------------------------------------------------------------------- 2. ウィンドウ間のデータ転送 void UserSendOperation( wp, info, data, buffer ) ---------------------------------------------------------------------------- WindowID wp; このルーチンを使用するウィンドウの ID (NULLでもよい) EventInfo *info; イベントバッファのアドレス int data; UserPaste/UserString/UserStrings/UserSheet void *buffer; 与えるデータのアドレス 指定したデータを EventUser にのせて、マウスで指定した他のウィンドウに転送 します。このとき wp で与えたウィンドウにはイベントは送信されません(通常自 分自身)。data には EventInfo のメンバ ComData, buffer には ComBuf に相当す る内容が入ります。旧関数名は SendData() です。関数名はどちらで呼び出しても 構いません。wp に NULL を与えた場合は自分自身にもイベントが送信される可能 性があることに注意して下さい。 - - - - - 使用例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [UserString] UserSendOperation( wp, info, UserString, "Tensousuru mojiretu." ); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ---------------------------------------------------------------------------- void UserSendExec( exec, cmd, str ) ---------------------------------------------------------------------------- char *exec; イベントを送りたいプログラム char *cmd; 起動する場合のコマンドオプション char *str; 送信する文字列 exec で指定したプログラムが存在すれば、文字列 str を EventUser, UserString で送信します。もしプログラムが起動されていなければ、cmd と str を引数にして プログラムを起動します。プログラム名には必ず拡張子 .win まで与えて下さい。 イベントを送信した場合は TRUE を、プログラム起動をした場合は FALSE を返しま す。 - - - - - 使用例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - UserSendExec( "view.win", "-f12", "denden.doc" ); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ---------------------------------------------------------------------------- int UserSendPaste( wp, info ) ---------------------------------------------------------------------------- WindowID wp; イベントを送信すべきWINDOWのID(通常自分自身) EventInfo *info; ClipBoard の中身を UserPaste イベントとして送ります。ポップアップメニューの 処理で Paste を行いたい場合(wp=自分自身)、またはウィンドウマネージャーで他 のウィンドウに Paste を行いたい場合(wp=任意のウィンドウID)に使います。戻り 値は WindowSendEvent() の値です。送信できた場合は TRUE できなかった場合は FALSE を返します。 ---------------------------------------------------------------------------- 3. アイコン化 void IconEnt( wp, title, attr, font ) ---------------------------------------------------------------------------- WindowID wp; Window ID char *title; ICON 状態で表示する文字列 int attr; title を表示するアトリビュート int font; title を表示するフォントサイズ ( 12/16/24 ) wp で指定したウィンドウをアイコン化します。中に文字を表示するだけの極めて シンプルなものです。その代わり複雑な手続きなしに即使うことができます。 - - - - - 使用例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (事前に EventIconifyON にしておく必要がある) case EventIconify: IconEnt( wp, "IconTitle", AttrDefault, 12 ); return TRUE; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ---------------------------------------------------------------------------- 4. ウィンドウタイトルへのアクセス char *TitleGetAddress( wp ) ---------------------------------------------------------------------------- WindowID wp; Window ID ( WindowTitleOpen したもののみ ) TITLE WINDOW のタイトル文字列アドレスを得ます。戻り値はそのアドレスです。 ただし wp が TitleWindow かどうかチェックしていません。TitleWindow 以外 ではこの関数を実行するとアドレスエラーになる可能性あり。 ---------------------------------------------------------------------------- char *TitleSetLabel( wp, label ) ---------------------------------------------------------------------------- WindowID wp; Window ID ( WindowTitleOpen したもののみ ) char *label; 新しい文字列 TITLE WINDOW のタイトル文字列を設定し直します。戻り値は TitleGetAddress と 同じで設定したラベルバッファのアドレスになります。この関数は設定時に内部で EventRedraw を発生します。ただし wp が TitleWindow かどうかチェックしてい ませんので、TitleWindow 以外ではこの関数を絶対に使わないで下さい。 ---------------------------------------------------------------------------- 5. ファイル名関連 char *PathGetFullName( name ) ---------------------------------------------------------------------------- char *name; ファイル名 渡されたファイル名をルートからのフルパス名に変更します。戻り値は得たパス名 を展開した static 領域へのポインタであることに注意して下さい。結果を使用す る時は、別のバッファにコピーした後書き換えるなどの処理が必要です。 ウィンドウ上ではカレントディレクトリの概念が曖昧なので、アプリケーションで はできるだけフルパス名で管理するようにして下さい。 ---------------------------------------------------------------------------- char *PathGetFullName2( buf, name ) ---------------------------------------------------------------------------- char *buf; バッファ char *name; ファイル名 PathGetFullName()と同一ですが、static への領域を返さずに展開したパスをバッ ファに格納します。戻り値は buf です。 ---------------------------------------------------------------------------- void PathGetExecDir( buf ) ---------------------------------------------------------------------------- char *buf; パス名格納バッファ 自分が起動されたディレクトリ名を指定バッファに得ます。ディレクトリ名の最後 には必ずディレクトリの区切り「\」がついています。 ---------------------------------------------------------------------------- 6. 文字列操作 void StringGetEsc( str, ptr ) ---------------------------------------------------------------------------- char *str; 結果を格納するバッファ char *ptr; 変換もとの文字列 '\' で始まるエスケープ文字の展開を行います。エスケープ文字は以下の通りです。 結果は str に格納します。 \n 改行 LF (0x0a) \r 復帰 CR (0x0d) \xXX 16進数 \\ 文字 '\' ---------------------------------------------------------------------------- 7. クリップ&ペースト void *ClipSetOperation( wp, info, cb, max, x, y, sc, color, font ) ---------------------------------------------------------------------------- WindowID wp; Clip 表示するウィンドウの ID EventInfo *info; イベント情報 char **cb; スクリーンイメージのアドレス int max; 最大表示ライン int x; Clip 処理位置までのオフセット座標 int y; Clip 処理位置までのオフセット座標 int sc; 行末のスペース削除フラグ int color; 反転時のカラー指定 int font; 表示フォントサイズ(実際は行間ステップ) ウィンドウ内部の任意のテキストに対して、マウスによる clip 処理を行います。 各行は '\0' で終わる文字列で、そのポインタ配列を cb に渡します。処理を行う 行数を max に与えます。sc が TRUE の場合は、行末のスペースを除去したのち ClipBoard に設定します。折り曲げられた行は原則として処理できません。フォン トサイズは実際は行間のステップドット数であるため、必ずしも 10,12,16,24 であ る必要はありません。この関数1つで、Command.win, view.win, kf.win 等と同じ clip 処理ができるようになります。 - - - - - 使用例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - case EventMouseSwitch: if( info->LeftON ){ ClipSetOperation( wp, info, screen, 25, 0, 0, TRUE, 1, 12 ); return TRUE; } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ---------------------------------------------------------------------------- void *ClipSetSimpleOperation( wp, info, cb, max, sc, font ) ---------------------------------------------------------------------------- WindowID wp; Clip 表示するウィンドウの ID EventInfo *info; イベント情報 char **cb; スクリーンイメージのアドレス int max; 最大表示ライン int sc; 行末のスペース削除フラグ int font; 表示フォントサイズ(行間ステップ) ウィンドウ内の任意のテキストに対する Clip 処理を行います。ClipSetOperation() の引数を x= 0, y= 0, color= 1 にしたものと同一です。互換性のために残されて いる関数です。通常は ClipSetOperation() を使用して下さい。 ---------------------------------------------------------------------------- int ClipGetKeyboard( wp, info ) ---------------------------------------------------------------------------- WindowID wp; イベントを送信すべきWINDOWのID EventInfo *info; Paste されたデータを、EventKey に変換して自分自身に再送します。EventUser 時 に用います。1文字毎のイベントに展開されるため、残念ながらあまり効率の良い処 理ではありません。EventUser 処理を行った時は TRUE を、UserPaste 以外のイベ ントであった場合は何もせずに FALSE を返します。 - - - - - 使用例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - case EventUser: if( !ClipGetKeyboard( wp, info ) ){ switch( info->ComData ){ case UserStrings: : } } return TRUE; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ---------------------------------------------------------------------------- int ClipGetKeyboardAll( wp, info ) ---------------------------------------------------------------------------- WindowID wp; イベントを送信すべきWINDOWのID EventInfo *info; EventUser で送られてきたデータを、EventKey に変換して自分自身に再送します。 UserPaste, UserString, UserStrings の全部を処理します。これらはすべて1文字 毎のイベントに展開されるため、残念ながらあまり効率の良い処理ではありません。 イベント送信処理を行った時は TRUE を、それ以外のイベントであった場合は何も せずに FALSE を返します。 ---------------------------------------------------------------------------- 8. 時間処理 unsigned int IntervalTime( void ) ---------------------------------------------------------------------------- X680x0 を起動してからの経過時間を 1/100 秒単位で返します。IOCS CALL にある $7f ONTIME と同じですが、電源 ON のあと 24時間経っても 0 に戻らず値は常に 増加し続けます。そのため時間をはかるために、単純な比較や加算を行うことが できます。ただし24時間の境目では、時間の差分が正しい経過時間にならない場 合があります。 ---------------------------------------------------------------------------- int IntervalWait( wait, work ) ---------------------------------------------------------------------------- unsigned int wait; 待時間 1/100 秒単位 unsigned int *work; ワーク用バッファ 指定した時間が経過したかどうか調べます。指定時間以上経過していれば TRUE を、 そうでなければ FALSE を返します。一度 TRUE を返すとカウンタはリセットされ 継続します。再び wait 時間たつと TRUE を返します。EventInterval を使ったプ ログラムで時間管理に使用すると便利です。ワーク用バッファはユーザーが用意し なければなりません。これをあらかじめ 0 で初期化しておけば、最初の呼び出し 時に必ず TRUE を返すようになります。 - - - - - 使用例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - static unsigned work; /* 3秒に一度だけ処理を行うルーチン */ : case EventInterval: if( IntervalWait( 300, &work ) ){ .... 処理 return TRUE; } return FALSE; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ---------------------------------------------------------------------------- 9. プロセス関連 ここでのプロセスとは、Ko-Window 上で管理されるものを指します。 int PidSearch( name, id ) ---------------------------------------------------------------------------- char *name; 検索するプログラム名 int id; 検索を開始する pid 番号 (最初は1を指定する) プログラム名から Ko-Window のプロセスを検索します。みつかった pid を返しま す(PorcessID)。プロセスが見つからなければ 0 を返します。みつかった pid+1 を id に設定して再実行すると、次検索ができます。 - - - - - 使用例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - すべての同名のプロセスを調べる例 for( pid= 0 ; pid= PidSearch( Name, pid+1 ) ;){ ... } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ---------------------------------------------------------------------------- int PidSendEvent( name, info, mode ) ---------------------------------------------------------------------------- char *name; 検索するプログラム名 EventInfo *info; 送るイベント情報 int mode; break フラグ ( TRUE: break ON 、 FALSE: break OFF ) プログラム名から Ko-Window のプロセスを検索し、指定のイベントを送信します。 この時そのプロセスに属するウィンドウ全部に送信されます。もし同名のプログラ ムが複数起動されているならば、全部のプログラムにイベントを送信します。ただ し mode に TRUE を指定しておくと、最初に見つかったプログラムにだけイベント を送信するようになります。戻り値は WindowSendEventAll() の値です。送信でき なかった場合もしくは送信したプログラムがイベントで FALSE を返した場合は、 FALSE が返ります。 ---------------------------------------------------------------------------- 10. コンソールライブラリ void *ConsoleOpen( void ) ---------------------------------------------------------------------------- ウィンドウ上のコンソールの存在を調べ、以下の Console 関数を使えるようにし ます。戻り値は struct WindowConsoleType へのポインタで、コンソールが存在し ない場合は NULL を返しますが、これをユーザーが意識する必要はありません。エ ラーチェックも不要です。この関数を何度も繰り返し呼び出しても問題ありません。 Close する必要もありません。 この関数は 以下の ConsolePrint() や ConsoleChar() 等を使用する前に必ず実行 しておく必要があります。ConsoleOpen() は1イベント単位で実行します。つまり、 いったんイベントを開放してしまうと、Console が閉じてしまったり起動し直され ていたりする可能性があるからです。不安な時は、ConsolePrint〜 の度に、直前に ConsoleOpen() を全部つけておいて下さい。 ---------------------------------------------------------------------------- void ConsolePrint( str ) ---------------------------------------------------------------------------- char *str; 出力文字列 コンソールに文字列を出力します。直前に ConsoleOpen() を実行しておく必要が あります。コンソールが存在しない場合は何もしません。なお、コンソール側のプ ログラムは通常行バッファリングされているのが普通です。そのため改行コードが 出てきてはじめて画面に現れますので注意して下さい。 - - - - - 使用例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ConsoleOpen(); ConsolePrint( "DoDoon\r\n" ); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ---------------------------------------------------------------------------- void ConsoleChar( code ) ---------------------------------------------------------------------------- int code; 出力文字 コンソールに1文字出力します。直前に ConsoleOpen() を実行しておく必要があ ります。コンソールが存在しない場合は何もしません。コンソールが行バッファリ ングされている関係上改行コードが出てくるまで画面には現れませんので注意して 下さい。 ---------------------------------------------------------------------------- void ConsolePrintf( fmt, arglist .. ) ---------------------------------------------------------------------------- char *fmt; フォーマット出力文字列 コンソールにフォーマット文字列を出力します。printf() 等と同じ書式が使えま す。(__fmtout 使用) 直前に ConsoleOpen() を実行しておく必要があります。コ ンソールが存在しない場合は何もしません。コンソールが行バッファリングされ ている関係上改行コードが出てくるまで画面には現れませんので注意して下さい。 ---------------------------------------------------------------------------- 11. マウスカーソル関係 void MouseSetPattern( num, sp, offx, offy ) ---------------------------------------------------------------------------- int num; 定義するマウスカーソルナンバー Sheet *sp; 定義パターン int offx; カーソル位置へのオフセットX int offy; カーソル位置へのオフセットY Sheet データをマウスカーソルとして登録します。Sheet データは必ず 16x16 dot のパターンでなければなりません。num は定義するマウスカーソルの番号です。 offx, offy は、カーソル位置とパターン左上座標とのずれを指定するものです。 マウスカーソル用の Sheet は Color0 が透明部です。必ず Color1 と Color3 だ けでデザインして下さい。Color2 は使用できません。 ---------------------------------------------------------------------------- void MouseSetDefPat_TUKAMI() ---------------------------------------------------------------------------- マウスカーソルを「手」の形にします。これはもともと UserSendOperation() が 内部で使うために持っていたパターンです。一応外部からも使えるようエントリを 設けました。握った手の形で、データをつかんで他のウィンドウへドラッグ転送す る場合に用います。 ---------------------------------------------------------------------------- void MouseSetNormalPat() ---------------------------------------------------------------------------- 元のパターンに戻します。IOCS CALL の MS_SEL( 0 ) と同等です。 ---------------------------------------------------------------------------- 12. デフォルトグラフィックライブラリ グラフィックウィンドウ周りの処理を簡略化するために作られたライブラリです。 void DefGraphicInit( gra, mode, sleep, palet ) ---------------------------------------------------------------------------- DefGraphic *gra; DefGraphic 構造体 int mode; 色モード( WindowAttrGraphic16/256/65536) int (*sleep)(); SLEEP中の描画ルーチン unsigned short *palet; PALET格納領域の先頭アドレス デフォルトグラフィックライブラリを初期化します。WindowSetGraphicMode() を 内部で実行します。sleep を NULL にすると、描画ルーチン呼び出しは行われませ ん。sleep を特に指定しない場合はデフォルト処理として DefGraphicSleep を指 定して下さい。palet を NULL にするとパレット設定を行ないません(65536色モー ド時など)。palet は 16 色モードの時は 16セット(32byte)、256/65536色モード の時は 256セット(512byte)必要です。 SLEEP というのは、他のアプリがアクティブになっていて、そのアプリケーション で使用するグラフィックモードと異なる状態をいいます。このときそのアプリケー ションは描画を行なうことができないので処理を中断しているわけです。 EventGraphic で画面モードの変更が知らされ、もし自分の使用するモードである なら処理を再開します。(SLEEP 状態の解除) palet に標準 (X680x0デフォルト) のパレット値を使用したい時は、次の2つのシ ンボルを使用して下さい。65536色モードのときは NULL を指定します。 16 色モード時 DefGraphicPal16 256色モード時 DefGraphicPal256 - - - - - 使用例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DefGraphicInit( &gra, WindowAttrGraphic16, NULL, DefGraphicPal16 ); DefGraphicInit( &gra, WindowAttrGraphic256, NULL, DefGraphicPal256 ); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ---------------------------------------------------------------------------- int DefGraphicRedraw( gra, wp, info ) ---------------------------------------------------------------------------- DefGraphic *gra; DefGrahic 構造体 WindowID wp; EventInfo *info; デフォルトグラフィックライブラリの描画チェックをします。EventRedraw で最初 に呼び出して下さい。もし SLEEP なら DefGraphicInit() で設定した SLEEP 描画 ルーチンを実行します。sleep に DefGraphicSleep を指定していた場合はウィン ドウ全体をカラー1で DrawSetClear() します。 ただし DefGraphicInit() で sleep に NULL を指定していた場合はこの実行は行 われません。 戻り値は sleep が NULL の場合は FALSE、それ以外は TRUE になります。 ---------------------------------------------------------------------------- void DefGraphicPalet( gra ) ---------------------------------------------------------------------------- DefGraphic *gra; グラフィックパレットの設定を行います。DefGraphicInit() で指定したグラフィッ クパレットに初期化します。 ---------------------------------------------------------------------------- int DefGraphicEnt( gra, wp, info ) ---------------------------------------------------------------------------- DefGraphic *gra; WindowID wp; EventInfo *info; デフォルトのグラフィックイベント処理をします。EventGraphic, EventPop, EventMove でこの関数を呼び出して下さい。(一緒に呼び出しできます) 内部で DefGraphicInit() で指定していた palet を設定する場合があります。palet が NULL の場合はこの設定しません。返り値は必ず TRUE になります。 - - - - - 使用例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - static DefGraphic gra; switch( info->option ){ case EventOpen: DefGraphicInit( &gra, WindowAttrGraphic16, DefGraphicSleep, palet ); WindowSetAttr( wp, WindowAttrGraphic16 ); WindowSetEventAttr( wp, EventAttrDefault | EventGraphciON | EventPopON | EventMoveON ); GposInit( wp ); WindowRedraw( wp ); return TRUE; case EventRedraw: if( !DefGraphicRedraw( &gra, wp, info ) ){ 実際の描画処理(グラフィック画面を使用できる) } DefGraphicPalet( &gra ); return TRUE; case EventMove: case EventPop: case EventGraphic: return DefGraphicEnt( &gra, wp, info ); : 他の Event 処理 } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ---------------------------------------------------------------------------- int DefGraphicCheck( gra ) ---------------------------------------------------------------------------- DefGraphic *gra; 現在 SLEEP 状態かどうかを調べます(マクロ)。SLEEP 時は TRUE, そうでなければ FALSE を返します。 ---------------------------------------------------------------------------- 13. Mg ライブラリ 簡単にプログラムを作ることができる、簡略化ライブラリです。たいへん便利です が、その分不用なルーチンが多数組み込まれていて、実際のアプリケーションに仕 上げた場合実行およびファイルサイズにも無駄が多くなることに注意して下さい。 また、使用にあたっては、必ず WindowHeapSize を設定するようにして下さい。こ のルーチン群は HEAP を消費します。消費量は場合によって異なります。 WindowID MgWindowDefaultOpen( x, y, h, v, title, mode, Exec ) ---------------------------------------------------------------------------- int x, y, ウィンドウを開く位置 h, v; ウィンドウを開く大きさ char *title; タイトル文字列 int mode; 属性 int (*Exec)(); イベント実行関数 最も簡単にウィンドウを開くための関数です。使い方は通常の WindowOpen() と同 じです。ただし、指定したイベント実行関数が必要最低限のイベントにも FALSE を返してきた場合、内部で代価処理を行います。そのためイベント実行ルーチンは 大幅に省略することができます。 極端な話、次のようなプログラムだけで即ウィンドウが開きます。(これで全部) - - - - - 使用例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #include "corlib.h" EventExec() { return FALSE; } WindowMain() { MgWindowDefaultOpen( 10, 10, 200, 200, "Test", 0, EventExec ); } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - この関数は内部で malloc() するので必ず WindowHeapSize を設定して下さい。容 量は最低で 1Kbyte もあれば十分です。 属性 mode には、WindowTitleOpen() と同様タイトルウィンドウのボックススイッ チ並びを指定します。ただし、何も指定しなくても( 0 の場合でも) Close|Push は 指定されたものと見なします。 また、グラフィック画面を使用するアプリの場合、この属性に MgGraphic16, MgGraphic256, MgGraphic65536 のうちどれかを加えて下さい。 デフォルトのイベント処理ルーチン内部で DefGraphic() ライブラリを勝手に呼び 出しますので、通常は意識せずにグラフィック使用アプリを作ることができます。 戻り値はオープンしたウィンドウの ID です。 ---------------------------------------------------------------------------- WindowID MgWindowDefaultOpenArgs( x, y, h, v, title, argc, argv, mode, Exec ); ---------------------------------------------------------------------------- int x, y, ウィンドウを開くデフォルト位置 h, v; ウィンドウを開くデフォルトの大きさ int argc; プログラムの arg 数 char **argv; プログラムの arg リスト int mode; 属性 char *title; タイトル文字列 int (*Exec)(); イベント実行関数 MgWindowDefaultOpen() に、AnalyzeArgs() をも組み込んだ関数です。これ1つだけ で WindowMain() は完結します。属性は MgWindowDefaultOpen() と同じですが、 もう1つ MgSwitchHV を与えることができます。通常は -x, -y スイッチだけ見て 必要に応じて x, y を書き換えますが、この MgSwitchHV がある場合は -h, -v ス イッチも処理します。内部で malloc() するので必ず WindowHeapSize の設定が必 要です。戻り値はオープンしたウィンドウの ID です。 - - - - - 使用例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #include "corlib.h" EventExec( wp, info ) WindowID wp; EventInfo *info; { if( info->option == EventRedraw ){ DrawBuf dbuf[20]; DrawSetClear( dbuf, 1 ); DrawSetSymbol( dbuf+1, 8, 8, "表示するだけ", AttrDefault, 16 ); WindowDraw( wp, dbuf, 2 ); return TRUE; } return FALSE; } WindowMain( argc, argv ) { MgWindowDefaultOpenArgs( 10, 10, 200, 200, "Test", argc, argv, Icon, EventExec ); } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - このように、自分で欲しいイベントだけ記述すれば、ちゃんとアプリになります。 ---------------------------------------------------------------------------- void MgWindowSetClientData( wp, data, ptr ) ---------------------------------------------------------------------------- WindowID wp; ウィンドウID int data; 設定するクライアントデータ void *ptr; 設定するクライアントポインタ MgLIB でクライアントデータを使用するための関数です。MgLIB では必ずこの関数 でクライアントデータを定義しなければなりません。 この関数は必ずイベント実行ルーチン内で使用して下さい。具体的には EventOpen が一度でも実行されてからです。 ---------------------------------------------------------------------------- int MgWindowGetClientData( wp ) ---------------------------------------------------------------------------- WindowID wp; ウィンドウID MgWindowSetClientData() で定義したクライアントデータを返します。 ---------------------------------------------------------------------------- void *MgWindowGetClientPointer( wp ) ---------------------------------------------------------------------------- WindowID wp; ウィンドウID MgWindowSetClientData() で定義したクライアントポインタを返します。 ---------------------------------------------------------------------------- WindowID MgWindowScrollOpen( x, y, h, v, title, maxh, maxv, mode, Exec ) ---------------------------------------------------------------------------- int x, y, ウィンドウを開く位置 h, v; ウィンドウを開く大きさ char *title; タイトル文字列 int maxh, ウィンドウのスクロール範囲(横方向最大値) maxv; ウィンドウのスクロール範囲(縦方向最大値) int mode; 属性 int (*Exec)(); イベント実行関数 スクロールウィンドウを簡単に簡単に開くためのライブラリです。view.win のよ うなスクロールバー付きウィンドウを開きます。基本的には MgWindowDefaultOpen() と同じ使い方です。タイトルバーには必ずリサイズボックスがつきます。また、ウィ ンドウ右下の角はリサイズボックスと同じ働きになります。ただし描画にグラフィッ クは使えません。内部で malloc() するので必ず WindowHeapSize の設定が必要で す。戻り値はオープンしたウィンドウの ID です。 ---------------------------------------------------------------------------- WindowID MgWindowScrollOpenArgs( x, y, h, v, title, argc, argv, maxh, maxv, mode, Exec ) ---------------------------------------------------------------------------- int x, y, ウィンドウを開く位置 h, v; ウィンドウを開く大きさ char *title; タイトル文字列 int argc; コマンド引数の個数 char **argv; コマンド引数リスト int maxh, ウィンドウのスクロール範囲(横方向最大値) maxv; ウィンドウのスクロール範囲(縦方向最大値) int mode; 属性 int (*Exec)(); イベント実行関数 MgWindowScrollOpen() で引数処理ができるようにしたものです。 MgWindowDefaultOpenArgs() 同様の指定ができます。戻り値はオープンしたウィン ドウの ID です。 ---------------------------------------------------------------------------- 14. MgButton ライブラリ プッシュボタンを扱うライブラリです。HEAP を消費するので WindowHeapSize の 設定が必要です。 void MgButtonInit( mbp ) ---------------------------------------------------------------------------- MgButton *mbp; プッシュボタン構造体を初期化します。MgButtonSet〜 関数を実行する前に必ずこ の初期化を行なっておいて下さい。 ---------------------------------------------------------------------------- int MgButtonSet( mbp, x, y, h, v, num ); ---------------------------------------------------------------------------- MgButton *mbp; int x, y, h, v; ボタンの位置と大きさ int num; このボタンが押された時に返す値 プッシュボタン構造体にボタンを定義を追加します。このボタンは枠だけで中に何 も表示しません。MgButtonOperation() 関数を呼び出した時、このボタンが押され ていれば num で設定した値を返します。この関数は、ボタン定義が失敗した場合 は FALSE を返します。 ---------------------------------------------------------------------------- int MgButtonSetSymbol( mbp, x, y, w, num, msg, attr, font ) ---------------------------------------------------------------------------- MgButton *mbp; int x, y; ボタンの表示位置 int w; 文字列(msg)から枠までのドット数 int num; このボタンが押された時に返す値 char *msg; ボタン内部に表示する文字列 int attr; msgを表示するアトリビュート int font; msgを表示するフォントサイズ プッシュボタン構造体にボタンを定義を追加します。中に文字列を表示します。 num は MgButtonOperation() 関数を呼び出した時、このボタンが押されていた場 合に返される値です。ボタンのサイズは、文字列の長さによって決まります。文字 列から枠までのドット数を w で指定します。文字列は、static 領域へのポインタ でなければなりません。この関数は、ボタン定義が失敗した場合は FALSE を返し ます。 ---------------------------------------------------------------------------- int MgButtonSetSheet( mbp, x, y, num, shon, shoff ) ---------------------------------------------------------------------------- MgButton *mbp; int x, y; ボタンの位置 int num; このボタンが押された時に返す値 Sheet *shon, ボタンが押された時の Sheet *shoff; ボタンが押されていない時の Sheet プッシュボタン構造体にボタンを定義を追加します。ボタンの表示はユーザーが与 えた Sheet パターンによって行ないます。MgButtonOperation() 関数を呼び出し た時、このボタンが押されていれば num で設定した値を返します。この関数は、 ボタン定義が失敗した場合は FALSE を返します。 ---------------------------------------------------------------------------- int MgButtonSetToggle( mbp, x, y, h, v, num, sw ) ---------------------------------------------------------------------------- MgButton *mbp; int x, y, h, v; ボタンの位置と大きさ int num; このボタンが変更された時に返す値 int *sw; ボタンの状態を格納する領域へのポインタ プッシュボタン構造体にトグルボタンの定義を追加します。このボタンは枠だけで すが、押された場合に ON/OFF を切り替えるトグル動作をします。中に何か表示し たい場合は他の Draw 命令と組み合わせてしようして下さい。MgButtonOperation() 関数を呼び出した時、このボタンの状態が変化したら num で設定した値を返しま す。また、ON/OFF の状態は *sw の領域に TRUE or FALSE の値で格納します。*sw 領域の初期化はユーザーアプリケーションで行なって下さい。この関数は、ボタン 定義が失敗した場合は FALSE を返します。 ---------------------------------------------------------------------------- int MgButtonSetTouch( mbp, x, y, h, v, num ) ---------------------------------------------------------------------------- MgButton *mbp; int x, y, h, v; ボタンの位置と大きさ int num; このボタンが押された時に返す値 プッシュボタン構造体にタッチボタン定義を追加します。このボタンは枠だけで、 中に何も表示しません。MgButtonOperation() 関数を呼び出した時、このボタンが 押されていれば num で設定した値を返します。外見は MgButtonSet と同様です。 MgButtonSet の方はボタンが押されてから離されるまで MgButtonOperation() の処 理は返ってきませんが、これはすぐ返ります。押されたらすぐ処理を行いたい場合 に使います。この関数は、ボタン定義が失敗した場合は FALSE を返します。 ---------------------------------------------------------------------------- int MgButtonSetMenu( mdp, x, y, h, v, num, exec, opt ) ---------------------------------------------------------------------------- MgButton *mbp; int x, y, h, v; ボタンの位置と大きさ int num; オプションコード1 int (*exec)(); int opt; オプションコード2 プッシュボタン構造体にイベントボタン定義を追加します。イベントボタンを設定 します。このボタンは枠だけで、中に何も表示しません。押されると、exec で指 定した関数を wp, info, mdp, opt の引数で呼び出します。exec 関数の戻り値が、 そのままボタンを押した時の返り値となります。例えば exec ルーチンを次のよう に定義しておけば、メニューボタンとして機能します。opt は複数のメニューの選 択など、ユーザーが自由に使用することができます。この関数は、ボタン定義が失 敗した場合は FALSE を返します。 - - - - - 使用例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MenuButtonExec( wp, info, mdp, opt ) WindowID wp; EventInfo *info; MgButton *mdp; int opt; { int menu, sx, sy; WindowGetScreenPosition( wp, &sx, &sy ); menu= PopUpMenu( mdp->x1+sx, mdp->y2+sy, item, items, font ); return mdp->ret + menu; } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ---------------------------------------------------------------------------- int MgButtonSetDraw( mbp, dbuf ) ---------------------------------------------------------------------------- MgButton *mbp; DrawBuf *dbuf; プッシュボタン構造体から描画手続きを設定します。定義したボタンの描画手続き を一気に設定します。戻り値は必要な描画手続きのステップ数です。1つの mdp に 多数ボタンは定義できます。ただし、描画は後から追加した方が先に行なわれるこ とに注意して下さい。 ---------------------------------------------------------------------------- int MgButtonClear( mbp ) ---------------------------------------------------------------------------- MgButton *mbp; プッシュボタン構造体のボタン定義を開放します。登録したボタンは全部消去され るので、その後再び MgButtonInit() して新たにボタンを登録し直すことができま す。 ---------------------------------------------------------------------------- int MgButtonOperation( wp, info, mdp ) ---------------------------------------------------------------------------- WindowID wp; EventInfo *info; MgButton *mbp; プッシュボタンの実際の操作を行ないます。この関数が呼び出されるとマウスボタ ンによって押されたかどうか調べます。押されていれば、それぞれのボタンに定義 した戻り値を返します。どのボタンも押されていなければ FALSE が返ります。値は マウスボタンを離した時に返ります。ボタンを押したまま、枠外にドラッグした場 合はそのボタン操作を無効にすることができます。(Touchボタンを除く) MgButton を使ったサンプルプログラムです。 - - - - - 使用例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #include #define OSE 1 #define KOREMO 2 EventExec( wp, info ) WindowID wp; EventInfo *info; { static MgButton mb; DrawBuf dbuf[20]; switch( info->option ){ case EventOpen: MgButtonInit( &mb ); MgButtonSetSymbol( &mb, 10, 10, 3, OSE, "押せ!", AttrDefault, 16 ); MgButtonSetSymbol( &mb, 30, 40, 3, KOREMO, "これも押せ", AttrDefault,16 ); return FALSE; case EventRedraw: DrawSetClear( dbuf, 1 ); WindowDraw( wp, dbuf, MgButtonSetDraw( &mb, dbuf+1 )+1 ); return TRUE; case EventMouseSwitch: if( info->LeftON ){ switch( MgButtonOperation( wp, info, &mb ) ){ case OSE: ConsoleOpen(); ConsolePrint( "押された!\r\n" ); break; case KOREMO: ConsoleOpen(); ConsolePrint( "これも押された!\r\n" ); break; } } return TRUE; } return FALSE; } int WindowHeapSize= 1024*2; WindowMain() { MgWindowDefaultOpen( 10, 10, 300, 80, "Ose", Icon, EventExec ); } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ---------------------------------------------------------------------------- 15. MgInput ライブラリ ユーザーに1行入力を行わせるためのライブラリです。表示エリアは小さくても、 左右スクロールによって比較的長い行の入力が可能になります。 WindowID MgInputScrollOpen( mp, x, y, wp, len, attr, font ) ---------------------------------------------------------------------------- MgInput *mp; MgInput 構造体 int x; 表示位置の座標 int y; WindowID wp; 親ウィンドウの ID int len; 表示させる文字数 int attr; 表示文字のアトリビュート int font; 使用するフォントサイズ MgInput 構造体を初期化し、指定位置にスクロールバーつき InputWindow を開きま す。このウィンドウの大きさは、フォントサイズ font と表示させる文字数 len に よって決まりす。入力できる文字数は常に最大 128 文字です。戻り値は開いた InputWindow の ID です。入力は InputKey() による行編集が可能です。またカー ソル位置に合せて自動スクロールします。マウスの左ボタンにより、入力中の文字 列はいつでも他のウィンドウに転送が可能となります。 ---------------------------------------------------------------------------- WindowID MgInputSimpleOpen( mp, x, y, wp, len, attr, font ) ---------------------------------------------------------------------------- MgInput *mp; MgInput 構造体 int x; 表示位置の座標 int y; WindowID wp; 親ウィンドウの ID int len; 表示させる文字数 int attr; 表示文字のアトリビュート int font; 使用するフォントサイズ MgInput 構造体を初期化し、指定位置に InputWindow を開きます。この場合は枠も スクロールバーもスクロールスイッチもありません。呼び出し元のプログラムで自 由に入力エリアを飾ることができます。このウィンドウの大きさは、フォントサイ ズ font と表示させる文字数 len によって決まりす。入力できる文字数は常に最大 128 文字です。戻り値は開いた InputWindow の ID です。入力は InputKey() によ る行編集が可能です。またカーソル位置に合せて自動スクロールします。マウスの 左ボタンにより、入力中の文字列はいつでも他のウィンドウに転送が可能となりま す。 ---------------------------------------------------------------------------- void MgInputRedraw( mp ) ---------------------------------------------------------------------------- MgInput *mp; MgInput 構造体 mp の指す InputWindow を描画します。親ウィンドウの EventRedraw 時に最後に 実行しておいて下さい。 ---------------------------------------------------------------------------- int MgInputSendEvent( mp, info ) ---------------------------------------------------------------------------- MgInput *mp; MgInput 構造体 EventInfo *info; mp の指す InputWindow にイベントを送信します。この関数によって、必要な処 理を InputWindow に行わせることができます。InputWindow で処理できるのは EventKey, EventMouseSwitch, EventMouseEnter, EventMouseOut です。このうち EventKey と EventMouseSwitch は必須です。また EventMouseEnter/Out を渡すこ とにより、カーソルの ON/OFF を行わせることができます。イベント実行ルーチン の戻り値がこの関数の戻り値となります。つまりイベントが受理された場合 TRUE を返します。 ---------------------------------------------------------------------------- char *MgInputGetPointer( mp ) (マクロ) ---------------------------------------------------------------------------- MgInput *mp; MgInput 構造体 入力した文字列が格納されるバッファのアドレスを得ます。 ---------------------------------------------------------------------------- void MgInputClear( mp ) ---------------------------------------------------------------------------- MgInput *mp; MgInput 構造体 入力中のバッファを全部消去します。 ---------------------------------------------------------------------------- void MgInputKey( mp, code, shift ) ---------------------------------------------------------------------------- MgInput *mp; MgInput 構造体 int code; キーコード int shift; シフトキーの状態 InputWindow にキー入力処理を行わせます。通常この関数は、MgInput のイベント ルーチンで勝手に呼び出されますので、特に使う必要はありません。プログラム側 で特別に文字を渡したい時に使って下さい。 ---------------------------------------------------------------------------- void MgInputSetCursorVisible( mp, sw ) ---------------------------------------------------------------------------- MgInput *mp; MgInput 構造体 int sw; 表示スイッチ カーソル表示の ON/OFF を行わせます。これも通常は MgInput のイベントルーチ ンで処理を行うようになっています。入力エリアが複数あり、ユーザーに選択させ る必要がある場合等に使って下さい。 ---------------------------------------------------------------------------- - - - - - 使用例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #include int WindowHeapSize= 0; EventExec( wp, info ) WindowID wp; EventInfo *info; { DrawBuf dbuf; static MgInput mp; switch( info->option ){ case EventOpen: WindowSetEventAttr( wp, EventAttrDefault|EventUserON ); MgInputScrollOpen( &mp, 10, 10, wp, 30, AttrDefault, 10 ); WindowRedraw( wp ); return TRUE; case EventClose: WindowClose( wp ); WindowConnectionClose(); return TRUE; case EventRedraw: DrawSetClear( &dbuf, 1 ); WindowDraw( wp, &dbuf, 1 ); MgInputRedraw( &mp ); return TRUE; case EventKey: if( info->KeyCode == '\r' ){ MgInputClear( &mp ); return TRUE; } case EventMouseSwitch: case EventMouseEnter: case EventMouseOut: return MgInputSendEvent( &mp, info ); case EventUser: return ClipGetKeyboardAll( wp, info ); } return FALSE; } WindowMain() { WindowTitleOpen( 10, 10, 200, 80, NULL, "mg", Push|Close, EventExec ); } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 16. Gposライブラリ 256/65536色モードの場合表示できるエリアは 512x512dot の範囲に限られます。 WSRV.X v2.24+13 以降追加された、512x512dot 範囲を任意の場所に移動する機能 を使いやすく管理するためのライブラリ群です。 int GposPopAndMove( wp, info ) ---------------------------------------------------------------------------- WindowID wp; ウィンドウの ID EventInfo *info; イベント情報 EventPop,EventMove の処理を行います。この時できるだけ自分のウィンドウがグ ラフィック表示できるよう、GV-RAM の HOME(Gpos) を変更し、必要なら他のウィ ンドウを Redraw します。戻り値は常に TRUE です。 ---------------------------------------------------------------------------- int GposSetOffset( x, y, h, v ) ---------------------------------------------------------------------------- int x; ポジション変更左上座標X int y; ポジション変更左上座標Y int h; ポジション変更範囲H int v; ポジション変更範囲V 256/65536色モード時に、指定の範囲が表示できる位置にG-VRAMのHOME位置(Gpos) をずらします。できるだけ最小の移動で済むよう移動最適化を行います。もしGpos が変更されたなら TRUE を、移動の必要がなかった場合は FALSE を返します。 ---------------------------------------------------------------------------- void GposGraphicRedraw( wp ) ---------------------------------------------------------------------------- WindowID wp; 自分のウィンドウID グラフィック使用アトリビュートが立っているウィンドウを全部 Redraw します。 もし wp が与えられている場合は、wp と一致するウィンドウには Redraw を送り ません。wp を省略する場合は NULL を与えて下さい。 ---------------------------------------------------------------------------- int GposInit( wp ) ---------------------------------------------------------------------------- WindowID wp; ウィンドウID 起動直後の Gpos 位置を調整します。グラフィック使用ウィンドウが Open したあ と、最初の WindowRedraw() をする直前に呼び出します。戻り値は常に TRUE です。 ---------------------------------------------------------------------------- int GposSetClear( wp, dbuf, color1, color2 ) ---------------------------------------------------------------------------- WindowID wp; ウィンドウID DrawBuf *dbuf; 描画バッファ int color1; 領域内の部分に描画する色(通常ColorGraphic) int color2; 領域外の部分に描画する色(通常ColorGray) 描画範囲チェック付き DrawSetClear() です。もしそのウィンドウが Gpos の描画 範囲内であればその部分を color1 で、範囲外なら color2 で描画します。描画範 囲からはずれた部分をマスク表示するために使います。戻り値は設定した描画ステッ プ数です。(最大2) ---------------------------------------------------------------------------- int GposSetFill( wp, dbuf, color1, color2, x1, y1, x2, y2 ) ---------------------------------------------------------------------------- WindowID wp; ウィンドウID DrawBuf *dbuf; 描画バッファ int color1; 領域内の部分に描画する色(通常ColorGraphic) int color2; 領域外の部分に描画する色(通常ColorGray) int x1, y1, x2, y2; 描画範囲 描画範囲チェック付き DrawSetLine( .., OptionFill ) です。もしそのウィンドウ が Gpos の描画範囲内であればその部分を color1 で、範囲外なら color2 で描画 します。描画範囲からはずれた部分をマスク表示するために使います。戻り値は設 定した描画ステップ数です。(最大2) 描画範囲の座標指定は、必ず x1 < x2 , y1 < y2 でなければなりません。 ---------------------------------------------------------------------------- 17. Dialog ライブラリ int DialogYesNo( msg, info ) ---------------------------------------------------------------------------- char *msg; 表示文字列 EventInfo *info; イベント情報 画面中央にダイアログウィンドウを開き、YES/NO 選択を行います。YES なら TRUE を、NO なら FALSE を返します。選択はマウスクリック、キー入力([y]と[n])が可 能です。ダイアログ処理中は他のイベントは止まります。 ---------------------------------------------------------------------------- WindowID DialogMessageOpen( msg, attr ) ---------------------------------------------------------------------------- char *msg; 表示文字列 int attr; 表示アトリビュート 画面中央にダイアログウィンドウを開き、メッセージ文字列を表示します。開いた ウィンドウの ID を返します。このダイアログを閉じる時は、その ID を使って WindowClose() を実行して下さい。 ---------------------------------------------------------------------------- 18. その他のウィンドウ関連 char *KoWindowGetEnv( ptr ) ---------------------------------------------------------------------------- char *ptr; 変数名 Ko-Window 上で環境変数を参照します。getenv() の代用関数です。corlib.ha の 内部で KoWindoGetEnv を getenv に define しています。返り値は環境変数に定 義されている内容のアドレスです。NULL が返った場合はその変数は定義されてい ません。static 領域のアドレスを返すことに注意して下さい。 ---------------------------------------------------------------------------- int KoWindowVersionCnv( ver ) ---------------------------------------------------------------------------- char *ver; バージョン文字列 サーバーのバージョン文字列を数値変換します。(8bit単位で4つの数値と見なす) 例 "2.24+12.8" -> 0x02180c08 , v2.24+13 -> 0x02180d00 ---------------------------------------------------------------------------- int KoWindowVersionCheck( ver ) ---------------------------------------------------------------------------- char *ver; チェックするバージョン文字列 サーバーのバージョンが、指定したバージョンより新しいかどうかチェックします。 新しければ正の数を、古ければ負の数を返します。(等しければ0) ---------------------------------------------------------------------------- int KoWindowHeapAlloc() ---------------------------------------------------------------------------- ウィンドウで使用する HEAP 領域を、起動後に確保します。この関数を使用する時 は、WindowHeapSize の初期値は 0 にした状態でコンパイルして下さい。その後、 起動後にプログラム中で WindowHeapSize に容量を代入してから呼び出します。す でに HEAP 領域が存在していると、それが使われているかいないかに関係なく無条 件で開放してしまいます。そのため呼び出しはできるだけ一度だけにして下さい。 この関数は、起動後にオプションスイッチで HEAP 容量を指定できるようにするた めに存在しています。HEAP 領域を確保できた場合は TRUE を返し、確保できなけ れば FALSE を返します。 ---------------------------------------------------------------------------- int KoWindowXfStat() ---------------------------------------------------------------------------- [XF1]〜[XF5]のキー情報を入手します。info->ShiftStat のように、修飾キーとし て [XF?] を使う場合に使用します。 戻り値 bit2 [記号] bit3 [登録] bit5 [XF1] bit6 [XF2] bit7 [XF3] bit8 [XF4] bit9 [XF5] ---------------------------------------------------------------------------- -- 最終更新 1995 11/14 COR.