Vz resources : MACRO FAQ
2005-10-17T20:20:58+09:00

VZ Macro FAQ - 起動・終了

起動時に特定のマクロを自動実行させるには

起動時オプション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.DEFVZFL.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 ===============

VZ Macro FAQ - start
The VZ resources, valid XHTML 1.0 Strict. ©2005 by mezala.