#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <errno.h>

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