home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
unix
/
volume24
/
psroff3.0
/
part08
/
audit.S
next >
Wrap
Text File
|
1991-10-09
|
13KB
|
483 lines
%%STARTSHELL%%
# Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991 Chris Lewis
# All Rights Reserved
#
# See the LICENSE file for a full description of the restrictions
# under which this software is provided.
#
#
# Psroff checking script 2.9 91/03/26
chkinst=false
for i
do
case $i in
install)
chkinst=true
;;
*)
printerlist="$printerlist $i"
;;
esac
done
eval "`sed -n -e 's/[()]//g' \
-e 's/^LIBDIR.*=[ ]*/LIBDIR=/p' \
-e 's/^LJF.*=[ ]*/LJF=/p' \
-e 's/^FONTDIR.*=[ ]*/FONTDIR=/p' \
Makefile`"
echo "LIBDIR = $LIBDIR"
echo "LJF = $LJF"
echo "FONTDIR = $FONTDIR"
if [ -z "$FONTDIR" ]
then
echo "ERROR: That's odd, can't find a FONTDIR setting in Makefile"
elif [ ! -d $FONTDIR ]
then
echo "ERROR: That's really odd, no such directory $FONTDIR"
echo " This is where CAT's width tables are supposed to be"
echo " It is usually /usr/lib/font"
FONTDIR=
fi
if [ -z "$LIBDIR" ]
then
echo "ERROR: Bad configuration - no LIBDIR setting"
exit 1
elif [ ! -d $LIBDIR ]
then
echo "INFO: You've not installed psroff yet - no LIBDIR ($LIBDIR) exists"
if $chkinst
then
echo "ERROR: Can't check installed version unless it's installed"
exit 1
fi
fi
if $chkinst
then
psrofflib=$LIBDIR/lib/psrofflib
libbase=$LIBDIR/lib
else
psrofflib=lib/psrofflib
libbase=lib
fi
if grep 'define.*ASCIIWIDTHS' defs.h > /dev/null 2>&1
then
cat <<\!
I see you've defined ASCIIWIDTHS. This means that your trofftype
should be the -F variant. Please ignore the rest of the checking
for trofftype and HEADERSIZE.
!
fi
if [ ! -r $psrofflib ]
then
echo "ERROR: no $psrofflib to check"
exit 1
fi
eval `grep '^troff=' $psrofflib`
echo "INFO: Your troff setting in psrofflib is troff=$troff"
if [ -n "$troff" ]
then
# This should be -x, but Ultrix sh doesn't believe in it
if [ ! -f $troff ]
then
echo "ERROR: troff setting in $psrofflib ($troff) doesn't exist"
troff=
fi
else
mpath=`echo $PATH | sed -e 's/^:/.:/' -e 's/:$/:./' -e 's/:/ /g'`
echo "INFO: Your path is $mpath"
for i in $mpath
do
if [ -f $i/troff ]
then
echo "INFO: Troff appears to be $i/troff"
troff=$i/troff
break
fi
done
if [ -z "$troff" ]
then
echo "ERROR: Can't find troff!"
exit 1
fi
fi
eval `grep '^trofftype=' $psrofflib`
echo "INFO: Your trofftype setting in $psrofflib is trofftype='$trofftype'"
if [ ! -r $FONTDIR/ftR -o ! -r $FONTDIR/ftI -o ! -r $FONTDIR/ftB -o \
! -r $FONTDIR/ftS ]
then
cat <<!
WARNING: Missing one of the $FONTDIR/ft[RIBS] files.
I was hoping that FONTDIR was pointing at the place where
your version of troff keeps its width tables (by default
/usr/lib/font). Since this is not true, I will not be able
to tell with complete accuracy whether your trofftype setting
works. Therefore, take any ERROR messages about trofftype with
a grain of salt. You could always copy widths/widthps/ft[RIBS]
(after make widths) into $FONTDIR, but, I NEED a ftR from
your ORIGINAL troff distribution to test HEADERSIZE properly.
!
fi
if [ -n "$FONTDIR" ]
then
arglist="-F$FONTDIR/./ftXX"
fi
echo hello | $troff > /tmp/out$$ 2> /tmp/err$$
if [ -s /tmp/out$$ ]
then
echo "INFO: You appear to have ditroff - don't forget to use -N in"
echo " psrofflib's t2arg field for your printer configuration,"
echo " and ignore all HEADERSIZE/trofftype comments from here on"
echo " Quitting now - rest of normal checking irrelevant"
echo " If you also have CAT troff installed, alter the first"
echo " troff= assignment in psrofflib to point to it so that"
echo " testing relevant to CAT troff will be performed"
if [ -z "`grep '^#define[ ][ ]*DIT[ ][ ]*/' defs.h`" ]
then
echo "ERROR: You have ditroff, but DIT is undefined!"
exit 1
fi
exit 0
fi
if [ -s /tmp/err$$ ]
then
echo "INFO: You appear to have CAT troff - pay special attention to"
echo " the HEADERSIZE/trofftype settings"
fi
if [ '(' -s /tmp/out$$ -a -s /tmp/err$$ ')' -o \
'(' -s /tmp/out$$ -a -s /tmp/err$$ ')' ]
then
echo "WHA? Your troff doesn't seem to be either CAT troff or ditroff."
echo " Good luck."
fi
for i in $arglist -T. ''
do
echo "INFO: Testing '$i' trofftype setting"
$troff -t $i < /dev/null > /dev/null
rc=$?
if [ $rc = 0 ]
then
echo "... $i worked"
case $i in
-F*)
workingtype="-F$FONTDIR/\$width/ftXX"
;;
-T*)
if [ -n "$FONTDIR" -a "$FONTDIR" != /usr/lib/font ]
then
echo "ERROR: FONTDIR must be /usr/lib/font with this"
echo " type of troff"
fi
workingtype="-T\$width"
;;
*)
echo "INFO: Poor you, your troff doesn't understand -T or -F."
echo " This means that you'll have to put all of your"
echo " width files directly in $FONTDIR, and you'll not"
echo " be able to support multiple sets of width tables"
echo " The OTHER possibility is that you're running"
echo " RISC/Ultrix who's troff cannot even read their"
echo " own width tables! In this case, -F is probably"
echo " the correct form"
workingtype=" "
;;
esac
break
else
echo "... $i didn't work"
fi
done
if [ -z "$workingtype" ]
then
echo "ERROR: Oh my, your troff doesn't seem to work AT ALL!"
echo " It's giving me non-zero return codes when I try"
echo " all of the known different ways of setting width table"
echo " directory (including none!). Egads. Get Help!!!!!!!"
echo " (One possibility is that you have ditroff which doesn't"
echo " understand -t and will not work with psroff)"
exit 1
fi
if [ "$workingtype" != "$trofftype" ]
then
echo "ERROR: You should have trofftype='$workingtype' in $psrofflib"
echo " Psroff won't work AT ALL without this fixed"
else
echo "INFO: Your trofftype setting ($trofftype) appears correct"
fi
if [ ! -r $FONTDIR/ftR ]
then
echo "INFO: There isn't a $FONTDIR/ftR (it should be if you've installed"
echo " Troff on your system. Without it, I can't test HEADERSIZE"
else
hdrsize=`sed -n \
-e 's/^#define[ ]*HEADERSIZE[ ]*\([0-9]*\).*/\1/p' defs.h`
echo "INFO: You have HEADERSIZE defined as $hdrsize"
bytecount=`wc -c $FONTDIR/ftR | sed -e 's/^[ ]*//g' -e 's/[ ].*//`
case $bytecount in
224)
echo "INFO: You appear to have a Xenix-like troff - width tables"
echo " have no extraneous garbage. Lucky you!"
acthdr=0
;;
*)
echo "INFO: H'mm, you don't have a Xenix-like troff - Assuming"
echo " your troff puts a.out.h headers on width tables, I"
echo " will try compiling a teensy program to find out how"
echo " big a.out.h headers actually are...."
cat > AUDITP.c <<\!
#include <a.out.h>
#ifdef X_EXEC
/* Xenix I think.... */
#define HEADERSIZE sizeof(struct xexec)
#endif
#ifdef F_LNNO
/* COFF format headers */
#define HEADERSIZE (-sizeof(struct filehdr))
#endif
#ifndef HEADERSIZE
/* Generalized V7 or BSD - non-coff format headers */
#define HEADERSIZE sizeof(struct exec)
#endif
main() {
printf ("%d\n", HEADERSIZE);
}
!
rm -f AUDITP
if [ -z "$MAKE" ]
then
MAKE=make
fi
$MAKE AUDITP > /dev/null 2>&1
if [ ! -f AUDITP ]
then
echo "INFO: H'm, Wouldn't compile ..."
# Common for 32 bitters (Sun/Ultrix f'r instance)
acthdr=-32
else
acthdr=`./AUDITP`
fi
rm -f AUDITP AUDITP.c
case $acthdr in
-*)
echo 'INFO: The following HEADERSIZE is *purely* a guess:'
acthdr=`echo $acthdr | sed -e 's/-//'`
;;
esac
echo "INFO: It looks like HEADERSIZE should be $acthdr"
;;
esac
if [ "$hdrsize" != "$acthdr" ]
then
echo "ERROR: HEADERSIZE should be set to $acthdr, not $hdrsize"
else
echo "INFO: HEADERSIZE appears to be set correctly to $hdrsize"
fi
fi
Topts="`sed -e '/^[a-zA-Z]/!d' -e '/^troff/d' \
-e '/^trofftype/d' -e 's/[ ].*//' $psrofflib | sort -u`"
echo "INFO: Commencing psrofflib ($psrofflib) checking"
if $chkinst
then
msgtyp='ERROR '
troff2ps=$LIBDIR/troff2ps
else
msgtyp='WARNING'
troff2ps=./troff2ps
fi
if [ ! -f $troff2ps ]
then
echo "WARNING: Can't test drivers, because troff2ps isn't built"
fi
rm -f PRINTERLIST
for type in $Topts
do
troff="<not set>"
trofftype="<not set>"
width="<not set>"
t2arg="<not set>"
lparg="<not set>"
ptr="<not set>"
# If your system has no awk (or a busted one), you may have to
# comment out the "line=`awk ... $psrofflib" lines, and uncomment
# the sed script. If you do, you won't be able to continue
# psrofflib lines, so you'll have to "join" the entries in psrofflib
# (remembering to delete the name fields in the continuation lines).
line=`awk '
$1 ~ /^#/ {next}
$0 ~ /^troff/ { print $0 }
$1 == "'$type'" {
seen=1
print "F='T'" substr($0, length($1) + 1)
next
}
{ if (seen) exit(0) }
' $psrofflib`
eval "$line"
echo "INFO: psroff -T$type settings:"
echo " troff $troff"
echo " trofftype $trofftype"
echo " width $width"
if [ -n "$FONTDIR" -a ! -d $FONTDIR/$width ]
then
echo " * $msgtyp: FONTDIR/$width not installed yet"
echo " psroff -T$width won't work until you do"
fi
if [ ! -d widths/width${width} ]
then
echo " * WARNING: no widths/width${width} directory"
fi
echo " t2arg $t2arg"
drivertype=`echo $t2arg | sed -n -e 's/.*-T\([^ ]*\).*/\1/p'`
printertype=`echo $t2arg | sed -n -e 's/.*-p\([^ ]*\).*/\1/p'`
if [ -z "$drivertype" ]
then
echo " * INFO : no -T in $psrofflib t2arg - assuming ps"
drivertype=ps
fi
if [ -z "$printertype" ]
then
printertype=$drivertype
fi
echo " Driver type: $drivertype, library prefix: $printertype"
if [ -f $troff2ps ]
then
$troff2ps -T$drivertype < /dev/null > /dev/null 2>&1
if [ $? != 0 ]
then
echo " * ERROR : troff2ps driver $drivertype not" \
"configured psroff -T$width will die"
fi
fi
set +x
echo " lparg $lparg"
echo " ptr $ptr"
if [ ! -r $libbase/$printertype.lib ]
then
echo " * WARNING: no $libbase/$printertype.lib (no prolog)"
fi
if [ ! -r $libbase/$printertype.fonts ]
then
echo " * ERROR : Can't find $libbase/$printertype.fonts"
echo " Won't be able to give you list of fonts available"
continue
fi
echo "See $printertype.fonts below for listing of fonts"
echo $printertype >> PRINTERLIST
done
if [ -z "$printerlist" -a -s PRINTERLIST ]
then
printerlist=`sort -u PRINTERLIST`
fi
rm -f PRINTERLIST
for printertype in $printerlist
do
(
if [ -n "$FONTDIR" -a -d "$FONTDIR/$printertype" ]
then
ls $FONTDIR/$printertype | sed -n -e 's/^.*ft//p' | sort -u
fi
echo "troff2ps"
cat $libbase/$printertype.fonts
) | awk '
BEGIN {
fontdir = "'"$FONTDIR"'"
printertype = "'"$printertype"'"
catfonts[""] = 0
fonts[""] = 0
printf("\n\nPrinter type %s.fonts\n\n", printertype);
printf("%-4s %-20s %-25s %s\n", "Cat", "English Name", "Sequence", \
"Flags");
printf("Name\n\n");
ignoring = 0
}
$1 == "troff2ps" {
startlisting = 1;
next
}
$1 == "normal" || $1 == "symbol" {
ignoring = 1
}
$1 !~ /^[A-Za-z][A-Za-z]*/ {
next
}
NF >= 1 {
if (ignoring)
next
if (startlisting) {
english = ""
sequence = ""
flags = ""
name = $1
if (NF > 1)
english = $2
if (NF > 2)
sequence = $3
if (NF > 3)
flags = $4
printf("%-4s %-20s %-25s %s\n", name, english, sequence, flags);
fonts[name] = 1
} else {
catfonts[$1] = 1
ftdirfound = 1
}
}
END {
if (ftdirfound) {
for (name in fonts) {
if (name && !catfonts[name])
printf(" FONT %s: do not use: %s/%s/ft%s not installed\n",\
name, fontdir, printertype, name);
}
}
for (name in catfonts) {
if (name && !fonts[name]) {
printf(" FONT %s: do not use: %s/%s/ft%s exists, but", \
name, fontdir, printertype, name)
printf(" not in %s.fonts\n", printertype)
}
}
}'
if [ -n "$LJF" -a -d "$LJF" -a "$printertype" = lj ]
then
echo "I'm checking $printertype.fonts file for missing font"
echo "files, please have patience"
sed -e '/^[A-Za-z][A-Za-z]*/!d' $libbase/$printertype.fonts |
while read troffname english sequence flags
do
for i in 6 7 8 9 10 11 12 14 16 18 20 22 24 28 36
do
suffix=
case $flags in
n* | b*) ;;
p*)
suffix=pk
;;
s*)
suffix=sfp
;;
esac
if [ -n "$suffix" -a ! -r $LJF/$troffname.$i.$suffix ]
then
echo "ERROR: $LJF/$troffname.$i.$suffix missing"
fi
flags=`echo $flags | sed -e 's/.\(.*\)/\1/'`
done
done
fi
done