§３　ＶＩＬ使用法

§３．１　インストール

　今回提供するバージョンは，以下のファイル構成になっています。これらを
すべて，ＨＤＤなどの適当なディレクトリにコピーしてください
（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パッケージ
        データなし



