V10/vol2/index/nmkfile

< ../ADM/defns
<../index/defns

all:V:	index.out

pg:	index.out
	count index.ms index.out

spell:VQ:
	dospell index.ms

lp:	index.out
	$LP $newprereq && touch $target

index.out:D:	index.ms
	$PREFER $prereq | pic | troff -mpm > $target

index:V:
	touch index.ind
pindex:V:
	touch index.ind

PAPERS=`cd /usr/vol2;echo [a-z]*`
INDEX=${PAPERS:%=%.index}
incindex:V:	$INDEX

%.index:VQ:
	cd ../$stem; mk index
PINDEX=${PAPERS:%=%.pindex}
pincindex:V:	$PINDEX

%.pindex:VQ:
	cd ../$stem; mk pindex

restart:V:
	for i in ../[a-z]*
	do
	cd $i
	mk index
	done

sindex:VQ:
	wc sindex
	awk '
	/^\.XX/	{
	if($2 ~ /[a-z]/){
		name=$2
		first=$3
		str = "..\/" $4 ".pg"
		getline <str
		last=$1 + first -1
		print name " " first " " last
		close(str)
	}
	}' ../contents/contents.ms >contents
	sed -e 's/\\f(..//g' -e 's/\\f[a-z0-9A-Z]//g' -e 's/\\em//' -e 's/ ,/,/' -e 's/\\\&//g' -e 's/,/	/' -e 's/^ //' ../[a-z]*/*.ind|sort -f|
	awk  '
	BEGIN	{
		while((getline<"contents") > 0){
			names[$1] = $2
			last[$1] = $3
		}
		FS="	"
		mult = .2
	}
	{if($1 == term){
		ck = global = substr($2,2,index($2,",")-2)
		if(ck in names){
			sub(/^ /, " \\fI", $2)
			sub(/,/,"\\fP,", $2)
			control = 6
		}
		else control=0
		if($2 ~ /[A-Z_$][A-Z_$][A-Z_$0-9& ]*/){
			if($2 !~ /\\s/)
				control += 8*gsub(/[A-Z_$][A-Z_$][A-Z_$0-9& ]*/,"\\s-2&\\s+2")
		}
		sub(/^ /,"",$2)
		if(NF == 3){
			rside = ckcw($2,0,$NF)
			if(global in names){
			if( $3~ /[gGPR]/)
			printit("    \\fI" global "\\fP, " names[global] "-" last[global],1,control)
			else printit("    " $2, 1, control)
				next
			}
		}
		else rside = $2
		printit("    " rside, 1, control)	#removed space
	}
	else {
		term = $1
		control=0
		if(term in names){
			newt="\\fI" term "\\fP, " names[term] "-" last[term]
			printit(newt, 0, 0)
			if($2 ~ /[A-Z_$][A-Z_$][A-Z_$0-9& ]*/){
			  if($2 !~ /\\s/)control=8*gsub(/[A-Z_$][A-Z_$][A-Z_$0-9& ]*/,"\\s-2&\\s+2")
			}
			sub(/^ /,"",$2)
			if(NF == 3)
				rside = ckcw($2,0,$NF)
			else rside = $2
			printit("    " rside, 1, control)	#removed space
		}
		else {
			if($1 ~ /[A-Z_$][A-Z_$][A-Z_$0-9& ]*/){
				if($1 !~ /\\s/)control=8*gsub(/[A-Z_$][A-Z_$][A-Z_$0-9& ]*/,"\\s-2&\\s+2")
			}
			lside = $1
			if(NF == 3){
				lside = ckcw($1,1,$NF)
				if($NF ~ /[gGPR]/){
				r = substr($2,2,index($2,",")-2)
				if(r in names ){
					printit(lside ", \\fI" r "\\fP, " names[r] "-" last[r],0,control)
					next
				}
				else {
					print "term not in names:" r|"cat 1>&2"
					sub(/	./,"")
				}
				}
			}
			sub(",","\\fP,",$2)
			printit(lside ",\\fI" $2, 0, control)
		}
	}}
	function ckcw(rterm,first,code){
		if(rterm ~ /^-/){
			sub(/^-/,"\\(em",rterm)
			control += 3
		}
		if(rterm ~ /^\./){
			sub(/^\./,"\\\\&&",rterm)
			control += 2
		}
		if(code ~ /[GcS]/){
			if(first)rterm = addcw( rterm,0)
			else {
				control -= length(rterm)*mult
				rterm = "\\f(CW" rterm
				sub(/,/,"\\fP,",rterm)
			}
		}
		else if(code ~ /[pPf]/){
			control -= length(rterm)*mult
			rterm = "\\f(CW" rterm
			sub(/ /,"\\fP ", rterm)
		}
		else{
			n=split(rterm, arr, " ")
			if(code ~ /y/)rterm = addcw( arr[1],0)
			else rterm = arr[1]
			for(i=2;i<=n;i++){
				if(i==2 && code~/[rRz]/)rterm = rterm addcw( arr[i],1)
				else if(i==3 && code~/[qy]/)rterm=rterm addcw( arr[i],1)
				else if(i==4 && code~/[txz]/)rterm=rterm addcw( arr[i],1)
				else if(i==6 && code~/x/)rterm=rterm addcw( arr[i],1)
				else rterm = rterm " " arr[i]
			}
		}
		if(code ~ /[xyz]/)control += 16
		control += 8
		return(rterm)
	}
	function addcw(term,adds,hidden){
		control -= length(term)*mult
		hidden = "\\f(CW" term "\\fP"
		if(adds) hidden = " " hidden
		return(hidden)
	}
	function printit(line, space, caps){
	limit=46+caps
	if(space == 0)limit += 2
	if(length(line)< limit)print line
	else {
		n=split(line, a, ",")
		if(length(a[1])>=limit){
			m=split(a[1],b," ")
			nline=b[1]
			if(space)nline = "    " b[1]
			for(i=2;i<=m;i++){
				nline = nline " " b[i]
				if(length(nline)>=limit){
					print nline
					nline = "      "
				}
			}
			for(i=2; i<=n;i++){
				if(nline == "      ")nline = nline a[i]
				else nline = nline "," a[i]
			}
			print nline
			return
		}
		nline=a[1]
		for(i=2;i<=n;i++){
			nline = nline "," a[i]
			if(length(nline)>= limit-6){
				if(i < n)print nline ","
				else print nline
				if(i < n)nline = "      " a[++i]
				else nline = ""
			}
		}
		if(length(nline) > 0)print nline
	}
	}' |finddups >sindex
	wc sindex
#	troff -ms sindex.ms >tr.out