home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume24 / psroff3.0 / part08 / audit.S next >
Text File  |  1991-10-09  |  13KB  |  483 lines

  1. %%STARTSHELL%%
  2. #    Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991 Chris Lewis
  3. #        All Rights Reserved
  4. #
  5. #    See the LICENSE file for a full description of the restrictions
  6. #    under which this software is provided.
  7. #
  8. #
  9. #    Psroff checking script 2.9 91/03/26
  10. chkinst=false
  11. for i
  12. do
  13.     case $i in
  14.     install)
  15.         chkinst=true
  16.         ;;
  17.     *)
  18.         printerlist="$printerlist $i"
  19.         ;;
  20.     esac
  21. done
  22. eval "`sed -n -e 's/[()]//g' \
  23.           -e 's/^LIBDIR.*=[     ]*/LIBDIR=/p' \
  24.           -e 's/^LJF.*=[     ]*/LJF=/p' \
  25.           -e 's/^FONTDIR.*=[     ]*/FONTDIR=/p' \
  26.          Makefile`"
  27. echo "LIBDIR  = $LIBDIR"
  28. echo "LJF     = $LJF"
  29. echo "FONTDIR = $FONTDIR"
  30. if [ -z "$FONTDIR" ]
  31. then
  32.     echo "ERROR: That's odd, can't find a FONTDIR setting in Makefile"
  33. elif [ ! -d $FONTDIR ]
  34. then
  35.     echo "ERROR: That's really odd, no such directory $FONTDIR"
  36.     echo "       This is where CAT's width tables are supposed to be"
  37.     echo "       It is usually /usr/lib/font"
  38.     FONTDIR=
  39. fi
  40. if [ -z "$LIBDIR" ]
  41. then
  42.     echo "ERROR: Bad configuration - no LIBDIR setting"
  43.     exit 1
  44. elif [ ! -d $LIBDIR ]
  45. then
  46.     echo "INFO: You've not installed psroff yet - no LIBDIR ($LIBDIR) exists"
  47.     if $chkinst
  48.     then
  49.     echo "ERROR: Can't check installed version unless it's installed"
  50.     exit 1
  51.     fi
  52. fi
  53.  
  54. if $chkinst
  55. then
  56.     psrofflib=$LIBDIR/lib/psrofflib
  57.     libbase=$LIBDIR/lib
  58. else
  59.     psrofflib=lib/psrofflib
  60.     libbase=lib
  61. fi
  62. if grep 'define.*ASCIIWIDTHS' defs.h > /dev/null 2>&1
  63. then
  64.     cat <<\!
  65. I see you've defined ASCIIWIDTHS.  This means that your trofftype
  66. should be the -F variant.  Please ignore the rest of the checking
  67. for trofftype and HEADERSIZE.
  68. !
  69. fi
  70.  
  71. if [ ! -r $psrofflib ]
  72. then
  73.     echo "ERROR: no $psrofflib to check"
  74.     exit 1
  75. fi
  76.  
  77. eval `grep '^troff=' $psrofflib`
  78. echo "INFO: Your troff setting in psrofflib is troff=$troff"
  79. if [ -n "$troff" ]
  80. then
  81.     # This should be -x, but Ultrix sh doesn't believe in it
  82.     if [ ! -f $troff ]
  83.     then
  84.     echo "ERROR: troff setting in $psrofflib ($troff) doesn't exist"
  85.     troff=
  86.     fi
  87. else
  88.     mpath=`echo $PATH | sed -e 's/^:/.:/' -e 's/:$/:./' -e 's/:/ /g'`
  89.     echo "INFO: Your path is $mpath"
  90.     for i in $mpath
  91.     do
  92.     if [ -f $i/troff ]
  93.     then
  94.         echo "INFO: Troff appears to be $i/troff"
  95.         troff=$i/troff
  96.         break
  97.     fi
  98.     done
  99.     if [ -z "$troff" ]
  100.     then
  101.     echo "ERROR: Can't find troff!"
  102.     exit 1
  103.     fi
  104. fi
  105.  
  106. eval `grep '^trofftype=' $psrofflib`
  107. echo "INFO: Your trofftype setting in $psrofflib is trofftype='$trofftype'"
  108.  
  109. if [ ! -r $FONTDIR/ftR -o ! -r $FONTDIR/ftI -o ! -r $FONTDIR/ftB -o \
  110.     ! -r $FONTDIR/ftS ]
  111. then
  112. cat <<!
  113. WARNING: Missing one of the $FONTDIR/ft[RIBS] files.
  114.     I was hoping that FONTDIR was pointing at the place where
  115.     your version of troff keeps its width tables (by default
  116.     /usr/lib/font).  Since this is not true, I will not be able
  117.     to tell with complete accuracy whether your trofftype setting
  118.     works.  Therefore, take any ERROR messages about trofftype with
  119.     a grain of salt.  You could always copy widths/widthps/ft[RIBS]
  120.     (after make widths) into $FONTDIR, but, I NEED a ftR from
  121.     your ORIGINAL troff distribution to test HEADERSIZE properly.
  122. !
  123. fi
  124.  
  125. if [ -n "$FONTDIR" ]
  126. then
  127.     arglist="-F$FONTDIR/./ftXX"
  128. fi
  129.  
  130. echo hello | $troff > /tmp/out$$ 2> /tmp/err$$
  131. if [ -s /tmp/out$$ ]
  132. then
  133.     echo "INFO: You appear to have ditroff - don't forget to use -N in"
  134.     echo "      psrofflib's t2arg field for your printer configuration,"
  135.     echo "      and ignore all HEADERSIZE/trofftype comments from here on"
  136.     echo "      Quitting now - rest of normal checking irrelevant"
  137.     echo "      If you also have CAT troff installed, alter the first"
  138.     echo "      troff= assignment in psrofflib to point to it so that"
  139.     echo "      testing relevant to CAT troff will be performed"
  140.     if [ -z "`grep '^#define[     ][     ]*DIT[     ][     ]*/' defs.h`" ]
  141.     then
  142.     echo "ERROR: You have ditroff, but DIT is undefined!"
  143.     exit 1
  144.     fi
  145.     exit 0
  146. fi
  147. if [ -s /tmp/err$$ ]
  148. then
  149.     echo "INFO: You appear to have CAT troff - pay special attention to"
  150.     echo "      the HEADERSIZE/trofftype settings"
  151. fi
  152.  
  153. if [ '(' -s /tmp/out$$ -a -s /tmp/err$$ ')' -o \
  154.      '(' -s /tmp/out$$ -a -s /tmp/err$$ ')' ]
  155. then
  156.     echo "WHA?  Your troff doesn't seem to be either CAT troff or ditroff."
  157.     echo "      Good luck."
  158. fi
  159.  
  160.  
  161. for i in $arglist -T. ''
  162. do
  163.     echo "INFO: Testing '$i' trofftype setting"
  164.     $troff -t $i < /dev/null > /dev/null
  165.     rc=$?
  166.     if [ $rc = 0 ]
  167.     then
  168.     echo "... $i worked"
  169.     case $i in
  170.         -F*)
  171.         workingtype="-F$FONTDIR/\$width/ftXX"
  172.         ;;
  173.         -T*)
  174.         if [ -n "$FONTDIR" -a "$FONTDIR" != /usr/lib/font ]
  175.         then
  176.             echo "ERROR: FONTDIR must be /usr/lib/font with this"
  177.             echo "       type of troff"
  178.         fi
  179.         workingtype="-T\$width"
  180.         ;;
  181.         *)
  182.         echo "INFO: Poor you, your troff doesn't understand -T or -F."
  183.         echo "      This means that you'll have to put all of your"
  184.         echo "      width files directly in $FONTDIR, and you'll not"
  185.         echo "      be able to support multiple sets of width tables"
  186.         echo "      The OTHER possibility is that you're running"
  187.         echo "      RISC/Ultrix who's troff cannot even read their"
  188.         echo "      own width tables!  In this case, -F is probably"
  189.         echo "      the correct form"
  190.         workingtype=" "
  191.         ;;
  192.     esac
  193.     break
  194.     else
  195.     echo "... $i didn't work"
  196.     fi
  197. done
  198. if [ -z "$workingtype" ]
  199. then
  200.     echo "ERROR: Oh my, your troff doesn't seem to work AT ALL!"
  201.     echo "       It's giving me non-zero return codes when I try"
  202.     echo "       all of the known different ways of setting width table"
  203.     echo "       directory (including none!).  Egads.  Get Help!!!!!!!"
  204.     echo "       (One possibility is that you have ditroff which doesn't"
  205.     echo "       understand -t and will not work with psroff)"
  206.     exit 1
  207. fi
  208.  
  209. if [ "$workingtype" != "$trofftype" ]
  210. then
  211.     echo "ERROR: You should have trofftype='$workingtype' in $psrofflib"
  212.     echo "       Psroff won't work AT ALL without this fixed"
  213. else
  214.     echo "INFO: Your trofftype setting ($trofftype) appears correct"
  215. fi
  216.  
  217. if [ ! -r $FONTDIR/ftR ]
  218. then
  219.     echo "INFO: There isn't a $FONTDIR/ftR (it should be if you've installed"
  220.     echo "      Troff on your system.  Without it, I can't test HEADERSIZE"
  221. else
  222.     hdrsize=`sed -n \
  223.     -e 's/^#define[     ]*HEADERSIZE[     ]*\([0-9]*\).*/\1/p' defs.h`
  224.     echo "INFO: You have HEADERSIZE defined as $hdrsize"
  225.     bytecount=`wc -c $FONTDIR/ftR | sed -e 's/^[     ]*//g' -e 's/[     ].*//`
  226.     case $bytecount in
  227.     224)
  228.         echo "INFO: You appear to have a Xenix-like troff - width tables"
  229.         echo "      have no extraneous garbage.  Lucky you!"
  230.         acthdr=0
  231.         ;;
  232.     *)
  233.         echo "INFO: H'mm, you don't have a Xenix-like troff - Assuming"
  234.         echo "      your troff puts a.out.h headers on width tables, I"
  235.         echo "      will try compiling a teensy program to find out how"
  236.         echo "      big a.out.h headers actually are...."
  237.         cat > AUDITP.c <<\!
  238. #include <a.out.h>
  239. #ifdef    X_EXEC
  240. /*    Xenix I think.... */
  241. #define    HEADERSIZE sizeof(struct xexec)
  242. #endif
  243. #ifdef    F_LNNO
  244. /*    COFF format headers */
  245. #define    HEADERSIZE (-sizeof(struct filehdr))
  246. #endif
  247. #ifndef HEADERSIZE
  248. /*    Generalized V7 or BSD - non-coff format headers */
  249. #define    HEADERSIZE sizeof(struct exec)
  250. #endif
  251. main() {
  252. printf ("%d\n", HEADERSIZE);
  253. }
  254. !
  255.         rm -f AUDITP
  256.         if [ -z "$MAKE" ]
  257.         then
  258.         MAKE=make
  259.         fi
  260.         $MAKE AUDITP > /dev/null 2>&1
  261.         if [ ! -f AUDITP ]
  262.         then
  263.         echo "INFO: H'm, Wouldn't compile ..."
  264.         #    Common for 32 bitters (Sun/Ultrix f'r instance)
  265.         acthdr=-32
  266.         else
  267.         acthdr=`./AUDITP`
  268.         fi
  269.         rm -f AUDITP AUDITP.c
  270.         case $acthdr in
  271.         -*)
  272.             echo 'INFO: The following HEADERSIZE is *purely* a guess:'
  273.             acthdr=`echo $acthdr | sed -e 's/-//'`
  274.             ;;
  275.         esac
  276.         echo "INFO: It looks like HEADERSIZE should be $acthdr"
  277.         ;;
  278.     esac
  279.     if [ "$hdrsize" != "$acthdr" ]
  280.     then
  281.     echo "ERROR: HEADERSIZE should be set to $acthdr, not $hdrsize"
  282.     else
  283.     echo "INFO: HEADERSIZE appears to be set correctly to $hdrsize"
  284.     fi
  285. fi
  286.  
  287. Topts="`sed -e '/^[a-zA-Z]/!d' -e '/^troff/d' \
  288.     -e '/^trofftype/d' -e 's/[     ].*//' $psrofflib | sort -u`"
  289. echo "INFO: Commencing psrofflib ($psrofflib) checking"
  290. if $chkinst
  291. then
  292.     msgtyp='ERROR  '
  293.     troff2ps=$LIBDIR/troff2ps
  294. else
  295.     msgtyp='WARNING'
  296.     troff2ps=./troff2ps
  297. fi
  298.  
  299. if [ ! -f $troff2ps ]
  300. then
  301.     echo "WARNING: Can't test drivers, because troff2ps isn't built"
  302. fi
  303. rm -f PRINTERLIST
  304.  
  305. for type in $Topts
  306. do
  307.     troff="<not set>"
  308.     trofftype="<not set>"
  309.     width="<not set>"
  310.     t2arg="<not set>"
  311.     lparg="<not set>"
  312.     ptr="<not set>"
  313. #    If your system has no awk (or a busted one), you may have to
  314. #    comment out the "line=`awk ... $psrofflib" lines, and uncomment
  315. #    the sed script.  If you do, you won't be able to continue
  316. #    psrofflib lines, so you'll have to "join" the entries in psrofflib
  317. #    (remembering to delete the name fields in the continuation lines).
  318.     line=`awk '
  319.     $1 ~ /^#/ {next}
  320.     $0 ~ /^troff/ { print $0 }
  321.     $1 == "'$type'" {
  322.         seen=1
  323.         print "F='T'" substr($0, length($1) + 1)
  324.         next
  325.     }
  326.     { if (seen) exit(0) }
  327.     ' $psrofflib`
  328.     eval "$line"
  329.     echo "INFO: psroff -T$type settings:"
  330.     echo "      troff      $troff"
  331.     echo "      trofftype  $trofftype"
  332.     echo "      width      $width"
  333.     if [ -n "$FONTDIR" -a ! -d $FONTDIR/$width ]
  334.     then
  335.     echo "   * $msgtyp: FONTDIR/$width not installed yet"
  336.     echo "              psroff -T$width won't work until you do"
  337.     fi
  338.     if [ ! -d widths/width${width} ]
  339.     then
  340.     echo "   * WARNING: no widths/width${width} directory"
  341.     fi
  342.     echo "      t2arg      $t2arg"
  343.     drivertype=`echo $t2arg | sed -n -e 's/.*-T\([^     ]*\).*/\1/p'`
  344.     printertype=`echo $t2arg | sed -n -e 's/.*-p\([^     ]*\).*/\1/p'`
  345.     if [ -z "$drivertype" ]
  346.     then
  347.     echo "   * INFO   : no -T in $psrofflib t2arg - assuming ps"
  348.     drivertype=ps
  349.     fi
  350.     if [ -z "$printertype" ]
  351.     then
  352.     printertype=$drivertype
  353.     fi
  354.     echo "          Driver type: $drivertype, library prefix: $printertype"
  355.     if [ -f $troff2ps ]
  356.     then
  357.     $troff2ps -T$drivertype < /dev/null > /dev/null 2>&1
  358.     if [ $? != 0 ]
  359.     then
  360.         echo "   * ERROR  : troff2ps driver $drivertype not" \
  361.         "configured psroff -T$width will die"
  362.     fi
  363.     fi
  364.     set +x
  365.     echo "      lparg      $lparg"
  366.     echo "      ptr        $ptr"
  367.     if [ ! -r $libbase/$printertype.lib ]
  368.     then
  369.     echo "   * WARNING: no $libbase/$printertype.lib (no prolog)"
  370.     fi
  371.     if [ ! -r $libbase/$printertype.fonts ]
  372.     then
  373.     echo "   * ERROR  : Can't find $libbase/$printertype.fonts"
  374.     echo "              Won't be able to give you list of fonts available"
  375.     continue
  376.     fi
  377.     echo "See $printertype.fonts below for listing of fonts"
  378.     echo $printertype >> PRINTERLIST
  379. done
  380.  
  381. if [ -z "$printerlist" -a -s PRINTERLIST ]
  382. then
  383.     printerlist=`sort -u PRINTERLIST`
  384. fi
  385. rm -f PRINTERLIST
  386.  
  387. for printertype in $printerlist
  388. do
  389.     (
  390.     if [ -n "$FONTDIR" -a -d "$FONTDIR/$printertype" ]
  391.     then
  392.         ls $FONTDIR/$printertype | sed -n -e 's/^.*ft//p' | sort -u
  393.     fi
  394.     echo "troff2ps"
  395.     cat $libbase/$printertype.fonts
  396.     ) | awk '
  397.     BEGIN {
  398.     fontdir = "'"$FONTDIR"'"
  399.     printertype = "'"$printertype"'"
  400.     catfonts[""] = 0
  401.     fonts[""] = 0
  402.     printf("\n\nPrinter type %s.fonts\n\n", printertype);
  403.     printf("%-4s %-20s %-25s %s\n", "Cat", "English Name", "Sequence", \
  404.         "Flags");
  405.     printf("Name\n\n");
  406.     ignoring = 0
  407.     }
  408.     $1 == "troff2ps" {
  409.     startlisting = 1;
  410.     next
  411.     }
  412.     $1 == "normal" || $1 == "symbol" {
  413.     ignoring = 1
  414.     }
  415.     $1 !~ /^[A-Za-z][A-Za-z]*/ {
  416.     next
  417.     }
  418.     NF >= 1 {
  419.     if (ignoring)
  420.         next
  421.     if (startlisting) {
  422.         english = ""
  423.         sequence = ""
  424.         flags = ""
  425.         name = $1
  426.         if (NF > 1)
  427.         english = $2
  428.         if (NF > 2)
  429.         sequence = $3
  430.         if (NF > 3)
  431.         flags = $4
  432.         printf("%-4s %-20s %-25s %s\n", name, english, sequence, flags);
  433.         fonts[name] = 1
  434.     } else {
  435.         catfonts[$1] = 1
  436.         ftdirfound = 1
  437.     }
  438.     }
  439.     END {
  440.     if (ftdirfound) {
  441.         for (name in fonts) {
  442.         if (name && !catfonts[name])
  443.             printf("  FONT %s: do not use: %s/%s/ft%s not installed\n",\
  444.             name, fontdir, printertype, name);
  445.         }
  446.     }
  447.     for (name in catfonts) {
  448.         if (name && !fonts[name]) {
  449.         printf("  FONT %s: do not use: %s/%s/ft%s exists, but", \
  450.             name, fontdir, printertype, name)
  451.         printf(" not in %s.fonts\n", printertype)
  452.         }
  453.     }
  454.     }'
  455.     if [ -n "$LJF" -a -d "$LJF" -a "$printertype" = lj ]
  456.     then
  457.     echo "I'm checking $printertype.fonts file for missing font"
  458.     echo "files, please have patience"
  459.     sed -e '/^[A-Za-z][A-Za-z]*/!d' $libbase/$printertype.fonts |
  460.         while read troffname english sequence flags
  461.         do
  462.             for i in 6 7 8 9 10 11 12 14 16 18 20 22 24 28 36
  463.         do
  464.             suffix=
  465.             case $flags in
  466.             n* | b*) ;;
  467.             p*)
  468.                 suffix=pk
  469.                 ;;
  470.             s*)
  471.                 suffix=sfp
  472.                 ;;
  473.             esac
  474.             if [ -n "$suffix" -a ! -r $LJF/$troffname.$i.$suffix ]
  475.             then
  476.             echo "ERROR: $LJF/$troffname.$i.$suffix missing"
  477.             fi
  478.             flags=`echo $flags | sed -e 's/.\(.*\)/\1/'`
  479.         done
  480.         done
  481.     fi
  482. done
  483.