起動時オプションr(起動時マクロの自動実行)を付けてVZを起動させます。製品版にテトリス風ゲームを自動実行するバッチファイルGAME.BATがあるので,具体的に実用書式の確認ができます。
echo off
vz -r +game game.def
起動時オプションrは,編集モードに移行したのち直ちに指定マクロを実行するという機能を発動させます。通常は -r30
と番号指定しますが,番号が指定されていない場合は最後に組み込まれたモジュールの先頭のマクロを実行します。このバッチの例は,コマンドラインでインクルード指定したGAME.DEFが最後に読み込まれたマクロとして自動実行されます。オープンするファイルに自分自身を指定していますが,実は編集モードになりさえすればよいので実在のファイルなら何でもかまいません。
次の例は,あかべこ氏のスケジュール管理システム「タグスケ」で出力されたファイルをオープンしたのち,直ちに当日の日付上にカーソルを移動するマクロを自動実行するという例です。(注:非常駐用です。常駐環境であれば,VZからタグスケの実行とスケジュール表のオープンを連続して行えるマクロを使用します。)
vz -r +todaycsr tag.txt
= todaycsr.def v0.13 = by H_ear
(R)
#if 0
非常駐用・当日日付へのカーソル移動
#endif
* mad for vz!
99 "" ;マクロ番号は他のインクルードマクロと重複しないこと
?. &s
mp[=2, ps[=pr,
#F
ax=$2A00, &i($21)
&?("%02d/%02d/%02d",cx%100,dx>>8,dx&$ff)
#m
#c (r)?{ &m(19) }?{ ky=wy/2, } ;当日が画面の中程
;#_ #r (r)?{ &m(19) } ;当日が画面の下の方(1)
;#c (r)?{ &m(19) }?{ ky=wy-1, } ;当日が画面の下の方(2)
;#c (r)?{ &m(19) }?{ ky-, } ;当日が画面の1行目
ps], mp],
&d
; ---- 擬似ブロック ---- Du+の環境では不要
#> #b #< mb-, #]
; ---- 自爆ルーチン ---- マクロヘッダ次行の(R)とセットで発効
q=mg..2..3+8,mg..2..3-, ; zibaku
&Sc(pu,"&q&Zd(q).") &e(pu) ; by Tomo
1 "!Start" ;既存の!Startのお呪いを無効にする
*
VZを起動すると,まずファイル名の入力を促されます。しかし多くのユーザはまずここで[Enter]を一度入力してファイラーに移行するのが常なのではないでしょうか。わずか1打鍵でも,毎回となると改善したくなりますね。
起動時に何かするという場合は,!Start
イベントを利用するのがよいでしょう。[Enter]を押したことにするのはいずれのモードでもコマンド#m
ですが,!Start
イベント中にコマンドをを記述する必要があるときは,榊原知氏の開発した「イベント呪縛解除のお呪い」が必要です。
1 "!Start"
r[, &e("#]") #] r], ;イベント呪縛解除のお呪い by Tomo
(s==1)?#m ;入力窓なら[Enter]
ただし,このイベントを仕込んだときは,起動時オプションrによる自動実行は次の入力待ちの状態で停止してしまいます。その場合は前項のようにダミーの!Start
イベントを入れておくとよいでしょう。
VZ.DEFやVZFL.DEFなどの初期設定マクロファイルをあまり弄らないという人は,コマンドラインでBM(マクロバッファのフリーエリア)のサイズを色々と指定して起動し,限界値を確かめておくとよいでしょう。
VZ -BM30000
どこかを弄って起動できなくなった場合は,次のようにBMの値を最小に指定して起動し,BMの値を書き換えてやればよいでしょう。
VZ -BM0
初期設定マクロファイルやインクルードマクロをよく弄るという人は,確保できるBMのサイズはころころ変わるので,できれば自動的にサイズを取得して動的に指定したいところですが,このような機能はVZにはありませんし,実現の方法のヒントさえ示されていません。
これを解決したのが,例によって(笑)小粒で激辛のマクロを得意としたm.gann師です。製品版付属のツールchktsr.comによって状態を把握していますので,常駐VZ専用です。
:: vzx.bat @echo off :--VZ起動ユーティリティ(要vzz.bat,vzx.def)-- if not "%1"=="-?" if not "%1"=="/?" goto do echo Usage: %0 [+macro] [-option] echo 「+macro」は先頭にのみ記述可能 echo バッファ系オプションは先頭に記述できない echo 引数は3個まで goto end :do goto skip2 if "%2"=="" goto skip bu strnicmp "%2" "+" 1 if not errorlevel 1 goto end bu strnicmp "%3" "+" 1 if not errorlevel 1 goto end :skip call vzz -bm0 +vzx+nul.%1 %2 %3 if not errorlevel 1 VZ -ss goto end :skip2 call vzz -bm0 +vzx+nul.%1 %2 %3 if not errorlevel 1 VZ :end
:: vzz.bat @echo off :--VZ常駐ユーティリティ(要chktsr.com)-- if not "%1"=="-?" if not "%1"=="/?" goto do echo Usage: %0 [+macro] [-option] .. goto end :do chktsr 21 vz if errorlevel 1 goto off chktsr 29 vz if errorlevel 1 goto end goto tsr :off VZ -z chktsr 21 vz if errorlevel 1 goto end rem prompt $p$g :tsr echo on VZ -z %1 %2 %3 %4 %5 %6 %7 %8 %9 @echo off rem if not errorlevel 1 prompt $e[36m$p$g$e[m :end
::vzx.def ====== Vzx.def ======= VZ起動ユーティリティ 97/03/20 by m.gann (R) ・VZを限界Bmで常駐 ・常駐時「メモリが足りません」の可及的解消 ・他に vzx.bat, vzz.bat が必要 * Macro 8 ^\ "!Start" &e("#]") r-, #] Sz-, ;Off event for !Start (2){ (s==1)?#[ } (s-2)?. ;入力窓 → コマンドライン m3+(mg..2..2+1)..0, ;m: このマクロのサイズ m+=3+(mg..2..3+1)..0, ;(マクロ+モジュールヘッダ) q-, (bm<3)?{ p$81, p.0~.p-, ;コマンドラインのパラメータ取得 &SF(p,'.') (r)?q1+r, } x$fdfd+m+bm-pn..-26-2, ;限界Bmの計算(max 0-2) ; (x+2<0)?x$7fff-2, ;[;] プラス値 32767で打ち止め &?("Vzz -Bm%u %s",x,q) ;VZ再起動 #m * ====== end of vzx.def ===============