Vz Editor
2023-03-11T13:42:52+09:00

VZマクロ関数関連覚書

システム関数

&a(number) / &a(msg,arg1,...)
関数略称機能・引数戻り値
Askmsgか? (Y/N)r=1:Yes, 0:No, -1:cancel

引数の[number]は内部メッセージ番号に対応する.

参考:《内部メッセージ一覧》 《書式制御文字一覧

&b(time)
関数略称機能・引数戻り値
Beepビープを鳴らす保存
&c
関数略称機能・引数戻り値
Char1文字入力待ち破壊
&d
関数略称機能・引数戻り値
Display編集画面の再表示保存
&e(ptr)
関数略称機能・引数戻り値
Externマクロ文字列の実行サブルーチンの戻り値
&f(c,ptr)
関数略称機能・引数戻り値
Find文字の検索r=0〜:Found, -1:Not found
&g(ptr[,size][,str])
関数略称機能・引数戻り値
Get string文字列の取得r=0:数値でない, -1:ESC, -2:CRのみ
&h
関数略称機能・引数戻り値
Hexa十六進数の取得r=取得した整数, r=-1:16進数でない
&i(number) / &i(code)
関数略称機能・引数戻り値
Interrupt割り込み/マシン語コード実行キャリーフラグ
&j(mode)
関数略称機能・引数戻り値
Japanese日本語FEPの制御:n=0:OFF, -1:Restore, else:ON?
&k
関数略称機能・引数戻り値
KeyinBIOSキー入力取得r=0:キー入力なし
&l
関数略称機能・引数戻り値
Line in1行入力待ち破壊
&m(number) / &m(msg,arg1,...)
関数略称機能・引数戻り値
Message書式付きメッセージ出力保存

引数の[number]は内部メッセージ番号に対応する.

参考:《内部メッセージ一覧》 《書式制御文字一覧

&?(msg,arg1,...)
関数略称機能・引数戻り値
printf書式付き文字列出力破壊

参考:《内部メッセージ一覧》 《書式制御文字一覧

&n
関数略称機能・引数戻り値
Numeric十進数の取得r=取得した整数, -1:数値でない
&o(data)
関数略称機能・引数戻り値
Output文字,コマンドの出力破壊
&p
関数略称機能・引数戻り値
Pause文字,コマンドの入力待ちr=文字 or コマンド
&q
関数略称機能・引数戻り値
Quitネストの1レベルスキップ保存
&r
関数略称機能・引数戻り値
Random乱数の発生r=0〜32767の乱数
&s
関数略称機能・引数戻り値
Silent画面出力の停止保存
&t
関数略称機能・引数戻り値
Traceトレースモード保存
&u(c)
関数略称機能・引数戻り値
Upper大文字への変換r=文字コード
&v(mode)
関数略称機能・引数戻り値
Videoカーソル表示の制御:n=0:OFF, 1:ON保存
&w(time)
関数略称機能・引数戻り値
Waitプログラムの休止時間 time=1/60秒保存
&x(x)
関数略称機能・引数戻り値
locate Xカーソルをx桁目へ移動破壊

※改行より右にも移動するが,内部的には行末。

&y(y)
関数略称機能・引数戻り値
locate Yカーソルをy行目へ移動破壊

※不正な引数を与えると,実行結果は不定。

&z(deffile[,cnt])
関数略称機能・引数戻り値
load macro外部マクロファイルのロード マクロファイル名[,番号]0:正常終了,else:エラーメッセージ番号
rr=ロードしたモジュールのn+1番目のマクロの実行ポインタ。

※cntで与えるマクロ番号は,ファイルに記述されたマクロ番号ではなく,先頭のグローバルマクロを0として数えた相対番号。

&^
関数略称機能・引数戻り値
reset optionオプションを初期化保存

初期化の際にpq..141(pn..-34)にあるinioptbufのテーブルを参照する。 なおVWなど一部のオプションが誤って初期化されるため,以下のように標準組込マクロを修正する必要がある。

    r34&Jx, &^ Jx|=r, &d #]         ;プッシュポップはsp(マクロスタックポインタ)初期化で不可

次のような別法もある。

    &Sm(pq..149,pc+238,100) ps[, mp[,           ;○
    ;; ほげほげ
    mp], ps], &Sm(pc+238,pq..149,100)

    &Sm(pq..149,pc+238,100) ps[, mp[,           ;×
    ;; ほげほげ
    &Sm(pc+238,pq..149,100) mp], ps],           ;プッシュポップはsp初期化で不可

コマンド関数

