ワンタッチ/リードオンリセーブ、連番セーブ |
作者: 上村 郁夫 |
NIFTYの会議室に書き込んだマクロです。
download
======== safe.def ======== by I.Kamimura
【ワンタッチ/リードオンリセーブ、連番セーブ】
■動作環境
● VZ Editor Ver 1.6 以降
■簡易ヘルプ
●〔ESC〕〔S〕でワンタッチセーブ(リターンキー自動化)
●〔ESC〕〔SHIFT〕+〔S〕(または〔GRPH〕+〔S〕)で連番セーブ
「.000」「.001」などユニークな拡張子となる。 環境変数 VZBAK が設定さ
れていると、そのディレクトリにセーブする。
●ブロックモードでは基本機能のまま
●MS-DOS レベルのリードオンリ属性のファイルを修正してセーブしようとす
ると、 「ディスク上ではリードオンリ属性です.更新しますか?(Y/N)」と
問い合わせる。セーブ後はまたリードオンリ属性に戻す。
■カスタマイズ
このファイル上で GUEST.DEF (YMFCST.DEF 下位互換カスタマイザ)を起動す
ると、対話式でカスタマイズできます。
------------------------------------------------------------------------------
#AUTO_RET + ;連番セーブでもリターンキーを自動化する
------------------------------------------------------------------------------
* M
80 [ESC]S "ワンタッチ/リードオンリセーブ"
?.
(mr&$80)? { &m(36). } ; 「変更できません」
(mb)? { #S. } ; ブロックモードなら基本機能のまま
(ks&1)? >81 ; シフト実行なら連番セーブ
ax=$4300, cx-, &> ; ファイル属性を調べる
(cx&1)? { ; リードオンリか?
&a("ディスク上ではリードオンリ属性です.更新します") (r-1)?.
ax=$4301, cx[-, &> cx], ; リード/ライト可能に変更
}
#S #m ; セーブ
(cx&1)? {
ax=$4301, &> ; リードオンリに戻す
&m("更新後リードオンリ属性に戻しました")
}
0: dx=wa+$92, &i($21) ; wa+$92 : 編集中テキスト名
81 @S "連番セーブ"
?.
&Sh(pw,wa+$92) m=mr, ; 元のファイル名 --> pw
&b(3) #S n-, ; 元のファイル名 --> pr
&Se(pa,"VZBAK") ; 環境変数 VZBAK を pa に取得
(r)?? { ; 未設定なら同一ディレクトリ
&Sy(pr) &Sc(pa,pr,bx-pr-1)
}
(r.-1=='\')? r.-1-, ; ディレクトリ名の末尾の'\'を除去
dx=pa, ax=$3900, &i($21) ; ディレクトリ作成
&Sy(pr) &Sa(pa,bx-1) ; '\filename.ext' --> pa
:A &Sy(pa) (r&2)?? cx=si,
&Sp(cx,".%03d",n) ; 拡張子を連番にする
#x &?("%s",dx=pa)
ax=$4E00, cx=$FF, &i($21) ; すべての属性を検索
(r)?? { n++, >A } ; すでに存在するなら次の番号
; &l ;#AUTO_RET- [CR]/[ESC] を待つ
#m ;#AUTO_RET+
(r)?.
#82 #x &?("%s",pw) #m ; 元のファイル名に戻す
mr=m, #] ; 修正フラグを元に戻す
&m("$"%s$"に連番セーブしました",pa).
*
======== End of safe.def ========
|
|
(1995/09/21 FGALPK MES 13 #02581にて) |
|
【作者コメント】
ロジックがちがうマクロがハードディスクのこやしになっていました。連番セーブでは、「カウントアップしながらファイル名検索し、存在しなければリネームする」のと「いきなりリネームをかまして、失敗したらカウントアップしてトライし続ける」のと、どちらがよいのでしょう。
download
======== safe.def ======== by I.Kamimura
【ワンタッチ/リードオンリセーブ、連番セーブ】
■動作環境
● VZ Editor Ver 1.6 以降
■簡易ヘルプ
●〔ESC〕〔S〕でワンタッチセーブ(リターンキー自動化)
●〔ESC〕〔SHIFT〕+〔S〕(または〔GRPH〕+〔S〕)で連番セーブ
「.000」「.001」などユニークな拡張子となる。 環境変数 VZBAK が設定さ
れていると、そのディレクトリにセーブする。
●ブロックモードでは基本機能のまま
●MS-DOS レベルのリードオンリ属性のファイルを修正してセーブしようとす
ると、 「ディスク上ではリードオンリ属性です.更新しますか?(Y/N)」と
問い合わせる。セーブ後はまたリードオンリ属性に戻す。
■カスタマイズ
このファイル上で GUEST.DEF (YMFCST.DEF 下位互換カスタマイザ)を起動す
ると、対話式でカスタマイズできます。
------------------------------------------------------------------------------
#AUTO_RET + ;連番セーブでもリターンキーを自動化する
------------------------------------------------------------------------------
* M
80 [ESC]S "ワンタッチ/リードオンリセーブ"
?.
(mr&$80)? { &m(36). } ; 「変更できません」
(mb)? { #S. } ; ブロックモードなら基本機能のまま
(ks&1||eb)? >81 ; シフト実行なら連番セーブ
ax=$4300, cx-, &> ; ファイル属性を調べる
(cx&1)? { ; リードオンリか?
&a("ディスク上ではリードオンリ属性です.更新します") (r-1)?.
ax=$4301, cx[-, &> cx], ; リード/ライト可能に変更
}
#S #m ; セーブ
(cx&1)? {
ax=$4301, &> ; リードオンリに戻す
&m("更新後リードオンリ属性に戻しました")
}
0: dx=wa+$92, &i($21) ; wa+$92 : 編集中テキスト名
81 @S "連番セーブ"
?.
(mr&$80)? { &m(36). } ; 「変更できません」
(mb)? { #S. } ; ブロックモードなら基本機能のまま
p=wa+$92, ; 編集テキスト名
&Se(pr,"VZBAK") ; 環境変数 VZBAK を pr に取得
(r)?? { ; 未設定なら同一ディレクトリ
&Sy(p) &Sc(pr,p,bx-p-1)
}
(r.-1!='\')? r..0='\', ; ディレクトリ名の末尾の'\'を除去
&Sy(p) &Sa(dx=pr,bx)
ax=$4E00, cx=$FF, &i($21) ; ディスク上にオリジナルが存在するか
n=-1,
(r)?? {
:A &Sy(di=pr) (r&2)?? cx=si,
&Sp(cx,".%03d",n++) ; 拡張子を連番にする
dx=p, ax=$5600, &i($21)
(ax==5)? >A ; すでにあるなら番号アップ
&Sh(pf,pr) ; バックアップ名をファイル名ヒストリへ
}
#S #m
(n<0)?. ; ディスク上にオリジナルがない
&m("$"%s$"にバックアップしました",pf)
*
======== End of safe.def ========
|
|
(1995/12/17 22:01のタイムスタンプ) |