#include #include #include #include int getline(FILE *f, char *line) { int c; char *p = line; for (;;) { c = fgetc(f); if (c == EOF) return(0!=0); if (c == '\n') break; *p++ = c; } *p = '\0'; return(0==0); } int main(int argc, char **argv) { FILE *s, *imp; char fname[1024], sline[1024], impline[1024]; int lineno = 0, target; if (argc != 2) { fprintf(stderr, "syntax: merge basename\n"); exit(1); } sprintf(fname, "%s.s", argv[1]); s = fopen(fname, "r"); if (s == NULL) { fprintf(stderr, "merge: %s - %s\n", strerror(errno), fname); exit(1); } sprintf(fname, "%s.i"); imp = fopen(fname, "r"); if (imp == NULL) { fprintf(stderr, "merge: %s - %s\n", strerror(errno), fname); exit(1); } for (;;) { if (!getline(s, sline)) break; if (strncmp(sline, " / line ", strlen(" / line ")) == 0) { fprintf(stdout, "%s\n", sline); sscanf(sline, " / line %d", &target); while (lineno < target) { if (!getline(imp, impline)) break; lineno += 1; fprintf(stdout, "; [%04d] %s\n", lineno, impline); } } else { fprintf(stdout, "%s\n", sline); } } /* should loop over any remaining lines */ exit(0); return(0); }