&#35(n) / &#r(n)
コマンド関数略称機能戻り値
mc_pageupn行ページアップ?
&#36(n) / &#c(n)
コマンド関数略称機能戻り値
mc_pagednn行ページダウン?
&#42(0) / &#_(0)
コマンド関数略称機能戻り値
se_textendファイルの最終行へ移動?

!Openイベント中に#42(#_)が記述できないという制限のために新設された。通常は#42(#_)を使って差し支えない。

&#43(n) / &#U(n)
コマンド関数略称機能・引数戻り値
mc_lastposn番のマーク位置へジャンプ n=0〜4?

マーク位置は4バイトのロング整数でテキスト構造体内部に記録されるため,各テキスト毎に5箇所設定できる。ただしマーク0はコマンド#43(#U)とその他のジャンプコマンドの戻り先として共用されているため注意を要する。

マーク番号格納アドレス
0wa+126
1wa+130
2wa+134
3wa+138
4wa+142
&#44(n) / &#M(n)
コマンド関数略称機能・引数戻り値
mc_markposカーソル位置マーク n=0〜4?

マーク位置は4バイトのロング整数でテキスト構造体内部に記録されるため,各テキスト毎に5箇所設定できる。ただしマーク0はコマンド#44(#M)とその他のジャンプコマンドの戻り先として共用されているため注意を要する。

マーク番号格納アドレス
0wa+126
1wa+130
2wa+134
3wa+138
4wa+142
&#45(n) / &#J(n)
コマンド関数略称機能・引数戻り値
mc_jumpnumnで指定した行番号の行へ移動?

引数nは移動先の行番号を与えるが,Dnの設定に依存する。

&#51(p)
コマンド関数略称機能・引数戻り値
mc_clrstackテキストスタックのアドレスp以降をクリア0:すべてクリア

引数pは再設定するkpということになる。通常はすべてクリアするために0を与えるが,テキストスタックの構造を理解すれば,特定の位置以降をクリアしたり,popする前の位置に復帰させたりすることもできる。

&#63(n) / &#T(n)
コマンド関数略称機能・引数戻り値
mc_chgtext編集テキストの変更 n=編集テキスト番号/テキストID?

引数nはwnを与えるが,wcの値を超えて与えると1に丸められる。

負の値でIDを指定することもできる。複数のテキストをオープン・クローズするときは,値が変動するwnよりもIDを与える方が確実に特定のファイルに切り替えることができる。

&#64(n) / &#Y(n)
コマンド関数略称機能・引数戻り値
mc_splitmode画面分割モードの変更 n=0,2〜5?

引数にはwtに対応する数値を与える。

引数に対応するwtのパラメータ
画面分割モードとアクティブ・ウィンドウ
0全画面
2上下分割の上
3上下分割の下
4左右分割の左
5左右分割の右
&#68(n) / &#V(n)
コマンド関数略称機能・引数戻り値
mc_chgindentスペース・タブの挿入 n=指定桁位置?

指定する桁位置までスペースあるいはタブを挿入する。挿入される文字はEuに依存し,htによる剰余分はスペースになる。

lx>nの場合は何もしない。最も注意すべきことは,En無効の環境ではnが論理行末の桁より大きくても挿入が行われない可能性があるという点である。論理行末より右で実行する場合は,#12(#>),#29(#?)等でカーソル位置を更新しておかないと所期の動作を得られない。

実行すると行バッファをクリアして修正フラグを立てる。

&#80(n) / &#K(n)
コマンド関数略称機能・引数戻り値
mc_recustモジュールの再カスタマイズ n=0 ?

コマンド#80(#K)「再カスタマイズ」のモジュール対応版。v1.6以降はコマンド関数を使用すること。

拡張システム関数

文字列操作関数

&Sm(q,p,n)
関数略称機能・引数戻り値
sx_memcpyポインタpからqへnバイトコピー?

※上書きなのでヒストリーバッファを対象とするときは注意が必要。ヒストリーは破壊される。

