"Fossies" - the Fresh Open Source Software Archive

Member "texinfo-6.5/doc/epsf.tex" (22 Apr 2014, 27123 Bytes) of package /linux/misc/texinfo-6.5.tar.xz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) TeX and LaTeX source code syntax highlighting (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file.

    1 %%% -*-TeX-*-
    2 %%% ====================================================================
    3 %%%  @TeX-file{
    4 %%%     author          = "Tom Rokicki",
    5 %%%     version         = "2.7.4",
    6 %%%     date            = "14 February 2011",
    7 %%%     time            = "15:44:06 MST",
    8 %%%     filename        = "epsf.tex",
    9 %%%     address         = "Tom Rokicki
   10 %%%                        Box 2081
   11 %%%                        Stanford, CA 94309
   12 %%%                        USA",
   13 %%%     telephone       = "+1 415 855 9989",
   14 %%%     checksum        = "29223 653 3100 27123",
   15 %%%     email           = "rokicki@cs.stanford.edu (Internet)",
   16 %%%     codetable       = "ISO/ASCII",
   17 %%%     copyright       = "This file is freely redistributable and
   18 %%%                        placed into the public domain by Tomas
   19 %%%                        Rokicki.",
   20 %%%     keywords        = "PostScript, TeX",
   21 %%%     license         = "public domain",
   22 %%%     supported       = "yes",
   23 %%%     abstract        = "This file contains macros to support the
   24 %%%                        inclusion of Encapsulated PostScript files
   25 %%%                        in TeX documents.",
   26 %%%     docstring       = "This file contains TeX macros to include an
   27 %%%                        Encapsulated PostScript graphic.  It works
   28 %%%                        by finding the bounding box comment,
   29 %%%                        calculating the correct scale values, and
   30 %%%                        inserting a vbox of the appropriate size at
   31 %%%                        the current position in the TeX document.
   32 %%%
   33 %%%                        To use, simply use
   34 %%%
   35 %%%                        \input epsf % somewhere early on in your TeX file
   36 %%%
   37 %%%                        % then where you want to insert a vbox for a figure:
   38 %%%                        \epsfbox{filename.ps}
   39 %%%
   40 %%%                        Alternatively, you can supply your own
   41 %%%                        bounding box by
   42 %%%
   43 %%%                        \epsfbox[0 0 30 50]{filename.ps}
   44 %%%
   45 %%%                        This will not read in the file, and will
   46 %%%                        instead use the bounding box you specify.
   47 %%%
   48 %%%                        The effect will be to typeset the figure as
   49 %%%                        a TeX box, at the point of your \epsfbox
   50 %%%                        command. By default, the graphic will have
   51 %%%                        its `natural' width (namely the width of
   52 %%%                        its bounding box, as described in
   53 %%%                        filename.ps). The TeX box will have depth
   54 %%%                        zero.
   55 %%%
   56 %%%                        You can enlarge or reduce the figure by
   57 %%%                        using
   58 %%%
   59 %%%                          \epsfxsize = <dimen> \epsfbox{filename.ps}
   60 %%%                        or
   61 %%%                          \epsfysize = <dimen> \epsfbox{filename.ps}
   62 %%%
   63 %%%                        instead. Then the width of the TeX box will
   64 %%%                        be \epsfxsize and its height will be scaled
   65 %%%                        proportionately (or the height will be
   66 %%%                        \epsfysize and its width will be scaled
   67 %%%                        proportionately).
   68 %%%
   69 %%%                        The width (and height) is restored to zero
   70 %%%                        after each use, so \epsfxsize or \epsfysize
   71 %%%                        must be specified before EACH use of
   72 %%%                        \epsfbox.
   73 %%%
   74 %%%                        A more general facility for sizing is
   75 %%%                        available by defining the \epsfsize macro.
   76 %%%                        Normally you can redefine this macro to do
   77 %%%                        almost anything.  The first parameter is
   78 %%%                        the natural x size of the PostScript
   79 %%%                        graphic, the second parameter is the
   80 %%%                        natural y size of the PostScript graphic.
   81 %%%                        It must return the xsize to use, or 0 if
   82 %%%                        natural scaling is to be used.  Common uses
   83 %%%                        include:
   84 %%%
   85 %%%                           \epsfxsize  % just leave the old value alone
   86 %%%                           0pt         % use the natural sizes
   87 %%%                           #1          % use the natural sizes
   88 %%%                           \hsize      % scale to full width
   89 %%%                           0.5#1       % scale to 50% of natural size
   90 %%%                           \ifnum #1 > \hsize \hsize \else #1\fi
   91 %%%                                       % smaller of natural, hsize
   92 %%%
   93 %%%                        If you want TeX to report the size of the
   94 %%%                        figure (as a message on your terminal when
   95 %%%                        it processes each figure), use
   96 %%%                        `\epsfverbosetrue'.
   97 %%%
   98 %%%                        If you only want to get the bounding box
   99 %%%                        extents, without producing any output boxes
  100 %%%                        or \special{}, then use \epsfgetbb{filename}.
  101 %%%                        The bounding box corner coordinates are saved
  102 %%%                        in the macros \epsfllx, \epsflly, \epsfurx,
  103 %%%                        and \epsfury in PostScript units of big
  104 %%%                        points.
  105 %%%
  106 %%%                        Revision history:
  107 %%%
  108 %%%                        ---------------------------------------------
  109 %%%                        epsf.tex macro file:
  110 %%%                        Originally written by Tomas Rokicki of
  111 %%%                        Radical Eye Software, 29 Mar 1989.
  112 %%%
  113 %%%                        ---------------------------------------------
  114 %%%                        Revised by Don Knuth, 3 Jan 1990.
  115 %%%
  116 %%%                        ---------------------------------------------
  117 %%%                        Revised by Tomas Rokicki, 18 Jul 1990.
  118 %%%                        Accept bounding boxes with no space after
  119 %%%                        the colon.
  120 %%%
  121 %%%                        ---------------------------------------------
  122 %%%                        Revised by Nelson H. F. Beebe
  123 %%%                        <beebe@math.utah.edu>, 03 Dec 1991 [2.0].
  124 %%%                        Add version number and date typeout.
  125 %%%
  126 %%%                        Use \immediate\write16 instead of \message
  127 %%%                        to ensure output on new line.
  128 %%%
  129 %%%                        Handle nested EPS files.
  130 %%%
  131 %%%                        Handle %%BoundingBox: (atend) lines.
  132 %%%
  133 %%%                        Do not quit when blank lines are found.
  134 %%%
  135 %%%                        Add a few percents to remove generation of
  136 %%%                        spurious blank space.
  137 %%%
  138 %%%                        Move \special output to
  139 %%%                        \epsfspecial{filename} so that other macro
  140 %%%                        packages can input this one, then change
  141 %%%                        the definition of \epsfspecial to match
  142 %%%                        another DVI driver.
  143 %%%
  144 %%%                        Move size computation to \epsfsetsize which
  145 %%%                        can be called by the user; the verbose
  146 %%%                        output of the bounding box and scaled width
  147 %%%                        and height happens here.
  148 %%%
  149 %%%                        ---------------------------------------------
  150 %%%                        Revised by Nelson H. F. Beebe
  151 %%%                        <beebe@math.utah.edu>, 05 May 1992 [2.1].
  152 %%%                        Wrap \leavevmode\hbox{} around \vbox{} with
  153 %%%                        the \special so that \epsffile{} can be
  154 %%%                        used inside \begin{center}...\end{center}
  155 %%%
  156 %%%                        ---------------------------------------------
  157 %%%                        Revised by Nelson H. F. Beebe
  158 %%%                        <beebe@math.utah.edu>, 09 Dec 1992 [2.2].
  159 %%%                        Introduce \epsfshow{true,false} and
  160 %%%                        \epsfframe{true,false} macros; the latter
  161 %%%                        suppresses the insertion of the PostScript,
  162 %%%                        and instead just creates an empty box,
  163 %%%                        which may be handy for rapid prototyping.
  164 %%%
  165 %%%                        ---------------------------------------------
  166 %%%                        Revised by Nelson H. F. Beebe
  167 %%%                        <beebe@math.utah.edu>, 14 Dec 1992 [2.3].
  168 %%%                        Add \epsfshowfilename{true,false}.  When
  169 %%%                        true, and \epsfshowfalse is specified, the
  170 %%%                        PostScript file name will be displayed
  171 %%%                        centered in the figure box.
  172 %%%
  173 %%%                        ---------------------------------------------
  174 %%%                        Revised by Nelson H. F. Beebe
  175 %%%                        <beebe@math.utah.edu>, 20 June 1993 [2.4].
  176 %%%                        Remove non-zero debug setting of \epsfframemargin,
  177 %%%                        and change margin handling to preserve EPS image
  178 %%%                        size and aspect ratio, so that the actual
  179 %%%                        box is \epsfxsize+\epsfframemargin wide by
  180 %%%                        \epsfysize+\epsfframemargin high.
  181 %%%                        Reduce output of \epsfshowfilenametrue to
  182 %%%                        just the bare file name.
  183 %%%
  184 %%%                        ---------------------------------------------
  185 %%%                        Revised by Nelson H. F. Beebe
  186 %%%                        <beebe@math.utah.edu>, 13 July 1993 [2.5].
  187 %%%                        Add \epsfframethickness for control of
  188 %%%                        \epsfframe frame lines.
  189 %%%
  190 %%%                        ---------------------------------------------
  191 %%%                        Revised by Nelson H. F. Beebe
  192 %%%                        <beebe@math.utah.edu>, 02 July 1996 [2.6]
  193 %%%                        Add missing initialization \epsfatendfalse;
  194 %%%                        the lack of this resulted in the wrong
  195 %%%                        BoundingBox being picked up, mea culpa, sigh...
  196 %%%
  197 %%%                        ---------------------------------------------
  198 %%%                        Revised by Nelson H. F. Beebe
  199 %%%                        <beebe@math.utah.edu>, 25 October 1996 [2.7]
  200 %%%                        Update to match changes in from dvips 5-600
  201 %%%                        distribution: new user-accessible macros:
  202 %%%                        \epsfclipon, \epsfclipoff, \epsfdrafton,
  203 %%%                        \epsfdraftoff, change \empty to \epsfempty.
  204 %%%
  205 %%%                        ---------------------------------------------
  206 %%%                        Revised by Nelson H. F. Beebe
  207 %%%                        <beebe@math.utah.edu>, 18 May 2002 [2.7.1]
  208 %%%                        Add write statements to echo input file
  209 %%%                        names.  Prior to that change, an error in
  210 %%%                        such a file could be quite hard to track
  211 %%%                        down: a long list of TeX page numbers could
  212 %%%                        suddenly be followed by ``TeX buffer
  213 %%%                        capacity'' exceeded, without any indication
  214 %%%                        of the file that was responsible.
  215 %%%
  216 %%%                        ---------------------------------------------
  217 %%%                        Revised by Nelson H. F. Beebe
  218 %%%                        <beebe@math.utah.edu>, 16 May 2003 [2.7.2]
  219 %%%                        Supply two critical percent characters that
  220 %%%                        were mistakenly omitted in version 2.7.1,
  221 %%%                        and resulted in a small amount of spurious
  222 %%%                        horizontal space.
  223 %%%
  224 %%%                        ---------------------------------------------
  225 %%%                        Revised by Nelson H. F. Beebe
  226 %%%                        <beebe@math.utah.edu>, 14 Feb 2011 [2.7.3]
  227 %%%                        Add previously-missing \space in rwi
  228 %%%                        assignments (bug reported 14-Feb-2011 by
  229 %%%                        Stefan Rueger <s.rueger@open.ac.uk>).
  230 %%%
  231 %%%                        ---------------------------------------------
  232 %%%                        Revised by Nelson H. F. Beebe
  233 %%%                        <beebe@math.utah.edu>, Karl Berry
  234 %%%                        <karl@freefriends.org>, and Robin Fairbairns
  235 %%%                        <Robin.Fairbairns@cl.cam.ac.uk>,
  236 %%%                        23 July 2005 [2.7.3]
  237 %%%                        Add critical \hbox{} wrapper in \epsfsetgraph
  238 %%%                        so that \epsfbox{} does not conflict with
  239 %%%                        LaTeX center environment when \epsfbox{} is
  240 %%%                        surrounded by other horizonal objects.
  241 %%%                        Improve macro readability by adding legal,
  242 %%%                        but invisible-in-typeset-output, spaces.
  243 %%%                        Ensure that verbose status reports come
  244 %%%                        inside (filename ...) list.
  245 %%%
  246 %%%                        ---------------------------------------------
  247 %%%                        The checksum field above contains a CRC-16
  248 %%%                        checksum as the first value, followed by
  249 %%%                        the equivalent of the standard UNIX wc
  250 %%%                        (word count) utility output of lines,
  251 %%%                        words, and characters.  This is produced by
  252 %%%                        Robert Solovay's checksum utility.",
  253 %%%  }
  254 %%% ====================================================================
  255 
  256 %\immediate \write16 {This is `epsf.tex' v2.0 <02 Dec 1991>}%
  257 %\immediate \write16 {This is `epsf.tex' v2.1 <05 May 1992>}%
  258 %\immediate \write16 {This is `epsf.tex' v2.2 <09 Dec 1992>}%
  259 %\immediate \write16 {This is `epsf.tex' v2.3 <14 Dec 1992>}%
  260 %\immediate \write16 {This is `epsf.tex' v2.4 <20 June 1993>}%
  261 %\immediate \write16 {This is `epsf.tex' v2.5 <13 July 1993>}%
  262 %\immediate \write16 {This is `epsf.tex' v2.6 <02 July 1996>}%
  263 %\immediate \write16 {This is `epsf.tex' v2.7 <25 October 1996>}%
  264 %\immediate \write16 {This is `epsf.tex' v2.7.1 <18 May 2002>}%
  265 %\immediate \write16 {This is `epsf.tex' v2.7.2 <16 May 2003>}%
  266 %\immediate \write16 {This is `epsf.tex' v2.7.3 <23 July 2005>}%
  267 \immediate \write16 {This is `epsf.tex' v2.7.4 <14 February 2011>}%
  268 %
  269 \newread \epsffilein    % file to \read
  270 \newif \ifepsfatend     % need to scan to LAST %%BoundingBox comment?
  271 \newif \ifepsfbbfound   % success?
  272 \newif \ifepsfdraft     % use draft mode?
  273 \newif \ifepsffileok    % continue looking for the bounding box?
  274 \newif \ifepsfframe     % frame the bounding box?
  275 \newif \ifepsfshow      % show PostScript file, or just bounding box?
  276 \epsfshowtrue          % default is to display PostScript file
  277 \newif \ifepsfshowfilename % show the file name if \epsfshowfalse specified?
  278 \newif \ifepsfverbose   % report what you're making?
  279 \newdimen \epsfframemargin % margin between box and frame
  280 \newdimen \epsfframethickness % thickness of frame rules
  281 \newdimen \epsfrsize    % vertical size before scaling
  282 \newdimen \epsftmp      % register for arithmetic manipulation
  283 \newdimen \epsftsize    % horizontal size before scaling
  284 \newdimen \epsfxsize    % horizontal size after scaling
  285 \newdimen \epsfysize    % vertical size after scaling
  286 \newdimen \pspoints     % conversion factor
  287 %
  288 \pspoints = 1bp        % Adobe points are `big'
  289 \epsfxsize = 0pt       % default value, means `use natural size'
  290 \epsfysize = 0pt       % ditto
  291 \epsfframemargin = 0pt % default value: frame box flush around picture
  292 \epsfframethickness = 0.4pt % TeX's default rule thickness
  293 %
  294 \def \epsfbox #1{%
  295     \global \def \epsfllx {72}%
  296     \global \def \epsflly {72}%
  297     \global \def \epsfurx {540}%
  298     \global \def \epsfury {720}%
  299     \def \lbracket {[}%
  300     \def \testit {#1}%
  301     \ifx \testit \lbracket
  302         \let \next = \epsfgetlitbb
  303     \else
  304         \let \next = \epsfnormal
  305     \fi
  306     \next{#1}%
  307 }%
  308 %
  309 % We use \epsfgetlitbb if the user specified an explicit bounding box,
  310 % and \epsfnormal otherwise.  Because \epsfgetbb can be called
  311 % separately to retrieve the bounding box, we move the verbose
  312 % printing the bounding box extents and size on the terminal to
  313 % \epsfstatus.  Therefore, when the user provided the bounding box,
  314 % \epsfgetbb will not be called, so we must call \epsfsetsize and
  315 % \epsfstatus ourselves.
  316 %
  317 \def \epsfgetlitbb #1#2 #3 #4 #5]#6{%
  318    \epsfgrab #2 #3 #4 #5 .\\%
  319    \epsfsetsize
  320    \epsfstatus{#6}%
  321    \epsfsetgraph{#6}%
  322 }%
  323 %
  324 \def \epsfnormal #1{%
  325     \epsfgetbb{#1}%
  326     \epsfsetgraph{#1}%
  327 }%
  328 %
  329 \def \epsfgetbb #1{%
  330 %
  331 %   The first thing we need to do is to open the
  332 %   PostScript file, if possible.
  333 %
  334     \openin\epsffilein=#1
  335     \immediate \write16 {(#1}%
  336     \ifeof \epsffilein
  337         \errmessage{Could not open file #1, ignoring it}%
  338     \else                       %process the file
  339         {%                      %start a group to contain catcode changes
  340             % Make all special characters, except space, to be of type
  341             % `other' so we process the file in almost verbatim mode
  342             % (TeXbook, p. 344).
  343             \chardef \other = 12%
  344             \def \do ##1{\catcode`##1=\other}%
  345             \dospecials
  346             \catcode `\ = 10%
  347             \epsffileoktrue        %true while we are looping
  348             \epsfatendfalse        %[02-Jul-1996]: add forgotten initialization
  349             \loop                  %reading lines from the EPS file
  350                 \read \epsffilein to \epsffileline
  351                 \ifeof \epsffilein %then no more input
  352                 \epsffileokfalse   %so set completion flag
  353             \else                  %otherwise process one line
  354                 \expandafter \epsfaux \epsffileline :. \\%
  355             \fi
  356             \ifepsffileok
  357             \repeat
  358             \ifepsfbbfound
  359             \else
  360                 \ifepsfverbose
  361                     \immediate \write16 {No BoundingBox comment found in %
  362                                          file #1; using defaults}%
  363                 \fi
  364             \fi
  365         }%                      %end catcode changes
  366         \closein\epsffilein
  367     \fi                         %end of file processing
  368     \epsfsetsize                %compute size parameters
  369     \epsfstatus{#1}%
  370     \immediate \write16 {)}%
  371 }%
  372 %
  373 % Clipping control:
  374 \def \epsfclipon  {\def \epsfclipstring { clip}}%
  375 \def \epsfclipoff {\def \epsfclipstring {\ifepsfdraft \space clip\fi}}%
  376 \epsfclipoff % default for dvips is OFF
  377 %
  378 % The special that is emitted by \epsfsetgraph comes from this macro.
  379 % It is defined separately to allow easy customization by other
  380 % packages that first \input epsf.tex, then redefine \epsfspecial.
  381 % This macro is invoked in the lower-left corner of a box of the
  382 % width and height determined from the arguments to \epsffile, or
  383 % from the %%BoundingBox in the EPS file itself.
  384 %
  385 % This version is for dvips:
  386 \def \epsfspecial #1{%
  387      \epsftmp=10\epsfxsize
  388      \divide \epsftmp by \pspoints
  389      \ifnum \epsfrsize = 0%
  390        \relax
  391        \special{PSfile=\ifepsfdraft psdraft.ps\else#1\fi\space
  392         llx=\epsfllx\space
  393         lly=\epsflly\space
  394         urx=\epsfurx\space
  395         ury=\epsfury\space
  396         rwi=\number\epsftmp\space
  397         \epsfclipstring
  398                }%
  399      \else
  400        \epsfrsize=10\epsfysize
  401        \divide \epsfrsize by \pspoints
  402        \special{PSfile=\ifepsfdraft psdraft.ps\else#1\fi\space
  403         llx=\epsfllx\space
  404         lly=\epsflly\space
  405         urx=\epsfurx\space
  406         ury=\epsfury\space
  407         rwi=\number\epsftmp\space
  408         rhi=\number\epsfrsize
  409         \epsfclipstring
  410                }%
  411      \fi
  412 }%
  413 %
  414 % \epsfframe macro adapted from the TeXbook, exercise 21.3, p. 223, 331.
  415 % but modified to set the box width to the natural width, rather
  416 % than the line width, and to include space for margins and rules
  417 \def \epsfframe #1%
  418 {%
  419  % method for detecting latex suggested by Robin Fairbairns, May 2005.
  420   \ifx \documentstyle \epsfundefined
  421     \relax
  422   \else
  423 %    \leavevmode                   % so we can put this inside
  424                                   % a latex centered environment
  425     % The \leavevmode breaks under plain when this is inside a box,
  426     % because it forces the figure to be the entire \hsize.  On the
  427     % other hand, we need the \leavevmode for it to work in LaTeX,
  428     % because the {center} environment works by adjusting TeX's
  429     % paragraph parameters.
  430     %
  431     % Compare the LaTeX sequence
  432     % \begin{center}
  433     %   \epsfbox{tip.eps}q
  434     % \end{center}
  435     % (needs the \leavevmode to put the q right next to the image)
  436     %
  437     % with the plain TeX sequence:
  438     % \leftline{\vbox{\epsfbox{tip.eps}}q}
  439     % (had the q all the way over to the right, when \leavevmode was used)
  440   \fi
  441   %
  442   \setbox0 = \hbox{#1}%
  443   \dimen0 = \wd0                                % natural width of argument
  444   \advance \dimen0 by 2\epsfframemargin         % plus width of 2 margins
  445   \advance \dimen0 by 2\epsfframethickness      % plus width of 2 rule lines
  446   \relax
  447   \hbox{%
  448     \vbox
  449     {%
  450       \hrule height \epsfframethickness depth 0pt
  451       \hbox to \dimen0
  452       {%
  453     \hss
  454     \vrule width \epsfframethickness
  455     \kern \epsfframemargin
  456     \vbox {\kern \epsfframemargin \box0 \kern \epsfframemargin }%
  457     \kern \epsfframemargin
  458     \vrule width \epsfframethickness
  459     \hss
  460       }% end hbox
  461       \hrule height 0pt depth \epsfframethickness
  462     }% end vbox
  463   }% end hbox
  464   \relax
  465 }%
  466 %
  467 \def \epsfsetgraph #1%
  468 {%
  469    %
  470    % Make the vbox and stick in a \special that the DVI driver can
  471    % parse.  \vfil and \hfil are used to place the \special origin at
  472    % the lower-left corner of the vbox.  \epsfspecial can be redefined
  473    % to produce alternate \special syntaxes.
  474    %
  475    \ifvmode \leavevmode \fi
  476    \relax
  477    \hbox{% so we can put this in \begin{center}...\end{center}
  478      \ifepsfframe \expandafter \epsfframe \fi
  479      {\vbox to\epsfysize
  480      {%
  481         \ifepsfshow
  482             % output \special{} at lower-left corner of figure box
  483             \vfil
  484             \hbox to \epsfxsize{\epsfspecial{#1}\hfil}%
  485         \else
  486             \vfil
  487             \hbox to\epsfxsize{%
  488                \hss
  489                \ifepsfshowfilename
  490                {%
  491                   \epsfframemargin=3pt % local change of margin
  492                   \epsfframe{{\tt #1}}%
  493                }%
  494                \fi
  495                \hss
  496             }%
  497             \vfil
  498         \fi
  499      }%
  500    }}%
  501    \relax
  502    %
  503    % Reset \epsfxsize and \epsfysize, as documented above.
  504    %
  505    \global \epsfxsize = 0pt
  506    \global \epsfysize = 0pt
  507 }%
  508 %
  509 %   Now we have to calculate the scale and offset values to use.
  510 %   First we compute the natural sizes.
  511 %
  512 \def \epsfsetsize
  513 {%
  514    \epsfrsize = \epsfury \pspoints
  515    \advance \epsfrsize by -\epsflly \pspoints
  516    \epsftsize = \epsfurx \pspoints
  517    \advance \epsftsize by -\epsfllx \pspoints
  518 %
  519 %   If `epsfxsize' is 0, we default to the natural size of the picture.
  520 %   Otherwise we scale the graph to be \epsfxsize wide.
  521 %
  522    \epsfxsize = \epsfsize{\epsftsize}{\epsfrsize}%
  523    \ifnum \epsfxsize = 0
  524       \ifnum \epsfysize = 0
  525     \epsfxsize = \epsftsize
  526         \epsfysize = \epsfrsize
  527     \epsfrsize = 0pt
  528 %
  529 %   We have a sticky problem here:  TeX doesn't do floating point arithmetic!
  530 %   Our goal is to compute y = rx/t. The following loop does this reasonably
  531 %   fast, with an error of at most about 16 sp (about 1/4000 pt).
  532 %
  533       \else
  534     \epsftmp = \epsftsize
  535         \divide \epsftmp by \epsfrsize
  536     \epsfxsize = \epsfysize
  537         \multiply \epsfxsize by \epsftmp
  538     \multiply \epsftmp by \epsfrsize
  539         \advance \epsftsize by -\epsftmp
  540     \epsftmp = \epsfysize
  541     \loop
  542         \advance \epsftsize by \epsftsize
  543         \divide \epsftmp by 2
  544     \ifnum \epsftmp > 0
  545        \ifnum \epsftsize < \epsfrsize
  546            \else
  547           \advance \epsftsize -\epsfrsize
  548               \advance \epsfxsize \epsftmp
  549            \fi
  550     \repeat
  551     \epsfrsize = 0pt
  552       \fi
  553    \else
  554      \ifnum \epsfysize = 0
  555        \epsftmp = \epsfrsize
  556        \divide \epsftmp by \epsftsize
  557        \epsfysize = \epsfxsize
  558        \multiply \epsfysize by \epsftmp
  559        \multiply \epsftmp by \epsftsize
  560        \advance \epsfrsize by -\epsftmp
  561        \epsftmp = \epsfxsize
  562        \loop
  563      \advance \epsfrsize by \epsfrsize
  564      \divide \epsftmp by 2
  565        \ifnum \epsftmp > 0
  566       \ifnum \epsfrsize < \epsftsize
  567           \else
  568          \advance \epsfrsize by -\epsftsize
  569              \advance \epsfysize by \epsftmp
  570           \fi
  571        \repeat
  572        \epsfrsize = 0pt
  573      \else
  574        \epsfrsize = \epsfysize
  575      \fi
  576    \fi
  577 }%
  578 %
  579 % Issue some status messages if the user requested them
  580 %
  581 \def \epsfstatus #1{% arg = filename
  582    \ifepsfverbose
  583      \immediate \write16 {#1: BoundingBox:
  584               llx = \epsfllx \space lly = \epsflly \space
  585               urx = \epsfurx \space ury = \epsfury \space}%
  586      \immediate \write16 {#1: scaled width = \the\epsfxsize \space
  587               scaled height = \the\epsfysize}%
  588    \fi
  589 }%
  590 %
  591 %   We still need to define the tricky \epsfaux macro. This requires
  592 %   a couple of magic constants for comparison purposes.
  593 %
  594 {\catcode`\%=12 \global \let \epsfpercent=%\global \def \epsfbblit {%BoundingBox}}%
  595 \global \def \epsfatend{(atend)}%
  596 %
  597 %   So we're ready to check for `%BoundingBox:' and to grab the
  598 %   values if they are found.
  599 %
  600 %   If we find a line
  601 %
  602 %   %%BoundingBox: (atend)
  603 %
  604 %   then we ignore it, but set a flag to force parsing all of the
  605 %   file, so the last %%BoundingBox parsed will be the one used.  This
  606 %   is necessary, because EPS files can themselves contain other EPS
  607 %   files with their own %%BoundingBox comments.
  608 %
  609 %   If we find a line
  610 %
  611 %   %%BoundingBox: llx lly urx ury
  612 %
  613 %   then we save the 4 values in \epsfllx, \epsflly, \epsfurx, \epsfury.
  614 %   Then, if we have not previously parsed an (atend), we flag completion
  615 %   and can stop reading the file.  Otherwise, we must keep on reading
  616 %   to end of file so that we find the values on the LAST %%BoundingBox.
  617 \long \def \epsfaux#1#2:#3\\%
  618 {%
  619    \def \testit {#2}%           % save second character up to just before colon
  620    \ifx#1\epsfpercent           % then first char is percent (quick test)
  621        \ifx \testit \epsfbblit  % then (slow test) we have %%BoundingBox
  622             \epsfgrab #3 . . . \\%
  623             \ifx \epsfllx\epsfatend % then ignore %%BoundingBox: (atend)
  624                 \global \epsfatendtrue
  625             \else               % else found %%BoundingBox: llx lly urx ury
  626                 \ifepsfatend    % then keep parsing ALL %%BoundingBox lines
  627                 \else           % else stop after first one parsed
  628                     \epsffileokfalse
  629                 \fi
  630                 \global \epsfbbfoundtrue
  631             \fi
  632        \fi
  633    \fi
  634 }%
  635 %
  636 %   Here we grab the values and stuff them in the appropriate definitions.
  637 %
  638 \def \epsfempty {}%
  639 \def \epsfgrab #1 #2 #3 #4 #5\\{%
  640    \global \def \epsfllx {#1}\ifx \epsfllx\epsfempty
  641       \epsfgrab #2 #3 #4 #5 .\\\else
  642    \global \def \epsflly {#2}%
  643    \global \def \epsfurx {#3}\global \def \epsfury {#4}\fi
  644 }%
  645 %
  646 %   We default the epsfsize macro.
  647 %
  648 \def \epsfsize #1#2{\epsfxsize}%
  649 %
  650 %   Finally, another definition for compatibility with older macros.
  651 %
  652 \let \epsffile = \epsfbox
  653 \endinput