今日のテーマ   日々改造 (^_^;)         
[記事リスト(ツリー表示)]  [ 返信 ]   [新着記事] [最新50] [ワード検索] [過去ログ]

タイトル rensave.def v2.0 の再改造
投稿日: 2017/08/21(月) 01:45
投稿者konno
 番 号 7780       コメント数 2

ねこさんの RENSAVE.DEF の再改造です。


昔FGALDCの会議室で改造したんですが、テンポラリエラーが出るようになって、
使わなくなっていました。
今回また必要性が高まったので、見直してバグを見つけました。


> 08064/08074 KFR04247  H.Konno          rensave.def v2.0 にバグ?
> (14)   04/05/06 01:01
> 
> みなさんこんにちは。
> 
> 私は毎日のように rensave.def 2.0(世代管理セーブ by ねこ)の
> お世話になっています。(ねこさん、ありがとうございます。)
> これが無いとVZのバージョン管理も出来ないんですが、最近、
> バグと思われる現象に出会いました。
> 
> それは、拡張子が1文字の時に使用すると、ピリオドが消えて、
> ファイル名と拡張子がつながってしまうと言うものです。
> たとえば、
> 
> abc.c のようなファイルを編集し、rensave.def でセーブすると、
> abcc になってしまうんです。オリジナルVZでも、XP、Win98Me、
> LX でもなるので、rensave.def のバグかと思ったわけです。
> 皆さんの所ではどうでしょうか。
> 
> 08066/08074 KFR04247  H.Konno          RE:rensave.def v2.0 にバグ?
> (14)   04/05/12 02:34  08065へのコメント
> 
> > 問題のコードは,
> >        #82 #h #m #82 #u #m                     ;ファイルを読み込む
> >…の部分です。
> 
> 手動でやってみて納得しました。未修正のファイルも修正済みになりますね。
> 
> 最初の (mr-1)?. というのは、mr が1以外なら終了と言うことですよね。
> とすればこの時点で mr は1になっている?
> と言うことで、この部分をコメントにして見ました。
> 
> ;        #82 #h #m #82 #u #m                     ;ファイルを読み込む
> 
> なんかバグが無くなって正常に動いているように見えます。(^^;
> 
> -- H.Konno --

こんなやり取りをしていたんですが、実はこの部分が重要だったという落ち。
短いので全部張り付けます。


====== rensave.def    世代管理セーブ  by ねこ ======
;====== rensave.def 2.0  世代管理セーブ by ねこ ======
* m
80 [ESC]F "rename save"
	?. (mr-1)?. ;&s				;Readonlyは除外
	&m("世代管理セーブ")		;メッセージ
	#]					; ★k cp をテキストバッファに
	&s
;;	#82 #h #m #82 #u #m			;ファイルを読み込む
	&Sh(pf,nm) 				;ファイル名コピー
	ax$4e00, cx-, dx=pf, &i($21) n-,	;ファイル検索
	(ax!=$12)?{				;見つかったら
		&Sy(pf)				;ファイル名解析
		&Sc(pr,pf,cx-pf+(r&2/2-1))	;prにコピー
	:A	&Sp(r,".%03d",n)		;連番拡張子付加
		ax$5600,dx=pf,di=pr,
	#M #_ #U				; ★k テンポラリエラー対策
		r[, &i($21) r],			;rename
		(ax==5)?{n++,>A}		;既に有るなら連番増分
		&Sh(pf,pr)			;ファイル名ヒストリにコピー
	}
	&d &m("%sにバックアップ",pf) &s		;メッセージ
	#S #m &d #?				;現テキスト保存
	&m("%sにバックアップしました",pf)		;メッセージ
	#C
*
====== bottom of rensave.def ======


★印が今回の改造部分です。
要は、セーブ前にディスク上のファイルをリネームするのですが
その時点で大きいファイルでは一部しか読み込んでいないため
セーブ時にファイルの追加読み込みをしようとして、ファイルが無い!!
で、テンポラリファイルエラーになるわけです。

これは手動でやっても同じなので、セーブ前にディスク上のファイルを
リネームするときはその前にいったんテキストの最後までジャンプさせる
必要がある、ということでした。


# 過去に積み残したお宝が山積みで掘り起こしが大変だぁ〜!!


    - No.7780 一括表示へ   -              [ 返信 ]    [引用無し] pre


- 関連一覧ツリー (先頭の番号をクリックするとツリー全体を一括表示します)
▼ 7780.rensave.def v2.0 の再改造 - konno 17/08/21-01:45
  ┣7781. rensave.def バグ&返り値が・・・ - konno 17/08/25-01:32
  ┃┗7782.Re: rensave.def バグ&返り値が・・・ - としき 17/08/26-13:10
  ┃ ┗7783.Re^2: rensave.def バグ&返り値が・・・ - konno 17/08/27-00:37
  ┃  ┣7784.Re^3: rensave.def バグ&返り値が・・・ - konno 17/08/27-01:12
  ┃  ┗7785.Re^3: rensave.def バグ&返り値が・・・ - としき 17/08/27-18:16
  ┃   ┗7786.Re^4: rensave.def バグ&返り値が・・・ - konno 17/08/27-21:28
  ┃    ┣7787.Re^5: rensave.def バグ&返り値が・・・ - としき 17/08/28-21:31
  ┃    ┃┗7790.Re^6: rensave.def バグ&返り値が・・・ - としき 17/08/28-23:35
  ┃    ┃ ┗7791.Re^7: int21の未定義API - konno 17/08/29-01:29
  ┃    ┃  ┗7793.Re^8: int21の未定義API - 10♯ 17/08/30-04:38
  ┃    ┃   ┗7794.Re^9: int21の未定義API - konno 17/08/30-21:18
  ┃    ┗7788.Re^5: rensave.def バグ&返り値が・・・ - konno 17/08/28-21:54
  ┗7795.Re: rensave.def v2.0 の再改造 - konno 17/09/01-23:47

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)   [引用無し]
おなまえ 
Eメール 
タイトル 
メッセージ auto soft pre(図表、プログラム) ※折り返さずに改行を入れてね
 参照先 
 暗証キー (英数字で8文字以内)
 プレビュー          

- 以下のフォームから自分の投稿記事を修正・削除することができます -
   処理   記事No   暗証キー
    [ページトップへ] [管理用]