V10/cmd/mk/src/defns
IND=../index/tools
ENVIRON='runind(){
if test -s $1.ms
then
J=`basename $1 .ms`
F=$1.ms
O=x$1.ms
else if test -s $1.m
then
J=`basename $1 .m`
F=$1.m
O=x$1.m
else if test $1
then
J=$1
F=$1
O=x$1
else
echo $1 not found
exit
fi
fi
fi
tr A-Z a-z <$J.terms|sed "s/\([a-z][a-z/]*\)\.\([a-z][a-z]*\)/\1zz1\2/g"|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][a-z]*\)/\1zz1\2/g $F >foo
$IND/diction -f $J.lt -o $J.hits foo >/dev/null
sed s/zz1/\./g $J.hits|tr $ ~ >$J.nh
mv $J.nh $J.hits
awk -v name=$J.hits
BEGIN {
getterm()
}
/.*/ {
line = $0
if(NR >= number){
putterm()
}
print line
if(line ~ /^\.PS[ ]*</)next
if(line ~ /^\.[TPI]S/){
while(getline > 0){
if($0 ~ /^\.T\&/){
if(NR >= number)
putterm()
}
print $0
if($0 ~ /^\.([PTI]E)|IF/)break
}
}
if(line ~ /^\.EQ/){
while(getline > 0){
print $0
if($0 ~ /^\.EN/)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
rm foo
}
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
S=`cat name`
sed -e "/^0 /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 print $2 ", " str ": " $1
} str=$S | sort -u -t":" +0 -1 +1n |
awk
BEGIN {FS=":"}
{ if($1 != laststr){
if(start){
if(range)pages = pages "-" npage
print laststr "," pages
}
start=1
laststr=$1
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
print laststr "," pages
}
|sed -e s/~/\$/g -e s/!/:/g>$j.ind
}'