VZエディタの最終バージョン(V1.6)が販売されたのが1993年の年末ですから、何と10年前のこととなってしまいました。今やVZって何ですかと思われる人も少なくないことでしょう。でも、使っている人がいるのです。何故か?
VZエディタは、
ビレッジセンター
から販売されているDOSエディタの製品です。
◆ 強力なマクロのおかげで、テキスト処理なら何でもできてしまう
◆ HP100/200LXやモバイルギアのような携帯マシンでサクサク動く
◆ プログラミングに最適。エディタの中に居ながらアセンブラやコンパイラを自在に動かせます
◆ 市販製品なのにオープンソース。ここまで柔軟なエディタはありません。
◆ Windows9xでもちゃんと動きます。高橋版(上村さん、なごすけさんのページから
ゲットできます。リンクのページからどうぞ。)なら、ロングファイル名も使える
などの特徴があります。
残念なことにWindows MeやXPでは、VZが使いにくくなってきていることも事実です。と言いつつも手放せないVZ、DOS窓との格闘法なども含めてご紹介(予定)できたらと思っています。
・・・と昨年書いておきながら、すっかりFGALDCもご無沙汰状態。正直言って仕事に追われて余裕が無くなってきています。今年はもう少し気持ちにゆとりを持ってHPも更新して行きたい。
下のカードのコンテンツだけだと、何が何のことやらと思われる人もいると思いますが、ぜひこの情報が活用できるレベルまでVZをしゃぶり尽くしてください。テキスト罫線なのでブラウザのバージョン等によってはズレが出ます。許して。
@
03/12/31(21:03):Windows の DOS窓でVZを使う方法
------------------------------------------------------------------------------
本当は DSPSS を使う方法を紹介しようと思ったのですが、マシンの環境やフル画面
のDOSを思うように操れなくなっていて、今回は見送りました。んで、以下に示し
ますのが、DOS 窓版(Win98SEまで可能 Meは裏技)です。
まず、config.sysを以下の様に書き換えます。
-----------------------------------------------------------
device=C:\WINDOWS\himem.sys
device=C:\WINDOWS\EMM386.EXE RAM
devicehigh=C:\WINDOWS\biling.sys
devicehigh=C:\WINDOWS\jfont.sys /p=C:\WINDOWS
devicehigh=C:\WINDOWS\jdisp.sys
rem--------以下の行を追加----------
devicehigh=C:\wtdisp.sys
rem--------------------------------
devicehigh=C:\WINDOWS\jkeyb.sys /106 C:\WINDOWS\jkeybrd.sys
devicehigh=C:\WINDOWS\kkcfunc.sys
devicehigh=C:\WINDOWS\COMMAND\ansi.sys
-----------------------------------------------------------
wtdisp.sys は、http://hp.vector.co.jp/authors/VA000177/の IRUKA さんのホー
ムページにある WIDETXT9.ZIP をダウンロードしてください。
Windows Me の場合は、config.sys を書き換えられないので wtdisp.sys を jdisp.
sys にリネームして windows のフォルダに置いておく方法が上村さんのホームページ
に紹介されています。
次にDOS窓のショートカットを作って、右クリックのプロパティを開きます。
以下、私の環境です。パスなどは、適宜調整してください。
-----------------------------------------------------------
コマンドライン:e:\vz\vz.com *.*
作業ディレクトリ:e:\vz
バッチファイル:e:\vz\dosvz.bat
アクセスキー:Alt+V
実行時の大きさ:通常のウィンドウ
プログラム終了時にウィンドウを閉じる:→チェック
-----------------------------------------------------------
ショートカットのアイコンをデスクトップに置いておくと、表示のアクセスキーで瞬
時にVZが起動します。
最後にdosvz.batです。
-----------------------------------------------------------
@ECHO OFF
ADDDRV e:\vz\atok.dev
PATH=%PATH%;e:\vz;c:\
SET TMP=c:\tmp
SET TEMP=%TMP%
set vzpath=e:\vz\
SET VZDEF=e:\vz\
set vzsym=s16 TP
MODE CON RATE=32 DELAY=1
echo "[1m"
e:\vz\vwx.com -z3 -x -v3
c:\wtmode 80 32
-----------------------------------------------------------
wtmode は、先ほどダウンロードしたものに入っています。それと、ATOK.DEV があり
ました。
atok.dev
-----------------------------------------------------------
DEVICE=e:\vz\just5\ATOK8A.SYS /UCF=e:\vz\just5\ATOK8.UCF /D=e:\vz\just5\ATOK9.DIC
DEVICE=e:\vz\just5\ATOK8B.SYS
DEVICE=e:\vz\just5\ATOK8EX.SYS
-----------------------------------------------------------
以上です。GOODLUCK!!
==============================================================================
@
1997/02/08(09:32:19)[題]:gz のマップ
------------------------------------------------------------------------------
gz:0000 +---------------+
0110 | | ◆pc
| wseg |
0206 | | 変数テーブル
028E | | ◆pq(pc+382)
| |
+---------------+ pq+194(pn-156)
03EC | | ◆pn(pq+350)
0442 | | fg(pn+86)
04D2 | | ◆mg(fg+144)
| dseg |
05B9 | | ◆pv(mg+231)
062A | | ◆vp(pv+113)
| | ↓
0690 +---------------+ vp+102(pq..99) -- ここまでvzと同じ
| | コマンドキーテーブル
08AA | | (pq..110)コマンドキーの説明書き
| |
0F73 +---------------+ mh
| macro_buf |
| |
〜 〜
〜 〜
| |
AFD2 +---------------+ pq..131 pu-bc:削除バッファ
| cbuff Bc byte |
B3D2 +---------------+ pq..132 pu:スタックバッファ
| ubuff Bu byte | マクロ用配列バッファ
| stack ↑ | スタックメモリの若い方へ積み上げる
B452 +---------------+ pq..133 pu+bu:表示文字列バッファ
| pfbufp 84byte | &m の時、ここでいったん文字列にしてから表示
B4A6 +---------------+ pq..134 pu+bu+84:tmpbuf
| tmpbuf 256byte| コマンドラインのラインバッファなどに使われる
B5A6 +---------------+ pq..135 pu+bu+84+256:tmpbuf2
|tmpbuf2 256byte| エイリアスの文字列はここで一度展開
B6A6 +---------------+ pq..136 pu+bu+84+256*2:tmpbuf3
|tmpbuf3 160byte| ディスク転送アドレス(DTA)
| | &? は、ここで一度展開してから出力
+---------------+
| |
BA2C +---------------+ pq..142、pn..-33 pu+bu+1498
| | コンバートされた検索文字列のバッファ
BAAC +---------------+ pq..143
| | コンバートされた置換文字列のバッファ
BBB4 +---------------+ pq..141(pq..141)
| | &^用のオプションの初期値
&^ などで使われる値
----INIOPTSZ1 (..0 〜 16) ・pc..30〜pc..46 にあるもの
WD PG RS TA TB CI CO MP MI WL FW FV FS FO LC FM FH ;17
----INIOPTSZ2 (..17 〜104) ・pc..87〜pc..104 にあるもの
AN AC AL AH AS AO AR AM AB AT AW AF AI AJ AK AG
AU AP AD AE AY AV ;22
CA WV WH QC QT QW JD JE JS JX ;10
JU PU BU SP ;4
A 〜 YY ;46
AX BX CX DX SI DI ;6
----INIOPTSZ3 (..105〜112) ・pq..114〜pq..121 にあるもの
PS PF PX PA PW PR PT PE ;8
| |
CF2C +---------------+ pq..146
| asm_stack? |
D02C +---------------+ pq..147
DADC +---------------+ pn..-27(pq..148)wm+228
| line_buf | (先頭はCR/LF実質wm+230が始め)
| |
EADC +---------------+ pq..149
|tmpbuf4 256byte| 256 バイトのテンポラリ領域(ラインバッファの直後)
| | &z 等のマクロ組込時以外は比較的自由に使用できる
+---------------+ pq..149+256 ラインバッファの終端
| |
==============================================================================
@
1997/02/11(07:48:31)[題]:メニューの構造
------------------------------------------------------------------------------
+--------+
00 | $E0+No.| メニュー番号
+--------+
01 | | サイズ(横幅〜アイテム終端のヌル)
02 | | │
+--------+ └──────┐
03 | | 横幅 max76 ←サイズ─┐
+--------+ │
04 | i | アイテム数(1〜127) │
+--------+ │
05 | | パラメータのカラム数 │
+--------+ (オプション表示幅) │
06 | | 選択アイテム位置 ┌─┘
+--------+ (カーソル位置 │−1はノーカーソル)
07 | | ユーザメニューでは│ Command item function
routin call| | マクロメニューでは│ Draw Macro menu
08 | | のアドレスが記録さ│ れ、コールされる↓
+--------+ (メニューを書く関 │ 数への near pointer (vz が初期化))
09 | | アイテム種類 ------→┌────┬──────────┐
〜 〜 │ │1st Byte│ 2nd Byte │
〜 〜 │ ├────┼──────────┤
08+(i*2) | | │ │ 01 │ !nn │
+--------+ │ ├────┼──────────┤
| | タイトル │ │ 02 │ #nn │
| | 文字列 │ ├────┼──────────┤
+--------+ │ │ 03 │Palameter Table No. │
| | アイテム │ ├────┼──────────┤
| | 文字列 │ │ 04 │ &nn │
+--------+ │ └────┴──────────┘
〜 〜 │
〜 〜 │
+--------+ │
| | アイテム │
| | 文字列 │
| | │
| $00 | ←───────┘アイテム文字列終端のヌルまで
+--------+
メニューアイテムの種類はV1.6からこう↓なった。
(item) (nm,type)
"nomal" 00,00
"mnu_No.",!02 02,01(メニュー番号,タイプ $01)
"com_No.",#15 0f,02(コマンド番号,タイプ $02)
"com_Sym",#g 67,0b(コマンド文字コード,タイプ $0b)
"mac_No.",&70 46,04(マクロ番号,タイプ $04)
"opttbl_No.",au 5f,80(オプションテーブル番号,タイプ $80,$81)
メニューの返り値
←上位 下位→
┌─┬───┬─┬──┐
│15│14〜8 │7 │6〜0│
└─┴───┴─┴──┘
↑ ↑ ↑ ↑
│ │ │ コマンドキー:コマンド番号
│ │ │ マクロキー:マクロ番号をビット反転させたもの
│ │ └─コマンドキー:0 マクロキー:1
│ └────メニューカーソルの位置
└───────特殊キー入力を表す
==============================================================================
@
1997/02/11(09:07:35)[題]:モジュールヘッダ・マクロの構造
------------------------------------------------------------------------------
+--------+
00 | | &Zs()の返り値rはここを指す
(実行中なら| $FF | モジュールヘッダNo.
mg..1 ) | | (ネストが無ければmg..2..3もこのアドレスを指す)
+--------+
01 | n | サイズ (モジュールフラグ〜モジュールTille文字列終端のヌル)
02 | | └─────┐
+--------+ (*) ↓ (*)┌──┬────────┐
03 | | モジュールフラグ ←n ┐ │+1 │ Sleep │
+--------+ │ │+2 │ Removable │
04 | CD | リンクポインタ ---------+ │+4 │ External │
05 | AB | ($00,$00なら │ | │+80h│ keyboard macro │
+--------+ 最後のマクロ) │ | └──┴────────┘
06 | i | モジュールIDの長さ │ | 次のマクロ
07 | | │ | ABCD: +--------+
+--------+ │ +----→ | $FF | モジュールヘッダ
08 | | モジュールID │ +--------+
〜 〜 (ID<=8) │ | |
〜 〜 (モジュールTitle │ | |
| | を大文字変換) │
08+i | $00 | kbマクロ="$KB" │
+--------+ │
09+i | | モジュール │
| | Title │
| | 文字列 │
| | kbマクロ= │
| |│
02+n | $00 | ←────┘ ↓ローカルマクロ
+--------+ +--------+
03+n | | 00 グローバルマクロ番号($01〜$71) | | 00 ローカルマクロ番号
(&Z()の返り| | ← (実行中ならmg..2..2) | | ($81〜$E0)
値rrはここ)| | | |
+--------+ +--------+
| | 01 サイズ------┐ | | 01 サイズ------┐
| | 02 │ | | 02 │
+--------+ ↓ +--------+ ↓
(実行中なら| | 03 キーアサイン ←─┐(実行中なら| | 03 ローカルマクロ ←─┐
mg..2..0 )| | 04 ($FF,$FFな │ mg..2..0 )| | 本体 │
+--------+ ら未設定) │ | | │
| | 05 マクロのタイトル │ | | │
| | 『""』の │ 〜 〜 │
| $00 | 場合はヌル │ 〜 〜 │
+--------+ │ | | │
| | マクロ本体 │ | $00 | マクロ終端 ←──┘
| | │ +--------+
| | │
〜 〜 │
〜 〜 │
| | │
| $00 | マクロ終端 ←──┘
+--------+
==============================================================================
@
1997/02/12(18:37:46)[題]:ラインバッファ
------------------------------------------------------------------------------
+--------+
wm+230 00 | CR(0D) | pq..148+2(ラインバッファが無効な時はpq..148)
01 | LF(0A) |
+--------+
| |
| |
| |
| |
| |
〜 〜
〜 〜
cp(wa..20)| カーソル |
| | | |
+--------+ +--------+
wa..19 | CR(0D) | | LF(0A) |
| LF(0A) | +--------+
+--------+ 最終行
==============================================================================
@
1997/02/13(18:40:23)[題]:mg 関係の構造
------------------------------------------------------------------------------
+--------+
mg 00 | mg..0 | 内部レジスタ
01 | |
+--------+
$02 | mg..1 | ----→ 実行中のモジュールヘッダアドレス
03 | |
+--------+
04 | mg..2 |
05 | ━━━━━━━━━━━━━┓
+--------+ ┃
06 | mg..3 | イベントマクロ ┃
07 | | 実行前のポインタ ┃
+--------+ ┃
08 | mg..4 | ループカウンタ ┃
09 | | ┃
+--------+ ┃
0A | mg..5 | ループ先頭のポインタ ┃
0B | | ┃
+--------+ ┃
0C | | startup macro ┃
+--------+ ┃
0d | | premenu ┃
+--------+ ┃
0E | | stepf ┃
+--------+ ┃
0F | | input data flag ┃
+--------+ ┏━━━┓ ┃
(1)┌─$10| MACRO | ┃mg+16 ┣━━━━━┛ネストしていなければmg..2==mg+16
こ │ 11| TOP+3 | ┗━━━┛ネストする度に+8する ───────┐
れ │ +--------+ │
が │ 12| MACRO | サブルーチンから戻ったときの実行ポインタ │
16 │ 13| RESTART POINTER │
こ │ +--------+ │
あ │ 14| MACRO | グローバルマクロの先頭 │
る │ 15| TOP | │
│ +--------+ │
│ 16| MODULE | │
└─ 17| TOP | │
+--------+ │
(2)┌─$18| | ┏━━━━┓ │
│ | | ┃mg+16+8 ┃←───────────────┘
┗━━━━┛
==============================================================================
@
1997/03/17(08:30:26)[題]:テキストスタックの構造
------------------------------------------------------------------------------
テキストスタックのセグメント(kz)
┏━━━┓kz:0000
┃ ┃
┃ ┃
┃ (1) ┃
┃ ┃
┃ ┃
┠───┨
-3┃ ┃タイプ
┠───┨
-2┃ ┃サイズ
-1┃ ┃
┣━━━┫
┃ ┃kp-(3+kp..-1)
┃ (2) ┃
┃ ┃
┠───┨ kp.-3 … 文字列のタイプ。
kp-3┃ ┃タイプ 0: 行
┠───┨ 1: 行境界のブロック
kp-2┃ ┃サイズ 2: 文字境界のブロック
-1┃ ┃ else: 矩形ブロック
┠───┨
kp┃ ┃ kp..-1 … 文字列の長さ(byte)
┗━━━┛
kp を直接書き換えても、vz は認識しない
kp は 3 でセットされたkpまでを保護、以降は破壊される
qマクロで、テキストスタックを直接いじる場合は、&Bm が必須
==============================================================================