#include #include #include #define MAX_LINE 10000 FILE* f = 0; FILE* g = 0; bool sure = false; char cur_file[50]; bool modified; void closefile() { if (f != 0) { for (;;) { char ch = fgetc(f); if (feof(f)) break; putc(ch, g); } fclose(f); fclose(g); if (sure && modified) { f = fopen(cur_file, "wt"); g = fopen("multifilefixtempfile.txt", "rt"); for (;;) { char ch = fgetc(g); if (feof(g)) break; putc(ch, f); } fclose(f); fclose(g); } } } int main(int argc, char *argv[]) { sure = argc == 2 && strcmp(argv[1], "-sure") == 0; cur_file[0] = '\0'; int cur_linenr; char buffer[MAX_LINE]; while (fgets(buffer, MAX_LINE, stdin)) { //printf("Process: %s", buffer); char *s = strstr(buffer, "\r\n"); if (s != 0) strcpy(s, "\n"); s = buffer; while (*s != ':' && *s != '\0') s++; if (*s == '\0') { printf("Error: %s\n", buffer); return 1; } *s++ = '\0'; int linenr = atoi(s); while (*s != ':' && *s != '\0') s++; if (*s == '\0') { printf("Error: %s\n", buffer); return 1; } s++; if (strcmp(cur_file, buffer) != 0) { closefile(); strcpy(cur_file, buffer); //printf("Open file: '%s'\n", cur_file); f = fopen(cur_file, "rt"); g = fopen("multifilefixtempfile.txt", "wt"); cur_linenr = 1; modified = false; } while (cur_linenr < linenr) { for (;;) { char ch = fgetc(f); if (feof(f)) break; putc(ch, g); if (ch == '\n') break; } cur_linenr++; if (feof(f)) { printf("Error: no line %d (at %d) in :%s\n", linenr, cur_linenr, buffer); return 1; } } char buffer2[MAX_LINE]; fgets(buffer2, MAX_LINE, f); if (strcmp(s, buffer2) != 0) { printf("In file %s, line %d, replace:\n%s%s\n", cur_file, cur_linenr, buffer2, s); modified = true; } fprintf(g, "%s", s); cur_linenr++; } closefile(); }