「undo.c」の編集履歴(バックアップ)一覧はこちら

undo.c」(2007/08/02 (木) 08:30:42) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

//c #include <stdio.h> #include <stdlib.h> #include <string.h> void one_row_edit(int row, char *txtname); void word_replace1(char *txtname); void line_delete(char *txtname); void line_insert(char *txtname); extern FILE *txtfile, *undo; extern char undo_text[L_tmpnam]; //undo用ファイルの保存 void make_undofile(char *txtname, char *temp_cmd){ char c; //txt→undoファイル用 undo = fopen(undo_text,"w"); while( (c = fgetc(txtfile)) != EOF ) //編集直前の状態を保存する { fputc(c,undo); } txtfile = freopen(txtname,"r",txtfile); //もう一度txtをオープンしておく fclose(undo); //undoは閉じておく。 if(atoi(temp_cmd) != 0) one_row_edit(atoi(temp_cmd), txtname); //一行編集 if(strcmp(temp_cmd, "r\n") == 0 || strcmp(temp_cmd, "R\n") == 0) word_replace1(txtname); //置換 if(strcmp(temp_cmd, "d\n") == 0 || strcmp(temp_cmd, "D\n") == 0) line_delete(txtname); //行削除 if(strcmp(temp_cmd, "i\n") == 0 || strcmp(temp_cmd, "I\n") == 0) line_insert(txtname); //行挿入 return; } //一つ前の状態に戻す(undo) void un_do(char *txtname){ char c; // 文字を読み込む if((undo = fopen(undo_text,"r"))==NULL) { printf("まだ編集は行われておりません\n"); return; } txtfile = freopen(txtname,"w",txtfile); //読み込みから書き込みへ /* ファイルから EOFが現れるまで1字読み込む */ while((c = fgetc(undo)) != EOF){ //一つ前の状態の内容を読み込み fputc(c,txtfile); //ファイルに入れて戻す } fclose(undo); freopen(txtname,"r",txtfile); return; }
//c #include <stdio.h> #include <stdlib.h> #include <string.h> void one_row_edit(int row, char *txtname); void word_replace1(char *txtname); void word_replace2(char *txtname); void line_delete(char *txtname); void line_insert(char *txtname); extern FILE *txtfile, *undo; extern char undo_text[L_tmpnam]; //undo用ファイルの保存 void make_undofile(char *txtname, char *temp_cmd){ char c; //txt→undoファイル用 undo = fopen(undo_text,"w"); while( (c = fgetc(txtfile)) != EOF ) //編集直前の状態を保存する { fputc(c,undo); } txtfile = freopen(txtname,"r",txtfile); //もう一度txtをオープンしておく fclose(undo); //undoは閉じておく。 if(atoi(temp_cmd) != 0) one_row_edit(atoi(temp_cmd), txtname); //一行編集 if(strcmp(temp_cmd, "r1\n") == 0 || strcmp(temp_cmd, "R1\n") == 0) word_replace1(txtname); //置換(少しでも含まれてればヒット) if(strcmp(temp_cmd, "r2\n") == 0 || strcmp(temp_cmd, "R2\n") == 0) word_replace2(txtname); //置換(トークンごとにヒット) if(strcmp(temp_cmd, "d\n") == 0 || strcmp(temp_cmd, "D\n") == 0) line_delete(txtname); //行削除 if(strcmp(temp_cmd, "i\n") == 0 || strcmp(temp_cmd, "I\n") == 0) line_insert(txtname); //行挿入 return; } //一つ前の状態に戻す(undo) void un_do(char *txtname){ char c; // 文字を読み込む if((undo = fopen(undo_text,"r"))==NULL) { printf("まだ編集は行われておりません\n"); return; } txtfile = freopen(txtname,"w",txtfile); //読み込みから書き込みへ /* ファイルから EOFが現れるまで1字読み込む */ while((c = fgetc(undo)) != EOF){ //一つ前の状態の内容を読み込み fputc(c,txtfile); //ファイルに入れて戻す } fclose(undo); freopen(txtname,"r",txtfile); return; }

表示オプション

横に並べて表示:
変化行の前後のみ表示: