#!/bin/awk -f

BEGIN{
	if (ARGC < 3) {
		print "usage:  depselect <start>,<stop>,<step> <file1> <file2> ..."
		print 
		print "Creates a new file from <file> containing only the depvars"
		print "in the list <depvars>."
		print 
		print "<reps> is a comma separated list of depvars"	
		print "<fileX> is an xdphys data file"
		print 
		print " The resulting file is written to select.<file>"
		exit
	} else {
		# parse the rep list
		range=ARGV[1]
		split(range, r, ":")
		ndeps=1
		tot=r[1]
		deps[ndeps]=tot
		while (tot < r[2]) {
			tot = tot + r[3]
			ndeps = ndeps + 1
			deps[ndeps] = tot
		}
		ARGV[1]=""
	}

	FS = "="
}

END {
	print "END_RASTERDATA" > filename
}
	

{
	if (FNR == 1) {
		xdphys_file = match($0,/^;; [xd]/);
		if (xdphys_file == 0) {
			print "repselect: " FILENAME " is not an xdphys data file. Skipping." > "/dev/stderr"
			nextfile
		} else {
			# This is the start of a new file
			done_header=0
			print_em=1
			delete depvars
			if (FILENAME == "-")
				filename = "/dev/stdout"
			else {
				filename = FILENAME
				sub(/[^\/]*$/,"select.&",filename)
			}
			print "repselect: Writing to: " filename > "/dev/stderr"
		}
	}
}

/^COMMENTS$/ {
	print > filename
	print ";; this file contains a subset of depvars from" > filename
	printf(";; %s, generated by depselect\n",FILENAME) > filename
	print ";; ------------------------" > filename
	next
}

/range=/ {
	if (done_header==0) {
		split($0,r,"=")
		printf("%s=%s\n",r[1],range) > filename
		next
	}
}

/^Reps/ {
	if (done_header==0) {
		nreps=$2
		next
	}
}

/^nrasters/ {
	# Assuming here that we actually got a Reps= line before now
	done_header=1
	printf "nrasters=%d\n", (nreps*ndeps) > filename
	next
}

/^depvar/ {
	if (done_header != 0) {
		line=$0
		sub(/<.*>/,"",$2)
		print_em=0
		for (i in deps) {
			if (deps[i] == $2) {
				print_em=1
				print line > filename
				next
			}
		}
	}
}

{
	if ((done_header == 0) || ((done_header == 1) && (print_em == 1))) {
		print $0 > filename
	}
}
