§４．３　ウィンドウマネージャ・パッケージファイル（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 ドットです。