&Sc(q,p[,n])
関数略称機能・引数戻り値
sx_strcpy文字列pをqへ[最大nバイト]コピーr=コピー先の末尾ポインタ
&Sa(q,p[,n])
関数略称機能・引数戻り値
sx_strcat文字列pを文字列qの後ろへ[最大nバイト]連結r=連結先の末尾ポインタ
&SX(p,q)
関数略称機能・引数戻り値
sx_strcmp文字列pと文字列qを比較r=0:equal, 1:not equal
&Sx(p,q)
関数略称機能・引数戻り値
sx_stricmp文字列pと文字列qをIgnore Caseで比較r=0:equal, 1:not equal
&SF(p,c)
関数略称機能・引数戻り値
sx_strchr文字列pの中で文字cをサーチr=found ptr, 0:not found
&Sf(p,c)
関数略称機能・引数戻り値
sx_strichr文字列pの中で文字cをIgnore Caseでサーチr=found ptr, 0:not found
&SO(p,q)
関数略称機能・引数戻り値
sx_strstr文字列pの中で文字列qをサーチr=found ptr, 0:not found
&So(p,q)
関数略称機能・引数戻り値
sx_stristr文字列pの中で文字列qをIgnore Caseでサーチr=found ptr, 0:not found
&Su(p)
関数略称機能・引数戻り値
strupr文字列pの英小文字を大文字に変換?
&Sl(p)
関数略称機能・引数戻り値
strlwr文字列pの英大文字を小文字に変換?
&Sn(p)
関数略称機能・引数戻り値
sx_strlen文字列の長さr=バイト数
&Sw(p)
関数略称機能・引数戻り値
sx_wrdlen文字列pのスペース/タブまでの文字数r=バイト数
&Ss(p)
関数略称機能・引数戻り値
sx_skipspcポインタpからスペース/タブをスキップr=次の文字のポインタ
&Sh(q,p[,1])
関数略称機能・引数戻り値
sx_histcpy文字列pをヒストリーバッファqへ格納
[,1]指定時はファイルクローズ時と同じ方法で格納
?
&Se(q,p)
関数略称機能・引数戻り値
sx_getenv環境変数pの内容をポインタqへ格納r=0:not found, else:found(コピー先の末尾)
&Sp(q,p,..)
関数略称機能・引数戻り値
sx_sprintf書式pの出力をポインタqへ格納?

参考:《内部メッセージ一覧》 《書式制御文字一覧

&Sy(p)
関数略称機能・引数戻り値
sx_parsepathパス名pを解析
解析結果(r)
加算値存在する要素
+1ワイルドカード文字
+2拡張子
+4ファイル名
+8ディレクトリ名
+16ドライブ名
+32絶対パス
r以外の戻り値
レジスタの値指示するアドレス
bxファイル名の開始位置
cx拡張子の開始位置
siパス名の末尾

ロング演算関数

ロング整数の扱い方

  1. *p(バッファ)を4バイト確保する
  2. *pを初期化する(2回目以降の使用時は必須)
  3. *pに整数を代入する
  4. ロング演算を実行
  5. &m("%lu",p..0,p..1) のように4バイト単位で読み出す
&Le(p,q)
関数略称機能・引数戻り値
Equ longロング整数の代入 *p=*q(long *p, *q)?
&La(p,q)
関数略称機能・引数戻り値
Add longロング整数の加算 *p+=*q?
&Ls(p,q)
関数略称機能・引数戻り値
Sub longロング整数の減算 *p-=*q?
&Lc(p,q)
関数略称機能・引数戻り値
Cmp longロング整数の比較 *p:*qr=0:*p==*q, 1:*p>*q, -1:*p<*q
&Ia(p,n)
関数略称機能・引数戻り値
Add long,intロング整数に整数を加算 *p+=n?
&Is(p,n)
関数略称機能・引数戻り値
Sub long,intロング整数から整数を減算 *p-=n?
&Im(p,n)
関数略称機能・引数戻り値
Mul long,intロング整数に整数を乗算 *p*=n?
&Id(p,n)
関数略称機能・引数戻り値
Div long,intロング整数を整数で除算 *p/=nr=mod(剰余)

ファイラー操作関数

ファイル操作例

  1. ファイルを選択する(複数選択可)
  2. (選択されたファイルがなければカーソル位置のファイルを強制選択させる)
  3. &Fiで選択ファイルの先頭に処理ポインタを移動させる
  4. &Fg(pq..137,1)のようにファイル名を取得する
  5. &Sy(pq..137)のようにパス名を解析する
  6. ファンクションコールなどで選択ファイルを処理する
  7. &Fnを実行して戻り値が真なら処理を繰り返す
&Fl(p)
関数略称機能・引数戻り値
fx_filerパスマスクpでファイラー起動r=選択ファイル数

※この関数にファイルをオープンする機能はない

操作後fg.1+を実行してパス・マスクを初期化すること

