#!/bin/rc
awk 'BEGIN {
	if (ARGC < 2) {
		print "usage: xnfto part name.pins name.xnf > name.cst"
		exit
	}
	pkg = substr(ARGV[1], 5, 20)
	ARGV[1] = "/sys/lib/cda/"substr(ARGV[1], 1, 4)".pin"
	n = split("m0 m1 m2 prog- done cclk tdo M0 M1 M2 PROG- DONE CCLK TDO", x, " ");
	for (i = 1; i <= n; i++)
		dont[x[i]] = 1		# dont mention these to ppr
}
{
	if (FILENAME != file) {
		file = FILENAME
		split(file, x, ".")
		ext = x[2]
		cst = x[1]".cst"
	}
	if (ext == "xnf")
		if ($1 == "ext," && pin[$2] != "") {
			split($2, y, ",")
			print "place instance "y[1]": "pin[$2]";"
			pin[$2] = ""
		}
}
/^\.n/ {
	for (col = 1; col < NF+1 && $col != pkg; col++)
		;
	if (col > NF)
		print "undefined pkg "pkg
	next
}
/^\.p/ {
	sig[$col] = $2
	alnum[$6] = $5	# just in case we have to
	next
}
/^%float/ {
	float = $1
}
/^\.tp/ {
	p = $3
	if (col == 6)
		p = alnum[p]
	else
		p = "p"p
	if (float != "%float") {
		if (!dont[$2])
			pin["p_"$2","] = p
	}
	else
		place["p_"$2] = p
}
END {
	first = 1
	for (p in pin)
		if (pin[p] != "") {
			if (first) {
				printf "notplace instance *:"
				first = 0
			}
			printf " %s", pin[p]
		}
	if (!first)
		print ";"
	for (p in place)
		print "place instance "p": "place[p]";"
}' $*
