                        Visual Interface Library
                                Ｖ Ｉ Ｌ
                                Ver.3.00
                         リファレンスマニュアル




§１  ＶＩＬ概要

  ＶＩＬ（Visual Interface Library）とは，Ｆ−ＢＡＳＩＣ３８６のプログラ
ムでマルチウィンドウ表示／マウス・パッド入力などのユーザ・インタフェース
を実現するための，サブルーチン集です。

  最近のＴＯＷＮＳ用アプリケーションでは，こうしたインタフェースを用意す
るものが多くなっています。Ｈｉｇｈ−Ｃではこうした機能がライブラリとして
提供されるため，プログラマは作成中のプログラムから関数を呼び出すだけで済
みます。しかし，Ｆ−ＢＡＳＩＣ３８６にはそんな便利なものは用意されていな
いので，インタフェースのルーチンを自分で組む必要があります。

  ＶＩＬはＢＡＳＩＣ上でＣのライブラリに相当するものを実現しようとして作
ったものです。もちろんＢＡＳＩＣのサブルーチンはＣの関数ほど独立性が高く
なく，パラメータの渡し方が複雑になるなどの問題はあるのですが，Ｆ−ＢＡＳ
ＩＣ３８６では

    ・ラベルがサポートされたため，サブルーチンを名前で呼び出すことがで
      き，RENUM の影響を受けずにすむ。

    ・変数名が４０字まで区別されるため，ＶＩＬ内の全変数名を"VIL_"で始め
      ることで，疑似的にローカル変数（と言えるほどのものではないが）を実
      現できる（少なくとも呼び出し側との変数名衝突回避が容易になる）。

    ・高速な３２ビット機上で動作するため，パラメータ設定やサブルーチン呼
      び出し，長い変数名などのオーバヘッドがほとんど無視できる。

等の理由から，充分実用になると思います。

　設計方針として，

    ・本ライブラリを使用して作成するアプリケーションとしては，非アクショ
      ン系のゲーム，およびパターンエディタなどのツール類を想定。

    ・したがって速度より機能優先だが，快適なレスポンスは保証する

というふうに考えています。高機能かつある程度の効率のよさを確保しようとし
たため，本ライブラリのプログラミング上のインタフェースは，若干複雑なもの
になっています。したがって，思うように使いこなすにはある程度の知識と慣れ
が必要ですが，使い込めばＣで記述したものに劣らないアプリケーションを作成
することができます。

　現バージョンでは以下の機能が実現されています。

    ・スタック型の疑似マルチウィンドウ
      複数のウィンドウをオーバラップして開くことができる。ただし，上下関
      係を入れ替えたり，下になっているウィンドウに描画したりはできない。

    ・マウス／パッド／キーボードによるメニュー選択入力
      キーボード／パッド入力はキー割り当てのカスタマイズ可能。

    ・キーボードによる文字列入力機能
      INPUT 文を使わないためサイドワークや割り込みが有効。また，日本語入
      力も可能。ヒストリー機能も持つ。

    ・ウィンドウマネージャ
      ウィンドウの枠・スイッチ描画，各ウィンドウの位置管理，ドット単位の
      オープン／クローズ／移動／サイズ変更などが可能。操作はマウス／パッ
      ド／キーボードに対応。



§２  ＶＩＬ概念

  あなた（以下プログラマ）が，あるソフトを作るためＢＡＳＩＣでプログラム
を作るとします。このプログラムを以後アプリケーションと呼びます。
  アプリケーション中でＶＩＬが実現している機能が必要になった場合，プログ
ラマはアプリケーション中でその機能をプログラムする代わりに，定められた設
定を行った後，ＶＩＬ内のサブルーチンにGOSUB をかけます。サブルーチンはプ
ログラマが必要とする処理を行った後，RETURNでアプリケーションに制御を戻し
ます。

  より厳密にいうと，ＶＩＬを利用したアプリケーションは次の図のようになり
ます。


      ＶＩＬ                       　　　              アプリケーション
        │                       　　 プログラム先頭にマージ │
        ├─ ローダファイル  ←───────────────┘
        │                   ────────────────┐
        │                        パッケージファイルをマージ │
        │                        汎用変数初期化             ↓
        └─ パッケージファイル                        アプリ変数等初期化
               │                                            │        
               ├─ パッケージ              呼出し           │
               │    │                  ←─────────┘
               │    ├初期化モジュール  ──────────┐
               │    ├機能モジュール    パッケージを初期化  ↓
               │    ├   :                            《メインルーチン開始》
               │    ├   :                 呼出し           │
               │    └機能モジュール    ←─────────┘
               │                        ──────────┐
               ├─ パッケージ           モジュール機能処理　↓
               ├─    :                                     :
               └─ パッケージ                               :


  ＶＩＬの実体はローダファイルとパッケージファイルからなっています。

  パッケージファイルは実現する機能（マルチウィンドウ，メニュー選択等）毎
に複数のパッケージに分かれ，各パッケージは１個の初期化モジュールと１個以
上の機能モジュールから成っています。ここでいうモジュールとは要するにサブ
ルーチンのことですが，先頭に

        *VIL_○○_××
            ○○    : パッケージ名
            ××    : モジュール名（初期化モジュールはINITM）

の形のラベルが付けられています。モジュールの呼び出しは，引数として必要な
変数値を設定した後，このラベルに対してGOSUB をかけることで行います。した
がって，行番号やモジュール内のプログラム構造を気にする必要はありません。
また，プログラマが"VIL_"で始まるラベルを付けないようにすれば，ＶＩＬとラ
ベル名が衝突する心配もありません。

  同様に，ＶＩＬ内で使用される変数（以下ＶＩＬ変数と呼びます）はプログラ
マが使用する変数名との衝突を避けるため，

    ・汎用変数
        *VIL_××
    ・パッケージ変数
        *VIL_○○_××
            ○○    : パッケージ名

の形をしています。ここで汎用変数とはＶＩＬ全体で引数の受渡しやワーク等に
使用されるものであり，パッケージ変数とはそのパッケージ内のみで使用される
変数です。
  また，ＶＩＬ変数にはプログラマのDEFINT/LNG/SNG/DBL/STR宣言の影響を避け
るため，すべて型宣言文字が付けられています。ただしほとんどはINT 型なので，
プログラマがDEFINT Vなどと宣言すれば，ＶＩＬ変数値の設定・参照の際に"%"
は省略できます。

　ローダファイルはパッケージファイルをアプリケーションにマージし，ＶＩＬ
全体の初期化を行います。このファイルをアプリケーションの先頭にマージして
おくことにより，このアプリケーションを走らせるだけで自動的にパッケージフ
ァイルが読み込まれ，その機能を利用できるようになります。

　実際に各パッケージの機能を利用するためには，それぞれ変数領域確保等の初
期設定が必要です。これらの中には画面退避バッファの確保などメモリを大幅に
消費するものもあるため，アプリケーションで使用しないパッケージの初期設定
はメモリの無駄になります。そのため，各パッケージ毎に初期設定用のサブルー
チンを独立して用意するようになっています。このサブルーチンを初期化モジュ
ールと呼びます。実際の手順としては，アプリケーションの初期化ルーチン内に
おいて，使用したいパッケージの初期化モジュールを順に呼び出します。

　アプリケーション中のメインルーチン内でパッケージの機能を利用するには，
その機能が必要な箇所で対応する機能モジュールを呼び出します。



§３　ＶＩＬ使用法

§３．１　インストール

　今回提供するバージョンは，以下のファイル構成になっています。これらを
すべて，ＨＤＤなどの適当なディレクトリにコピーしてください
（VILディレクトリの下にまとめてあります）。

    ・ローダファイル
    　VIL.BAS
        初期設定，およびパッケージのマージ処理ルーチン
        100 〜9999行

  　・パッケージファイル
    　VIL_BAS.BAS
        基本パッケージ（マルチウィンドウ，メニュー選択）
        40000 〜44999 行
    　VIL_VWM.BAS
        ウィンドウマネージャ・パッケージ
        45000 〜49999 行

    ・設定ファイル類
      VIL.CNF
        ＶＩＬ設定ファイル
      APPLI.CNF
        アプリ設定ファイル
      APPLI.ORG
      　初期アプリ環境ファイル
    ・アプリ側ルーチンのテンプレート
    　VIL_INIT.BAS
        ＶＩＬ初期化手順


§３．２　アプリケーション作成手順

  まずＦ−ＢＡＳＩＣ３８６インタプリタを立ち上げます。ＶＩＬをインストー
ルしたディレクトリをカレントにして，ローダ・プログラムVIL.BAS を実行する
と，VIL_BAS.BAS,VIL_VWM.BASがマージされて終了します。
  この段階で10000 〜39999 行が空いていますので，ここにアプリケーションを
作成してください。
  最初に実行した段階でパッケージのマージルーチンは自動的に削除されるので，
以後はプログラムをRUN してもマージし直すことはしませんし，RENUM をかけて
も構いません。普通にＢＡＳＩＣのプログラムを組むのと同様に，ルーチンを付
け足しては気軽に走らせてみるようなプログラミングができます。ただしアプリ
ケーション作成には以下の制限がつきます。

    ・アプリケーションの先頭（ローダファイルのルーチン以降で，機能モジュー
      ルを呼び出す前）で，使用するパッケージの初期化モジュールを呼び出し
      てください（各々のモジュールの呼び方は§４参照）。

    ・ＶＩＬ変数が初期化されてしまうため，アプリケーション中でCLEAR 文は
      使用できません。必要ならばローダルーチンの先頭のCLEAR 文を書き換え
      てください。

    ・"VIL_"で始まる変数名は使用しないでください。

    ・"*VIL_"で始まるラベル名は使用しないでください。

    ・各機能モジュール呼出し時には，パラメータや画面モード等に制限がつく
      場合があります。具体的な制限事項については§４を参照してください。

    ・実行時エラー対処のためエラートラップが掛かっています。デバッグ中は
      必要に応じ無効化してください（§３．３．５参照）。

　アプリケーションが出来上がったら，いったんＶＩＬのルーチンをDELETE
し，必要ならRENUMをかけて10000 〜39999 行に収めます。これに再びVIL.BAS
をマージして，プログラムが完成します。
　後は，

    ・このままセーブする。
      パッケージが含まれないのでプログラムサイズは小さくなるが，毎回パッ
      ケージファイルをマージするため起動は多少遅くなる。また，パッケージ
      ファイルをインストールしたディレクトリを指定するため，§３．３で述
      べるVIL.CNF ファイル中に環境変数VILDIRを設定しておく必要がある。

    ・一度走らせてパッケージをマージしてからセーブする。
      プログラムサイズは多少大きくなるが，起動は速くなる。

    ・一度走らせてパッケージをマージしてからセーブし，これをコンパイルす
      る。
      プログラムサイズは一番大きくなるが，Ｆ−ＢＡＳＩＣ３８６インタプリ
      タなしで実行でき，実行速度も速くなる。ただし作成時に（当然）Ｆ−Ｂ
      ＡＳＩＣ３８６コンパイラが必要。

のうち好きな方法で使用してください。



§３．３　ローダファイル説明

　ローダファイルの機能は，

    １．汎用変数の宣言
    ２．設定ファイル"VIL.CNF" の読み込みと環境変数の設定
    ３．パッケージファイルのマージ
    ４．パッケージ用ユーザ定義関数の宣言
    ５．ＶＩＬ汎用モジュールの提供

です。§３．２の手順でアプリケーションの先頭にマージすることにより自動的
に実行されますが，以下プログラマに関係する部分について説明します。


§３．３．１　汎用変数

  汎用変数はＶＩＬ全体で引数の受渡しやワーク等に使用されるため，ここでま
とめて宣言されます。


§３．３．２　設定ファイル"VIL.CNF" と環境変数

  ＶＩＬのパッケージにはデータ等を外部ファイルとして持つものがあり，これ
らの中にはＶＩＬを使用したアプリケーション間でファイルを共用できるものも
あります。そこで，こうしたファイルへのパスなどを設定ファイル"VIL.CNF" に
より環境変数（ＭＳ−ＤＯＳでの環境変数と用途が似ているためこう呼びますが，
実体は単なるＢＡＳＩＣの変数です）に設定できるようにしてあります。

　ＶＩＬのローダファイルが実行されると，

    １．カレントディレクトリ
　  ２．カレントドライブのルートディレクトリ

の順に"VIL.CNF" ファイルを捜します。どちらにも見つからなければ環境変数の
設定は行いません。
　したがって，

　　１．ルートディレクトリに標準的な"VIL.CNF"を置いておく
　  ２．１．とちがう設定をしたいアプリケーションのみ，同一ディレクトリ内
　      に"VIL.CNF"を用意する

ようにすればよいでしょう。

　"VIL.CNF" の書式は

    ・空行は無視される。
    ・行頭に"'"があれば，その行はコメント行として無視される。
    ・環境変数の設定は，変数名とその内容を一個以上のスペースで区切っ
      て書く。
      変数名の前，内容の後に余分なスペースをつけてはいけない
      （厳密には，行頭から初めてスペースが現れるまでが変数名，そこから連
      続しているスペースを読み飛ばして，それ以外の文字が現れてから行末ま
      でを内容と見なす）

となっています。付属の"VIL.CNF" を参考にしてください。

　現バージョンにおいて，システムでは次の環境変数を使用します。

    ・VILDIR
      VIL_DIR$に「内容」が代入されます。
      パッケージファイルのあるドライブおよびディレクトリを指定します。
      （VIL_DIR$+ ファイル名でパッケージファイルを読み込みます）
      設定がなければ内容は""になります（カレントドライブとみなします）。

    ・APPLICNF
      VIL_APPCNF$ に「内容」が代入されます。アプリ設定ファイル（各初期化
      モジュールで使用）名を指定します。カレントディレクトリ以外に存在す
      る場合は，ドライブ・パスも指定してください。
      設定がなければ内容は"APPLI.CNF" になります。

    ・APPLIENV
      VIL_ENV_ENV$に「内容」が代入されます。アプリ環境ファイル（アプリ環
      境パッケージの説明参照）名を指定します。カレントディレクトリ以外に
      存在する場合は，ドライブ・パスも指定してください。
      設定がなければ内容は"APPLI.ENV" になります。

    ・APPLIORG
      VIL_ENV_ORG$に「内容」が代入されます。初期アプリ環境ファイル（アプ
      リ環境パッケージの説明参照）名を指定します。カレントディレクトリ以
      外に存在する場合は，ドライブ・パスも指定してください。
      設定がなければ内容は"APPLI.ORG" になります。

  これ以外に，アプリケーション独自の環境変数をプログラマが使用することが
できます。"VIL.CNF" 内で定義された環境変数は，変数名がVIL_ENVNAM$() ，内
容がVIL_ENVVAL$() に順に格納されます。また，VIL_ENVNUM% に現在定義されて
いる個数が格納されています。プログラマが定義した環境変数の内容を知るには，

    変数=デフォルト値
    N%=SEARCH(VIL_ENVNAM$,"環境変数名")
    IF N%>-1 THEN 変数=VIL_ENVVAL$(N%)

のようにしてください。その環境変数が"VIL.CNF" に設定されていれば，その内
容を変数に読み込むことができます。


§３．３．３　パッケージファイルのマージ

  マージルーチンはマージ処理後削除されます。
  ここを書き換えて"○○.BAS"の代わりに"○○.SRC"とすると，コメント入りの
パッケージファイルがマージされます（当然○○.SRCもインストールしておく必
要があります）。アプリケーションの作成中はオンラインマニュアルとして使え
るので便利です。


§３．３．４　パッケージ用ユーザ定義関数

  パッケージ内で使用されるユーザ定義関数ですが，当然プログラマも使用でき