&Fm(c)
関数略称機能・引数戻り値
fx_mbar文字cをメニューバー内でサーチr=-1:not found, else:r番目のメニュー
&Fi
関数略称機能・引数戻り値
fx_initpool選択された最初のファイルへr=選択されているファイルの数
&Fn
関数略称機能・引数戻り値
fx_nextpool選択された次のファイルへr=0:no more files
&Fg(q[,1])
関数略称機能・引数戻り値
fx_getpool選択されたファイル名をポインタqへ格納
[,1]指定時は常にフルパスで格納
r=ファイルの属性
加算値設定されているファイル属性
+1hidden
+2system
+8binary
+16directory
+32archive

その他の関数

&Cr
関数略称機能戻り値
emac_sedit編集モードになるまで次の命令を実行しない?
&Zd(n)
関数略称機能・引数戻り値
zx_delmacroモジュールの削除:n=モジュール番号 or モジュール名ポインタr=0:deleted, 1:not deleted
&Zs(p[,n])
関数略称機能・引数戻り値
zx_schmoduleモジュールのサーチr=0:not found, else:found
rr=見つかったモジュールのn+1番目のマクロの実行ポインタ
&Zx(p[,n])
関数略称機能・引数戻り値
zx_macloadモジュールの検索,なければロード
p=モジュール名,n=検索するグローバルマクロ番号
r=0:正常終了, else:エラーメッセージ番号
rr=ロードしたモジュールのn番のグローバルマクロの実行ポインタ

※高橋版の追加関数

&Zl(p)
関数略称機能・引数戻り値
zx_libraryライブラリモジュールのグローバルマクロを検索
p=グローバルマクロ名
r=0:not found, else:found
rr=マクロの実行ポインタ

タイトル p のグローバルマクロを,モジュールオプション Libraryの付いたモジュール内で検索する。呼び出されるマクロのタイトルは'*' で始まっている必要があるが,&Zl() の引数の先頭には '*' は付けない。見つかった場合,マクロの実行ポインタを rr に返す。タイトル p のグローバルマクロが複数ある場合,後から組み込まれたマクロを優先する。

※DANNY版の追加関数

&Za(p[,n])
関数略称機能・引数戻り値
zx_mallocマクロモジュールの確保 p=マクロモジュール名, n=サイズr=0:正常終了, else:エラー
rr=ダミーマクロの先頭ポインタ

名前 p のマクロモジュールを n バイト確保し,モジュールオプション Temporary を付加する。サイズ n を省略,もしくは同名のモジュールが存在する場合は,rr を再設定する。マクロ終了時,Temporary モジュールは削除される。

※DANNY版の追加関数

&Bm
関数略称機能戻り値
get_blkmテキストスタックの先頭のブロックモードr=0:行, 1:行ブロック, 2:文字ブロック, else:矩形ブロック
&Jk(c)
関数略称機能・引数戻り値
jx_iskanji2バイト文字の先頭文字の判断r=0:1バイト文字, 1:2バイト文字
&Ja(c)
関数略称機能・引数戻り値
jx_cvtkanaカナロック時の半角カナから英字への変換r=chr
&Jn(p,n)
関数略称機能・引数戻り値
jx_nthctypeアドレス指定の文字タイプチェック [tVZ 03f1]r=1:漢字2バイト目, 0:それ以外

※高橋版の追加関数(開発途中で関数シンボルが変更されている)

&Ea(n)
関数略称機能・引数戻り値
ex_emsallocEMSメモリの割り当て:n=ページ数r=EMSのハンドル, 0:エラー

※製品版VZではファイラーでEMSを使用できないらしい。(高橋洋光)

EMSを操作する手順は,メモリの割当,マッピング,メモリの開放。

&Ef(h)
関数略称機能・引数戻り値
xmem_freeEMSメモリの解放:h=EMSのハンドル?
&Em(h[,1])
関数略称機能・引数戻り値
ex_emsmapEMSメモリのマッピング:h=EMSのハンドル
[,1]を指定した場合は後ろの2フレームへマッピング
r=フレームのセグメント
&Lh(p,str)
関数略称機能・引数戻り値
lx_gethexl十六進数(ロング)の取得r=常に0

※高橋版の追加関数

&Ln(p,str)
関数略称機能・引数戻り値
lx_getdecl十進数(ロング)の取得r=常に0

※高橋版の追加関数

&Tz(p)
関数略称機能・引数戻り値
tx_textsizepのテキストレコードポインタのファイルサイズ取得dx:ax=filesize

※高橋版の追加関数

関連項目(共通)

内部メッセージ一覧

&a(number) / &m(number) 関数の引数に対応するメッセージ.

