V10/vol2/index/defns

IND=../index/tools
ISTEX=0
ENVIRON="$ENVIRON"'
runind(){
F=$1
	if test -s $1.ms
	then
		J=$1
		F=$1.ms
	else if test -s $1.m
	then
		J=$1
		F=$1.m
	else if test -s $1.tex
	then
		J=`basename $1 .tex`
		F=$1.tex
		ISTEX=1
	else if test -s $1
	then
		J=$1
	else
		echo $1 not found
		exit
	fi
	fi
	fi
	fi
O=x$F
tr A-Z a-z <$J.terms|sed -e '\''s/\([a-z/]*\)\.\([a-z][a-z]*\)/\1zz1\2/g'\'' -e '\''s/^\([0-9]\)/ \1/'\'' |sort|uniq|
awk '\''	{
	if(last == $0)next
	if(last "s" == $0){
		print last
		last = ""
		next
	}
	else if(last != "")
		print last
	last = $0
	}
END	{
	if(last != "")print last
}'\'' >$J.lt
sed '\''s/\([a-z/]*\)\.\([a-z][a-z]*\)/\1zz1\2/g'\'' $F >foo
$IND/diction -f $J.lt -o $J.hits foo >/dev/null
tr A-Z a-z <$J.terms|awk -v file=$J.terms '\''{
	term=$0
	gsub(/\\/,"\\\\")
	gsub(/\//,"\\/")
	gsub(/\*/,"\\*")
	gsub(/\[/,"\\[")
	gsub(/,/," ")
	term=$0
	getline <file
	gsub(/\\/,"\\\\")
	gsub(/\//,"\\/")
	gsub(/\&/,"\\\\\&")
	print "s/^" term "$/" $0 "/"
	print "s/^\\([0-9]* \\)" term "$/\\1" $0 "/"}'\'' >x$J.sed
if test -s $J.sed
then
	sed '\''s/zz1/\./g'\'' $J.hits|sed -f x$J.sed|sed -f $J.sed|tr $ ~ >$J.nh
else
	sed '\''s/zz1/\./g'\'' $J.hits|sed -f x$J.sed|tr $ ~ >$J.nh
fi
if test $ISTEX -eq 0
then
echo troff file= $F out= $O
awk  -v name=$J.nh '\''
BEGIN	{
	getterm()
	}
/.*/	{
	line = $0
	if(NR >= number){
		putterm()
	}
	print line
	if(line ~ /^\.PS[ ]*</)next
	if(line ~ /^\.[TPI]S/){
		while(getline > 0){
			save=$0
			if($0 ~ /^\.T\&/){
				if(NR >= number)
					putterm()
			}
			print save
			if($0 ~ /^\.([PTI]E)|IF/)break
		}
	}
	if(line ~ /^\.EQ/){
		while(getline > 0){
			print $0
			if($0 ~ /^\.EN/)break
		}
	}
	if(line ~ /^\|begin.figure/){
		while(getline > 0){
			print $0
			if($0 ~ /^\|end.figure/)break
		}
	}
	}
function getterm(){
	if((getline < name)<= 0){
		number += 1000
	}
	else if($0 ~ /^[0-9]/ && NF > 1){
		number = $1
		sub(/^[0-9][0-9]* /,"")
		term = $0
	} else term=$0
}
function putterm(){
	print ".Tm " term
	getterm()
	if(NR >= number){
		while(NR >= number){
			print ".Tm " term
			getterm()
		}
	}
}
'\'' $F >$O
else
sed  '\''s/	/<tab>/g'\'' $J.nh|tr $ ~ >$J.hits
echo tex $F $O
awk  -v name=$J.hits '\''
BEGIN	{
	sawbeg = 0
	getterm()
	}
/\\begin\{document/	{
	sawbeg=1
	print $0
	next
	}
/.*/	{
	line = $0
	if(NR >= number && sawbeg){
		putterm()
	}
	print line
	if(line ~ /\\begin\{eg\}/){
		while(getline > 0){
			print $0
			if($0 ~ /^\\end\{eg\}/)break
		}
	}
	}
function getterm(){
	if((getline < name)<= 0){
		number += 1000
	}
	else if($0 ~ /^[0-9]/ && NF > 1){
		number = $1
		sub(/^[0-9][0-9]* /,"")
		term = $0
	} else term=$0
}
function putterm(){
	print "\\index{" term "}"
	getterm()
	if(NR >= number){
		while(NR >= number){
			print "\\index{" term "}"
			getterm()
		}
	}
}
'\'' $F >$O
fi
rm foo $J.lt $J.hits $J.nh
}

mkindex(){		#uses either $1.x or $2.x to make base.ind
	if test $# -eq 0
	then
		echo mkindex directory file or mkindex file
		exit
	fi
	if test $# -eq 1
	then
	j=`basename $1 .x`
	sed -n "/^\\.XX.*$j/p" ../contents/contents.ms|awk '\''{print $2 >"name"}'\''
	else
	j=`basename $2 .x`
	sed -n "/^\\.XX.*$1\\/$j/p" ../contents/contents.ms|awk '\''{print $2 >"name"}'\''
	fi
	FILE=$j.x
	if test -f $j.sed2
	then
		sed -f $j.sed2 $FILE >x$FILE
		FILE=x$FILE
	fi
S=`cat name`
sed -e "/^[01]	/d" -e "s/ #.*//" -e "s/:/;/g" -e "/^[A-Za-z.]/d" -e "/Examp/d" $FILE|
awk '\''
BEGIN	{FS="	" }
NF==2	{ print str ", " $2 ": " $1
	print $2 ", " str ": " $1
	}
NF==3	{
	if($NF ~ /s/ )print str ", " $2 ": " $1
	else if($NF ~ /[SprtqxyzZY]/ )print str ", " $2 ": " $1 ":" $NF
	else if($NF ~ /[gGPR]/) print $2 ", " str ": " $1 ":" $NF
	else if($NF ~ /[cf]/){
		print str ", " $2 ": " $1 ":" $NF
		print $2 ", " str ": " $1 ":" $NF
	}
	else if($NF ~ /C/){
		print str ", " $2 ": " $1 ":" $NF
		print $2 ", " str ": " $1 
	}
	else print "code undefined:" $NF|"cat 1>&2"
}'\'' str=$S | sort -f -u -t":" +0 -1 +1n |
awk '\''
BEGIN	{FS=":"}
	{ if($1 != laststr){
		if(start){
			if(range)pages = pages "-" npage
			if(global != "")print laststr "," pages "	" global
			else print laststr "," pages
		}
		start=1
		laststr=$1
		global=$3
		pages = " " $2
		npage = 0 + $2
		range=0
	}
	else {
		if($2 == npage+1){
			range=1
			npage++
			next
		}
		else if(range) pages = pages "-" npage "," $2
		else pages = pages "," $2
		npage = 0 + $2
		range = 0
	}
}
END	{
	if(range)pages = pages "-" npage
	if(global != "")print laststr "," pages "	" global
	else print laststr "," pages
	}
'\''|sed -e '\''s/~/\$/g'\'' -e '\''s/;/:/g'\''>$j.ind
rm name $j.x
}'