「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;
}