============================================================================== VZ Editor Version 1.60 Copyright (C) 1989-93 by c.mos MAC16.DOC ==============================================================================  このドキュメントでは、Ver1.6のマクロ言語の強化、変更点について、マニュアルの補足説明をします。また、マクロの作成の際のリファレンス用に、オプション、関数の一覧を掲載します。    目 次 ----------------------------------------- 1.モジュール管理 2.イベントマクロ 3.その他の変更点 4.旧版との互換性 5.オプション一覧 6.システム変数一覧 7.関数一覧 ----------------------------------------- ----------------------------------------- 1.モジュール管理 -----------------------------------------  モジュール管理は、マニュアル「8.4 モジュール管理」で説明しています。ここでは、いくつかの補足説明をします。 ■ 再カスタマイズ -----------------------------  編集中のマクロを[Ctrl]+[K][^]で組み込む場合、「#80」コマンドは互換性のために従来通りモジュールを無視した動作をします。このため、新設の「P(n)」を代わりにお使いになることをお薦めします。標準のVZ.DEFでは、次のマクロで[Ctrl]+[K][^]を置き換えています。 ------------------------------------------------- 5 ^K^ "再カスタマイズ" P(0) ------------------------------------------------- ★注意★  VZ.DEFを再カスタマイズすることはできません。(従来の仕様のまま) ■ モジュールヘッダの構造 -----------------------------  モジュールヘッダは、マクロバッファ内では次のフォーマットの「ダミーマクロ」として格納されます。 【モジュールヘッダ】 +0 B (=0FFh) : モジュールヘッダ番号(メニュー#31に相当) +1 W : モジュールヘッダのサイズ +3 B : モジュールフラグ +1 : Sleep +2 : Removable +4 : External +80h : keyboard macro +4 W : 次のモジュールヘッダのリンクポインタ +6 W (=n) : モジュールIDの長さ +8 〜 : モジュールID(8文字以内のファイル名、大文字) +n+9 〜 : モジュールのタイトル文字列  システム変数「mh」が先頭のモジュールヘッダのポインタを示します。  次の例は、マクロバッファ内でモジュールヘッダのリンクをたどり、削除可能な全てのモジュールを一括削除するマクロです。 ------------------------------------------------- * M 80 ^\ "マクロの一括削除" p=mh, c-, :A (p)?{ &Zd(p+8) (r)?? c++, p=(p+4)..0, >A} &m("%d 個のモジュールを削除しました",c) ------------------------------------------------- ●マニュアルには記述されていませんが、&Zdは次の返り値をセットします。 &Zd(n) モジュールの削除 n = モジュール# or モジュール名ポインタ (r = 0:deleted, 1:not deleted) ----------------------------------------- 2.イベントマクロ -----------------------------------------  イベントマクロの概略は、マニュアル「8.5 イベントマクロ」で説明しています。ここでは、VZ.DEFに記述されているイベントマクロについて解説し、イベントマクロの制約についても触れます。 ■ !Open -----------------------------  !Openは、ファイルオープン時に実行され、ファイルの拡張子によるタイトルサーチ文字列、画面の横幅等の設定に用います。 ------------------------------------------------- 1 "!Open" (ne=='DE')? ts="*=", (ne=='NI')? ts="\x ^\0/\0", ; (ne=='TX')?{ we=40, td=1, } ; (ne=='C'||ne=='H'||ne=='CP')?{ ts="/", qk="{}", } ; (ks&1)? &#_(0) ------------------------------------------------- 【使用キーワード】 ne 編集テキストの拡張子の最初の2文字 ts タイトルサーチ文字列ポインタ we 編集中のテキストの表示カラム数 td 編集テキストの表示スイッチ qk !Editイベント用入力文字テーブル &So(p,q) 文字列 p の中で文字列 q をIgnore Caseでサーチ 【解説】 ・拡張子の先頭2文字で判定を行なっています。その処理は、)? 以降に記述します。複数の変数を設定する場合は、{ } で囲みます。 ・より厳密な判定を行なうば場合は、従来の変数「fe」を使ってください。 ・タイトルサーチについては、「4.1 ページングとタイトルサーチ」をお読みください。 ・「td」はマニュアルに解説がありませんが、Dn,Dc等の表示スイッチを、編集テキスト毎に設定させる変数です。tdの各ビットと、Dn等のスイッチの設定は、ORされます。例えば「td=1,」を指定すると、Dnによらず必ず表示行番号になります。「td」の各ビットの意味については、本ドキュメント末尾のリファレンスを参照ください。 ・次の変数を設定すれば、拡張子に応じてステータスラインの色を変更できます。 vs 編集テキストのステータスラインの属性 vy 編集テキストのファイル名の属性  「vs,vy」の設定は、「as,ay」より優先されます。 ・最後の行のコメントを外すと、オープン時に[Shift]キーが押されている時、ファイルの最後にジャンプします。 ■ !Close -----------------------------  !Closeは、ファイルクローズ時に実行されます。編集テキストをクローズする各コマンドでの実行のタイミングは次のとおりです。 ・Close(#C), Load(#L)  《"..."を出力しますか?》のメッセージで、Y/Nが押された直後。ファイルを出力する前に実行される。 ・Quit(#Q), Exit(#[)  コマンド実行直後に、各編集テキストについて実行される。従って、確認メッセージで終了しなくても、!Closeは実行されてしまう。 ■ !Edit -----------------------------  !Editは、編集時に特定の文字キーが入力された時に実行されます。Cのオートインデント等に用います。  !Editを起動させる文字キーは、!Openの中で変数「qk」に設定します。 ------------------------------------------------- 1 "!Edit" (ct>1)?{ &o(ic). } (ic=='{')?{ '{' #m &o(9). } (ic=='}')?{ #s (cd==9)?{ '}' #g #m }?{ #d '}' } ------------------------------------------------- 【使用キーワード】   ic 最後に入力された文字コード(0=コマンドキー) 【解説】  このマクロの動作は、次のとおりです。 ・[{]が行末で押されると、インデントを1レベル深くする。 ・[}]が行末のTABの直前で押されると、インデントを1レベル復帰する。 ■ !View -----------------------------  !Viewは、ビューモードのファイルに対して、編集操作を行なった時に実行されます。[Ret]でクローズしたり、[Shift]+[Ret]で編集モードへ移る機能は、!Viewで実現しています。 ------------------------------------------------- 1 "!View" (ic)?{ (ic!=' '&&ic!=' ')? >E (ks&1)? #r ? #c .} (cm==4)?{ (mb)? >E #C . } (cm==53)?{ #67 . } :E ' ' ------------------------------------------------- 【解説】 ・1行目は[Space]キーの処理です。半角または全角スペースが入力されると、ページダウンします。[Shift]+[Space]でページアップします。 ・2行目は[Ret]の処理です。ブロックモードではクローズしません。 ・3行目は[Shift]+[Ret]の処理です。#67でRead Onlyモードへ変更しています。 ・最後の行は、「変更できません」のメッセージを表示させるために、スペースを出力しています。 ■ !Timer -----------------------------  !Timerは、編集時に一定時間キー入力がない場合に実行されます。オートセーブ用のイベントです。実行するまでの時間は、オプション「Qt」で設定します。 ------------------------------------------------- 1 "!Timer" ?. (mr!=1)?. (qn<=Qc)?. (mb)?. (Qw){ &m("オートセーブしますか?") (Qw){ &w(1) &k (r)?{ &m("キャンセルしました") qn-, . } } } #S #m #83 ; 編集テキストのみセーブ ; sq[=0, #Q 'N'(s)?{ #[ #Q "YN"} sq], #83 ; 全修正テキストをセーブ ------------------------------------------------- 【使用キーワード】   Qc オートセーブを起動するまでの入力文字数   Qw オートセーブの確認待ち時間(0の時、確認待ちしない) qn 編集モードでの入力文字カウンタ 【解説】 ・入力文字は、半角、全角とも1文字としてカウントします。 ・編集ファイルをセーブ後、「#83」でプロファイル情報もセーブします。 ・全ての修正テキストをセーブする時は、最後の行のマクロを使ってください。 ■ !Filer -----------------------------  !Filerは、ファイラー上で文字キーが入力された場合に、「r」に文字コードをセットして実行されます。メニューコマンドをカスタマイズするために用意されています。  !Filerが存在しないと、従来版と同様に、押されたキーのあるメニューバーの位置で、所定のコマンドを実行します。従って、なんらかの事情で!Filerマクロがマクロバッファから消えてしまうと、ファイラーのメニューと、実行されるコマンドがずれてしまいます。 ------------------------------------------------- 1 "!Filer" (r)??. (r==':'||r=='L')? r='D', r[, &Fm(r) (r>=0)? { sp+=2, (r)>?{ #F #L #M #P #S #V #W #+ #> #< #O #E } } r], (r)>!{ ; L #L ;Drive ; M #M ;Mask ... X >X ;eXec H #H ;sHell ... }. :C pm="zcopy %@ %2", #! :X pm="%1 %2", #! ------------------------------------------------- 【使用キーワード】 &Fm(c) 文字 c をメニューバー内でサーチ >! case文 #L,#M ファイラーの各コマンド pm 選択したメニューのメッセージポインタ 【解説】 ・ファイラー起動直後に一度だけ「r=0」で!Filerを実行します。ファイラーを「&p」でフルカスタマイズしたい場合の切り口です。 ・#F #L 等の「#英字」コマンドは、ファイラーモードではファイラーのコマンドを実行します。この判定は、ベースモード「sm」で行なっています。 ・!Filerは通常のマクロとは異なり、#コマンドの実行でマクロが終了します。これは、キー入力と各コマンド処理との間に、!Filerイベントを割り込ませているためです。 ・「* E その他 4」に記述したメニューバーの各機能を、「(r)>?{ #F #L #M ..」で指定します。それ以外のコマンドは、「(r)>!{ ..」以下で設定します。 ・メニューを表示せずに、直接DOSコマンドを実行したい場合は、「pm」にコマンド文字列を代入して、「#!」コマンドを実行します。 ■ !Abort -----------------------------  通常は、エディタの動作中にエラーが発生すると、エラーメッセージを表示後、実行中のマクロは強制終了します。!Abortを使えば、エラー処理を置き換え、必要であれば、マクロの実行を続行することができます。 ------------------------------------------------- 1 "!Abort" &m(r) &b(5) / ------------------------------------------------- 【解説】 ・!Abortは、エラーコードを「r」で受け取ります。この例では、エラーメッセージを表示後、ブザーを鳴らします。 ■ イベントマクロの特記事項 ----------------------------- ●イベントマクロ内でのコマンドの処理  イベントマクロは、実行するタイミングで2種類に分けることができます。 A.通常のマクロと同様、キー入力部で実行される。 !Edit !View !Timer !Abort B.キー入力とは無関係に、呼ばれた時点で実行される。 !Start !Open !Close !Filer  タイプBのイベントマクロ中では、#コマンド,"str",'c',&o(c) を記述できません。これらのコマンドを記述しても、実行されるのは次のキー入力待ちですから、そこでマクロの実行は停止してしまいます。また !Filerイベントでは、これらのコマンドを記述すると、マクロの実行を終了します。 ●イベントマクロ中での変数の保存  イベントマクロで「r」以外の汎用変数を使用した場合は、push/popで保存しなくてはなりません。さもないと、マクロ実行中にイベントマクロがコールされた時、支障をきたします。 ●イベントマクロ中での内部レジスタ  イベントマクロの起動時は、その時の内部レジスタを保存します。 ----------------------------------------- 3.その他の変更点 ----------------------------------------- ■ セグメントの変更 -----------------------------  コードセグメントとデータセグメントを分離したため、マクロでアクセスするワークエリアは、全てスタックセグメントに移動しました。このため、 dz=gz, p=wa+$92, .. dz=cz, のように、セグメントを変更する必要はありません。  また、このように「dz=cz,」でセグメントを復帰しているマクロとの互換性を考慮して、「cz,dz.gz」はすべてスタックセグメントを指しています。真のコードセグメントの値は、セグメント変数「vz」が示します。 ■ ポインタ演算の不具合を改良 -----------------------------  従来のポインタ演算は、右辺値が64未満、括弧が正常に動作しない等の制限がありましたが、これを解消しました。(榊原知氏の協力による)  また、次のような記述も可能になりました。 a[=0, a[+, a[-, ■ ジャンプ、コール時のサーチ方法 -----------------------------  従来は、#nn &nn のマクロサーチを次の方法で実行しました。 【Ver1.5以前】 1.実行中のグローバルマクロ以降で、ローカルマクロをサーチ 2.マクロバッファの先頭からグローバルマクロをサーチ  この方法では、MI.DEFの^QFのように、グローバルマクロへジャンプすると、後ろにロードされたマクロが同じ番号のローカルマクロを使用していた場合、そちらへジャンプしてしまいます。このため、次の方式に変更しました。 【Ver1.6】 1.実行中のグローバルマクロから次のモジュールまでの範囲で、ローカル  マクロ、グローバルマクロをORサーチ 2.マクロバッファの先頭からグローバルマクロをサーチ ■ 文字列中の「$[]」 -----------------------------  文字列中に、ダミーの文字列を確保して、ローカルワークに使う場合があります。これを記述しやすくするため、一定個数の文字の繰り返し指定を可能にしました。 【書式】 $[n] n バイトの0で埋める $[n,c] n バイトの文字 c で埋める 【例】 50 &01, p=r, 1: (3+$). "$[10]" ■ case goto文 -----------------------------  従来「&f()」と「>?」を組み合わせて記述していた指定文字による条件分岐を、まとめて記述可能にしました。VZFL.DEFで使っています。 【書式】 (c)>!{ c1 op1 c2 op2 .. | else } c==cnならopnを実行。それ以外なら else を実行。 cn : 半角、全角1文字(|(を除く)、または (式) 【例】 &p (r)>!{ T #^ B #_ (#m) #C (' ') #c | &o(r) } >^ ■ &g("title")関数の拡張 -----------------------------  次のような書式で、ウィンドウのサイズ、初期文字列を指定可能にしました。 【書式】 &g(title[,wsize][,inistr]) ■ メニューからの返り値 -----------------------------  ポップアップメニューで[←],[→],[DEL],[INS]等の編集コマンドを入力すると、メニューをキャンセルして返り値にコマンドコードを返します。 【返り値】 r >= 0 : r 番目のメニューを選択 r == -1 : [ESC]でキャンセル r < 0 : その他のキーでキャンセル (b0〜b7:コマンドコード, b8〜b14:カーソル位置) 【例】 ------------------------------------------------- 5 [ESC]M @M "マクロメニュー" !97 (r>=0)?{ !98 (r>=0)? >* >^ } (r&$FF==15)?{ r=r>>8&$7F, &Zd(r) >^ } ; [DEL]の処理 (r&$FF==13)? >88 ; [INS]の処理 ------------------------------------------------- ■ 桁対応上書きモード -----------------------------  オプション「Eo+」で桁対応上書きモードを指定時に、[INS]で上書きモードに変更すると、自動的に「mi=2」となります。上書きモードを使用するマクロは、通常「mi+,」としているので、桁対応上書きモードでも、従来マクロはそのまま使えます。 ■ ネストレベル -----------------------------  ネストレベルを8から16に増やしました。 ■ VWX、OR検索の返り値「vr」 -----------------------------  VWXでOR検索を実行した時、何番目の文字列にマッチしたかを変数「vr」に返します。 ■ マクロ中断時のモードリセット -----------------------------  マクロ中断時(終了時)に、変数「ep, mx, ux」をリセットします。 ----------------------------------------- 4.旧版との互換性 -----------------------------------------  Ver1.6でも従来のマクロは使えますが、動作しないものもあります。ここでは、互換性に支障をきたすいくつかの変更点について説明します。 ■ &aの英大文字 -----------------------------  従来は、システム関数を英大文字で記述しても、エラーになりませんでした。しかし、Ver1.6で拡張システム関数を追加した関係上、大文字の場合は、必ず2文字の拡張システム関数と判断されます。 ■ 内部ワークの利用 -----------------------------  「_text」,「_filer」構造体は、従来の上位互換になっています。しかし、VZ.COMの0120h番地からのオプションテーブルは、変更されています。 ■ 内部コードの利用 -----------------------------  マクロの中には、VZ.COMの内部サブルーチンをコールしているものもあるようです。このようなものは、当然動作しません。 ■ 31番のメニュー -----------------------------  31番のメニューは、モジュールヘッダと認識されます。使えるメニューは30番までとなります。 ■ 文字列サーチ時のps -----------------------------  所定の文字列を検索する場合に、ヒストリーにゴミを残さないため、「ps」を一時的に変更する手法があります。 ps[, ps=pw, #F "str" #m ps], #c  従来は、ps], でヒストリーバッファを元に戻しても、設定した検索文字列はそのままでした。しかし、Ver1.6では、タイトルサーチ文字列処理を追加した関係で、psの値を変更すると、サーチ時に自動的に検索文字列を再設定します。従って、先の例では"str"をサーチせず、psの文字列を検索します。  次のように、検索した後で ps], を復帰していれば、問題ありません。 ps[, ps=pw, #F "str" #m #c ps], また、「ps[, ... ps],」の代わりに、「ps=pf-hs-2,」でもpsをリセットできます。  この仕様変更に伴い、指定文字列の検索は、次のように簡便に記述できます。 ps[, ps="str", #c ps], ■ !Filerによるrの破壊 -----------------------------  「#O #m」等でファイラーを起動すると、!Filerマクロの実行により r が破壊されます。 ■ オーバーレイマクロ -----------------------------  LINX.DEF(坂田氏作)のように、複数のマクロファイルをオーバレイして動作するマクロでは、オーバレイファイルの読み込み時にマクロバッファをチェックしている場合があります。Ver1.6のモジュール化により、モジュールヘッダが読み込まれるため、チェックが正常に動作しない場合が考えられます。 ----------------------------------------- 5.オプション一覧 -----------------------------------------  Ver1.6のオプションの一覧を掲載します。 ★ Ver1.6で追加されたオプション ◆ Ver1.6で仕様が変更されたオプション × Ver1.6で廃止されたオプション(指定した場合は無視) ■ 起動時オプション ------------------------------------------------------------------------------- z VZを常駐または解放 r 編集画面表示後ただちにマクロを実行 St 読み込むDEFファイルのタイトル行を画面に表示  × w DEFファイルの取り込み(Ver1.6では汎用変数) ■ メモリ/バッファサイズ ------------------------------------------------------------------------------- Bt 64[KB] テキストバッファのサイズ  × Bq テンポラリファイルのサイズ Bf 64[KB] DOSコマンド用のメモリの最低値 Bo 32[KB] コンソール出力バッファのサイズ  × GV 裏グラフィックVRAM使用モード EM 1 EMSの使用ページ数  ★ XM 0[KB] XMSの使用ページ数 Bm 8192 マクロバッファのフリーエリア Ba エイリアスバッファのフリーエリア Hs 256 検索文字列ヒストリーバッファのフリーエリア Hf 256 ファイル名ヒストリーバッファのフリーエリア Hx 128 DOSコマンドラインヒストリーバッファのフリーエリア  × Ha アプリケーションヒストリーバッファのフリーエリア Bl 2048 ラインバッファのサイズ Bc 1024 削除文字列バッファのサイズ Bu 64 マクロ用配列・スタック領域のサイズ  ★ Bv 1024 ログファイル履歴バッファのサイズ ■ 各種モード ------------------------------------------------------------------------------- ◆ SW 3 スワップモード 0 :スワップ機能を使用しない 1 :テキスト領域のみ解放する 2 :コード領域も含めて解放する 3 :常駐時に常にコード領域まで解放する 4 :「SW3」と同様だが、アプリケーションのコマンド  ラインはフックしない TC 10 オープン可能なテキスト数 WD 80 デフォルトの表示カラム数 we 80 編集中のテキストの表示カラム数 PG 0 表示行番号モードでの1ページの行数 RS 3 スムーススクロールの速度 Ta 8 タブカラム数 Tb 4 .c .h ファイルのタブカラム数 Ci 4 挿入モード時のカーソルの形状 Co 7 上書モード時のカーソルの形状 (0:フル、1:1/2、2:1/4、3:アンダーバー、+4:点滅)  ◆ WL 0 ポップアップウィンドウの表示位置を設定します。 1 :←よせ 4 :Hセンタリング 5 :→よせ +2 :↑よせ +8 :Vセンタリング +10 :↓よせ LC - 編集時の行間空きモード(98版) 日本語モード時の最下行予約(IBM版) VM 0 編集時のスクリーンモード(IBM版)  ★ CA 52 コントロール文字の色分け +1 :コントロール文字の「^」 +2 :改行コード「↓」 +4 :TABコード「→」 +8 :EOFコード「←」 +16 :右マージン「<」 +32 :全角スペース「□」 +64 :不正なコードの先頭数値  ◆ Sr 5 プロファイルモード +1 :プロファイル情報のセーブ +2 :editfile が存在しない場合に、自動作成 +4 :ファイルクローズ時に、ヒストリーに情報を格納 +8 :「vz」で「vz @」の動作 +16 :ログファイルの情報も、ヒストリーに格納 +32 :Command Line ヒストリーも出力する +64 :ヒストリーを出力しない  ★ Qt 0 オートセーブのディレイタイム(単位:秒)  ★ Qc 40 オートセーブを起動するまでの入力文字数  ★ Qw 100 オートセーブの確認待ち時間(単位:約1/60秒) (0の時、確認待ちしない)  ★ RM 0 EMS/XMSの解放の禁止(+1:EMS, +2:XMS) ■ ファイラー関連 -------------------------------------------------------------------------------  ★ FM 7 ファイラーの動作モード指定 +1 :[Space]キーでカーソルを移動 +2 :ファイル非選択時にもExecメニューを表示 +4 :『DOSコマンド』ウィンドウから実行 +8 :ディレクトリの先頭・最後を連続移動 +16 :カーソル位置反転、マーク「*」 +32 :ファイル選択時も拡張子自動実行 FW 1024 ディレクトリの最大数 FV 1 ディレクトリ表示モード(1:ロング、5:ショート) FS 0 Sortメニューの初期値 1 :ファイル名 2 :拡張子 4 :新しい順 8 :古い順 16 :大きい順 32 :小さい順 64 :ディレクトリを先頭へ FO 3 Compareメニューの初期値 +1 :存在 +2 :新しいファイル +4 :古いファイル +8 :大きいファイル +16 :小さいファイル ■ 表示属性 98 IBM J31 ------------------------------------------------------------------------------- An 7 $1F 7 通常のテキスト Ac 5 $13 6 コントロール文字1  ★ Ae 1 $12 0 コントロール文字2 Al 5 $1A 7 行番号 Ah 13 $B0 $70 ブロック領域 As 15 $70 $76 ステータスライン Ao 14 $E0 14 コンソールファイルのステータスライン Ar 13 $30 14 リードオンリファイルのステータスライン Am 6 $0E 6 最下行のメッセージ Ab 5 $70 5 ウィンドウわく At 5 $70 7 ウィンドウタイトル Aw 7 $70 7 ウィンドウメニュー Af 6 $74 6 ウィンドウメニューのダイレクトキー Ai 15 $0F $70 ウィンドウメニューのカーソル Aj 6 $74 7 ヘルプウィンドウ Ak 6 $0E 6 2ストローク先頭キー Ag 1 7 ファイラーの背景 Au 6 $4F 6 ファイラーのカーソル Ap $70 $70 ファンクションキー(IBM版) Ad $07 DOSコマンドライン  ★ Ay 0 0 0 ステータスラインのファイル名  ★ vs 0 0 0 編集テキストのステータスライン  ★ vy 0 0 0 編集テキストのファイル名 ■ スイッチ ------------------------------------------------------------------------------- Dl - 行番号を表示 Dc + CR 文字を表示 Dt - TAB文字を表示 De + EOF文字を表示 Ds - ステータスラインへシステム情報を表示 Db - ¥文字をバックスラッシュ(\)で表示 Dn - 行番号モード Du - カーソル行アンダーライン Df - 編集ファイル名をフルパス名で表示 Dp - 全てのファイル名・パス名を小文字で表示 Dh - ファイル名をステータスラインの左側に表示 Dg + 新JIS罫線文字表示(98版) スクロール時の最上行の"ぶれ"を軽減(DOS/V版)  ★ Dr + 右マージンを表示  ★ Dj- - 全角スペースを表示  ★ Dv - カラーでスムーススクロール Ei + オートインデント Es + [Ctrl]+[↑][↓]2回でスムーススクロール Ez + EOFコード(1Ah)を付加 Eb + ファイルのバックアップ Eu - [TAB]をスペースに変換 Et + タイトルサーチ有効 Eh - 全画面/半画面ページング Ew + 文字列検索時のワードサーチ Ec - 文字列検索時に英大文字と小文字を同一視 Ex - テキストスタックフル時の警告 En - カーソルを改行以降に表示しない Ev - ジャンプ後カーソルを画面の中央へ Ek - ブロック挿入後、カーソルをブロックの最後へ Ea - 拡張子による表示カラム数の自動設定 RO - ビューモード Ej - 全角スペースのオートインデント Eo - 桁対応上書きモード RX - 正規表現検索(VWX.COM常駐時) ZH - 全角/半角文字の同一視(VWX.COM常駐時) Sx + コンソール出力の取込み Se + エスケープシーケンスをスキップ Sd + DOSコマンドラインの展開再表示 Sk - DOSコマンド実行前にテキストスタックをクリア Sy - [Ret]=Yes, [Space]=No  ★ YN - [Ret]=No, [Space]=Yes Sn + 新規ファイルの確認 Sq - Close、Quitで即座に終了 FP - 日本語FEPの自動制御 FR - 起動後ただちにFEPをオン FK + 拡張ファンクションキー  ★ Sz - 常駐時の編集終了時にオプションを初期化 ------------------------------------------------------------------------------- ----------------------------------------- 6.システム変数一覧 -----------------------------------------  マクロの演算式で使用できるシステム変数の一覧です。「*」がついているものは、実行中に変更可能です。 ■ 汎用変数・フラグ ------------------------------------------------------------------------------- r,s を除く a 〜 y rr,ss を除く aa 〜 yy (★w,wwも汎用変数として使えます) ax,bx,cx,dx,si,di fa,fb,fc,fd,★fi,★fj,fx,fy ■ グローバル変数 ------------------------------------------------------------------------------- cm * 直前に実行したエディットコマンド番号 ef EMSのフリーページ数 ep 編集モード時の[ESC]の扱い - : プリフィックスキー + : エスケープキー ks シフトキーフラグ (98版) +1:[SHIFT] +2:[CAPS] +4[カナ] +8:[GRPH] +16:[CTRL] (IBM版) +1:[Shift] +2 左[Shift] +4:[Ctrl] +8[Alt] mb * ブロックモード 0 : 非ブロックモード 1 : 行境界のブロックモード 2 : 文字境界のブロックモード 4 : 矩形ブロックモード  ◆ mi * 挿入モード 0 : 挿入モード(Insert) 1 : 上書モード(Overwrite) 2 : 桁対応上書モード mp * ページングモード 0 : [P]表示ページングモード 1 : [C]論理ページングモード 2 : [S]文字列検索モード r * コマンド、マクロ、メニュー等の返り値 rn * 乱数用ワーク(seed) s システムモード 0 : 編集モード 1 : 文字列入力モード 2 : コマンドラインモード 3 : ファイラーモード 4 : メニュー,(Y/N)等の1文字入力モード vp 画面出力制御パラメータブロック +0 W : カーソル位置のoffset +2 W : カーソル位置のsegment +4 B : 表示ウィンドウ(開始x,y,サイズx,y) +8 B : カーソル位置(x,y) +10 B : DOSのカーソル位置(x,y) +12 B : 表示属性 wa Active windows record pointer wb Back wf Free wo Opened wc 編集中のテキストの数(コンソールファイルは除く) wh * 編集画面の横分割位置 wv * 編集画面の縦分割位置  ★ ic 最後に入力された文字コード(0=コマンドキー)  ★ fg グローバルファイラーワークポインタ +0 B : ディレクトリの表示数(0=single, 1=dual) +1 B : 参照パス/マスクの初期化 +2 W : 最後に実行されたファイラーコマンド  ★ fh ファイラーのMaskメニューの選択bit  ★ fl カレントファイラーワーク構造体のポインタ  ★ mg マクロ制御用ワークポインタ +0 W : 内部レジスタ +2 W : 実行中のマクロモジュールのヘッダアドレス +4 W : 実行中のマクロのネストポインタ +6 W : イベントマクロ実行前のネストポインタ +8 W : ループカウンタ +10 W : ループの先頭ポインタ +16 〜 : ネスト用ワーク(8バイト×16個)  ★ mh 先頭のモジュールヘッダアドレス  ★ mx * &pでのマクロ実行、イベントマクロの実行禁止  ★ ux * 文字、行・ブロック削除時のバッファへの格納禁止  ★ sm ベースモード 0 : 編集モード 2 : コマンドラインモード 3 : ファイラーモード  ◆ ss * サイレントフラグ +1 : 通常のサイレントモード(&s) +2 : DOSコマンドラインもサイレント zk EZKEYの存在(0:なし、1:あり)  ★ vw VWXの存在(0:なし、1:あり)  ★ vr VWXでOR検索した時、何番目の文字列と一致したか  ★ Jd Dn Dc Dt De Dr Dj Dl Ds Db Du Df Dp Dg Dh Dv  ★ Je Ei Es Ez Eb Eu Ek Et Eh Ec Ew Ex En Ev Ea El Ej  ★ Js Sx Se Sd Sk Eo Sy YN Sn Sq FP Sb RO Sz  ★ Jx ep zk FQ ux mx VW ZH RX FK St  ★ Ju fa fb fc fd fi fj fx fy ■ 編集テキスト変数 ------------------------------------------------------------------------------- cd カーソル位置の文字コード ck カーソル位置の文字種(0:半角、1:全角) cl カーソル行の先頭オフセット cp カーソル位置のオフセット ct カーソル位置の文字タイプ 0 : EOF 1 : 改行 2 : 00h〜20h、全角スペース 3 : 半角記号・全角記号 4 : ひらがな 5 : 上記以外の全角文字 6 : 上記以外の半角文字 fe 編集テキストの拡張子タイプ (デフォルトテキスト拡張子の何番目か) ht * 編集テキストのタブカラム数 id テキストID kx * 保存したカーソルのカラム位置 ky * 保存したカーソルのウィンドウ内の行(Y)位置 ld 表示行番号 lh カーソル位置の論理行の先頭からのY位置 ln 論理行番号 lx * 表示カーソルのカラム位置 ly 表示カーソルのウィンドウ内のY位置 mr * テキスト修正フラグ 0 : 未修正 1 : 修正あり 254 : Read Only(修正あり) 255 : Read Only(修正なし) $80 : View mode we * 編集テキストの表示カラム数 wn 編集テキスト番号(ファイル名の前の数字) wt * 画面分割モード 0 : 全画面 2 : 横分割の上 3 : 横分割の下 4 : 縦分割の左 5 : 縦分割の右 wx 編集ウインドウの横幅 wy 編集ウインドウの高さ xb ブロックマーカーのカラム位置  ★ ts タイトルサーチ文字列ポインタ  ★ qn 編集モードでの入力文字カウンタ  ★ qk !Editイベント用入力文字テーブル  ★ xc ブロック範囲比較変数 -1 : cp < tblkp 0 : cp == tblkp 1 : cp > tblkp  ★ nm 編集テキストのカレントディレクトリからの相対パス名  ★ ne 編集テキストの拡張子の最初の2文字  ★ td 編集テキストの表示スイッチ +1 :表示行モード +2 :CR 文字を表示 +4 :TAB文字を表示 +8 :EOF文字を表示 +16 :右マージンを表示 +32 :全角スペースを表示 +64 :行番号を表示  ★ vs 編集テキストのステータスラインの属性  ★ vy 編集テキストのファイル名の属性 ■ ポインタ変数 ------------------------------------------------------------------------------- pa アプリケーションヒストリーバッファ pc VZの起動コマンド名 pd カレントディレクトリ名 pf ファイル名ヒストリーバッファ pi DEFファイルの参照パス名 pn カレントドライブ名 pq テンポラリファイルの参照パス名 ps 検索文字列ヒストリーバッファ pu マクロ配列領域の先頭 pw ワーク用ヒストリーバッファ px コマンドラインヒストリーバッファ pz コマンド起動パス名 sp マクロスタックポインタ  ★ pe editfileのファイル名ポインタ  ★ pm 選択したメニューのメッセージポインタ  ★ pr リネーム時の一時ワーク(64byte)  ★ pt タイトルサーチ文字列ヒストリーバッファ(64byte)  ★ po 検索オプション文字列バッファ(16byte) ■ セグメント変数 -------------------------------------------------------------------------------  ★ cz,gz スタックセグメント  ★ vz VZ.COMのコードセグメント dz * データセグメント(ポインタ演算で使用) tz 編集テキストバッファのセグメント kz テキストスタックのセグメント kp テキストスタックエンドオフセット  ★ fz ファイラーのディレクトリプール、画面待避用ワーク ----------------------------------------- 7.関数一覧 ----------------------------------------- ■ システム関数 ------------------------------------------------------------------------------- &a(msg) Ask msgか? (Y/N) (1:Yes, 0:No, -1:cancel) &b(time) Beep ビープ音 (○) &c Char 1文字入力 (×) &d Display 編集画面の再表示 (○) &e(ptr) Extern マクロ文字列の実行(サブルーチンの返り値) &f(c,str) Find 文字の検索 (0〜:Found, -1:Not found) &g(ttl[,wd][,str]) Get string 文字列の取得(0:数値でない, -1:ESC, -2:CRのみ) &h Hexa 16進数の取得 (-1:16進数でない) &i(n) &i(code) Interrupt 割り込みorマシン語コード実行(キャリーフラグ) &j(n) Japanese 日本語FEPの制御:n=0:OFF, -1:Restore, else:ON &k Keyin BIOSキー入力 (0:キー入力なし) &l Line in 1行入力 (×) &m(msg,..) Message 書式付きメッセージ出力 (○) &?(msg,..) printf 書式付き文字列出力 (×) &n Numeric 数値の取得 (-1:数値でない) &o(code) Output 文字、コマンドの出力 (×) &p Pause 文字、コマンドの入力 (文字orコマンド) &q Quit ネスト1レベルスキップ (○) &r Random 乱数の発生 (0〜32767の乱数) &s Silent 画面出力の停止 (○) &t Trace トレースモード (○) &u(c) Upper 大文字への変換 (文字コード) &v(n) Video カーソル表示の制御:n=0:OFF, 1:ON (○) &w(time) Wait プログラムの休止 (○) &x(x) locate X カーソルをxカラム目へ (×) &y(y) locate Y カーソルをy行目へ (×) &z(file[,n]) load macro 外部マクロロード (0:OK, else:Error) &^ reset option オプションを初期化 ■ コマンド関数 ------------------------------------------------------------------------------- #(n) &#r(n) n 行ページアップ $(n) &#c(n) n 行ページダウン *(0) &#_(0) ファイルの最後 +(n) &#U(n) マーク位置へジャンプ ,(n) &#M(n) カーソル位置マーク -(n) &#J(n) 指定行番号ジャンプ 3(p) テキストスタッククリア ?(n) &#T(n) 編集テキストの変更 @(n) &#Y(n) 画面分割モードの変更 D(n) スペース・タブの挿入 P(n) モジュールの再カスタマイズ #? カーソル行の再表示 #] ダミーコマンドの実行 #03 #[ エディタの強制終了 ■ 文字列操作関数 ------------------------------------------------------------------------------- &Sm(q,p,n) memcpy ポインタ p から q へ n バイトコピー &Sc(q,p[,n]) strcpy 文字列 p を q へ[最大 n バイト]コピー (r = コピー先の末尾ポインタ) &Sa(q,p[,n]) strcat 文字列 p を文字列 q の後ろへ連結 (r = 連結先の末尾ポインタ) &SX(p,q) strcmp 文字列 p と文字列 q を比較 &Sx(p,q) stricmp 文字列 p と文字列 q をIgnore Caseで比較 (r = 0:equal, 1:not equal) &SF(p,c) strchr 文字列 p の中で文字 c をサーチ &Sf(p,c) strichr 文字列 p の中で文字 c をIgnore Caseでサーチ (r = found ptr, 0:not found) &SO(p,q) strstr 文字列 p の中で文字列 q をサーチ &So(p,q) strstr 文字列 p の中で文字列 q をIgnore Caseでサーチ (r = found ptr, 0:not found) &Su(p) strupr 文字列 p の英小文字を大文字に変換 &Sl(p) strlwr 文字列 p の英大文字を小文字に変換 &Sn(p) strlen 文字列の長さ(r) &Sw(p) wrdlen 文字列 p のスペース,TABまでの文字数(r) &Ss(p) skipspc ポインタ p からスペース,TABをスキップ (r = 次の文字のポインタ) &Sh(q,p[,1]) histcpy 文字列 p をヒストリーバッファ q へ格納 [,1]指定時は、ファイルクローズ時と同じ方法で格納 &Se(q,p) getenv 環境変数 p の内容を、ポインタ q へ格納 (r = 0:not found, else:found(コピー先の末尾)) &Sy(p) parsepath パス名 p を解析 r = 解析結果 +1 :ワイルドカード文字 +2 :拡張子 +4 :ファイル名 +8 :ディレクトリ名 +16 :ドライブ名 +32 :絶対パス bx = ファイル名の開始位置 cx = 拡張子の開始位置 si = パス名の末尾 &Sp(q,p,..) sprintf 書式 p の出力をポインタ q へ格納 ■ ロング演算関数 ------------------------------------------------------------------------------- &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 : *q (r = 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 /= n (r = mod) ■ ファイラー操作関数 ------------------------------------------------------------------------------- &Fl(p) FiLer パスマスク p でファイラー起動 &Fm(c) Filer Menu 文字 c をメニューバー内でサーチ (r = -1:not found, else:r番目のメニュー) &Fi Init pool 選択された最初のファイルへ (r = 選択されているファイルの数) &Fn Next pool 選択された次のファイルへ (r = 0:no more files) &Fg(q[,1]) Get pool ファイラーで選択されたファイル名を、ポインタq へ格納。[,1]指定時は、常にフルパスで格納 (r = ファイルの属性) +1 :hidden +2 :system +8 :binary +16 :directory +32 :archive ■ その他の関数 ----------------------------- &Cr 編集モードになるまで、次の命令を実行しない &z(p[,n]) 外部マクロファイル p のロード (r = 0:正常終了 ,else:エラーメッセージ番号) (rr = ロードしたモジュールの n+1 番目のマクロの実行ポインタ) &Zd(n) モジュールの削除: n = モジュール# or モジュール名ポインタ (r = 0:deleted, 1:not deleted) &Zs(p[,n]) モジュールのサーチ (r = 0:not found, else:found) (rr = 見つかったモジュールの n+1 番目のマクロの実行ポインタ) &Bm テキストスタックの先頭のブロックモード (r = 0:行, 1:行ブロック, 2:文字ブロック, else:矩形ブロック) &Jk(c) 2バイト文字の先頭文字の判断 (r = 0:1バイト文字, 1:2バイト文字) &Ja(c) カナロック時の半角カナから英字への変換(r) &Ea(n) EMSメモリの割り当て: n = ページ数 (r = EMSのハンドル, 0:エラー) &Ef(h) EMSメモリの解放: h = EMSのハンドル &Em(h[,1]) EMSメモリのマッピング: h = EMSのハンドル [,1]を指定した場合は、後ろの2フレームへマッピング (r = フレームのセグメント) ============================================================================== End of MAC16.DOC ==============================================================================