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
}'