ます。
  現バージョンでは以下のものが用意されています。

    ・FNVIL_P2S$(X&)
      正のロング整数X&を文字列に変換する。STR$関数と異なり先頭にスペース
      が付かない。

    ・FNVIL_P2SS$(X&,Y%)
      正のロング整数X&をY%桁の文字列に変換する。Y%桁ないときは左にスペー
      スが詰められる。

    ・FNVIL_P2S0$(X&,Y%)
      正のロング整数X&をY%桁の文字列に変換する。Y%桁ないときは左に"0" が
      詰められる。

    ・FNVIL_I2S$(X&)
      ロング整数X&を文字列に変換する。STR$関数と異なり先頭にスペースが付
      かない。

    ・FNVIL_I2SS$(X&,Y%)
      ロング整数X&をY%桁の文字列に変換する。Y%桁ないときは左にスペースが
      詰められる。

    ・FNVIL_I2S0$(X&,Y%)
      ロング整数X&をY%桁の文字列に変換する。Y%桁ないときは符号の後，左に
      "0"が詰められる。

    ・FNVIL_R2S$(X#)
      倍精度実数X#を文字列に変換する。STR$関数と異なり先頭にスペースが付
      かない。

    ・FNVIL_R2SS$(X#,Y%,Z%)
      倍精度実数X#を整数部分Y%桁，小数部分Z%桁の文字列に変換する（計Y+Z+
      1桁）。Y%桁ないときは左にスペースが詰められる。

    ・FNVIL_R2S0$(X#,Y%,Z%)
      倍精度実数X#を整数部分Y%桁，小数部分Z%桁の文字列に変換する（計Y+Z+
      1桁）。Y%桁ないときは符号の後，左に"0"が詰められる。


§３．３．５　ＶＩＬ汎用モジュールの提供

　ＶＩＬの各モジュールが使用する汎用サブルーチンです。

    ・*VIL_ERR_ON
      エラートラップを有効にします。

    ・*VIL_ERR
      エラートラップルーチンです。VIL_E%にエラー番号を格納し，エラー行の
      次行に復帰します。

    ・*VIL_CNFOP
      アプリ設定ファイルをオープンします。正常終了すればVIL_E%は0 になり
      ます。

    ・*VIL_CNFCL
      アプリ設定ファイルをクローズします。正常終了すればVIL_E%は0 になり
      ます。

    ・*VIL_CNFERR
      アプリ設定ファイルにエラーがあったときの処理ルーチンです。
      現バージョンではエラー行を表示して強制終了します。

    ・*VIL_LNR
      ファイル番号1 のファイルから一行読み込みます。ただし，読み込み結果
      が空行，あるいは先頭が"'" のときは，新たに一行読みなおします（空行
      ・コメント行のスキップ）。


§３．３．６　その他の注意事項

  ＶＩＬでは実行時エラー（ディスクの書き込みプロテクトなど）に対処するた
め常時エラー割り込みを有効にしています。ローダファイル内のエラートラップ
ルーチンでは，汎用変数VIL_E%にエラー番号をセットし，RESUME NEXT によりエ
ラーが発生した次の行に復帰します。このため，アプリケーション中でも，

    １．VIL_E%=0
    ２．実行時エラーが起こりうる命令（フロッピーへのファイルオープンなど）
        を実行
    ３．VIL_E%>0なら，エラー対処処理を実行（メッセージ表示など）

の手順で実行時エラーに対処できます。
  ただし，プログラム開発中は単純なシンタックスエラーでも止まらずに次の行
に進んでしまうため，不都合がでてきます。このような場合はON ERROR GOTO 0
をアプリケーション中で実行してください。また，GOSUB *VIL_ERR_ON により割
り込みを有効にすることができます。

  CLEAR 文はせっかくローダファイルが行った設定を無効にしてしまうため，ア
プリケーション中では使用できません。必要ならばローダファイル先頭のCLEAR
文を書き換えてください。



§３．４　パッケージファイル説明


§３．４．１　パッケージ初期化

　アプリケーションの初期化ルーチン内で，以下の手順を行ってください。

    １．GOSUB *VIL_CNFOPを実行
        アプリ設定ファイルがオープンされます。
        オープンに失敗した場合は，以下の処理が正常に実行されません。この
        場合はVIL_E%にエラーコードが入るので，この値をチェックして適当な
        処理をすることをお勧めします。

    ２．使用するパッケージ毎に，次のようにして初期化モジュールを呼び出し
        てください。
        ａ．入力変数に値を設定（必要な入力変数は§４を参照）。
        ｂ．GOSUB *VIL_○○_INITM       （○○はパッケージ名）

    ３．GOSUB *VIL_CNFCLを実行
        アプリ設定ファイルがクローズされます。
        クローズに失敗した場合もVIL_E%にエラーコードが入りますが，こちら
        はあまり気にする必要はありません。

  これによりパッケージ変数の宣言・初期化，画面モード等の設定等が行われ，
以後そのパッケージ内の機能モジュールを呼び出すことができるようになります。
  ただし，各初期化パッケージの呼び出し順序は，アプリ設定ファイルにおける
各パッケージ用データの記述順序と一致するようにしてください。使用しないパ
ッケージに関しては，この処理は必要ありません（アプリ設定ファイルの該当デー
タは無視されます）。

  このパッケージ初期化処理については，テンプレートとしてVIL_INIT.BASを用
意してあります。これを作成プログラムに組み込んで修正すると楽だと思います。


§３．４．２　パッケージ機能の利用

　§３．４．１の手順で初期化すると，機能モジュールが利用できるように
なります。アプリケーション中でパッケージの機能が必要になったときは，

    １．入力変数に値を設定（必要な入力変数は§４を参照）。

    ２．GOSUB *VIL_○○_××  （○○_××はモジュール名）
   　   として，必要な機能を実現する機能モジュールを呼び出す。

    ３．処理結果が値として返される場合は，必要ならば出力変数（§４参照）
        の値を参照する。

という処理を記述します。



§３．５　アプリ設定・環境ファイル説明


§３．５．１　アプリ設定ファイル

  キー割り当てやマウスカーソルパターンなど，アプリケーションの動作により
変化することはないがユーザが修正できると便利なデータや，アプリ間で共有す
ることでインタフェースの統一がはかれるようなものを，このファイル上に記述
します。ファイル上のデータは各パッケージの初期化モジュールで読み込まれま
す。
  全体の書式としては，次のようになっています。

    ・空行はすべて無視される。

    ・行頭が"'" で始まる行は，コメント行として無視される。

    ・各パッケージのデータは，識別行"#パッケージ名" の後に，所定のフォー
      マットで記述する。

　現バージョンでは，以下のデータを記述するようになっています。

    ・BEEPパッケージ
        データなし

    ・WINパッケージ
        データなし

    ・MSELパッケージ
        ＢＣ描画モード（0:矩形枠 ／　1:矩形反転）
            APPLI.CNFでは0
        キー割当テーブル
            APPLI.CNFでの割当は，同ファイルを参照してください。
        パッドボタン割当テーブル
            APPLI.CNFでの割当は，同ファイルを参照してください。

    ・INPパッケージ
        データなし

    ・VWMパッケージ
        マウスカーソル資源
            APPLI.CNF では次のようになっています。
              標準マウスカーソル
                BASIC 標準のシンプルな矢印ではなく，TownsOS などで使用さ
                れる影付の矢印
              ウィンドウ移動用マウスカーソル
                TownsOS などでウィンドウ移動時に使用される開いた手の形
              ウィンドウサイズ変更用マウスカーソル
                TownsOS などでウィンドウサイズ変更時に使用されるピンセッ
                トの形

    ・SELパッケージ
        データなし


§３．５．２　アプリ環境ファイル

  ウィンドウ位置やヒストリーなど，アプリケーションの動作により変化するデー
タを，このファイルで保管します。プログラマはこれの初期ファイルとして，各
データの初期値を記述します。以後はアプリケーション中でこのファイルの読み
込み／保存を行うことで，変化したデータが保持されていきます。
  全体の書式としては，アプリ設定ファイルと同様に次のようになっています。

    ・空行はすべて無視される。

    ・行頭が"'" で始まる行は，コメント行として無視される。

    ・各パッケージのデータは，識別行"#パッケージ名" の後に，所定のフォー
      マットで記述する。

　現バージョンでは，以下のデータを記述するようになっています。

    ・BEEPパッケージ
        ブザーフラグ（0:ＯＦＦ／-1:ＯＮ）
            APPLI.ORGでは-1

    ・WINパッケージ
        データなし

    ・MSELパッケージ
        マウス・パッドのリピート開始までのウェイト
            APPLI.ORGでは50

    ・INPパッケージ
        ヒストリーデータ
            APPLI.ORGではダミーで保存個数１の１系列のみ

    ・VWMパッケージ
        ウィンドウ枠の（G,R,B）輝度
            APPLI.ORGでは128,128,128
        背景色の（G,R,B）輝度
            APPLI.ORGでは0,  0,  0
        ウィンドウ位置
            APPLI.ORGではシステム予約分(1〜99 )のみ

    ・SELパッケージ
        データなし



§４．ＶＩＬパッケ−ジ・リファレンスマニュアル


§４．１　リファレンスマニュアル書式

◎パッケ−ジ名
  各パッケージには英字数文字のパッケージ名が付けられています。また，本マ
ニュアル中のパッケージ呼称として，日本語名も併記しています。

○必要パッケージ
  この項に挙げられたパッケージ内のモジュールは，このパッケージ内のモジュー
ルにより呼び出されることがあります。したがって，アプリケーション中でそれ
らのパッケージを直接使用していなくても，組み込んでおく必要があります。

○パッケージ変数
  このパッケージ内で定義・使用される変数です。汎用変数と異なり，常に意味
のある値が格納されています。
  この項目では，変数名冒頭の"VIL_"は省略しています。
  初期化モジュールを呼び出すことにより，宣言・初期化されます。

○説明
  このパッケージにより提供される機能，使用に際しての注意点等を説明します。
なお，誤解がないと思われる場合，変数名・ラベル名の冒頭の"VIL_"は省略して
います。

○モジュール一覧
  このパッケージに含まれる各モジュール名とその使用法です。

    *VIL_○○_××
        ○○    : パッケージ名
        ××    : モジュール名

が，モジュールの入口ラベル名になっています。
  最初に挙げられているのが初期化モジュール（モジュール名末尾が"_INITM"と
なっているモジュール）で，パッケージ変数の初期化等を行います。このパッケー
ジを使用する場合，アプリケーションの初期化ルーチンにおいて一度だけこのモ
ジュールを呼出して下さい。
  ２番目以降が機能モジュールです。その機能が必要になった時点で呼び出して
下さい。

●入力変数
  必要なパラメータをアプリケーションから渡すための変数です。
  汎用変数（*VIL_×× の形のもの）は他のパッケージにおいて値が破壊されて
いる可能性があるので，このモジュールを呼び出す直前に必ずこれらの変数に適
切な値を代入してください。
  パッケージ変数（*VIL_○○_××の形のもの）についても，通常そのモジュー
ルを呼び出す際に設定するものを挙げてあります。こちらは設定しなければ現在
の値が使用されます。
  変数名冒頭の"VIL_"は省略しています。

●出力変数
  アプリケーションに処理結果を返すための変数です。必要ならば，このモジュー
ルからの復帰直後にこれらの値を参照してください（汎用変数の場合，他のモジ
ュールを呼出してしまうと値が破壊される場合があります）。
  変数名冒頭の"VIL_"は省略しています。
●説明
  このモジュールを呼び出すことにより実現される機能，使用に際しての注意点
等を説明します。
  誤解がないと思われる場合，変数名・ラベル名の冒頭の"VIL_"は省略していま
す。


§４．２　基本パッケージファイル（VIL_BAS.BAS）


◎ENV（アプリ環境ファイルパッケージ）
○必要パッケージ
　なし
○パッケージ変数
  ENV_ENV$      : アプリ環境ファイル名（パス付）
　ENV_ORG$      : 初期アプリ環境ファイル名（パス付）
○説明
  環境ファイルのオープン／クローズ処理を行います。
  環境ファイルとは，変数値をファイルに書き出すことによりアプリケーション
の状態を保存し，次にこのアプリケーションを立ち上げた時に前の状態を再現で
きるようにするためのものです。本パッケージにより環境ファイルをオープンし
た後，各パッケージの環境ファイル入出力モジュール（ENVR,ENVW ）を呼び出す
ことで，ＶＩＬパッケージの状態を保存・復元することができます。また，プロ
グラマが定義した変数を保存・復元することも可能です。
  読み込みにおいては，
    １．ENV_ENV$の内容（環境変数APPLIENVで指定可能）で示されるファイルを
        オープン
    ２．１．が存在しなければ，ENV_ORG$の内容（環境変数APPLIORGで指定可能）
        で示されるファイルをオープン
　書き込みにおいては，
    １．ENV_ENV$の内容（環境変数APPLIENVで指定可能）で示されるファイルを
        オープン
という形をとります。つまり，アプリ環境ファイルの初期設定版を用意してこの
ファイル名をAPPLIORGに，別のファイル名をAPPLIENVに指定しておけば，最初の
立ち上げで初期設定版を読み込んだあと書き込みによりAPPLIENVのファイルを作
成し，次の立ち上げからはこれを使うようになります。 
  これを利用すると，ＣＤＲＯＭから初期設定を読み込んで保存はＦＤに行った
りできます。

○モジュール一覧

１．ENV_INITM           初期化モジュール
●入力変数
　なし
●出力変数
　ENV_ENV$      : アプリ環境ファイル名（パス付）
　ENV_ORG$      : 初期アプリ環境ファイル名（パス付）
●説明
  "VIL.CNF"で環境変数APPLIENV を設定していれば，その内容を（パスを含めた）
アプリ環境ファイル名とみなします。
  "VIL.CNF"で環境変数APPLIORG を設定していれば，その内容を（パスを含めた）
初期アプリ環境ファイル名とみなします。

２．ENV_ROP             アプリ環境ファイル入力オープン
●入力変数
　ENV_ENV$      : アプリ環境ファイル名（パス付）
　ENV_ORG$      : 初期アプリ環境ファイル名（パス付）
●出力変数
　E%            : 0      : 正常終了
                　その他 : オープン失敗
●説明
  アプリ環境ファイルをリードモードでオープンします。
  ENV_ENV$で示されるファイルをオープンしますが，これが読めないときはENV_
ORG$で示されるファイルをオープンします。どちらも読めなければ，E%に0 以外
（エラー番号）を返します。

３．ENV_RCL             アプリ環境ファイル入力クローズ
●入力変数
　なし
●出力変数
　なし
●説明
　リードモードでオープンしたアプリ環境ファイルをクローズします。

４．ENV_WOP             アプリ環境ファイル出力オープン
●入力変数
　ENV_ENV$      : アプリ環境ファイル名（パス付）
●出力変数
　E%            : 0      : 正常終了
                　その他 : オープン失敗
●説明
  環境ファイルをライトモードでオープンします。
  ENV_ENV$で示されるファイルをオープンします。失敗すれば，E%に0 以外
（エラー番号）を返します。
  すでに同名ファイルが存在していた場合は上書きします。

５．ENV_WCL             アプリ環境ファイル出力クローズ
●入力変数
　なし
●出力変数
　なし
●説明
　ライトモードでオープンした環境ファイルをクローズします。

６．ENV_ERR             アプリ環境ファイルエラー
●入力変数
　なし
●出力変数
　なし
●説明
　各パッケージのアプリ環境ファイル入出力モジュール（ENVR,ENVW）中
でエラーが発生した場合，このモジュールが呼び出されます。
　現バージョンでは，環境ファイル中のエラー行を表示して，アプ
リケーションを強制終了します。


◎BEEP（ブザー音パッケージ）
○必要パッケージ
　なし
○パッケージ変数
　BEEP_F%       : ブザーフラグ（-1:ON / 0:OFF）
○説明
　受理時/エラー時のブザー音を鳴らします。

○モジュール一覧

１．BEEP_INITM          初期化モジュール
●入力変数
　なし
●出力変数
　BEEP_F%       : ブザーフラグ（-1:ONに設定）
●説明
　ブザーはデフォルトでオンです。

２．BEEP_ENVR           アプリ環境ファイル読み込み
●入力変数
　なし
●出力変数
　BEEP_F%       : ブザーフラグ（-1:ON / 0:OFF）
●説明
  ブザーフラグをアプリ環境ファイルに保存します。
  本モジュール呼び出し前に，ENV_ROP を呼び出してアプリ環境ファイルを入力
オープンしておいてください。

３．BEEP_ENVW           アプリ環境ファイル書き込み
●入力変数
　BEEP_F%       : ブザーフラグ（-1:ON / 0:OFF）
●出力変数
　なし
●説明
  ブザーフラグをアプリ環境ファイルから読み込みます。
  本モジュール呼び出し前に，ENV_WOP を呼び出してアプリ環境ファイルを出力
オープンしておいてください。

４．BEEP_G              受理ブザー音
●入力変数
　BEEP_F%       : ブザーフラグ（-1:ON / 0:OFF）
●出力変数
　なし
●説明
　正常入力時などに鳴らすためのブザー音です。
　BEEPコマンドの隠し機能を利用しているので，このモジュール使用後は"BEEP"
を実行しても通常の音は出なくなります。

５．BEEP_B              エラー・ブザー音
●入力変数
　BEEP_F%       : ブザーフラグ（-1:ON / 0:OFF）
●出力変数
　なし
●説明
　異常入力時などに鳴らすためのブザー音です。
　BEEPコマンドの隠し機能を利用しているので，このモジュール使用後は"BEEP"
を実行しても通常の音は出なくなります。


◎WIN（ウィンドウ・パッケージ）
○必要パッケージ
　なし
○パッケージ変数
　WIN_X%,WIN_Y%     : アクティブウィンドウ左上隅座標
　WIN_W%,WIN_Z%     : アクティブウィンドウ右下隅座標
  WIN_UB%,WIN_DB%   : ウィンドウ枠の上部・下部幅
  WIN_LB%,WIN_RB%   : ウィンドウ枠の左部・右部幅
  WIN_AN%           : 現在のアクティブウィンドウ番号
                      （0:ウィンドウなし / 1..W1%）
　WIN_PM%           : 座標モード（0:絶対座標 / -1:相対座標）
  WIN_BFMAX&        : 画面退避バッファサイズ
  WIN_ANMAX%        : 最大ウィンドウ番号
  WIN_BF%()         : 画面退避バッファ
  WIN_BFO&()        : WIN_BF%() オフセット
  WIN_X%(),WIN_Y%() : ウィンドウ左上隅座標
  WIN_W%(),WIN_Z%() : ウィンドウ右下隅座標
○説明
  マルチウィンドウ表示を行うための，基本機能を提供します。
  画面は16色モードのページ０を使用します。GET ・PUT でウィンドウを実現す
るためテキスト表示は使えません（表示はできるがウィンドウに隠れない）。文
字表示はSYMBOL文を使用してください。
　ページ１は本パッケージで使用しないので，アプリケーション側で壁紙表示な
どに利用できます。この場合，ページ１は３万色モードにすることも可能です。
ただし，入力パッケージにおいて全角入力を行うためには，ページ１はテキスト
画面にしておく必要があります。半角文字しか入力を行わないのであれば，ペー
ジ１はグラフィック画面としてアプリケーションで使用できます。
  本パッケージでは最小限の機能のみ提供されており，ウィンドウの枠描画や移
動・サイズ変更などのウィンドウマネージャ機能は用意されていません。実際に
アプリケーションを作成する場合は，こうした処理を行うルーチンを本パッケー
ジの上に被せて使用するとよいでしょう。ＶＩＬの現バージョンではウィンドウ
マネージャ・パッケージ（VWM ）が用意されており，本パッケージのモジュール
の代わりにVWM のモジュールを呼ぶことで，枠描画などを含めた処理を行わせる
ことができます。
  現在のバージョンでは次の機能が実現されます。

    ・ウィンドウ領域の退避・復元処理
      指定した範囲の画面情報をGET@A 命令で退避し，その位置にウィンドウを
      描くことでウィンドウのオープンを，PUT@A 命令で画面情報を戻すことで
      ウィンドウのクローズを実現します。
      処理自体は充分高速ですが，退避用に巨大な配列を必要とするのでフリー
      エリアの残りに注意してください。
      ウィンドウ枠などを描く領域として
        WIN_UB%,WIN_DB%     : ウィンドウ枠の上部・下部幅
        WIN_LB%,WIN_RB%     : ウィンドウ枠の左部・右部幅
      で指定したドット数分，ウィンドウ左上隅・右下隅座標の上下左右が余分
      に退避されます。

    ・退避データの管理
      各ウィンドウの情報は配列上のスタックとして管理されます。したがって，
      このパッケージではマルチウィンドウはウィンドウのスタックとして実現
      されており，一番最後に開かれたウィンドウ（以後一番上のウィンドウ，
      またはアクティブウィンドウと呼びます）に対してのみ，操作が許されて
      います。つまり，ウィンドウＡに続きウィンドウＢを開いた場合，Ｂを閉
      じ（Ａが一番上のウィンドウにな）るまで，Ａに表示したりＡを閉じたり
      することはできません。
      各ウィンドウは早く開かれたものから順に１，２，……と番号がつけられ，
      この番号によって管理されます。以後これをウィンドウ番号と呼びます。
      各ウィンドウの情報はこの番号を添え字として，以下の配列変数から読み
      出すことができます。
 　     WIN_X%(),WIN_Y%()   : ウィンドウ左上隅グラフィック座標
   　   WIN_W%(),WIN_Z%()   : ウィンドウ右下隅グラフィック座標
        WIN_BF%(WIN_BFO&()) : 画面情報
      また，アクティブウィンドウに関しては，
        WIN_AN%             : 現在のアクティブウィンドウ番号
     　 WIN_X%,WIN_Y%       : 左上隅グラフィック座標
     　 WIN_W%,WIN_Z%       : 右下隅グラフィック座標
      が利用できます。

    ・絶対座標／相対座標モードの切替
      通常グラフィック命令を使用する場合は，画面の左上隅を(0,0),右下隅を
      (639,479) とする座標系で指定します。本パッケージではこれを絶対座標
      と呼び，アクティブウィンドウの左上隅を(0,0) とする座標系を相対座標
      として，両者を切り換えるモジュールが用意してあります。
      相対座標モードではワールド座標とオリジナルスクリーン座標との対応が
      変更されているため，グラフィック命令の座標指定が相対座標で行えます。
      また，アクティブウィンドウからはみ出す描画は，自動的にクリッピング
      されます。
      現在の座標モードは
        WIN_PM%             : 0:絶対座標 / -1:相対座標
      に格納されています。初期化パッケージ呼出し直後は絶対座標モードです。
        《注意》ウィンドウのオープン／クローズ時には絶対座標モードにして
                ください。

○モジュール一覧

１．WIN_INITM           初期化モジュール
●入力変数
　W0&           : 画面退避バッファサイズ
　W1%           : 最大ウィンドウ番号
●出力変数
　なし
●説明
  W0& には，開いているウィンドウの総面積が最大になるとき必要な大きさを指
定してください。ウィンドウ枠幅が0 でないときは，その分も必要になります。
  W1% には，最大何枚まで同時にウィンドウを開くかを指定してください。
  WIN_X(0)〜WIN_Z(0)には(0,0)-(639,479) が格納されますので，アクティブ番
号が０，つまりウィンドウを１枚も開いてないとき，相対座標＝絶対座標となり
ます。

２．WIN_ENVR            アプリ環境ファイル読み込み
●入力変数
　なし
●出力変数
　なし
●説明
  現バージョンではダミーです。
  本モジュール呼び出し前に，ENV_ROP を呼び出してアプリ環境ファイルを入力
オープンしておいてください。

３．WIN_ENVW           アプリ環境ファイル書き込み
●入力変数
　なし
●出力変数
　なし
●説明
  現バージョンではダミーです。
  本モジュール呼び出し前に，ENV_WOP を呼び出してアプリ環境ファイルを出力
オープンしておいてください。

４．WIN_OP              ウィンドウ・オープン
●入力変数
　WIN_X%,WIN_Y% : ウィンドウ左上隅座標
　WIN_W%,WIN_Z% : ウィンドウ右下隅座標
●出力変数
　E%            : 0 : 正常終了
                  5 : オープン失敗（退避領域不足）
　WIN_X%,WIN_Y% : オープン失敗時のみ，現在の
　WIN_W%,WIN_Z%   アクティブウィンドウの値を設定
●説明
  ウィンドウを開きます。実際には指定した矩形領域の画面情報を退避するだけ
です。相対座標モードに切り換えた後CLS を実行することで，ウィンドウ内をク
リアできます。
  WIN_X%〜WIN_Z%に新しく開くウィンドウの座標を設定してください。ただしこ
れらの変数値は現在のアクティブウィンドウ座標として各モジュールで参照され
ますので，新しい値を設定してから本モジュールを呼び出すまでに，他のモジュー
ルを呼ばないようにしてください。
  座標モードは絶対座標モードにしておいてください。
  正常終了のときはアクティブウィンドウ番号が1 増やされ，E%に0 が返されま
すが，退避バッファが足りない時は画面退避は行われません。このときはE%に5
を返し，WIN_X%〜WIN_Z%に元のアクティブウィンドウ座標を書き戻して終了しま
す。

５．WIN_CL              ウィンドウ・クローズ
●入力変数
　なし
●出力変数
　WIN_X%,WIN_Y% : 新アクティブウィンドウ左上隅座標
　WIN_W%,WIN_Z% : 新アクティブウィンドウ右下隅座標
●説明
  退避した矩形領域を復元し，ウィンドウを閉じます。
  アクティブウィンドウ番号は1 減らされ，新しいアクティブウィンドウ（旧ア
クティブウィンドウの一つ下のウィンドウ）の座標がWIN_X%〜WIN_Z%に書き戻さ
れます。
  座標モードは絶対座標モードにしておいてください。
  また，ウィンドウ枠幅WIN_UB%,WIN_DB%,WIN_LB%,WIN_RB% は各ウィンドウ毎に
保存されていません。したがって枠幅の違うウィンドウを混在させる時は，本モ
ジュールを呼ぶときに対象アクティブウィンドウが開かれた時の値がWIN_UB% 〜
WIN_RB% に格納されているよう，アプリケーションが責任を持つ必要があります。

６．WIN_CLDMY           ウィンドウ・クロ−ズダミー
●入力変数
　なし
●出力変数
　WIN_X%,WIN_Y% : 新アクティブウィンドウ左上隅座標
　WIN_W%,WIN_Z% : 新アクティブウィンドウ右下隅座標
●説明
  画面情報を書き戻さずにアクティブウィンドウに関する情報を放棄します。つ
まり，実際には画面を変更せずにウィンドウを閉じたつもりになるモジュールで
す。
  ゲームのメインマップなど，クローズされることのないウィンドウは退避した
画面情報を取っておく必要がありません。この場合は本モジュールを呼び出して
この情報を捨ててしまうことにより，退避領域を節約できます。

７．WIN_CLALL           ウィンドウ全クロ−ズ
●入力変数
　なし
●出力変数
　WIN_X%,WIN_Y% : (0,0)
  WIN_W%,WIN_Z% : (639,479)
●説明
  開かれているウィンドウをすべて閉じます。
  アクティブウィンドウ番号は0 になり，WIN_X%〜WIN_Z%には(0,0)-(639,479)
が格納されます。
  座標モードは絶対座標モードにしておいてください。

８．WIN_PMR             相対座標モード
●入力変数
　なし
●出力変数
　WIN_PM%       : -1 (相対座標モード)
●説明
  相対座標モードに切り換えます。
  以後グラフィック命令での座標は，画面の(WIN_X%,WIN_Y%) を(0,0) とする相
対座標となります。また，ウィンドウからはみ出すような描画はクリッピングさ
れます。
  WIN_PM% には-1が格納されます。

９．WIN_PMA             絶対座標モード
●入力変数
　なし
●出力変数
　WIN_PM%       : 0 (絶対座標モード)
●説明
  絶対座標モードに切り換えます。
  以後グラフィック命令での座標は，画面左上隅を(0,0) ，右下隅を(639,479)
とする絶対座標となります。
  WIN_PM% には0 が格納されます。


◎MSEL（メニュー選択パッケージ）
○必要パッケージ
　なし
○パッケージ変数
　MSEL_MN%              : メニュー番号（0のとき無効）
  MSEL_BB%              : ボックス番号ＭＩＮ
  MSEL_BE%              : ボックス番号ＭＡＸ
  MSEL_BN%              : ボックスカーソル（ＢＣ）位置(ボックス番号)
  MSEL_BC%              : -1:ＢＣ表示済 / 0:ＢＣ未表示
  MSEL_BD%              : ボックスの並べ方
                            1:Ｙ方向優先で並べる(省略時Ｘ方向優先)
                            2:左方向に並べる    (省略時右方向)
                            4:上方向に並べる    (省略時下方向)
                    　    これらの和を指定
　MSEL_KY%　            : 選択キーコード
                              0..    : 番号選択キー
                             -1      : 取消キー
                             -2      : 決定キー
                             -3      : 非対応キー
                             -4      : ヌル入力
                             -5..-8  : 移動キー（→←↑↓）
                             -9..-12 : 拡張移動キー（→←↑↓）
                             -13     : ウィンドウマネージャ起動キー
  MSEL_WT%              : リピート開始までのウェイト
　MSEL_MRM%　           : マウスボタン リピートモード
　MSEL_PRM%　           : パッドボタン リピートモード
　MSEL_MKM%             : 移動キー・モード
                            0 : 上下／左右ともそのメニュー内
                            1 : 上下キーが押されたらその旨返して終了
                            2 : 左右キーが押されたらその旨返して終了
　MSEL_CMN%             : 設定メニュー番号 (0 以外を指定)
　MSEL_CMR%             : 設定メニュー行数
  MSEL_CR%              : 設定メニュー現在行(0 〜 MSEL_CMR%)
  MSEL_CRB%             : MSEL_CR%保存用
　MSEL_SC$              : ショートカットキー定義文字列
　MSEL_SCB$             : SC$設定時のKB%()退避用
  MSEL_BCM%             : ＢＣ描画モード（0:矩形枠 ／　1:矩形反転）
　MSEL_X%(),MSEL_Y%()   : ボックス左上隅座標保存
　MSEL_W%(),MSEL_Z%()   : ボックス右下隅座標保存
  MSEL_BN%()            : ＢＣ位置保存
  MSEL_KB%()            : キー割当テーブル（アスキーコード）
　MSEL_PAD%()           : パッド割当テーブル（PAD(1)+PTRIG(1)*9）
　MSEL_CX%(),MSEL_CY%() : 設定メニュー各行の基準ボックス左上隅座標
　MSEL_CW%(),MSEL_CZ%() : 設定メニュー各行の基準ボックス右下隅座標
  MSEL_CN%()            : 設定メニュー各行のボックス個数
  MSEL_CL%()            : 設定メニュー各行のボックス間隔(左上隅座標間隔)
  MSEL_CBB%()           : 設定メニュー各行のボックス番号ＭＩＮ
  MSEL_CBE%()           : 設定メニュー各行のボックス番号ＭＡＸ
  MSEL_CBN%()           : MSEL_BN%()保存用（変更取消時に使用）
○説明
  マウス／パッド／キーボードによるメニュー選択入力を行います。
  一般的なメニューの形式として，項目が縦横に並べられたものを想定し，この
中から特定の項目を選択するインタフェースを提供します。ここでは１つの項目
を画面上の長方形の領域とし，以下ボックスと呼びます。そしてボックスがマト
リクス上に並べられたものでメニューが構成されるとします。
  実際のメニュー選択は，以下のいずれかの方法によりボックスの一つを選択す
ることで行われます。ボックスには順に番号（ボックス番号）が付けられており，
アプリケーションには選択されたボックス番号が返されます。

    ・マウスにより，目的のボックス内を左クリック

    ・画面に表示される矩形枠（ボックスカーソル）を移動キーで動かして目的
      のボックスに合わせ，決定キーを押す

    ・目的のボックスに対応した番号選択キーを押す

  移動／決定／選択キーなどは初期化モジュールによりキーボードやパッドのボ
タンに割り当てられます。この割り当て設定はアプリ設定ファイルを書き換える
ことにより変更可能です。
  通常のメニュー選択はボックスのマトリクスから１つだけ選択しますが，スイ
ッチやパラメータ類の設定メニューなどでは各行毎に１つずつ選択する形式がよ
く用いられます。これ（以下設定メニュー）を実現するためのモジュールも用意
されています。
  相対座標モードのとき，本パッケージにおける座標指定はすべて相対座標とな
ります。

○モジュール一覧

１．MSEL_INITM          初期化モジュール
●入力変数
　W0%           : 最大メニュー番号
  W1%           : 最大ボックス数
  W2%           : 設定メニュー最大行数
●出力変数
　なし
●説明
  W0% にはメニュー番号の最大値を指定します。メニュー番号とはアプリケーシ
ョン全体における各メニューの通し番号であり，各メニューに違う番号を付けて
おくことにより，前回そのメニューを呼び出したときのボックスカーソル位置が
保存されます。
  W1%には全メニューのうち，最大のボックス数を指定します。
  W2%には全設定メニューのうち，最大の行数を指定します。
  本モジュールを呼び出すことにより，マウス機能の初期化および位置の設定が
行われます（MOUSE 0 およびMOUSE 1 ）。ただしマウスカーソルは表示されませ
ん。
  ボックスカーソルは，矩形枠と矩形反転の２種類から選択できます。これはア
プリ設定ファイルに0 または1 を記述することで指定できます。アプリケーショ
ン中でMSEL_BCM% に値を設定することでも指定できますが，両者を混在して表示
することはできません。
  本パッケージでは，メニュー操作に使用するキーを仮想的な機能番号で管理し
（以下これを選択キーコードと呼びます），キーボードやパッドボタンとの任意
の対応づけができるようにしています。現バージョンにおいて選択キーコードは
以下のようになっています。
     0..    : 番号選択キー
    -1      : 取消キー
    -2      : 決定キー
    -3      : 非対応キー
    -4      : ヌル入力
    -5..-8  : 移動キー（→←↑↓）
    -9..-12 : 拡張移動キー（→←↑↓）
    -13     : ウィンドウマネージャ起動キー
各選択キーコードが入力されたときの動作については，各モジュールの説明を参
照してください。
　この選択キーコードとキーボード／パッドボタンとの対応づけは以下の形式で
アプリ設定ファイルに記述します。

    ・キーボード対応テーブル
    　各アスキーコードに対応する選択キーコードを順に並べます。
    　ただし，１行に１６個ずつ計１６行の形で並べてください。
    　また，１行内のコードは"," で区切ってください。

    ・パッド対応テーブル
    　キーボード対応テーブルと同様に選択キーコードを並べますが，
      アスキーコードの代わりに(PAD(1)+PTRIG(1)*9）が返す値の順に並べます。
    　つまり，１行に「方向入力なし」＋「方向ボタン８方向」の９個を"," で
    　区切って並べ，これを[A][B][RUN][SELECT] ボタンの組み合わせで１２行
    　並べます。

　本モジュールではこれを読み込んで対応テーブルの設定を行います。
  なお，アプリケーション中で
    MSEL_KB%() =選択キーコード
　  MSEL_PAD%() = 選択キーコード
などとすることで，一時的なキー割当の変更も可能です。

２．MSEL_ENVR           アプリ環境ファイル読み込み
●入力変数
　なし
●出力変数
　MSEL_WT%      : リピート開始までのウェイト
●説明
  リピート開始までのウェイトをアプリ環境ファイルから読み込みます。
  本モジュール呼び出し前に，ENV_ROP を呼び出してアプリ環境ファイルを入力
オープンしておいてください。

３．MSEL_ENVW           アプリ環境ファイル書き込み
●入力変数
　MSEL_WT%      : リピート開始までのウェイト
●出力変数
　なし
●説明
  リピート開始までのウェイトをアプリ環境ファイルに保存します。
  本モジュール呼び出し前に，ENV_WOP を呼び出してアプリ環境ファイルを出力
オープンしておいてください。

４．MSEL_M              メニュー選択
●入力変数
　X%,Y%         : 基準ボックス左上隅座標
　W%,Z%         : 基準ボックス右下隅座標
　XN%,YN%       : ボックス縦横個数
　XL%,YL%       : ボックス縦横間隔(左上隅座標の間隔)
　C%            : ボックスカーソル（ＢＣ）色
　MSEL_MN%      : メニュー番号 (0 のとき無効)
　MSEL_BB%      : ボックス番号ＭＩＮ
　MSEL_BE%      : ボックス番号ＭＡＸ
　MSEL_BN%      : ＢＣ位置 (ボックス番号)
                  MSEL_MN%>0のときは無効
　MSEL_BC%      : -1:ＢＣ表示済 / 0:ＢＣ未表示
　MSEL_BD%      : ボックスの並べ方(属性の和を指定)
                    1:Ｙ方向優先で並べる(省略時Ｘ方向優先)
                    2:左方向に並べる(省略時右方向)
                    4:上方向に並べる(省略時下方向)
                　これらの和を指定
　MSEL_WT%      : リピート開始までのウェイト
　MSEL_MKM%     : 移動キー・モード
                    0 : 上下／左右ともそのメニュー内
                    1 : 上下キーが押されたらその旨返して終了
                    2 : 左右キーが押されたらその旨返して終了
●出力変数
　KN%           : 入力番号
                    MSEL_BB%..MSEL_BE% :左クリック/決定/直接選択
                    -1                 :右クリック/取消
                    -2                 :ボックス外を左クリック
                    -3                 :非対応キー入力
　KY%           : 入力キーのアスキーコード
                　（入力なし:0 ）
　K$            : 入力キー
                　（入力なし:""）
　MX%,MY%       : 左クリック位置(絶対座標)
　MW%,MZ%       : 左クリック位置(相対座標)
                　(ともにKN%=-2 の時有効)
                　ただしウィンドウ外クリックの時 MW%=-1
　MSEL_KY%      : 選択キーコード
　MSEL_BN%      : 最後のＢＣ位置 (KN%<1のときも有効)
　MSEL_BC%      : -1 （ＢＣ表示済） 
●説明
  MSEL_BCMK によりボックスを作成した後MSEL_IN を呼び出してメニュー選択入
力を行います。入出力変数の意味や動作などは各モジュールの項を参照してくだ
さい。

５．MSEL_BCMK           ボックス座標作成
●入力変数
　X%,Y%         : 基準ボックス左上隅座標
　W%,Z%         : 基準ボックス右下隅座標
　XN%,YN%       : ボックス縦横個数
　XL%,YL%       : ボックス縦横間隔(左上隅座標の間隔)
　MSEL_BB%      : ボックス番号ＭＩＮ
　MSEL_BE%      : ボックス番号ＭＡＸ
　MSEL_BD%      : ボックスの並べ方(属性の和を指定)
                    1:Ｙ方向優先で並べる(省略時Ｘ方向優先)
                    2:左方向に並べる(省略時右方向)
                    4:上方向に並べる(省略時下方向)
●出力変数
　MSEL_X%(),MSEL_Y%() : 各ボックス左上隅座標
  MSEL_W%(),MSEL_Z%() : 各ボックス右下隅座標
●説明
  MSEL_IN で使用するボックス座標を作成します。ただし本モジュールでは同形
同サイズで等間隔に並んだものしか作れません。より複雑なボックスが必要な場
合は，アプリケーションでボックス座標を作成してください。
  最も番号の若い（ボックス番号MSEL_BB%の）ボックスを基準ボックスと呼びま
す。これの座標を(X%,Y%)-(W%,Z%) で指定し，これと同形同サイズのボックスを
縦横いくつずつ並べるかをXN%,YN% で指定します。また，XL%,YL% でボックス縦
横間隔(左上隅座標の間隔)を指定します。これを図にすると下のようになります
（MSEL_BB%=1,MSEL_BE%=6,MSEL_BD%=0とする）。

                 ←──── XN%=3 ────→        
            (X%,Y%)                                 
                ↓         │← XL% →│            
    　          ┌─┐     ┌─┐     ┌─┐─      
    　     ↑   │１│     │２│     │３│↑      
    　     │   └─┘     └─┘     └─┘        
           │       ↑                      YL%     
         YN%=2    (W%,Z%)                   ↓      
    　     │   ┌─┐     ┌─┐     ┌─┐─      
    　     ↓   │４│     │５│     │６│        
    　          └─┘     └─┘     └─┘        

  MSEL_BB%には基準ボックスの番号，MSEL_BE%には最後のボックス番号を指定し
ます。この値により，４番から８番までを選択するメニューなどというものも可
能です。ただし，

  0 ≦ MSEL_BB% ≦ MSEL_BE%
  MSEL_BE% − MSEL_BB% ＋ 1 = XN% × YN%

を満たしていなければなりません。
  MSEL_BD%にはボックスの並べ方を指定します。指定可能な属性には

    1:Ｙ方向優先で並べる(省略時Ｘ方向優先)
    2:左方向に並べる(省略時右方向)
    4:上方向に並べる(省略時下方向)

が用意されており，これらの和をMSEL_BD%に設定します。例えば XN%=YN%=3の場
合，次のようになります。

    MSEL_BD%=0    MSEL_BD%=1    MSEL_BD%=2    MSEL_BD%=4

    １２３        １４７        ３２１        ７８９
    ４５６        ２５８        ６５４        ４５６
    ７８９        ３６９        ９８７        １２３

    MSEL_BD%=1+2  MSEL_BD%=1+4  MSEL_BD%=2+4  MSEL_BD%=1+2+4

    ７４１      　３６９     　 ９８７   　   ９６３
    ８５２      　２５８     　 ６５４     　 ８５２
    ９６３      　１４７     　 ３２１      　７４１

６．MSEL_IN             メニュー選択入力
●入力変数
　XN%,YN%       : ボックス縦横個数
　C%            : ボックスカーソル（ＢＣ）色
　MSEL_MN%      : メニュー番号 (0 のとき無効)
　MSEL_BB%      : ボックス番号ＭＩＮ
　MSEL_BE%      : ボックス番号ＭＡＸ
　MSEL_BN%      : ＢＣ位置 (ボックス番号)
　                MSEL_MN%>0のときは無効
　MSEL_BC%      : -1:ＢＣ表示済 / 0:ＢＣ未表示
　MSEL_BD%      : ボックスの並べ方(属性の和を指定)
                    1:Ｙ方向優先で並べる(省略時Ｘ方向優先)
                    2:左方向に並べる(省略時右方向)
                    4:上方向に並べる(省略時下方向)
　MSEL_WT%      : リピート開始までのウェイト
　MSEL_MKM%     : 移動キー・モード
                    0 : 上下／左右ともそのメニュー内
                    1 : 上下キーが押されたらその旨返して終了
                    2 : 左右キーが押されたらその旨返して終了
　MSEL_X%(),MSEL_Y%() : 各ボックス左上隅座標
　MSEL_W%(),MSEL_Z%() : 各ボックス右下隅座標
●出力変数
　KN%           : 入力番号
　                MSEL_BB%..MSEL_BE% :左クリック/決定/直接選択
　                -1                 :右クリック/取消
　                -2                 :ボックス外を左クリック
　                -3                 :非対応キー入力
　KY%          : 入力キーのアスキーコード
                （入力なし:0 ）
　K$            : 入力キー
                （入力なし:""）
　MX%,MY%       : 左クリック位置(絶対座標)
  MW%,MZ%       : 左クリック位置(相対座標)
                  (ともにKN%=-2 の時有効)
                  ただしウィンドウ外クリックの時 MW%=-1
　MSEL_KY%      : 選択キーコード
  MSEL_BN%      : 最後のＢＣ位置 (KN%<1のときも有効)
  MSEL_BC%      : -1 （ＢＣ表示済） 
●説明
　メニュー選択入力を行います。本モジュール呼出しの前に，以下
の設定を行ってください。

    ・MSEL_BB%,MSEL_BE% に入力可能なメニュー番号の下限・上限を設定します。
      ただし，
          0 ≦ MSEL_BB% ≦ MSEL_BE%
      でなければなりません。

    ・MSEL_X%()〜MSEL_Z%()の添字MSEL_BB%〜MSEL_BE%の要素に，各番号に対応
      したボックスの座標を格納します。
      同形同サイズ等間隔のボックスなら，モジュールMSEL_BCMK により作成で
      きます。
      アプリケーションで作成するなら，より複雑なボックスも可能です。ただ
      し，マウスクリック時に選択されたボックスの判定は，
        １．MSEL_BB%番からMSEL_BB% + XN% - 1番までのボックスとクリック位
            置のＸ座標を比較。
        ２．I番にクリック位置が含まれたなら，
            I番，I+XN%番，…，I + XN% * (YN% - 1) 番のボックスとクリ
            ック位置のＹ座標を比較。
        ３．J 番にクリック位置が含まれたなら，J 番が選択された
            と判定。
      という手順で行っています。そのため，
        I番，I+XN%番，…，I + XN% * (YN% - 1) 番
      のボックスのMSEL_X%(),MSEL_W%() は同じ値でなければなりません。つま
      り，マトリックス上に並んだボックスの縦の列は，座標が揃っていなけれ
      ばならないということです。横の列は座標がずれていても構いません。
    　MSEL_BB%番からMSEL_BB% + XN% - 1番までのボックスは座標が小さいもの
    　から順に並んでいる必要はないので，YN% を1にして全ボックスを１列に
    　してしまえば，各ボックスの座標はどのような位置でも構いません。ただ
    　し，パッド／キーボードで選択する際に移動キー↑↓は使えなくなります。

    ・XN%,YN%にボックスの縦横個数を設定します。ただし
        MSEL_BE% − MSEL_BB% ＋ 1 = XN% × YN%
      を満たさなければなりません。

    ・MSEL_BD%にボックスの並べ方を設定します。
        1:Ｙ方向優先で並べる（省略時Ｘ方向優先）
        2:左方向に並べる    （省略時右方向）
        4:上方向に並べる    （省略時下方向）
      の属性の和を指定します。詳しくはMSEL_BCMKの項を参照してください。

    ・C%にボックスカーソルのパレット番号（0 〜15）を設定します。

    ・メニューにはアプリケーション全体で通し番号を付けることができます。
      これをメニュー番号と呼び，MSEL_MN%に設定します。1 以上の値を設定す
      ると，前回そのメニュー番号で本モジュールを呼び出した時の最終的なボ
      ックスカーソル位置が，今回のボックスカーソル位置初期値となります。
      つまり，メニュー毎に違う値を設定するようにアプリケーションを作成す
      れば，各メニューのカーソル位置が次回そのメニューを開くときまで保存
      されます。カーソル位置の保存をしないのであれば，MSEL_MN%に0 を設定
      してください。このときはMSEL_BN%に，ボックスカーソル位置の初期値を
      ボックス番号で設定します。

    ・ボックスカーソルが既に表示済であれば-1，未表示であれば0 を設定して
      ください。

  以上の設定を行った後，本モジュールを呼び出すと，ボックスカーソル（現在
位置のボックス座標と同位置の矩形枠）とマウスカーソルが表示されます。ボッ
クス自体は具体的に表示されるわけではないので，番号や選択項目などの表示は
アプリケーションが行ってください。
  この状態で入力に対して次の処理を行います。ただし，以下の記述におけるキー
の名前は，前述した仮想的な選択キーです。

    ・マウスを右クリックか取消キーを押す
    　KN%に-1（取消入力）を格納して終了します。

    ・マウスを左クリック
      クリック位置がボックスの一つの中なら，KN% にそのボックス番号を格納
      して終了します。この判定は前記した手順で行われるため，ボックス座標
      の設定には注意が必要です。クリック位置がどのボックスにも含まれてい
      なければ，KN% には-2（ボックス外を左クリック）が格納されます。
      また，このときのクリック位置は，絶対座標で(MX%,MY%) に格納されます。
      相対座標モードでクリック位置がアクティブウィンドウ内なら，相対座標
      が(MW%,MZ%) に格納されます（この他の場合，MW%は-1）。
    　左ボタンが押されっぱなしの場合，本モジュールでは
　      １回目の呼び出し    ：クリックと同じ扱い
　      ２回目の呼び出し    ：VIL_MSEL_WT%で示された時間（単位1/100 秒）
　                          　だけウェイトを入れた後，クリックと同じ扱い
        ３回目以降の呼び出し：クリックと同じ扱い
      となります。一度ボタンを放すと，この回数は初期化されます。
      したがって，ボタンを押しっぱなしにすると，一度入力が起きた後ちょっ
      と間をおいて連続入力が起こるというリピート機能が実現されます。
      リピート開始までの時間はアプリケーションでVIL_MSEL_WT%に値をセット
      することで変更できます。

    ・番号選択キーを押す
      KN% にその番号を格納して終了します。また，ボックスカーソルはその番
      号のボックスへと移動します。
      ただし，ボックス番号の上限および下限を越えている場合は，非対応キー
      が押されたとします。

    ・決定キーを押す
      そのときのボックスカーソル位置のボックス番号をKN% に格納して終了し
      ます。

    ・非対応キーを押す。
　    KN%に-3を格納して終了します。

    ・ウィンドウマネージャ起動キーを押す
　    KN%に-13を格納して終了します。

    ・移動キー（→←↑↓）を押す
      それぞれの方向にボックスカーソルを移動します。MSEL_BD%の値にかかわ
      らず，画面上での移動方向は移動キーの方向と同じです。また，上下左右
      の端のボックスから先に移動しようとすると，反対側の端に移動します。
      ただし，MSEL_MKM% の値が
        1 のとき：↑，↓キーが押されたらそれぞれ-7,-8 をKN% に格納して終了
        2 のとき：→，←キーが押されたらそれぞれ-5,-6 をKN% に格納して終了
      となります。

いずれの場合でも，終了時にボックスカーソルは最終位置（ボックスが選択され
た時はそのボックス）に表示されたまま残り，MSEL_BC%は-1に設定されます。都
合が悪い場合はモジュールMSEL_BC を一度呼び出すと，ボックスカーソルは消去
されます。
  メニュー番号MSEL_MN%に1 以上が設定されている場合は，ボックスカーソル位
置はMSEL_BN%(MSEL_MN%)に保存されます。
  マウスカーソルは本モジュールの終了時に非表示になります。
  本モジュール終了直前の選択キーコードはMSEL_KY%に格納されています。アス
キーコードおよび入力文字はKY%およびK$に格納されています。

７．MSEL_BCCHK          指定座標がボックスに含まれるかをチェック
●入力変数
　MX%,MY%       : ボックスに含まれるかを調べる座標
　MSEL_BB%      : ボックス番号ＭＩＮ
　MSEL_BE%      : ボックス番号ＭＡＸ
　MSEL_X%(),MSEL_Y%() : 各ボックス左上隅座標
　MSEL_W%(),MSEL_Z%() : 各ボックス右下隅座標
●出力変数
　KN%           : 入力番号
                    MSEL_BB%..MSEL_BE% :指定座標がボックス内
                    -2                 :指定座標がボックス外
　MSEL_BN%      : ＢＣ位置 (ボックス番号)
                　（指定座標がボックス内のとき）
●説明
　指定座標(MX%,MY%) が含まれるボックスの番号を返します。どのボックスにも
含まれない場合は-2を返します。

８．MSEL_CNFM           設定メニュー選択
●入力変数
  MSEL_CX%(),   : 各行の基準ボックス左上隅座標
  MSEL_CY%()
  MSEL_CW%(),   : 各行の基準ボックス右下隅座標
  MSEL_CZ%()
  MSEL_CN%()    : 各行のボックス個数
  MSEL_CL%()    : 各行のボックス間隔(左上隅座標間隔)
  MSEL_CBB%()   : 各行のボックス番号ＭＩＮ
　MSEL_CBE%()   : 各行のボックス番号ＭＡＸ
　C%            : ボックスカーソル（ＢＣ）色
　MSEL_CMN%     : 設定メニュー番号 (0 以外を指定)
　MSEL_CMR%     : 設定メニュー行数
                　(MN% は CMN%〜CNB%+CMR% までが使用される)
                　(MSEL_BN%(MSEL_CMN%) にはアクティブ行番号を格納)
　MSEL_BC%      : -1:ＢＣ表示済 / 0:ＢＣ未表示
　MSEL_BD%      : ボックスの並べ方(0 に設定)
　MSEL_BN%      : ＢＣ位置 (ボックス番号)
　MSEL_MKM%     : 移動キー・モード(0 に設定)
　MSEL_CR%      : 現在行(0 〜 MSEL_MRN%)
　MSEL_CRB%     : MSEL_CR%保存用
　MSEL_MN%      : メニュー番号
　MSEL_X%(),MSEL_Y%() : 各ボックス左上隅座標
　MSEL_W%(),MSEL_Z%() : 各ボックス右下隅座標
●出力変数
　KN%           : 入力番号
                    MSEL_BB%..MSEL_BE% :左クリック/決定/直接選択
                    -1                 :右クリック/取消
                    -2                 :ボックス外を左クリック
                    -3                 :非対応キー入力
                   -13                 : ウィンドウマネージャ起動キー
　KY%           : 入力キーのアスキーコード
                　（入力なし:0 ）
　K$            : 入力キー
                　（入力なし:""）
　MX%,MY%       : 左クリック位置(絶対座標)
　MW%,MZ%       : 左クリック位置(相対座標)
                　(ともにKN%=-2 の時有効)
                　ただしウィンドウ外クリックの時 MW%=-1
　MSEL_KY%      : 選択キーコード
　MSEL_BC%      : -1 （ＢＣ表示済） 
●説明
  スイッチやパラメータ類の設定メニューなどを実現するための，メニュー選択
モジュールです。全ボックスが１行に並ぶようなメニューを複数使用することに
より，各行毎に１つずつ選択することができるようなメニューを実現しています。
  本モジュール呼出しの前に，以下の設定を行ってください。

    ・MSEL_CX%(),MSEL_CY%(),MSEL_CW%(),MSEL_CZ%() に，各行の基準ボックス
      左上隅座標・右下隅座標を，MSEL_CN%()に各行のボックス個数を，MSEL_C
      L%()に各行のボックス間隔（左上隅座標間隔）を，それぞれ格納します。
      意味はMSEL_BCMK におけるX%〜Z%,XN%,YL%と同じです。

    ・MSEL_CBB%(),MSEL_CBE%() に，入力可能なメニュー番号の下限・上限を設
      定します。ただし，
          0 ≦ MSEL_CBB% ≦ MSEL_CBE%
      でなければなりません。

    ・C%にボックスカーソルのパレット番号（0 〜15）を設定します。

    ・MSEL_CMN% に設定メニュー番号，MSEL_CMR% に設定メニュー行数を指定し
      ます。
      設定メニューでは，実際には行数分だけの個数のメニューを作成します。
      このため，各行のボックス番号を保存するためにメニュー番号をMSEL_CMN%
      〜 MSEL_CMN% + MSEL_CMR%まで使用します（MSEL_BN%(MSEL_CMN%) にはア
      クティブ行番号が格納されます）。この範囲が他のメニューと重ならない
      ようにしてください。また，設定メニュー番号に0 を指定することはでき
      ません。

    ・ボックスカーソルが既に表示済であれば-1，未表示であれば0 を設定して
      ください。

  以上の設定を行った後，本モジュールを呼び出すと，以下のものが表示されま
す。

    ・マウスカーソル

    ・ボックスカーソル
      アクティブ行（現在選択を行っている行）の現在のボックス番号位置に表
      示されます。

    ・ラインカーソル（ボックスカーソルの底辺部分に相当する線分）
      アクティブ行以外の各行には，現在のボックス番号を示すマーカーとして，
      これが表示されます。

  この状態で入力に対して処理を行います。基本的にはMSEL_Mと同じですが，以
下の点が異なります。

    ・マウスを左クリック
      クリック位置がボックスの１つの中なら，ボックス番号およびボックスカ
      ーソルがそこに移動し，KN% にボックス番号を格納して終了します。もし
      非アクティブ行のボックス内なら，アクティブ行もその行に移動します。
      クリック位置がすべての行のどのボックスにも含まれていなければ，KN%
      に-2（ボックス外を左クリック）を格納して終了します。

    ・移動キー（→←↑↓）を押す
      →←キーのとき，MSEL_Mと同様にボックスカーソルの移動を行います。
      ↑↓キーのとき，アクティブ行を上下に移動します。これも最上・最下行
      を越えようとすると，反対側の端に移動します。ボックスカーソル位置は，
      新アクティブ行の保存されていた位置になります。
      どちらの場合も，モジュールを終了しません。

いずれの場合でも，終了時にボックスカーソル・ラインカーソルは最終位置に表
示されたまま残り，MSEL_BC%は-1に設定されます。各行の最終ボックス番号およ
び最終アクティブ行は保存されます。

９．MSEL_CNFSV          設定メニューの設定保存
●入力変数
　MSEL_CMN%     : 設定メニュー番号 (0 以外を指定)
　MSEL_CMR%     : 設定メニュー行数
●出力変数
　MSEL_CBN%()   : MSEL_BN%()保存用
●説明
  メニュー番号MSEL_CMN% 〜MSEL_CMN% + MSEL_CMR% のボックス位置MSEL_BN%の
値を，MSEL_CBN%() に保存します。MSEL_CNFM 呼び出し直前に本モジュールを呼
ぶことで，設定メニューで変更されうるボックス位置のバックアップを取ること
ができます。
　MSEL_CNFLD（設定メニューの設定復元）と組み合わせて使用することで，設定
結果をキャンセルする機能を実現できます。

１０．MSEL_CNFLD        設定メニューの設定復元
●入力変数
　MSEL_CMN%     : 設定メニュー番号 (0 以外を指定)
　MSEL_CMR%     : 設定メニュー行数
●出力変数
  MSEL_BN%()    : MSEL_CBN%()からの復元値
●説明
  メニュー番号MSEL_CMN% 〜MSEL_CMN% + MSEL_CMR% のボックス位置MSEL_BN%の
値を，MSEL_CBN%() より復元します。MSEL_CNFM の呼び出し後に本モジュールを
呼ぶことで，設定メニューで変更されたボックス位置を元に戻すことができます。
　MSEL_CNFSV（設定メニューの設定保存）と組み合わせて使用することで，設定
結果をキャンセルする機能を実現できます。

１１．MSEL_BC           ボックスカーソル表示/消去
●入力変数
　C%            : ボックスカーソル（ＢＣ）色
  MSEL_BCM%     : ＢＣ描画モード（0:矩形枠 ／ 1:矩形反転）
●出力変数
　なし
●説明
  現在のボックスカーソル位置にボックスカーソルをＸＯＲで描画します。した
がって，呼び出す毎に表示／消去をトグルで行います。
  ＢＣ描画モードMSEL_BCM% が0 なら矩形枠を，1 なら矩形の反転を描画します。

１２．MSEL_LC           ラインカーソル表示/消去
●入力変数
　C%            : ラインカーソル色
●出力変数
　なし
●説明
  現在のボックスカーソル位置にラインカーソルをＸＯＲで描画します。した
がって，呼び出す毎に表示／消去をトグルで行います。
　ラインカーソルとは，ボックスカーソルの底辺部分に相当する線分です。

１３．MSEL_KY           選択キーチェック
●入力変数
　なし
●出力変数
　KY%          : 入力キーのアスキーコード
                （入力なし:0 ）
　K$            : 入力キー
                （入力なし:""）
  MSEL_KY%      : 選択キーコード
●説明
　キーボードおよびパッドからの入力をチェックします。
　キーボードからの入力があった場合，MSEL_KY%に該当キーの選択キーコード，
K$,KY%に入力文字とそのアスキーコードを格納します。
　パッドからの入力があった場合，MSEL_KY%に該当するボタンの組み合わせの
選択キーコードを格納します。ただし，パッドについては一度入力を検出すると，
いったん全ボタンが放されていることを検出するまで，次の入力には反応しません。
つまり，ボタンを押しっぱなしにしてもリピートは効かなくなっています。
　どちらからも入力がなければ，MSEL_KY%には-4が格納されます。

１４．MSEL_SETSC        ショートカットキー定義
●入力変数
　MSEL_SC$      : ショートカットキー定義文字列
●出力変数
　MSEL_SCB$     : SC$設定時のKB%()退避用
　MSEL_KB%()    : キー割当テーブル（アスキーコード）
●説明
　メニュー選択の一時的なショートカットキーを定義します。
　例えば，

    １．ロード（L）
　  ２．セーブ（S）

というメニューを作る場合，[L],[l] キーで１番，[S],[s] キーで２番を選択で
きると，いわゆるショートカットキー的なものが実現できて便利です。しかしキー
割当テーブルで[L] を１番選択キーに割り当ててしまうと，他のメニューのショー
トカットキーと衝突する可能性があります。そこで本モジュールを用いると，一
時的なキー割当変更を簡単にできます。
  MSEL_SC$にショートカットキーの定義を格納して本モジュールを呼び出すと，
キー割当テーブルが変更されます。元のテーブルの内容はMSEL_SCB$ に退避され
ます。メニュー選択モジュールなどを呼んだ後でMSEL_RESETSCを呼び出すことに
より，キー割当テーブルを復元することができます。
　ショートカットキーの定義は以下の書式で行います。

    "定義キー""選択番号"","［"定義キー""選択番号"","…………］

例えば上の例では，以下のようにします。

    VIL_MSEL_SC$="L1,l1,S2,s2":GOSUB *VIL_MSEL_SETSC

  本モジュールの呼び出しにより，MSEL_SCB$ はいったんクリアされた後，
MSEL_SC$に定義されたキーについてのみテーブル退避を行います。したがって，
２回連続で本モジュールを呼び出すと，一回目の退避結果は失われます。本モジ
ュールの呼び出しまでに，必ずMSEL_RESETSCにより前回の退避結果を復元してお
く必要があります。とくにメニューの階層構造を作る場合，注意してください。

１５．MSEL_RESETSC      ショートカットキー消去
●入力変数
　MSEL_SCB$     : SC$設定時のKB%()退避用
●出力変数
　MSEL_KB%()    : キー割当テーブル（アスキーコード）
●説明
  MSEL_SETSCにより退避されたキー割当テーブルを復元し，定義されたショート
カットキーを消去します。


◎INP（入力パッケージ）
○必要パッケージ
  WIN（ウィンドウ・パッケージ）
  MSEL（メニュー選択パッケージ）
○パッケージ変数
  INP_L%                : 現在の文字列長
  INP_CX%               : カーソル位置
  INP_HSP%              : ヒストリーポインタ
  INP_HSN%              : ヒストリー系列番号
  INP_HSMAX%            : ヒストリー系列数
  INP_HSB%()            : ヒストリーデータ開始位置
  INP_HSP%()            : ヒストリーポインタ
  INP_HS$()             : ヒストリーデータ
○説明
  指定長以内の長さの文字列入力を行うパッケージです。入力文字列には，全角・
半角を混在させることが可能です。ただし，全角入力を行うためには，ページ１
はテキスト画面にしておく必要があります。半角文字しか入力を行わないのであ
れば，ページ１はグラフィック画面としてアプリケーションで使用できます。
  また，ヒストリー機能をサポートしています。
  相対座標モードのとき，本パッケージにおける座標指定はすべて相対座標とな
ります。


○モジュール一覧

１．INP_INITM           初期化モジュール
●入力変数
　W0%           : ヒストリー系列数
●出力変数
　なし
●説明
  W0% にはヒストリーの系列数を指定します。
  ヒストリーとは，過去に本パッケージにより入力された文字列を入力順に保存
し，新たな入力の際にこれを呼び出すことでタイピングの手間を省く機能です。
メモリの制限から保存個数は有限であり，入力回数がこれを越えると古いものか
ら順に消えていきます。以下，この入力順の文字列の並びをヒストリー系列と呼
びます。
  本パッケージではこのヒストリー系列を，W0% で指定した数だけ扱うことがで
きます。したがって，ファイル名入力と数値入力のヒストリーを分けるといった
ことが可能です。
  また，各系列の保存個数は，アプリ環境ファイルでそれぞれ別個に設定できま
す。
  本モジュールを呼び出すことにより，マウス機能の初期化および位置の設定が
行われます（MOUSE 0 および MOUSE 1）。ただしマウスは表示されません。

２．INP_ENVR            アプリ環境ファイル読み込み
●入力変数
　なし
●出力変数
　INP_HSB%()    : ヒストリーデータ開始位置
　INP_HSP%()    : ヒストリーポインタ
  INP_HS$()     : ヒストリーデータ
●説明
  ヒストリーデータをアプリ環境ファイルから読み込みます。
　形式は以下のようになっています。
　・各系列の保存個数
    一行に１個ずつ，系列数の数だけ並べます。
　・各系列のデータ
　　系列数の数だけ，以下のものを並べます。
　　初期アプリ環境ファイルではヒストリーポインタを1 ，ヒストリーデータは
　　すべて"\" にすればいいのですが，デフォルトのヒストリーデータを記述す
　　る場合はポインタを調整してください。
　　　・ヒストリーポインタ
　　　　次の入力文字列が入るべき位置です。1 〜保存個数+1までの整数を指定
　　　　します。
    　・ヒストリーデータ
    　　入力文字列です。アプリ環境ファイルでは空行を読み飛ばすので，行頭
    　　に"\" を付加します。
    　　保存個数+1個のデータを並べます。このうちヒストリーポインタで指定
    　　した位置にはダミーデータとして"\" を記述します。
　例えば系列数を2 とすると，

    4
    2

    3
    \TEST.BAS
    \TEST.EXP
    \
    \
    \

    1
    \
    \
    \

のように記述すれば，ヒストリー系列1 は保存個数4 でデフォルト文字列として
TEST.BAS,TEST.EXP が入り，系列2 は保存個数2 で初期状態では空になります。
  本モジュール呼び出し前に，ENV_ROP を呼び出してアプリ環境ファイルを入力
オープンしておいてください。

３．INP_ENVW            アプリ環境ファイル書き込み
●入力変数
　なし
●出力変数
　なし
●説明
  ヒストリーデータをアプリ環境ファイルに保存します。
  本モジュール呼び出し前に，ENV_WOP を呼び出してアプリ環境ファイルを出力
オープンしておいてください。

４．INP_STR             文字列入力
●入力変数
　X%,Y%         : 入力行左上隅座標
  L%            : 入力文字列最大長
  A$            : 入力文字列初期値
                　（なければ空文字列）
  C%            : 入力文字・カーソル色
  CB%           : 背景色
  INP_HSN%      : ヒストリー系列番号
●出力変数
  KN%           :  0:決定入力
                  -1:取消入力
                  -2:左クリック
                 -13:ウィンドウマネージャ起動キー
  K$            : 最後の入力キー
  KY%           : 最後の入力キーのアスキーコード
  A$            : 入力文字列(KN%=-1 の時は無効)
  MX%,MY%       : 左クリック位置(絶対座標)
  MW%,MZ%       : 左クリック位置(相対座標)
                  (ともにKN%=-2 の時有効)
                  ただしウィンドウ外クリックの時 MW%=-1
  INP_L%,INP_CX%: 現在の文字列長，カーソル位置
●説明
　指定長以内の文字列入力を行います。
　INPUT 文を使わないため，サイドワークや割り込みが有効です。
　本モジュール呼出し前に，以下の設定を行ってください。

    ・(X%,Y%) に入力行左上隅座標を設定します。

    ・L%に，何文字までの文字列を受け付けるかを設定します（半角文字での文
    　字数）。

    ・A$に入力文字列初期値を設定します。これが設定されていると，入力行に
    　最初その文字列が表示され，これを編集して入力とすることができます。
    　例えばファイル名入力の場合，前回の入力値を設定するようにすれば，同
    　じファイル名のときはリターンキーを押すだけでよくなります。
      なければ空文字列を設定します。
      ヒストリー機能を使用する場合は，空文字列を設定したほうがいいかもし
      れません。

    ・C%,CB%に入力文字・カーソル色および背景色のパレット番号（0 〜15）を
      設定します。

    ・INP_HSN%にヒストリーの系列番号を指定します。
      0 を指定すると，ヒストリー機能を使用しません。

  本モジュールを呼び出すと，マウスカーソルとカーソル（１文字分の長さの線
分），および入力文字列初期値が表示されます。
  この状態で，入力に対して次の処理を行います。なお，以下の記述におけるキー
の説明のうち，「（選択キー）」とあるものは，選択パッケージの項で説明した
仮想的なキーを指します。したがって，アプリ設定ファイルにより任意のキーに
割り当てることができます。また，以下の記述における「１文字」とは，全角・
半角を問わず１文字を指します。

    ・マウスを右クリック，または取消キー（選択キー）
　    KN% に-1（取消入力）を格納して終了します。

    ・マウスを左クリック
      KN% に-2（左クリック）を格納して終了します。
      また，クリック位置を絶対座標で(MX%,MY%) に格納します。
      相対座標モードなら，相対座標が(MW%,MZ%) に格納され，絶対座標モード
      ならMW%は-1になります。

    ・決定キー（選択キー）
　    KN%に0（決定入力）を格納して終了します。
    　INP_HSN%>0のとき，この値の番号のヒストリー系列に現在のA$の内容を登
    　録します。

    ・ウィンドウマネージャ起動キー（選択キー）
　    KN% に-13 （ウィンドウマネージャ起動キー）を格納して終了します。

    ・↑↓移動キー（選択キー）を押す
      ヒストリーを呼び出し，過去の入力文字列を現在編集中の文字列にセット
      します。
      ↑を押す毎に，古い入力へと逆上ります。保存個数を越えて逆上ろうとす
      ると，いったん空文字列がセットされ，次には再び最新の入力に戻ります。
      ↓は逆に，新しい入力へと進めます。

    ・←→移動キー（選択キー）を押す
      カーソルを左右に１文字分移動します。移動可能範囲は文字列先頭から，
      文字列末尾文字の１つ後までです。

    ・表示可能文字（アスキーコード &H20〜&H7E,&H80〜&HFF）
      編集中の文字列の長さが最大文字列長L%以下ならば，カーソル位置に入力
      文字を挿入します。カーソルは１文字分後ろに移動します。

    ・ＢＳキー（CTRL+H）
      カーソル位置の１つ前の文字を抹消し，カーソルを１文字前に移動します。

    ・[削除]キー
      カーソル位置の文字を抹消する。

    ・[HOME]キー
      編集中の文字列をクリアする。

終了した場合，A$には編集された文字列の最終状態が残ります。KN% の値により
これをどう扱うかは，アプリケーション側に任されます。
  本モジュールは任意文字列の入力を行うため，マウスでは入力できません。た
だしウィンドウマネージャなどで利用するために，左クリック時にはその位置を
返します。また，右クリックで取消入力ができますので，キーボードが使えない
時に誤ってこのモジュールを呼んでも，抜けることはできます。
  パッドについては割り当てられた選択キーの入力ができます。したがって，取
消キーがボタンに割り当ててあれば，それを押すことで本モジュールを終了でき
ます。さらに，通常では上下の方向キーが↑↓キーに割り当ててありますから，
前もってヒストリーに適当なデフォルト文字列を格納しておけば，パッドだけで
もこれらを選択して入力することが可能です。
  マウスカーソルは本モジュールの終了時に非表示になります。

５．INP_GPRINT          文字列表示(グラフィック座標指定)
●入力変数
　X%,Y%         : 表示位置
  A$            : 表示文字列
  L%            : 文字列長
  C%            : 文字列表示色
  CB%           : 背景色
●出力変数
　なし
●説明
  座標(X%,Y%) にパレット番号C%で文字列A$を表示します。A$の長さを半角文字
での文字数で指定します（全角文字は2 文字分と数えます）。
  表示前に表示領域をパレット番号CB% で塗り潰します。したがって同じ座標に
文字表示を行った場合は，前回の表示は消去されます。

６．INP_FEPON           システム行表示
●入力変数
　なし
●出力変数
　なし
●説明
  全角入力のため，システム行を表示します。全角文字を含む入力を行う場合は，
INP_STR の前に本モジュールを呼び出してください。また，入力後にはINP_FEPOFF
を呼び出すことで，システム行を非表示にできます。
  システム行表示のために，ページ０のグラフィック画面のうち(0,464)-(639,479)
の領域をWIN パッケージの画面退避バッファに退避し，色番号0 でクリアします。
正常終了すればE%が0 になります。
  画面退避に失敗した場合はE%にエラー番号を格納し，クリアせずに終了します。
  画面退避にはWIN パッケージのバッファを勝手に使用しているため，WIN パッ
ケージのモジュールによりウィンドウの操作が行われると，退避データは失われ
る可能性があります。このため，INP_FEPON →INP_STR →INP_FEPOFFという一連
の呼び出しの間は，ウィンドウを操作できません。ウィンドウマネージャ呼び出
し等の際には，いったんINP_FEPOFFによりシステム行を非表示にしてください。

７．INP_FEPOFF          システム行非表示
●入力変数
　なし
●出力変数
　なし
●説明
　全角入力のためのシステム行を非表示にします。
　INP_STR の後に本モジュールを呼び出してください。INP_FEPON により退避さ
れた画面を復元します。

８．INP_MVWAIT          マウス移動/クリック/キー/パッド入力待ち
●入力変数
　なし
●出力変数
　なし
●説明
　次のいずれかが起きるまで待ち，終了します。

    ・マウスが動かされる

    ・左右いずれかのマウスボタンがクリックされる

    ・何かキーが入力される

    ・何かパッドのボタンが入力される。

　ちょっとしたメッセージ表示後の入力待ちなどに使ってください。


§４．３　ウィンドウマネージャ・パッケージファイル（VIL_VWM.BAS）


◎VWM（ウィンドウマネージャ・パッケージ）
○必要パッケージ
  WIN（ウィンドウ・パッケージ）
  MSEL（メニュー選択パッケージ）
　INP（入力パッケージ）
○パッケージ変数
  VWM_AT%           : アクティブウィンドウ属性
                      (有効な属性の和を指定)
                        1 : MENU        メニュースイッチ表示
                        2 : CLOSE       クローズ可能（スイッチ表示）
                        4 : HIDE        一時消去可能（スイッチ表示）
                        8 : MOVE        移動可能
                       16 : RESIZE      サイズ変更可能（スイッチ表示）
  VWM_T$            : アクティブウィンドウ・タイトル
  VWM_ATB%          : VWM_AT%保存
  VWM_PMB%          : WIN_PM% 保存
  VWM_WX%,VWM_WY%   : 座標ワーク
  VWM_XM%,VWM_YM%   : 移動/リサイズ時左上隅座標最小値
  VWM_WM%,VWM_ZM%   : 移動/リサイズ時右下隅座標最大値
  VWM_XL%,VWM_YL%   : リサイズ時のＸ・Ｙ方向長さ最小値
  VWM_WL%,VWM_ZL%   : リサイズ時のＸ・Ｙ方向長さ最大値
  VWM_XD%,VWM_YD%   : 移動時の単位ドット数
  VWM_WD%,VWM_ZD%   : リサイズ時の単位ドット数
  VWM_N%            : ウィンドウ通し番号 (０のとき無効)
  VWM_R%            : ウィンドウマネージャ処理結果
  VWM_NMAX%         : 最大ウィンドウ通し番号
  VWM_CB%           : ウィンドウ背景色用パレット番号
  VWM_X%(),VWM_Y%(),: 通し番号でのウィンドウ位置保存
  VWM_W%(),VWM_Z%()
  VWM_AT%()         : ウィンドウ属性
  VWM_T$()          : ウィンドウ・タイトル
  VWM_N%()          : ウィンドウ通し番号保存
  VWM_CF%()         : ウィンドウ枠の（G,R,B）輝度
  VWM_CB%()         : ウィンドウ背景色の（G,R,B）輝度

                      標準マウスカーソル
  VWM_MCX0%,VWM_MCY0%   : 水平／垂直読み取り位置
  VWM_MCA0$,VWM_MCD0$   : ａｎｄ／ドットパターン
                      ウィンドウ移動用マウスカーソル
  VWM_MCX1%,VWM_MCY1%   : 水平／垂直読み取り位置
  VWM_MCA1$,VWM_MCD1$   : ａｎｄ／ドットパターン
                      ウィンドウサイズ変更用マウスカーソル
  VWM_MCX2%,VWM_MCY2%   : 水平／垂直読み取り位置
  VWM_MCA2$,VWM_MCD2$   : ａｎｄ／ドットパターン
○説明
  ウィンドウ・パッケージ（WIN ）とアプリケーションの仲介を行うことにより，
より高機能なマルチウィンドウを実現します。
  ウィンドウ・パッケージと同様，画面は１６色モードでページ０を使うことを
前提とし，ページ１は本パッケージで特に使用しません。また，同様にテキスト
表示は使えないので，文字表示はSYMBOL文を使用してください。
  マウスに関しては表示ページ０で移動範囲(0,0)-(639,479) を前提とします。
  現在のバージョンでは次の機能が提供されています。

    ・ウィンドウ・オープン／クローズ処理代替

    ・ウィンドウマネージャ機能

    ・ウィンドウ管理データの強化

    ・マウスカーソル資源の定義

  本パッケージによりウィンドウのオープン／クローズ処理を行う場合，ウィン
ドウパッケージのモジュールWIN_OP,WIN_CL などの代わりに本パッケージのVWM_OP,
VWM_CLなどを呼び出します。これにより，画面の退避／復元だけでなくウィンド
ウ枠やスイッチなどの描画も行うことができます。
  ただし，枠幅などの都合上，ウィンドウサイズは最小32×0 ，最大624 ×458
となります。

　ウィンドウマネージャ機能では，アプリケーションの実行時において，ウィン
ドウの移動やサイズ変更などができます。また，このマネージャ機能制御用のパ
ッケージ変数として，以下のものが用意されています。

    VWM_XM%,VWM_YM%     移動/リサイズ時左上隅座標最小値
    VWM_WM%,VWM_ZM%     移動/リサイズ時右下隅座標最大値
    VWM_XL%,VWM_YL%     リサイズ時のＸ・Ｙ方向長さ最小値
    VWM_WL%,VWM_ZL%     リサイズ時のＸ・Ｙ方向長さ最大値
    VWM_XD%,VWM_YD%     移動時の単位ドット数
    VWM_WD%,VWM_ZD%     リサイズ時の単位ドット数

　詳しくはVWM_WIN,VWM_MENUの項を参照してください。

　ウィンドウ管理データは，ウィンドウ・パッケージにおけるWIN_X() 〜WIN_Z()
などに加え，本パッケージにより以下のウィンドウ管理データが追加されます。

    VWM_AT%()           ウィンドウ属性
        以下の属性のうち有効なものの和を設定します。
        1 : MENU        メニュー表示を許可
            メニュースイッチを表示し，VWM_WIN,VWM_MENUによりウィンドウマ
            ネージャメニューを開けるようになります。
        2 : CLOSE       クローズ可能
            クローズスイッチを表示し，VWM_WIN,VWM_MENUによりそのウィンド
            ウを閉じられるようになります。
        4 : HIDE        一時消去可能
            一時消去スイッチを表示し，VWM_WIN,VWM_MENUによりそのウィンド
            ウを一時消去できるようになります。
        8 : MOVE        移動可能
            VWM_WIN,VWM_MENUによりそのウィンドウを移動できるようになりま
            す。
       16 : RESIZE      サイズ変更可能
            サイズ変更スイッチを表示し，VWM_WIN,VWM_MENUによりそのウィン
            ドウのサイズを変更できるようになります。

    VWM_T$()            ウィンドウ・タイトル
        設定した文字列をタイトルバーに表示します。

    VWM_N%              ウィンドウ通し番号 (０のとき無効)

    VWM_X%(),VWM_Y%(),  通し番号でのウィンドウ位置保存
    VWM_W%(),VWM_Z%()
        ウィンドウパッケージにおけるウィンドウ番号とは現在画面に重なって
        いる順に付けられた番号ですが，本パッケージではこれと別に，アプリ
        ケーションが作成する個々のウィンドウに，プログラム全体を通した管
        理番号を付けることができます。これをウィンドウ通し番号と呼びます。
        VWM_N%に1以上の値を設定してウィンドウを開いた場合，その座標は
        WIN_X%〜WIN_Z%ではなくVWM_X%(VWM_N%)〜VWM_Z%(VWM_N%)となります。
        また，クローズ時にはその時点でのウィンドウ座標が，これらの変数に
        保存されます。
        したがって，ウィンドウをマネージャにより移動・サイズ変更した後で
        いったん閉じても，同じ通し番号のウィンドウを開くと，変更後の位置・
        大きさで開かれるようになります。
        この機能を利用したくないウィンドウは，VWM_N%に0 を設定してくださ
        い。
        なお，ウィンドウ通し番号1 〜99はＶＩＬが提供する各種ユーティリィ
        などで使用するためのリザーブとします。アプリケーションで作成する
        ウィンドウは通し番号を100 番以上にしてください。

    VWM_N%()            ウィンドウ通し番号保存
        VWM_N%(I) でウィンドウ番号I のウィンドウ通し番号を知ることができ
        ます。

　また，アクティブウィンドウに関しては，
    VWM_AT%             ウィンドウ属性
    VWM_T$              ウィンドウ・タイトル
が利用できます。

　マウスカーソルは様々な形状のものを状況により使い分けるため，マウスカー
ソル資源と呼ばれる変数群で管理します。その形式は以下のようになっています。

    水平読み取り位置    VWM_MCX○%
    垂直読み取り位置    VWM_MCY○%
    ａｎｄパターン      VWM_MCA○$
    ドットパターン      VWM_MCD○$
        ○ : 資源番号

　資源番号○のマウスカーソルを定義するには，

    MOUSE 2,VIL_VWM_MCA○$,VIL_VWM_MCD○$,VIL_VWM_MCX○%,VIL_VWM_MCY○%

を実行します。
　現バージョンでは以下のものがサポートされています。

    0:標準マウスカーソル
      通常使用されるマウスカーソルです。

    1:ウィンドウ移動用マウスカーソル
      ウィンドウ移動モジュールで，ウィンドウのドラッグ移動時に使用します。

    2:ウィンドウサイズ変更用マウスカーソル
      ウィンドウサイズ変更モジュールで，サイズ変更スイッチをドラッグする
      際に使用します。

各資源のデータは，アプリ設定ファイルで与えるようになっています。

　ウィンドウの形状は，現バージョンでは下図のようなデザインになっています。

                クローズスイッチ      ハイライトバー              
                │一時消去スイッチ    │  メニュースイッチ        
      　　  ↓  ││ウィンドウタイトル│  │サイズ変更スイッチ    
          　─┌↓↓──↓──────↓─↓↓┐                  
   14 ドット  │□□ ■WARNING ■■■■■ □□│← タイトルバー   
            ─│┌─────────────┐│   （上部枠）     
      　　  ↑││(WIN_X%,WIN_Y%)           ││                  
      　　    ││                          │←─ ウィンドウ枠   
      　　    ││                          ││                  
      　　    ││                         ←── ウィンドウ表示部
      　　    ││                          ││                  
      　  ↓  ││           (WIN_W%,WIN_Z%)││                  
  8 ドット─  │└─────────────┘│                  
      　  ─  └───────────────┘                  
      　　↑→││←                      →││←                
      　　     8 ドット                      8 ドット             

    ・クローズスイッチ
      □に×印のスイッチです。
      これを左クリックすると，そのウィンドウを閉じることができます。

    ・一時消去スイッチ
    　□に／印のスイッチです。
    　これの上でマウスの左ボタンを押すと，押している間そのウィンドウを消
    　すことができます。

    ・メニュースイッチ
    　□に〓印のスイッチです。
    　これを左クリックすると，ウィンドウマネージャのメニューウィンドウが
    　表示されます。

  　・サイズ変更スイッチ
    　□に┐印のスイッチです。
    　マウスの左ボタンでドラッグすることで，ウィンドウのサイズを変更でき
    　ます。

  以上のスイッチは各属性が有効のときのみ描画されます。

    ・ウィンドウタイトル
      VWM_T$に設定したウィンドウ名が表示されます。SYMBOL文で無理やり縮小
      表示するため半角文字でもかなり読みづらく，半分飾りです。

    ・タイトルバー
      この部分（で各スイッチにかからない部分）をマウスの左ボタンでドラッ
      グすることにより，ウィンドウを移動できます。

　  ・ハイライトバー
　    アクティブウィンドウはタイトルバーにパレット番号3 でバーが描かれま
　    す。

  ウィンドウ枠描画にパレット番号1 〜3 を使用しますので，アプリケーション
中でこれらのパレット番号を使う場合は注意してください。
  枠のデザインは立体的なものになっていて，

    パレット番号1   明るい部分
    パレット番号2   枠の中心部分
    パレット番号3   影

となっています。
　また，VWM_OPによりウィンドウを開いた場合，ウィンドウ内は自動的にクリア
します。このときウィンドウ内を塗り潰す色を

    VWM_CB%             ウィンドウ背景色用パレット番号

で指定します。

○モジュール一覧

１．VWM_INITM           初期化モジュール
●入力変数
  W0%           : 最大ウィンドウ通し番号
  W1%           : ウィンドウ背景色用パレット番号
●出力変数
  なし
●説明
  W0% にはウィンドウ通し番号の最大値を指定します。ただし通し番号1 〜99は
ＶＩＬパッケージ用のリザーブです。この値はVWM_NMAX% に格納されます。
  W1% にはウィンドウオープン時にウィンドウ内を塗り潰すパレット番号を指定
します。この値はVWM_CB% に格納されます。
  マネージャ機能制御用のパッケージ変数は，以下の値に初期化されます。

    移動/リサイズ時左上隅座標最小値
        (VWM_XM%,VWM_YM%)=(8,14)
    移動/リサイズ時右下隅座標最大値
        (VWM_WM%,VWM_ZM%)=(631,471)
    リサイズ時のＸ・Ｙ方向長さ最小値
        (VWM_XL%,VWM_YL%)=(32,8)
    リサイズ時のＸ・Ｙ方向長さ最大値
        (VWM_WL%,VWM_ZL%)=(624,458)
    移動時の単位ドット数
        (VWM_XD%,VWM_YD%)=(1,1)
    リサイズ時の単位ドット数
        (VWM_WD%,VWM_ZD%)=(1,1)

  本モジュールを呼び出すことにより，以下のマウスカーソル資源のデータがア
プリ設定ファイルより読み込まれます。

    標準マウスカーソル
    ウィンドウ移動用マウスカーソル
    ウィンドウサイズ変更用マウスカーソル

したがって，設定ファイルを書き換えることにより，各マウスカーソルの形状を
変更することができます。
  データの記述形式は以下のようになっています。
    水平読み取り位置,垂直読み取り位置   （どちらも0 〜15）
    ａｎｄパターン  ビットパターンを１６進数表示に直した，長さ64の文字列
                    読み込み後，２桁ずつをアスキーコードとして文字に変換
                    し，長さ32の文字列として格納される。
    ドットパターン  ａｎｄパターンと同形式

　[例]

     1, 2
    7FFF3FFF1FFF0FFF07FF03FF01FF00FF007F003F001F00FF00FF187F387FFC7F
    0000000040002000500038005C002E005F002F805E0026004200030001000000

  また，マウスカーソルとして標準マウスカーソルが設定されます。ただし本モ
ジュールではマウス機能の初期化および位置の設定（MOUSE 0 およびMOUSE 1 ）
は行われませんので，先にメニュー選択パッケージの初期化モジュールを呼び出
しておく必要があります。
  ウィンドウ枠幅は
    WIN_UB%=14
    WIN_DB%=8
    WIN_RB%=8
    WIN_LB%=8
に設定されます。もしアプリケーション中で本パッケージを使用せず直接ウィン
ドウ・パッケージを呼ぶなどして，これらの値を変更した場合は，本パッケージ
中のモジュールを呼ぶ前に必ずこの値に戻してください。

２．VWM_ENVR            アプリ環境ファイル読み込み
●入力変数
　なし
●出力変数
　VWM_CF%()     : 枠の（G,R,B）輝度
  VWM_CB%()     : 背景色の（G,R,B）輝度
　VWM_X%(),     : ウィンドウ位置保存
　VWM_Y%(),
　VWM_W%(),
　VWM_Z%()
●説明
  ウィンドウ枠・背景色の輝度および各ウィンドウの位置を，アプリ環境ファイ
ルから読み込みます。
　形式は以下のようになっています。
　・枠の（G,R,B） 輝度
　・背景色の（G,R,B） 輝度
    それぞれ，0 〜255 の数字を3 個，"," で区切ってならべます。
　・ウィンドウ位置保存
　　ウィンドウ通し番号順に1 〜VWM_NMAX% まで，一行に
　　    左上隅Ｘ座標,左上隅Ｙ座標,右下隅Ｘ座標,右下隅Ｙ座標
    の順に"," で区切って並べます。なお，右下隅Ｙ座標の後には１個以上のス
    ペースを置けば，コメントを書くことができます。

　例えばVWM_NMAX%=110とすると，

    128,128,128
      0,  0,  0
    100,100,200,200     '  1番のデータ
        :
    240,128,511,191     '110番のデータ

のようになります。
  また，データの読み込み後にVWM_PALSETが呼び出され，ウィンドウ枠および背
景色は設定しなおされます。
  本モジュール呼び出し前に，ENV_ROP を呼び出してアプリ環境ファイルを入力
オープンしておいてください。

３．VWM_ENVW            アプリ環境ファイル書き込み
●入力変数
　なし
●出力変数
　なし
●説明
  ウィンドウ枠・背景色の輝度および各ウィンドウの位置を，アプリ環境ファイ
ルに書き出します。
  本モジュール呼び出し前に，ENV_WOP を呼び出してアプリ環境ファイルを出力
オープンしておいてください。

４．VWM_PALSET          ウィンドウ枠・背景色パレット設定
●入力変数
  VWM_CF%()     : 枠の（G,R,B）輝度
  VWM_CB%()     : 背景色の（G,R,B）輝度
  VWM_CB%       : ウィンドウ背景色用パレット番号
●出力変数
  なし
●説明
  ウィンドウ枠・背景色のパレットを設定します。
　ウィンドウ枠は，VIL_CF%()の値を（G,R,B）の輝度として，以下のように設定
します。
    パレット番号1   VIL_CF%()+80（最大255 ）
    パレット番号2   VIL_CF%()
    パレット番号3   VIL_CF%()-80（最小0 ）
　背景色は，パレット番号VWM_CB%にVWM_CB%()の値を輝度として設定します。

５．VWM_OP              ウィンドウ・オープン
●入力変数
　VWM_N%        : ウィンドウ通し番号
    VWM_N%=0のとき
        WIN_X%,WIN_Y%         : ウィンドウ左上隅座標
        WIN_W%,WIN_Z%         : ウィンドウ右下隅座標
    VWM_N%<>0のとき
        VWM_X%(VWM_N%),       : ウィンドウ左上隅座標
        VWM_Y%(VWM_N%)
        VWM_W%(VWM_N%),       : ウィンドウ右下隅座標
        VWM_Z%(VWM_N%)
　VWM_AT%        : ウィンドウ属性
                   （有効な属性の和を指定）
                     1 : MENU        メニュースイッチ表示
                     2 : CLOSE       クローズ可能（スイッチ表示）
                     4 : HIDE        一時消去可能（スイッチ表示）
                     8 : MOVE        移動可能
                    16 : RESIZE      サイズ変更可能（スイッチ表示）
　VWM_T$        : ウィンドウ・タイトル
●出力変数
　E%            : 0 : 正常終了
                  5 : オープン失敗（退避領域不足）
  WIN_X%,WIN_Y%,
  WIN_W%,WIN_Z% : オープン失敗時のみ現在のアクティブウィンドウの値を設定
  WIN_PM%       : -1 (相対座標モード)
●説明
  ウィンドウを開き，枠やスイッチを描画した後，ウィンドウ内をウィンドウ背
景色でクリアします。
  VWM_N%に1 以上を設定したときは，VWM_X%()〜VWM_Z%()からウィンドウ座標を
読み出します。初めてそのウィンドウ通し番号を用いる場合は，それ以前に
VWM_X%()〜VWM_Z%()を設定するようにしてください。
  VWM_N%に0 を設定した場合は，WIN_OPと同様にWIN_X%〜WIN_Z%にウィンドウ座
標を設定してください。
  本モジュールを呼び出すと，以下の処理が行われます。
    １．呼出し前のアクティブウィンドウのハイライトバーを消去
    ２．WIN_OPにより画面情報退避
    ３．ウィンドウ背景色でウィンドウ内クリア
    ４．枠および各スイッチを描画。ただし該当する属性が指定されていなけれ
        ば，そのスイッチは描かない。
    ５．タイトルおよびハイライトバーを表示
正常終了のときはE%に0が返されますが，退避バッファが足りない時はウィンド
ウは開かれず，E%に5 を返し，WIN_X%〜WIN_Z%に元のアクティブウィンドウ座標
を書き戻して終了します。
　終了時には相対座標モードになります。

６．VWM_CL              ウィンドウ・クロ−ズ
●入力変数
　なし
●出力変数
　WIN_X%,WIN_Y% : 新アクティブウィンドウ左上隅座標
  WIN_W%,WIN_Z% : 新アクティブウィンドウ右下隅座標
  VWM_AT%       : 新アクティブウィンドウ属性
  VWM_T$        : 新アクティブウィンドウ・タイトル
  VWM_N%        : 新アクティブウィンドウ通し番号
    クローズ前のウィンドウのVWM_N%<>0のとき
        VWM_X%(VWM_N%),   : ウィンドウ左上隅座標
        VWM_Y%(VWM_N%)
        VWM_W%(VWM_N%),   : ウィンドウ右下隅座標
        VWM_Z%(VWM_N%)
        （クローズ前に現在位置・サイズを保存）
  WIN_PM%       :  -1 (相対座標モード)
●説明
  ウィンドウを閉じます。
  VWM_N%が1 以上ならば，VWM_X%(VWM_N%)〜VWM_W%(VWM_N%)にウィンドウ座標を
保存します。
  また，新たにアクティブとなったウィンドウにハイライトバーを表示し，以下
の変数にこのウィンドウの値を設定します。
　WIN_X%,WIN_Y% : 新アクティブウィンドウ左上隅座標
  WIN_W%,WIN_Z% : 新アクティブウィンドウ右下隅座標
  VWM_AT%       : 新アクティブウィンドウ属性
  VWM_T$        : 新アクティブウィンドウ・タイトル
  VWM_N%        : 新アクティブウィンドウ通し番号
　終了時には相対座標モードになります。

７．VWM_CLDMY           ウィンドウ・ダミークロ−ズ
●入力変数
　なし
●出力変数
　WIN_X%,WIN_Y% : 新アクティブウィンドウ左上隅座標
  WIN_W%,WIN_Z% : 新アクティブウィンドウ右下隅座標
  VWM_AT%       : 新アクティブウィンドウ属性
  VWM_T$        : 新アクティブウィンドウ・タイトル
  VWM_N%        : 新アクティブウィンドウ通し番号
    クローズ前のウィンドウのVWM_N%<>0のとき
        VWM_X%(VWM_N%),   : ウィンドウ左上隅座標
        VWM_Y%(VWM_N%)
        VWM_W%(VWM_N%),   : ウィンドウ右下隅座標
        VWM_Z%(VWM_N%)
        （クローズ前に現在位置・サイズを保存）
  WIN_PM%       :  -1 (相対座標モード)
●説明
  画面情報を書き戻さずにアクティブウィンドウに関する情報を放棄します。
  つまり，実際には画面を変更せずにウィンドウを閉じたつもりになるモジュー
ルです。

８．VWM_CLALL           ウィンドウ全クローズ
●入力変数
  なし
●出力変数
  なし
●説明
  全ウィンドウを閉じます。

９．VWM_CLS             アクティブウィンドウ内クリア
●入力変数
  なし
●出力変数
  なし
●説明
  アクティブウィンドウ内をウィンドウ背景色でクリアします。
  座標モードは相対座標モードにしておいてください。

１０．VWM_CHECK         ウィンドウマネージャ呼出しチェック
●入力変数
　MX%,MY%       : マウスクリック位置
　KN%           : 入力番号
　KY%           : 入力キー
●出力変数
　VWM_R%        : マネージャ処理結果
                　0:処理なし
                  2:CLOSE
                  4:HIDE
                  8:MOVE
                 16:RESIZE
●説明
  ウィンドウマネージャの呼出しチェックを行います。
  MSEL_M/MSEL_IN/INP_STRの呼出し直後にこのモジュールを呼び出すことで，以
下の処理を行います。
    ・ウィンドウ枠の各スイッチを左クリック : VWM_WIN  を呼出
    ・ウィンドウマネージャ起動キーを押す 　: VWM_MENU を呼出
　その他ユーザが作成した入力ルーチンにおいても，
    ・マウス左クリック時にはKN%に-2，(MX%,MY%) にクリック位置を格納
    ・ウィンドウマネージャ起動キーが押されたときはMSEL_KY%に-13 を格納
という条件を満たしていれば，本モジュールを呼び出してウィンドウマネージャ
を起動することができます。

１１．VWM_WIN           ウィンドウスイッチ版ウィンドウマネージャ
●入力変数
　MX%,MY%       : マウスクリック位置
●出力変数
　VWM_R%        : マネージャ処理結果
                　0:処理なし
                  2:CLOSE
                  4:HIDE
                  8:MOVE
                 16:RESIZE
●説明
  ウィンドウ枠スイッチの左クリックによる各マネージャ機能の呼出しを行いま
す。
  (MX%,MY%) にクリック位置を格納して本モジュールを呼び出してください。ア
クティブウィンドウの各スイッチと座標を比較し，いずれかの上であれば該当す
るマネージャ機能を呼び出します。

１２．VWM_MENU          メニュー版ウィンドウマネージャ
●入力変数
  WIN_X%,WIN_Y% : マネージャウィンドウ左上隅座標
●出力変数
  VWM_R%        : マネージャ処理結果
                  0:処理なし
                  2:CLOSE
                  4:HIDE
                  8:MOVE
                 16:RESIZE
●説明
  ウィンドウマネージャメニューを開き，選択されたマネージャ機能の呼出しを
行います。
  (WIN_X%,WIN_Y%) にメニューウィンドウの左上隅座標を格納して本モジュール
を呼び出してください。50×98のウィンドウが開かれ，メニュー選択パッケージ
により呼び出す機能の選択を行います。このとき，属性が指定されていない機能
は選択できません。
  メニューの一番下に"<INFO>"が用意されていますが，これはウィンドウ情報を
表示させるモジュールVWM_INF を呼び出すものです。これを直接呼び出すスイッ
チは用意されていませんので，マウス操作ではメニュースイッチをクリックして
本モジュールのメニューを選択することになります。
  ウィンドウの一時消去／移動／サイズ変更では，各マネージャ機能がキーボー
ド操作版とマウス操作版のモジュールにわかれています。そこで，本モジュール
のメニュー選択をマウスで行ったかキーボード／パッドで行ったかで，呼び出す
モジュールを決定しています。また，移動／サイズ変更のマウス操作版を呼び出
す際には，マウスカーソル位置を適当に変更しています。

１３．VWM_INF           ウィンドウ情報表示
●入力変数
  WIN_X%,WIN_Y% : 情報ウィンドウ左上隅座標
●出力変数
　E%            : 0 : 正常終了
                　5 : オープン失敗（退避領域不足）
●説明
  ウィンドウ情報を表示します。
  (WIN_X%,WIN_Y%) に情報ウィンドウの左上隅座標を設定して本モジュールを呼
び出してください。184×92 のウィンドウが開かれ，以下の情報が表示されます。
    ・POSITION:(○○,○○)
      アクティブウィンドウの左上隅座標
    ・SIZE    : ○○×○○
      アクティブウィンドウの縦横長さ
    ・WINDOW  : ○○/○○
      現アクティブ番号/最大アクティブウィンドウ
    ・FREE    : ○○K/○○K
      ウィンドウ退避領域の残量/全領域量
      単位はキロバイト
  データ表示後，INP_MVWAITにより入力待ちを行い，マウス移動／クリック／キー
入力でウィンドウを閉じて終了します。
  正常終了時にはE%に0 を返し，退避領域不足でウィンドウを開けなかった時は
E%に5 を返してなにもせずに終了します。

１４．VWM_MOVE          ウィンドウ移動（ユーザ・インタフェース部）
●入力変数
  なし
●出力変数
　E%          : 0 : 移動正常終了
                5 : 移動失敗（退避領域不足）
  VWM_R%      : 8 : 移動実行
                0 : 移動中止（中止操作/移動失敗）
●説明
  マウス操作により，アクティブウィンドウの移動を行います。
  本モジュールが呼ばれた時点で，マウスの左ボタンは押された状態にあること
を前提にしています（放されていれば何もせずに終了します）。
  本モジュールが呼び出されると，マウスカーソルはウィンドウ移動用マウスカ
ーソルになります。また，アクティブウィンドウの周囲に，色番号7 で矩形枠が
描かれます。
  この状態で左ボタンを押したままマウスを動かすと，矩形枠が移動します。こ
のときＸ，Ｙ軸方向への移動は，VWM_XD%,VWM_YD% で指定された値を単位として
行われます。例えばVWM_XD%=4,VWM_YD%=8 なら，Ｘ軸方向への移動は4 ドットづ
つ，Ｙ軸方向への移動は8 ドットづつになります。また，(VWM_XM%,VWM_YM%)-
(VWM_WM%,VWM_ZM%)の範囲外には移動できません。
  左ボタンを放すと，その時点での矩形枠の位置にアクティブウィンドウを移動
させて終了します。ただし，放した時点で右ボタンが押されていれば，移動を行
いません。どちらの場合もマウスカーソルは標準マウスカーソルになります。
  移動を行った場合，VWM_R%には8 が返されます。移動を行わなかった場合は0
になります。また，退避領域不足のため移動ができなかった場合は，E%に5 が返
されます。

１５．VWM_KMOVE         ウィンドウ移動（キー操作版ユーザ・インタフェース部）
●入力変数
　なし
●出力変数
　E%          : 0 : 移動正常終了
                5 : 移動失敗（退避領域不足）
  VWM_R%      : 8 : 移動実行
                0 : 移動中止（中止操作/移動失敗）
●説明
  キーボード／パッド操作により，アクティブウィンドウの移動を行います。
  本モジュールが呼び出されると，アクティブウィンドウの周りに矩形枠が現れ
ます。これを移動キーで動かし，決定キーを押すとその時点の矩形枠の位置にア
クティブウィンドウが移動します。取消キーを押すと，移動せずに終了します。
また，拡張移動キーを入力すると，移動キーの８倍単位で動かすことができます。
移動単位・範囲や返り値については，VWM_MOVEと同じです。

１６．VWM_MV            ウィンドウ移動（移動処理）
●入力変数
　WIN_X,WIN_Y   : 移動先ウィンドウ左上隅座標
●出力変数
　E%            : 0 : 移動正常終了
                  5 : 移動失敗（退避領域不足）
    E%=0のとき
        WIN_W%,WIN_Z% : 移動先のウィンドウ右下隅座標
        VWM_R%        : 8 : 移動実行
    E%=5のとき
        WIN_X%,WIN_Y% : 移動前のウィンドウ左上隅座標
        VWM_R%        : 0 : 移動失敗
●説明
  アクティブウィンドウを移動します。
  WIN_X%,WIN_Y% に新しい位置の左上隅座標を設定して本モジュールを呼ぶと，
アクティブウィンドウがその位置に移動します。
  移動にはアクティブウィンドウの面積分だけの退避領域を必要とします。これ
が確保できないときは，E%に5 ，VWM_R%に0 を返し，移動は行いません。

１７．VWM_CLOSE         ウィンドウ・クローズ
●入力変数
　なし
●出力変数
　VWM_R%        : 2 : クローズ正常終了
●説明
　アクティブウィンドウをクローズします。
　VWM_R%に2 を返す以外は，VWM_CLと動作は同じです。

１８．VWM_HIDE          ウィンドウ一時消去（ユーザインタフェース部）
●入力変数
　なし
●出力変数
　E%            : 0 : 一時消去正常終了
                　5 : 一時消去失敗（退避領域不足）
  VWM_R%        : 4 : 一時消去実行
                  0 : 一時消去中止（一時消去失敗）
●説明
  アクティブウィンドウを一時消去します。
  本モジュールが呼ばれた時点で，マウスの左ボタンは押された状態にあること
を前提にしています（放されていれば何もせずに終了します）。
  本モジュールが呼び出されると，アクティブウィンドウは表示内容を退避領域
に保存していったんクローズされます。左ボタンが放されると，再び同位置同サ
イズにオープンされ，表示内容が復元されます。アクティブウィンドウの下にな
っている部分を一時的に表示させたいときに使用します。
  一時消去には，アクティブウィンドウの面積分の退避領域を必要とします。こ
れが確保できないときは，E%に5 ，VWM_R%に0 を返し，移動は行いません。

１９．VWM_KHIDE         ウィンドウ一時消去(キー操作版ユーザインタフェース部)
●入力変数
　なし
●出力変数
　E%            : 0 : 一時消去正常終了
                  5 : 一時消去失敗（退避領域不足）
  VWM_R%        : 4 : 一時消去実行
                  0 : 一時消去中止（一時消去失敗）
●説明
  アクティブウィンドウ一時消去の，キー操作版です。
  本モジュールが呼び出されると，アクティブウィンドウは一時クローズされま
す。その後なにかキーが入力されると，再びアクティブウィンドウをオープンし
て表示内容を復元します。必要な退避領域や返り値の意味は，VWM_HIDEと同じで
す。

２０．VWM_HD0            ウィンドウ一時消去（ウィンドウ一時退避処理）
●入力変数
　なし
●出力変数
　E%            : 0 : 一時消去正常終了
                  5 : 一時消去失敗（退避領域不足）
●説明
  ウィンドウパッケージの退避領域に，アクティブウィンドウの表示内容を退避
します。
  正常終了すればE%に0 を，領域不足で失敗すれば5 を返します。

２１．VWM_HD1           ウィンドウ一時消去（ウィンドウ再表示処理）
●入力変数
  なし
●出力変数
  なし
●説明
  VWM_HD0が退避したアクティブウィンドウの表示内容を復元します。

２２．VWM_HD2           ウィンドウ一時消去（再退避・ウィンドウ再表示）
●入力変数
　なし
●出力変数
　なし
●説明
　現在の画面を退避し直して，ウィンドウを再表示します。

２３．VWM_RESIZE        ウィンドウ・サイズ変更（ユーザインタフェース部）
●入力変数
　なし
●出力変数
　E%            : 0 : サイズ変更正常終了
                  5 : サイズ変更失敗（退避領域不足）
  VWM_R%        :16 : サイズ変更実行
                  0 : サイズ変更中止（中止操作/サイズ変更失敗）
●説明
  マウス操作により，アクティブウィンドウのサイズ変更を行います。
  本モジュールが呼ばれた時点で，マウスの左ボタンは押された状態にあること
を前提にしています（放されていれば何もせずに終了します）。
  本モジュールが呼び出されると，マウスカーソルはウィンドウサイズ変更用マ
ウスカーソルになり，サイズ変更スイッチの上に移動します。また，アクティブ
ウィンドウの周囲に，色番号7 で矩形枠が描かれます。
  この状態で左ボタンを押したままマウスを動かすと，矩形枠の形と大きさが変
化します。このときＸ，Ｙ軸方向のサイズ変化は，VWM_WD%,VWM_ZD% で指定され
た値を単位として行われます。例えばVWM_WD%=4,VWM_ZD%=8 なら，Ｘ軸方向のサ
イズは4 ドットづつ，Ｙ軸方向のサイズは8 ドットづつ変化します。また，
(VWM_XM%,VWM_YM%)-(VWM_WM%,VWM_ZM%)の範囲外にはみ出すことはできません。
  左ボタンを放すと，その時点での矩形枠の形にアクティブウィンドウが変化し
て終了します。アクティブウィンドウ内の表示は左上隅を新しい形に合わせて表
示し直されます。元より大きくなった部分に関してはなにも表示されませんし，
小さくなってはみ出した部分はクリッピングされ捨てられます。
  左ボタンを放した時点で右ボタンが押されていれば，サイズ変更を行いません。
  どちらの場合もマウスカーソルは標準マウスカーソルになります。
  サイズ変更を行った場合，VWM_R%には16が返されます。移動を行わなかった場
合は0になります。また，退避領域不足のため移動ができなかった場合は，E% に
5 が返されます。

２４．VWM_KRESIZE       ウィンドウサイズ変更(キー操作版ユーザインタフェース部)
●入力変数
　なし
●出力変数
　E%            : 0 : サイズ変更正常終了
                  5 : サイズ変更失敗（退避領域不足）
  VWM_R%        :16 : サイズ変更実行
                  0 : サイズ変更中止（中止操作/サイズ変更失敗）
●説明
  キーボード／パッド操作により，アクティブウィンドウのサイズ変更を行いま
す。
  本モジュールが呼び出されると，アクティブウィンドウの周りに矩形枠が現れ
ます。これを移動キーで動かし，決定キーを押すとその時点の矩形枠の形にアク
ティブウィンドウが変化します。取消キーを押すと，移動せずに終了します。ま
た，拡張移動キーを入力すると，移動キーの８倍単位で動かすことができます。
サイズ変更単位・範囲や返り値については，VWM_RESIZEと同じです。

２５．VWM_RS            ウィンドウ・サイズ変更実行
●入力変数
　WIN_X%,WIN_Y% : リサイズ後のウィンドウ左上隅座標
  WIN_W%,WIN_Z% : リサイズ後のウィンドウ右下隅座標
●出力変数
　E%            : 0 : サイズ変更正常終了
                  5 : サイズ変更失敗（退避領域不足）
    E%=0 のとき
        VWM_R%        : 16 : サイズ変更実行
    E%=5 のとき
        WIN_X%,WIN_Y% : サイズ変更前の
        WIN_W%,WIN_Z% : 　ウィンドウ左上・右下隅座標
        VWM_R%        : 0  : サイズ変更失敗
●説明
  アクティブウィンドウのサイズを変更します。
  WIN_X%,WIN_Y% およびWIN_W%,WIN_Z% に新しい位置の左上隅，右下隅座標を設
定して本モジュールを呼ぶと，アクティブウィンドウがその形に変化します。
  手順としてはまずアクティブウィンドウの表示内容を退避領域に退避した後，
ウィンドウをいったんクローズし，指定座標を使って再びオープンします。この
新しいアクティブウィンドウ上に，退避しておいた旧ウィンドウの表示内容を復
元します。このとき，左上隅を合わせて表示します。したがって，サイズが大き
くなった場合は右・下に空白領域ができます。また，小さくなった場合ははみ出
した分がクリッピングされ，捨てられます。
  サイズ変更には元のアクティブウィンドウの面積分だけの退避領域を必要とし
ます。これが確保できないときは，E%に5 ，VWM_R%に0 を返し，サイズ変更は行
いません。


◎SEL（選択パッケージ）
○必要パッケージ
　MSEL（メニュー選択パッケージ）
○パッケージ変数
　なし
○説明
　実行/取消など，汎用的と思われる選択ルーチンを集めたものです。

○モジュール一覧

１．SEL_INITM             初期化モジュール
●入力変数
　なし
●出力変数
　なし
●説明
　現バージョンではダミーです。

２．SEL_ENVR            アプリ環境ファイル読み込み
●入力変数
　なし
●出力変数
　なし
●説明
  現バージョンではダミーです。
  本モジュール呼び出し前に，ENV_ROP を呼び出してアプリ環境ファイルを入力
オープンしておいてください。

３．SEL_ENVW           アプリ環境ファイル書き込み
●入力変数
　なし
●出力変数
　なし
●説明
  現バージョンではダミーです。
  本モジュール呼び出し前に，ENV_WOP を呼び出してアプリ環境ファイルを出力
オープンしておいてください。

４．SEL_OK              「確認」選択
●入力変数
  X%,Y%         : 「確認」ボックス左上隅座標
●出力変数
　KN%           : 入力番号
                    1       :決定 / 選択　　（1:確認）
                   -1       :取消
                   -2       :ボックス外を左クリック
                   -3       :非対応キー入力
                  -13       :ウィンドウマネージャ起動キー
  KY%           : 入力キーのアスキーコード
                  （入力なし:0 ）
  K$            : 入力キー
                  （入力なし:""）
  MX%,MY%       : 左クリック位置(絶対座標)
  MW%,MZ%       : 左クリック位置(相対座標)
                  (ともにKN%=-2 の時有効)
                  ただしウィンドウ外クリックの時 MW%=-1
  MSEL_KY%      : 選択キーコード
  MSEL_BC%      : -1 （ＢＣ表示済） 
●説明
　確認入力待ちを行うためのモジュールです。
  (X%,Y%) を左上座標として40×24ドットのボックスを１つ作成し，その中に
「確認」と表示してメニュー選択を行います。

５．SEL_YN              「はい」「いいえ」　選択
●入力変数
　X%,Y%         : 「はい」ボックス左上隅座標
  　              (56x24ドット)
  MSEL_BN%      : ボックスカーソル初期位置
                  (1:はい / 2:いいえ)
●出力変数
　KN%           : 入力番号
                    1,2     :決定 / 選択 （1:はい / 2:いいえ）
                   -1       :取消
                   -2       :ボックス外を左クリック
                   -3       :非対応キー入力
                  -13       :ウィンドウマネージャ起動キー
  KY%           : 入力キーのアスキーコード
                  （入力なし:0 ）
  K$            : 入力キー
                  （入力なし:""）
  MX%,MY%       : 左クリック位置(絶対座標)
  MW%,MZ%       : 左クリック位置(相対座標)
                   (ともにKN%=-2 の時有効)
                  ただしウィンドウ外クリックの時 MW%=-1
  MSEL_KY%      : 選択キーコード
  MSEL_BC%      : -1 （ＢＣ表示済） 
  MSEL_BN%      : 最後のＢＣ位置 (KN<1のときも有効)
●説明
　肯定／否定の選択入力を行うモジュールです。
　(X%,Y%)を左上座標として56×24ドットのボックスを２つ作成し，その中に
「はい」「いいえ」と表示してメニュー選択を行います。
　２つのボックスの間は8 ドットです。

６．SEL_DO              「実行」「取消」　選択
●入力変数
　X%,Y%         : 「実行」ボックス左上隅座標
                   (40x24ドット)
  MSEL_BN%      : ボックスカーソル初期位置
                   (1:実行 / 2:取消)
●出力変数
　KN%           : 入力番号
                    1,2     :決定 / 選択 （1:実行 / 2:取消）
                   -1       :取消
                   -2       :ボックス外を左クリック
                   -3       :非対応キー入力
                  -13       :ウィンドウマネージャ起動キー
  KY%           : 入力キーのアスキーコード
                  （入力なし:0 ）
  K$            : 入力キー
                  （入力なし:""）
  MX%,MY%       : 左クリック位置(絶対座標)
  MW%,MZ%       : 左クリック位置(相対座標)
                   (ともにKN%=-2 の時有効)
                  ただしウィンドウ外クリックの時 MW%=-1
  MSEL_KY%      : 選択キーコード
  MSEL_BC%      : -1 （ＢＣ表示済） 
  MSEL_BN%      : 最後のＢＣ位置 (KN<1のときも有効)
●説明
　操作の実行または取消を選択させるような場合に使用するモジュールです。
　(X%,Y%)を左上座標として40×24ドットのボックスを２つ作成し，その中に
「実行」「取消」と表示してメニュー選択を行います。
　２つのボックスの間は8 ドットです。


