#!/usr/local/bin/gawk -f

# take two files with identical parameters (except possibly the Reps)
# and combine them into one file.

# syntax is append_reps file1 file2 file1 file2
# it's a two-pass algorithm so the files must each be specified twice

# this replaces on real-time append feature, which would have been
# hard to update to work with mod_gen.  the old real-time feature
# could append two files with different non-overlapping ranges,
# which this script currently can't do.

BEGIN {
	FS = "="
  in_params = 0
  in_rasterdata = 0
  pass_num = 0

  version = "0.9"
}

{
	if(FNR == 1) {
    pass_num = pass_num + 1
    filename[pass_num] = FILENAME
		xdphys_file = match($0,/^;; [xd]/);
		if (xdphys_file == 0) {
			print "not an xdphys data file" > "/dev/stderr"
			exit }
    split($0,a," ")
	  if(pass_num == 1) {
      type = a[3] }
    else {
      if(a[3] != type) {
			  print "types are not the same" > "/dev/stderr"
			  exit } } }
}

/^END_PARAMS$/ {
  in_params = 0
}

{
  if(in_params) {
    if(pass_num == 1) {
      if(match($1,"Reps")) {
        reps = $2 }
      else {
        svars[$1] = $2 } }
    else if(pass_num == 2) {
      if(match($1,"Reps")) {
        reps = reps + $2 }
      else {
        if(svars[$1] != $2) {
			    print "params are different" > "/dev/stderr"
			    exit } } } }
}

/^PARAMS$/ {
  in_params = 1
}

/^Reps=/ {
  if(pass_num == 3) {
    printf "Reps=%d\n", reps
    next }
}

/^nrasters=/ {
  if(pass_num == 1) {
    nrasters = $2
    nextfile }
  else if(pass_num == 2) {
    nrasters = nrasters + $2
    nextfile }
  else if(pass_num == 3) {
    printf "nrasters=%d\n", nrasters
    next }
  else if(pass_num == 4) {
    in_rasterdata = 1
    next }
}

/^END_RASTERDATA$/ {
  if(pass_num == 3) {
    nextfile }
}

{
  if((pass_num == 3) || ((pass_num == 4) && in_rasterdata)) {
    print $0 }
}

/^COMMENTS$/ {
  if(pass_num == 3) {
    printf ";;this file was derived from %s and %s\n", filename[1], filename[2]
    printf ";;automatically by append.gawk ver %s\n;;\n", version }
}