番号出力内容
1[%filename%],'は見つかりません. 新規ファイルです'
2[%filename%],'は入力できません'
3[%filename%],'は出力できません'
4'テンポラリファイルエラー'
5'ラインバッファがいっぱいです'
6'オープンできません'
7'ディスクがいっぱいです'
8'テキスト領域がいっぱいです'
9'ブロックが大きすぎます'
10'メモリが足りません'
11'バッファがいっぱいです'
12'COMMAND.COMを起動できません'
13'カスタマイズエラー'
14[%filename%],'を出力します'
15[%filename%],'を出力中 ...'
16'修正テキストを出力します'
17'テキストスタックを消去します'
18'エディタを終了します'
19'文字列が見つかりません'
20'全部一度に置換します'
21'置換します'
22'%5u 個の文字列を置換しました'
23'カーソルキーで位置を移動して[リターン]'
24'一致しました'
25'相違があります'
26'括弧が見つかりません'
27[%filename%],'はオープンされています'
28'マークしました'
29'%5u 項目読み込みました.(%d bytes free)'
30[%filename%],'はすでに存在します'
31[%filename%],'は無効なパス名です'
32[%filename%],'はリードオンリーです'
33'新規ファイルです'
34[%filename%],'はすでに存在します. 出力します'
35[%filename%],'は存在しません. 新たに作成します'
36'変更できません'
37'編集テキストを放棄します'
38'%u 個のファイルを削除します.よろしいです' (※v1.0 はメニューにおけるスイッチの表示「OFF ON」)
39'EXITでエディタへ戻ります'
40'指定が違います'
41'準備ができていません'
42'ハードエラー#%dです'
43'ドライブ%c:の'
44'(Abort/Retry)?'
46'PCS□'
書式制御文字一覧

&m() &a() &?() &Sp(p,q,...) で使用可能な書式制御文字は以下の通り。

%[-][0][n][,][l]{d|u|x|c|s}
%[-][0][*][n][,][l][F]{b|d|u|x|c|s}  (高橋版)

・次の書式指定によって出力形式を制御する。

%d符号付き十進数として出力(-32768〜32767)
  • &m("%d",40000) → "-25536"と符号付きで表示
%u符号なし十進数として出力(0〜65535)
  • &m("%u",40000) → "40000"と符号なしで表示
%x十六進数として出力(0h 〜 FFFFh)
  • &m("%x",40000) → "9C40"と十六進数で表示
%c文字として出力(漢字対応)★
  • &m("%c",$3132) → "12"と表示 / &m("%c",$3132+1) → "13"と表示
  • &m("%c",'零') → "零"と表示 / &m("%c",$97EB)も同じ

★下位バイトが 00 のものを %c で出力すると,00(ヌル) で後続文字列が切れる。
p=$3100, &m("%cを出力",p) → 「を出力」が表示されない。
(内部バッファに出力文字列を一旦展開してから表示するため)

%s指定ポインタ以降を文字列として出力
  • &m("%s",ps) → 検索文字列バッファ先頭の文字列を表示
%bビット表示で出力(高橋版)
  • &m("%b",1) → "0000000000000001" と16bit表示(デフォルト)
  • &m("%8b",1) → "00000001" と8bit表示
  • &m("%lb",1,0) → "00000000000000000000000000000001" と32bit表示
%Fワークのセグメント以外の文字列を取得・表示(高橋版)
引数は,オフセット, セグメント の順に指定する。
  • &m("%Fs", 8, vz-1) ; vz-1:8 の文字列(この場合はmcb)
  • &Sp(pr,"%62Fs",cl,tz) ; カーソル行のテキストバッファを pr へ

・各制御文字には次のオプション指定が可能。

nフィールド幅の指定
  • &m("%6u",256) → "   256"と右詰めの6桁幅で表示

(指定した桁数に納まらなければ無効)

-左詰めで出力(通常は右詰め)
  • &m("%-6u←空白充填",256) → "256   ←空白充填"と左詰めで右側に空白を充填する
    (&m("%-06u",256)は先行0詰めにより '-'は無効となる)
0先行 0 詰めを行う
  • &m("%06u",256) → "000256"と表示
l2つのパラメータを合わせてロング整数を出力
  • &m("%lu",60001,60000) → "3932220001"と表示
,3桁ごとに ',' を挿入
  • &m("%,lu",60000,60000) → "3,932,220,000"と表示
*最小フィールド幅を変数で指定(高橋版)
  • i=8, &m("%*s",i,ps) → 8桁幅で検索文字列を表示
    (&m("%8s",ps)と同じ)

VZマクロ関数関連覚書
The VZ resources, valid XHTML 1.0 Strict. ©2005-2023 by mezala.