イベントマクロON/OFF

作者: 上村 郁夫

NIFTYの会議室に書き込んだマクロです。

download
======== Xevent.def ======== by I.Kamimura

#if 0

 【イベントマクロON/OFF】

 ●マクロを起動すると、現在のイベントマクロの状況がメニューに表示されま
    す。カーソルを合わせてリターンキーで選択すると、イベントマクロをON
    /OFFできます。

  ※マクロバッファ内部を一時的に操作する(タイトル先頭の「!」を「?」に、
      マクロ本体の先頭を「.」に置換)だけですので、 VZを再起動すると元
      の状態に戻ります。
  ※元々存在しないイベントマクロをONにすることはできません。(当然)

#endif

* M
89 ^\   "Xevent"
        &01
        af[=aw, !01 af], (r<0)?.
        (pm.8=='N')? { &03 (0)} ? &04
        &> >^

0:      ;--- refresh macro buffer by m.gann ---
        p[=mh, n[+,
:R      (r=p..2)? { p=r, n++, >R }      ;最後のモジュール
        p..2=pu, pu.3=2, pu..2-,        ;ダミーモジュールセット
        &Zd(n) n], p],                  ;その削除

1:      ;--- check event ---
        &09 i[=r.4, &08 pm=r,
:A      &Sn(pm) pm+=r+1,
        (pm.0<<8+'!') &02 ? { &Sc(pm+7,"ON ") (0)} ? { &Sc(pm+7,"OFF") }
        (i--)? >A i],

;2:     ;--- search word of title ---
;       ; INPUT  mg..0 = char
;       ; OUTPUT r = address, 0:not found
;
;       r=mg..0, p[=mh,
;:A     (p.0==0)? >Z
;       p++,
;       (p..2-r)? { p+=p..0+2, >A }
;       (p+4)
;:Z     p],

2:      ;--- search word of title ---   ;(高速バージョン)
        ; INPUT  mg..0 = char
        ; OUTPUT r = address, 0:not found

        cx[=mg..0, si[=mh, &> (si) si], cx],

0:      &i(3+$).                        ; XEVENT.ASM
        "$(AC,84,C0,74,11,83,C6,04,8B,04,3B,C1,74,0A,83,EE)$
        $(04,AD,03,F0,EB,EA,33,F6,C3)"

3:      ;--- ON --> OFF ---
        (pm.0<<8+'!') &02 ??.
        r.0='?', p[=r, &Sn(p) r+=p+1, p+=p..-2-3, p.0=r.0, r.0='.', p],
        >^

4:      ;--- OFF --> ON ---
        (pm.0<<8+'?') &02 ??.
        r.0='!', p[=r, &Sn(p) r+=p+1, p+=p..-2-3, r.0=p.0, p.0-, p],
        >^

8:      ;--- menu title address ---
        &> (r+9+r.4*2)

9:      (2+$)

* P
1       "",12,8
        "Abort  ..."    ; Don't touch!
        "Start  ..."    ; Don't touch!
        "Open   ..."    ; Don't touch!
        "Close  ..."    ; Don't touch!
        "Edit   ..."    ; Don't touch!
        "View   ..."    ; Don't touch!
        "Timer  ..."    ; Don't touch!
        "Filer  ..."    ; Don't touch!
*
======== End of Xevent.def ========


【作者コメント】
イベントマクロを利用したマクロを導入すると、誤動作した場合の影響が甚大です。
特に!Openイベントが誤動作すると、設定を元に戻すための編集作業がまともにできなくなります。本マクロをマクロキーで直接呼び出せるようにしておきましょう。