Vz Editor version 1.60
for OS/2 Virtual DOS Machine

Copyright (C) 1989-1993 by c.mos
Copyright (C) 1994-1995 by Altair☆
All rights reserved.

目次

Library Indexに戻る

1.0 概要

1.1 改善される機能

このアーカイブに含まれるのはOS/2のVirtual DOS Machine (VDM)で、Vzエディタを使う時に起きる幾つかの問題点をクリアするためのパッチです。このパッチの適用によって、VDM環境下でVzエディタを使う場合、以下の点が改善されます。
  1. 複数のDOSセッションから同時にVzを使う場合、テンポラリファイルVZTMP.$$$を不正に共用して互いに破壊しあってしまうことがありました。これを修正して、テンポラリファイルはそれぞれのVz毎にユニークなファイル名を使用するように改めました。これによりマルチタスク環境でも安心して利用できるようにしました。(##os2.1)
  2. VzからDOSプログラムを何回か動かしているうちに環境変数が破壊されてしまうことがありました。これを修正して外部プログラムを実行しているうちに環境変数が破壊されないような処置を施しました。(##os2.2)
  3. OS/2のタスクリストやウィンドウ表示した時にタイトルバーに表示されるタスクタイトルに現在編集中のファイル名が反映されるようにしました。(##os2.3)
  4. DOSセッションがウィンドウ表示か全画面表示かを自動的に判別して「最下行の予約」オプションを自動的に設定するモードを追加しました(日本語環境のみ)。ウィンドウ表示の場合、最下行をVzが使い、全画面表示の場合には最下行をFEPが使います。(##os2.4)
  5. Vzをプログラム・アイコンに登録して起動すると、グリーティング・メッセージに先行してプロンプトが表示されてしまいグリーティングが美しくないので、グリーティング表示前にカーソルを行頭にポジショニングさせるようにしました。(##os2.5)

1.2 前提ソフトウェア

このアーカイブに含まれるパッチは、VZIBM.COMとVZIBMJ.COM、ならびにソースコードに対する差分になっています。DOS/V版Vz以外のJ3100版や9801版のVzに対するパッチは考慮していません。J3100版OS/2やNEC版OS/2での動作は未確認です。これらの版が必要な場合は、このアーカイブに含まれるソースコード差分を参考にしてアセンブルをかけてみてください。

2.0 導入

このアーカイブで公開するパッチは、LDIFF Version 2.10 (Copyright (c) 1989-1990 三木和彦)の自己解凍となっています。

差分修正情報の内容は以下のとおりです。

_VZIBM.COM
VZIBM.COMのOS/2対応パッチ
_VZIBMJ.COM
VZIBMJ.COMのOS/2対応パッチ
_SRC.COM
ソースコードの差分
例えばVZIBM.COMを修正したい場合には、DOSセッションでカレントディレクトリにVZIBM.COMを置き、このアーカイブに含まれている_VZIBM.COMを走らせてください。VZIBM.COMを更新し、元のVZIBMは拡張子.OLDにリネームされます。

VZIBMJについても同様です。

VzのソースコードはVzのオリジナル・ディスケットのSRC.EXEという名前の自己解凍可能な圧縮されたアーカイブに記録されています。これを解凍した後に当アーカイブに含まれる_SRC.COMを実行すると、ソースコードも修正できます。修正前のソースコードは拡張子が.ASMから.BAKにリネームされて保管されます。


3.0 修正の詳細

3.1 修正の有効範囲

OS/2用VDMのためのパッチは、VzがOS/2の下で起動された時にのみ有効です。普通のDOS環境でパッチされたVzを使ってもパッチ部分のコードは全く働かずパッチされていないオリジナルのVzと全く同じです。

但し、DOSをOS/2の下で動かしたDOS環境ではパッチは活性化されます。例えばパッチされたVzを普通のDOS 6.30/Vの下で使ってもパッチそのものは非活性化しており働きませんが、DOS 6.30/VをOS/2の特定DOSセッションとして起動して使っている場合には、パッチ部分が働くようにしてあります。

VzはVZTMP.$$$の他にファイラの作業用ファイル(これを介してZCOPYにパラメタを渡します)の名前を固定しています。これもマルチタスク環境では好ましくないのですが、Vzのファイラを同時に異なるタスクから実行するという使い方は私の場合、滅多にないので、これについてはオリジナルの仕様のまま放ってあります。

これも基本的にはVZTMP.$$$に対する対策と同じテクニックで解決できるはずですから、アセンブラで数行の追加で済むはずです。ファイラについても、きちんとマルチタスク対応にしない時が済まないという人は、パッチ・ソースを参考にしてアセンブルしてみて下さい。


3.2 テンポラリファイル名の生成

OS/2のDOSセッション(特定バージョンのDOSを含む)から起動された場合には、未使用のファイル名を自動的に生成してそれをテンポラリファイルとして利用します。

その結果、複数のDOSセッションでVzを起動しても、それぞれのVzが生成するテンポラリファイルは全く異なる物になります。テンポラリファイルを作成するディレクトリはオリジナルのVzと全く同じ方法で決定します。

普通のDOSからパッチされたVzを起動した場合、オリジナルのVzと同様に、もしメモリが十分に確保できなければページング領域としてVZTMP.$$$という名前のテンポラリファイルを作成します。


3.3 子プロセスの環境

VzからDOSプログラムを何回か動かしているうちに環境変数が破壊されてしまうことがありました。これを修正して外部プログラムを実行しているうちに環境変数が破壊されないような暫定的な処置を施しました。

Vzは環境変数を一般的なプログラムとは異なるかなり変わった方法で扱っています。この修正では、OS/2環境であった場合には特殊な事をせず、普通のプログラム同様に自分の環境変数領域を保持したままにしておくよう一部の処理を省いています。

ただし、これはあくまでも暫定的な措置で、表面化しにくい新たなバグを内在しています。Vzの常駐と解除を繰り返していると、常駐解除のたびにコンベンショナル・メモリが少しずつ狭くなります。-zオプションによる常駐モードで利用しない場合には、このような問題はありません。

Vzを普通のDOSで使う場合には、パッチそのものが働かないようになっているので、この問題は発生しません。


3.4 タスクタイトル

OS/2のタスクリストやウィンドウ表示した時にタイトルバーに表示されるタスクタイトルに現在編集中のファイル名が反映されるようにしました。

試しに、DOSウィンドウ表示プロンプトを開いて、パッチされたVzでいくつかのファイルを覗いてみてください。複数のタスクで同時にVzする時、編集しているファイル名がそのままタスクタイトルに反映されますので意外に便利です。(^_-)

ただし、OS/2ではデータをプログラムのアイコンにドラッグすると、ドラッグされたデータをそのプログラムが処理しますが、この時、Vz自身のタイトルがデータのタイトルと同一になってしまいますので、プログラムアイコンにVZIBM.COMやVZIBMJ.COMが登録されている場合には、そのアイコンのタイトルをそのまま利用するようにしてあります。

もしプログラムアイコンに登録した場合にも編集中のファイル名をタスクタイトルとして反映させるには、VZIBM.COMやVZIBMJ.COMを直接に呼び出すのではなく、それを呼び出すバッチファイルを作成して、そのバッチを呼び出してください。普通にインストールされたVzエディタのディレクトリにはVZ.BATというバッチファイルがありますので、それをそのまま使うのは良い方法です。

(う〜ん、書いた本人が読んでもわかりにくい文章だなぁ。ま、要するに、後述の「4.0 ヒント」の章を参照して、その通りに設定しておけば大丈夫です。)

DEFファイルのファイル名の小文字表示指定はタスクタイトルにも反映されます。

このタスクタイトル設定機能はOS/2の非公開ファンクションをコールしています。将来のバージョンのOS/2では正しく機能しなくなるかもしれません。


3.5 最下行予約の自動設定 (VM$80)

DEFファイルまたは起動時のオプションVMの設定で最下行の予約を自動設定するようにしました。ビデオのポート3D6hを参照してVirtual DOS Machineがウィンドウ表示なのか、それとも全画面表示なのかを判別して、その結果で最下行を予約するかどうか自動的に決定させます。VzのVMオプションを2進数で表現した時、$80のビットがセットされていれば、この自動決定を行い、リセットされていればLCオプションの設定を利用します。

なお、今回のパッチで追加した自動設定機能を使うかどうかの設定いかんに拘らず最下行の予約機能は日本語環境のみで有効です。

オリジナル版のVzでは、VMには0〜127の値(実際にはBIOSがサポートしているビデオモード)を指定できます。もし128以上を指定するとVM0(ディフォルト)と見なされます。

パッチ版のVzでは、初期ビデオモード(詳しくはVzのマニュアルの「VM」オプションに関する記述を参照してください)と$80(=128)の論理和を指定する事ができます。

もしVM指定の2進値のビット7 ($80)がセットされていた場合には、Vzを起動したDOSセッションがウィンドウ表示の時にはLC-、全画面表示の場合にはLC+が指定された時と同じ処理をします。

例えば、Vzを最下行自動設定でビデオモード$73で起動したい場合には、VM$E3と指定します。

DOS設定ノートブックのFEPの設定でPM_FEPを選択している場合には、VzのDEFファィルのVMオプションをVM$80として、この自動設定モードを活かすようにすると良いでしょう。

またOS2_FS_FEPとPM_FEPは全画面表示の場合には、全く同じユーザインタフェースを提供するので、OS2_FS_FEPを選択している場合にはPM_FEPに設定を変更することをお勧めします。

パッチの有効範囲は既に記したように、OS/2環境下のみですが、VM指定に関する仕様の一部は普通のDOS環境もパッチを活かすようにしてあります。オリジナルのVzではビデオモード128以上は無視して「VM0」が指定されたものと見なすことになっているようですが、パッチ版ではVM指定された値と7Fhの論理積(and)の値をビデオモードとして利用します。これはDEFファイルにVM$80以上を指定した時に、同じDEFファイルを普通のDOS環境でも流用できるようにするための配慮です。


4.0 ヒント

この章に記述している内容の一部は、OS/2 MVDMのオート・タイトル・スイッチング機能の仕様に依存します。これについては非公開のファンクションを利用していますので、将来のOS/2のバージョンにおいては、記述内容が正しくなくなってしまう事がありえます。

本章の以下の記述は、OS/2 J2.11のMVDMで試してみた結果に基づいています。


4.1 ファイル・オブジェクトをドラッグして使う場合

Vzアイコン登録して、そこにファイル・オブジェクトやデータ・フォールダーをドラッグして使うこともある場合には、Vzをプログラム・アイコンとして登録する際に、VZIBM.COMまたはVZIBMJ.COMなど、COMファイルを直接起動するように設定して、Vzのオート・タスク・タイトル・スイッチング機能をディセーブルする事をお勧めします。

4.2 Vzアイコンを直接クリックして起動する場合

Vzアイコン登録しても、そこにファイル・オブジェクトやデータ・フォールダーをドラッグして使うことは滅多にないという場合には、Vzをプログラム・アイコンとして登録する際に、VZ.BATのようなバッチファイルからVzを間接的に起動するように設定してVzのオート・タスク・タイトル機能をイネーブルする事をお勧めします。

4.3 DOSプロンプトからVzを起動する場合

VZIBM.COMやVZIBMJ.COMなどのCOMファイルを直接起動した場合も、あるいは、VZ.BATなどのバッチファイルからVzを間接的に起動した場合も、通常は、どちらもVzのオート・タスク・タイトル機能はイネーブルされます。Vzのオート・タスク・タイトル機能は、OS/2の下で起動した特定バージョンのDOS環境下でも有効です。

ただし、NameTask(Virtual DOS Machineからタスク・タイトルを任意に設定できるフリーウェア)を利用して積極的にタスク・タイトルを設定している場合には、それが優先しオート・タイトル・スイッチングは効きません。


4.4 DOS/V ExtensionやDOS_FEPのコマンド・プロンプトからの起動

PM_FEP以外のFEPを利用する場合、セッションをウィンドウ表示にしてもPM_FEPウィンドウ下の日本語シフト・ステータス・ラインは出ません。この場合には、パッチしたVzの最下行予約の自動設定をオフにする…具体的にはVMオプションの指定を127($7F)以下にしなければなりません。

PM_FEPとそれ以外のセッションを混在して同時に幾つも開く事の多い場合には、それぞれのセッション毎にVMオプションの指定を設定する事が望まれます。

このためには使うFEPの違いで異なるDOS_AUTOEXECを用意する方法が考えられます。

DOS/V Extensin環境ではDOS_FEPの利用が前提となっています。DOS/V Extension以外のセッションではPM_FEPを使うといった例では、VzのDEFファイルにはVM$80を指定しておき、DOS/V Extensin環境の場合のみそれを否定するために、DOSVEXT2.BAT (DOS/V Extensionをインストールするとディフォルトのこのバッチ・ファイルがDOS_AUTOEXECとして起動されるようになっています)の中で「DOSKEY VZ=VZIBMJ -VM0 $*」と設定しておくことで、毎回いちいちVMオプションを指定する必要はなくなります。(この例では、DOSKEYマクロ「VZ」が設定されない場合、すなわちDOS/V Extension以外の環境ではVZ.BATが起動され、DEFファイル内のVM指定が有効になります。DOSKEYマクロとして「VZ=VZIBMJ -VM0」が指定されている場合には、DEFファイル内のVM指定に優先してマクロで指定される「VM0」が優先されるというしかけです)。

DOSKEYを使わないもう一つの方法として環境変数の利用が考えられます。

例えば上と同じような例を考えた場合、DOSVEXT2.BATの中でDOSKEYマクロを設定する代わりに「SET VZOPT=-VM0」といった行を入れておきます。PM_FEP時に起動されるDOS_AUTOEXECではこの環境変数「VZOPT」に対しては何も指定しない(DEFファイル内にVM$80がある場合)か、あるいは「SET VZOPT=-VM$80」を設定します。

VZ本体には環境変数VZOPTを認識する機能はありません。そこで、ここでちょっと小細工をします。VZ.BATの「vzibmj %1 %2 %3 %4 %5 %6 %7 %8 %9」という行を書き換えて、「vzibmj %vzopt% %1 %2 %3 %4 %5 %6 %7 %8 %9」にしてしまえばVZ.BAT起動時に環境変数「VZOPT」を認識してもらえるようになります。


4.5 Peek Console

将来のバージョンではIBMが解決してくれると期待しているのですが、私の手元のバージョンのOS/2 Virtual DOS Machine環境ではVzのコンソール取り込みがうまくいきません。

この問題を解決するためのANSI.SYSのパッチもhttp://www.vector.co.jp/authors/VA000199/os2/index_ja.htmlで公開しています(MakeV29h)。

MakeV29hに関する質問で最も多いのが、パッチあて作業に必要なQBasicが見当たらないというものです。QBasicはPC-DOSプロンプトで「QBASIC」とタイプするだけで何んの苦もなく起動できるはずです。OS/2を普通にインストールしている場合、PC-DOSプロンプトを立ち上げれば、AUTOEXEC.BATの中でQBasic.exeのあるディレクトリにpath環境変数が通っているはずです。DOS/VプロンプトやJDOSプロンプトからはQBasicは利用できませんから注意して下さい。

コンソール取り込みができなくて悩んでいて、MakeV29hのパッチをまだあてていない人は、MakeV29h.lzhもダウンロードなさるようにお勧めします。


5.0 余談

このパッチはOS/2専用です。VZTMP.$$$の問題などは、DOSSHELL、WindowsやNovell-DOSなどのマルチタスク環境でも起こりますが、OS/2以外のマルチタスク環境に対応したパッチを公開するつもりはAltair☆にはありません。

現在、拡張属性.LONGNAMEと.TYPE対応のVzなんぞも考えていますが、これはVzのソースレベルで対応しなくても、マクロで十分に対応可能だろうと思います。今回の公開では拡張属性に係わる部分は省いています。Vzのマクロを使い慣れている人は頭の体操としてトライしてみて下さい。

先日、OS/2マガジンなんぞを立ち読みしていたら、やはりVZTMP.$$$の問題を取り上げていました。Vzを複数使いたい時には、ワーク・ディレクトリの異なるVzアイコンをたくさん用意しておけば良いなどと、たわけた事が書いてあるのには、あきれてしまいました。このような、おバカな記事が横行しているようではVzの将来は暗いですね。こまったものです。

VzはマクロだけでなくソースもいじってカスタマイズできるというDOS用の市販ソフトとしては他にあまり類を見ない利点を持っています。今回公開する個々のパッチは、ソースを比較してみればわかりますが、ほんの些細な修正に過ぎません。Vzは自分の手になじむカスタマイズがやり易いエディタなので、OS/2に移行してもエディタだけはあいかわらずVzを手放せません。

このような素晴らしいエディタと、そのソースを安価に公開して下さっているc.mos氏にこの場を借りてお礼申し上げます。m(_ _)m

Altair☆がこれまでに公開しているソフトウェアのほとんどはノートPCで開発していますが、このパッチもその例に漏れず都営地下鉄の車中で完成しました。

本当は他のプログラムを組んでいたのですが、突如として環境変数がぐちゃぐちゃになり、なんでだ?とソースを開いて、その勢いでパッチを当ててしまいましたが、いざそれをアセンブルしようとするとpathが壊れていて…。(^^;

電車の中で「うげげ」とか「Oops!」とかブツクサ言いながらアセンブラしてやつ、傍から見ると不気味だわなぁ。(^^;

今回、やはり同じような症状…「うげげ」とかブツクサ言う症状ではなく、Vzの環境変数がめちゃくちゃになってしまう症状のことです…に悩まされている人をNIFTY-Serveで見かけたので、パッチ部分のソースの体裁を整え、このドキュメントを添えて一般公開するしだいです。


6.0 Copyright Notice

Vzエディタはc.mos氏の著作物で、全ての権利をc.mos氏が所有しています。

このパッチはAltair☆ (NBG01720@nifty.ne.jp)がコーディングしたもので、パッチ部分の著作権は著作権法に定める原著作権者(c.mosさん)に帰属する権利を除き全てAltair☆が保有しています。

このパッチをAltair☆に無断で転載配布してはなりません。ドキュメントやソースコードの部分引用や翻訳も著作権の侵害とみなします。

また、パッチを適用したVzエディタを原著作権者 c.mos氏の承諾なく転載配布してはなりません。

このソフトウェアはAltair☆が自分で使うためにコーディングしたものです。Altair☆以外の者が、このソフトウェアの何らかの不具合に起因する損害を被ったとしてもAltair☆は一切関知しません。

利用方法に関する問い合わせのメールにはお答えしかねます。


Altair☆ (NBG01720@nifty.ne.jp)
http://www.vector.co.jp/authors/VA000199/