]> git.ipfire.org Git - thirdparty/gnulib.git/commitdiff
epsf.tex: New file.
authorBruno Haible <bruno@clisp.org>
Mon, 14 Jul 2025 03:07:58 +0000 (05:07 +0200)
committerBruno Haible <bruno@clisp.org>
Mon, 14 Jul 2025 05:32:19 +0000 (07:32 +0200)
* build-aux/epsf.tex: New file, from
texlive/texmf-dist/tex/generic/epsf/epsf.tex.

ChangeLog
build-aux/epsf.tex [new file with mode: 0644]

index 059e40489f7c7194c9396e63d3850e282153b190..7c15d420da1cd3bd4c02dd899887c88eef6a44f5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2025-07-14  Bruno Haible  <bruno@clisp.org>
+
+       epsf.tex: New file.
+       * build-aux/epsf.tex: New file, from
+       texlive/texmf-dist/tex/generic/epsf/epsf.tex.
+
 2025-07-13  Bruno Haible  <bruno@clisp.org>
 
        javacomp-script, javacomp: Remove support for javac versions < 1.8.
diff --git a/build-aux/epsf.tex b/build-aux/epsf.tex
new file mode 100644 (file)
index 0000000..847de77
--- /dev/null
@@ -0,0 +1,653 @@
+%%% -*-TeX-*-
+%%% ====================================================================
+%%%  @TeX-file{
+%%%     author          = "Tom Rokicki",
+%%%     version         = "2.7.4",
+%%%     date            = "14 February 2011",
+%%%     time            = "15:44:06 MST",
+%%%     filename        = "epsf.tex",
+%%%     address         = "Tom Rokicki
+%%%                        Box 2081
+%%%                        Stanford, CA 94309
+%%%                        USA",
+%%%     telephone       = "+1 415 855 9989",
+%%%     checksum        = "29223 653 3100 27123",
+%%%     email           = "rokicki@cs.stanford.edu (Internet)",
+%%%     codetable       = "ISO/ASCII",
+%%%     copyright       = "This file is freely redistributable and
+%%%                        placed into the public domain by Tomas
+%%%                        Rokicki.",
+%%%     keywords        = "PostScript, TeX",
+%%%     license         = "public domain",
+%%%     supported       = "yes",
+%%%     abstract        = "This file contains macros to support the
+%%%                        inclusion of Encapsulated PostScript files
+%%%                        in TeX documents.",
+%%%     docstring       = "This file contains TeX macros to include an
+%%%                        Encapsulated PostScript graphic.  It works
+%%%                        by finding the bounding box comment,
+%%%                        calculating the correct scale values, and
+%%%                        inserting a vbox of the appropriate size at
+%%%                        the current position in the TeX document.
+%%%
+%%%                        To use, simply use
+%%%
+%%%                        \input epsf % somewhere early on in your TeX file
+%%%
+%%%                        % then where you want to insert a vbox for a figure:
+%%%                        \epsfbox{filename.ps}
+%%%
+%%%                        Alternatively, you can supply your own
+%%%                        bounding box by
+%%%
+%%%                        \epsfbox[0 0 30 50]{filename.ps}
+%%%
+%%%                        This will not read in the file, and will
+%%%                        instead use the bounding box you specify.
+%%%
+%%%                        The effect will be to typeset the figure as
+%%%                        a TeX box, at the point of your \epsfbox
+%%%                        command. By default, the graphic will have
+%%%                        its `natural' width (namely the width of
+%%%                        its bounding box, as described in
+%%%                        filename.ps). The TeX box will have depth
+%%%                        zero.
+%%%
+%%%                        You can enlarge or reduce the figure by
+%%%                        using
+%%%
+%%%                          \epsfxsize = <dimen> \epsfbox{filename.ps}
+%%%                        or
+%%%                          \epsfysize = <dimen> \epsfbox{filename.ps}
+%%%
+%%%                        instead. Then the width of the TeX box will
+%%%                        be \epsfxsize and its height will be scaled
+%%%                        proportionately (or the height will be
+%%%                        \epsfysize and its width will be scaled
+%%%                        proportionately).
+%%%
+%%%                        The width (and height) is restored to zero
+%%%                        after each use, so \epsfxsize or \epsfysize
+%%%                        must be specified before EACH use of
+%%%                        \epsfbox.
+%%%
+%%%                        A more general facility for sizing is
+%%%                        available by defining the \epsfsize macro.
+%%%                        Normally you can redefine this macro to do
+%%%                        almost anything.  The first parameter is
+%%%                        the natural x size of the PostScript
+%%%                        graphic, the second parameter is the
+%%%                        natural y size of the PostScript graphic.
+%%%                        It must return the xsize to use, or 0 if
+%%%                        natural scaling is to be used.  Common uses
+%%%                        include:
+%%%
+%%%                           \epsfxsize  % just leave the old value alone
+%%%                           0pt         % use the natural sizes
+%%%                           #1          % use the natural sizes
+%%%                           \hsize      % scale to full width
+%%%                           0.5#1       % scale to 50% of natural size
+%%%                           \ifnum #1 > \hsize \hsize \else #1\fi
+%%%                                       % smaller of natural, hsize
+%%%
+%%%                        If you want TeX to report the size of the
+%%%                        figure (as a message on your terminal when
+%%%                        it processes each figure), use
+%%%                        `\epsfverbosetrue'.
+%%%
+%%%                        If you only want to get the bounding box
+%%%                        extents, without producing any output boxes
+%%%                        or \special{}, then use \epsfgetbb{filename}.
+%%%                        The bounding box corner coordinates are saved
+%%%                        in the macros \epsfllx, \epsflly, \epsfurx,
+%%%                        and \epsfury in PostScript units of big
+%%%                        points.
+%%%
+%%%                        Revision history:
+%%%
+%%%                        ---------------------------------------------
+%%%                        epsf.tex macro file:
+%%%                        Originally written by Tomas Rokicki of
+%%%                        Radical Eye Software, 29 Mar 1989.
+%%%
+%%%                        ---------------------------------------------
+%%%                        Revised by Don Knuth, 3 Jan 1990.
+%%%
+%%%                        ---------------------------------------------
+%%%                        Revised by Tomas Rokicki, 18 Jul 1990.
+%%%                        Accept bounding boxes with no space after
+%%%                        the colon.
+%%%
+%%%                        ---------------------------------------------
+%%%                        Revised by Nelson H. F. Beebe
+%%%                        <beebe@math.utah.edu>, 03 Dec 1991 [2.0].
+%%%                        Add version number and date typeout.
+%%%
+%%%                        Use \immediate\write16 instead of \message
+%%%                        to ensure output on new line.
+%%%
+%%%                        Handle nested EPS files.
+%%%
+%%%                        Handle %%BoundingBox: (atend) lines.
+%%%
+%%%                        Do not quit when blank lines are found.
+%%%
+%%%                        Add a few percents to remove generation of
+%%%                        spurious blank space.
+%%%
+%%%                        Move \special output to
+%%%                        \epsfspecial{filename} so that other macro
+%%%                        packages can input this one, then change
+%%%                        the definition of \epsfspecial to match
+%%%                        another DVI driver.
+%%%
+%%%                        Move size computation to \epsfsetsize which
+%%%                        can be called by the user; the verbose
+%%%                        output of the bounding box and scaled width
+%%%                        and height happens here.
+%%%
+%%%                        ---------------------------------------------
+%%%                        Revised by Nelson H. F. Beebe
+%%%                        <beebe@math.utah.edu>, 05 May 1992 [2.1].
+%%%                        Wrap \leavevmode\hbox{} around \vbox{} with
+%%%                        the \special so that \epsffile{} can be
+%%%                        used inside \begin{center}...\end{center}
+%%%
+%%%                        ---------------------------------------------
+%%%                        Revised by Nelson H. F. Beebe
+%%%                        <beebe@math.utah.edu>, 09 Dec 1992 [2.2].
+%%%                        Introduce \epsfshow{true,false} and
+%%%                        \epsfframe{true,false} macros; the latter
+%%%                        suppresses the insertion of the PostScript,
+%%%                        and instead just creates an empty box,
+%%%                        which may be handy for rapid prototyping.
+%%%
+%%%                        ---------------------------------------------
+%%%                        Revised by Nelson H. F. Beebe
+%%%                        <beebe@math.utah.edu>, 14 Dec 1992 [2.3].
+%%%                        Add \epsfshowfilename{true,false}.  When
+%%%                        true, and \epsfshowfalse is specified, the
+%%%                        PostScript file name will be displayed
+%%%                        centered in the figure box.
+%%%
+%%%                        ---------------------------------------------
+%%%                        Revised by Nelson H. F. Beebe
+%%%                        <beebe@math.utah.edu>, 20 June 1993 [2.4].
+%%%                        Remove non-zero debug setting of \epsfframemargin,
+%%%                        and change margin handling to preserve EPS image
+%%%                        size and aspect ratio, so that the actual
+%%%                        box is \epsfxsize+\epsfframemargin wide by
+%%%                        \epsfysize+\epsfframemargin high.
+%%%                        Reduce output of \epsfshowfilenametrue to
+%%%                        just the bare file name.
+%%%
+%%%                        ---------------------------------------------
+%%%                        Revised by Nelson H. F. Beebe
+%%%                        <beebe@math.utah.edu>, 13 July 1993 [2.5].
+%%%                        Add \epsfframethickness for control of
+%%%                        \epsfframe frame lines.
+%%%
+%%%                        ---------------------------------------------
+%%%                        Revised by Nelson H. F. Beebe
+%%%                        <beebe@math.utah.edu>, 02 July 1996 [2.6]
+%%%                        Add missing initialization \epsfatendfalse;
+%%%                        the lack of this resulted in the wrong
+%%%                        BoundingBox being picked up, mea culpa, sigh...
+%%%
+%%%                        ---------------------------------------------
+%%%                        Revised by Nelson H. F. Beebe
+%%%                        <beebe@math.utah.edu>, 25 October 1996 [2.7]
+%%%                        Update to match changes in from dvips 5-600
+%%%                        distribution: new user-accessible macros:
+%%%                        \epsfclipon, \epsfclipoff, \epsfdrafton,
+%%%                        \epsfdraftoff, change \empty to \epsfempty.
+%%%
+%%%                        ---------------------------------------------
+%%%                        Revised by Nelson H. F. Beebe
+%%%                        <beebe@math.utah.edu>, 18 May 2002 [2.7.1]
+%%%                        Add write statements to echo input file
+%%%                        names.  Prior to that change, an error in
+%%%                        such a file could be quite hard to track
+%%%                        down: a long list of TeX page numbers could
+%%%                        suddenly be followed by ``TeX buffer
+%%%                        capacity'' exceeded, without any indication
+%%%                        of the file that was responsible.
+%%%
+%%%                        ---------------------------------------------
+%%%                        Revised by Nelson H. F. Beebe
+%%%                        <beebe@math.utah.edu>, 16 May 2003 [2.7.2]
+%%%                        Supply two critical percent characters that
+%%%                        were mistakenly omitted in version 2.7.1,
+%%%                        and resulted in a small amount of spurious
+%%%                        horizontal space.
+%%%
+%%%                        ---------------------------------------------
+%%%                        Revised by Nelson H. F. Beebe
+%%%                        <beebe@math.utah.edu>, 14 Feb 2011 [2.7.3]
+%%%                        Add previously-missing \space in rwi
+%%%                        assignments (bug reported 14-Feb-2011 by
+%%%                        Stefan Rueger <s.rueger@open.ac.uk>).
+%%%
+%%%                        ---------------------------------------------
+%%%                        Revised by Nelson H. F. Beebe
+%%%                        <beebe@math.utah.edu>, Karl Berry
+%%%                        <karl@freefriends.org>, and Robin Fairbairns
+%%%                        <Robin.Fairbairns@cl.cam.ac.uk>,
+%%%                        23 July 2005 [2.7.3]
+%%%                        Add critical \hbox{} wrapper in \epsfsetgraph
+%%%                        so that \epsfbox{} does not conflict with
+%%%                        LaTeX center environment when \epsfbox{} is
+%%%                        surrounded by other horizonal objects.
+%%%                        Improve macro readability by adding legal,
+%%%                        but invisible-in-typeset-output, spaces.
+%%%                        Ensure that verbose status reports come
+%%%                        inside (filename ...) list.
+%%%
+%%%                        ---------------------------------------------
+%%%                        The checksum field above contains a CRC-16
+%%%                        checksum as the first value, followed by
+%%%                        the equivalent of the standard UNIX wc
+%%%                        (word count) utility output of lines,
+%%%                        words, and characters.  This is produced by
+%%%                        Robert Solovay's checksum utility.",
+%%%  }
+%%% ====================================================================
+
+%\immediate \write16 {This is `epsf.tex' v2.0 <02 Dec 1991>}%
+%\immediate \write16 {This is `epsf.tex' v2.1 <05 May 1992>}%
+%\immediate \write16 {This is `epsf.tex' v2.2 <09 Dec 1992>}%
+%\immediate \write16 {This is `epsf.tex' v2.3 <14 Dec 1992>}%
+%\immediate \write16 {This is `epsf.tex' v2.4 <20 June 1993>}%
+%\immediate \write16 {This is `epsf.tex' v2.5 <13 July 1993>}%
+%\immediate \write16 {This is `epsf.tex' v2.6 <02 July 1996>}%
+%\immediate \write16 {This is `epsf.tex' v2.7 <25 October 1996>}%
+%\immediate \write16 {This is `epsf.tex' v2.7.1 <18 May 2002>}%
+%\immediate \write16 {This is `epsf.tex' v2.7.2 <16 May 2003>}%
+%\immediate \write16 {This is `epsf.tex' v2.7.3 <23 July 2005>}%
+\immediate \write16 {This is `epsf.tex' v2.7.4 <14 February 2011>}%
+%
+\newread \epsffilein    % file to \read
+\newif \ifepsfatend     % need to scan to LAST %%BoundingBox comment?
+\newif \ifepsfbbfound   % success?
+\newif \ifepsfdraft     % use draft mode?
+\newif \ifepsffileok    % continue looking for the bounding box?
+\newif \ifepsfframe     % frame the bounding box?
+\newif \ifepsfshow      % show PostScript file, or just bounding box?
+\epsfshowtrue          % default is to display PostScript file
+\newif \ifepsfshowfilename % show the file name if \epsfshowfalse specified?
+\newif \ifepsfverbose   % report what you're making?
+\newdimen \epsfframemargin % margin between box and frame
+\newdimen \epsfframethickness % thickness of frame rules
+\newdimen \epsfrsize    % vertical size before scaling
+\newdimen \epsftmp      % register for arithmetic manipulation
+\newdimen \epsftsize    % horizontal size before scaling
+\newdimen \epsfxsize    % horizontal size after scaling
+\newdimen \epsfysize    % vertical size after scaling
+\newdimen \pspoints     % conversion factor
+%
+\pspoints = 1bp        % Adobe points are `big'
+\epsfxsize = 0pt       % default value, means `use natural size'
+\epsfysize = 0pt       % ditto
+\epsfframemargin = 0pt % default value: frame box flush around picture
+\epsfframethickness = 0.4pt % TeX's default rule thickness
+%
+\def \epsfbox #1{%
+    \global \def \epsfllx {72}%
+    \global \def \epsflly {72}%
+    \global \def \epsfurx {540}%
+    \global \def \epsfury {720}%
+    \def \lbracket {[}%
+    \def \testit {#1}%
+    \ifx \testit \lbracket
+        \let \next = \epsfgetlitbb
+    \else
+        \let \next = \epsfnormal
+    \fi
+    \next{#1}%
+}%
+%
+% We use \epsfgetlitbb if the user specified an explicit bounding box,
+% and \epsfnormal otherwise.  Because \epsfgetbb can be called
+% separately to retrieve the bounding box, we move the verbose
+% printing the bounding box extents and size on the terminal to
+% \epsfstatus.  Therefore, when the user provided the bounding box,
+% \epsfgetbb will not be called, so we must call \epsfsetsize and
+% \epsfstatus ourselves.
+%
+\def \epsfgetlitbb #1#2 #3 #4 #5]#6{%
+   \epsfgrab #2 #3 #4 #5 .\\%
+   \epsfsetsize
+   \epsfstatus{#6}%
+   \epsfsetgraph{#6}%
+}%
+%
+\def \epsfnormal #1{%
+    \epsfgetbb{#1}%
+    \epsfsetgraph{#1}%
+}%
+%
+\def \epsfgetbb #1{%
+%
+%   The first thing we need to do is to open the
+%   PostScript file, if possible.
+%
+    \openin\epsffilein=#1
+    \immediate \write16 {(#1}%
+    \ifeof \epsffilein
+        \errmessage{Could not open file #1, ignoring it}%
+    \else                       %process the file
+        {%                      %start a group to contain catcode changes
+            % Make all special characters, except space, to be of type
+            % `other' so we process the file in almost verbatim mode
+            % (TeXbook, p. 344).
+            \chardef \other = 12%
+            \def \do ##1{\catcode`##1=\other}%
+            \dospecials
+            \catcode `\ = 10%
+            \epsffileoktrue        %true while we are looping
+            \epsfatendfalse        %[02-Jul-1996]: add forgotten initialization
+            \loop                  %reading lines from the EPS file
+                \read \epsffilein to \epsffileline
+                \ifeof \epsffilein %then no more input
+                \epsffileokfalse   %so set completion flag
+            \else                  %otherwise process one line
+                \expandafter \epsfaux \epsffileline :. \\%
+            \fi
+            \ifepsffileok
+            \repeat
+            \ifepsfbbfound
+            \else
+                \ifepsfverbose
+                    \immediate \write16 {No BoundingBox comment found in %
+                                         file #1; using defaults}%
+                \fi
+            \fi
+        }%                      %end catcode changes
+        \closein\epsffilein
+    \fi                         %end of file processing
+    \epsfsetsize                %compute size parameters
+    \epsfstatus{#1}%
+    \immediate \write16 {)}%
+}%
+%
+% Clipping control:
+\def \epsfclipon  {\def \epsfclipstring { clip}}%
+\def \epsfclipoff {\def \epsfclipstring {\ifepsfdraft \space clip\fi}}%
+\epsfclipoff % default for dvips is OFF
+%
+% The special that is emitted by \epsfsetgraph comes from this macro.
+% It is defined separately to allow easy customization by other
+% packages that first \input epsf.tex, then redefine \epsfspecial.
+% This macro is invoked in the lower-left corner of a box of the
+% width and height determined from the arguments to \epsffile, or
+% from the %%BoundingBox in the EPS file itself.
+%
+% This version is for dvips:
+\def \epsfspecial #1{%
+     \epsftmp=10\epsfxsize
+     \divide \epsftmp by \pspoints
+     \ifnum \epsfrsize = 0%
+       \relax
+       \special{PSfile=\ifepsfdraft psdraft.ps\else#1\fi\space
+               llx=\epsfllx\space
+               lly=\epsflly\space
+               urx=\epsfurx\space
+               ury=\epsfury\space
+               rwi=\number\epsftmp\space
+               \epsfclipstring
+               }%
+     \else
+       \epsfrsize=10\epsfysize
+       \divide \epsfrsize by \pspoints
+       \special{PSfile=\ifepsfdraft psdraft.ps\else#1\fi\space
+               llx=\epsfllx\space
+               lly=\epsflly\space
+               urx=\epsfurx\space
+               ury=\epsfury\space
+               rwi=\number\epsftmp\space
+               rhi=\number\epsfrsize
+               \epsfclipstring
+               }%
+     \fi
+}%
+%
+% \epsfframe macro adapted from the TeXbook, exercise 21.3, p. 223, 331.
+% but modified to set the box width to the natural width, rather
+% than the line width, and to include space for margins and rules
+\def \epsfframe #1%
+{%
+ % method for detecting latex suggested by Robin Fairbairns, May 2005.
+  \ifx \documentstyle \epsfundefined
+    \relax
+  \else
+%    \leavevmode                   % so we can put this inside
+                                  % a latex centered environment
+    % The \leavevmode breaks under plain when this is inside a box,
+    % because it forces the figure to be the entire \hsize.  On the
+    % other hand, we need the \leavevmode for it to work in LaTeX,
+    % because the {center} environment works by adjusting TeX's
+    % paragraph parameters.
+    %
+    % Compare the LaTeX sequence
+    % \begin{center}
+    %   \epsfbox{tip.eps}q
+    % \end{center}
+    % (needs the \leavevmode to put the q right next to the image)
+    %
+    % with the plain TeX sequence:
+    % \leftline{\vbox{\epsfbox{tip.eps}}q}
+    % (had the q all the way over to the right, when \leavevmode was used)
+  \fi
+  %
+  \setbox0 = \hbox{#1}%
+  \dimen0 = \wd0                                % natural width of argument
+  \advance \dimen0 by 2\epsfframemargin         % plus width of 2 margins
+  \advance \dimen0 by 2\epsfframethickness      % plus width of 2 rule lines
+  \relax
+  \hbox{%
+    \vbox
+    {%
+      \hrule height \epsfframethickness depth 0pt
+      \hbox to \dimen0
+      {%
+       \hss
+       \vrule width \epsfframethickness
+       \kern \epsfframemargin
+       \vbox {\kern \epsfframemargin \box0 \kern \epsfframemargin }%
+       \kern \epsfframemargin
+       \vrule width \epsfframethickness
+       \hss
+      }% end hbox
+      \hrule height 0pt depth \epsfframethickness
+    }% end vbox
+  }% end hbox
+  \relax
+}%
+%
+\def \epsfsetgraph #1%
+{%
+   %
+   % Make the vbox and stick in a \special that the DVI driver can
+   % parse.  \vfil and \hfil are used to place the \special origin at
+   % the lower-left corner of the vbox.  \epsfspecial can be redefined
+   % to produce alternate \special syntaxes.
+   %
+   \ifvmode \leavevmode \fi
+   \relax
+   \hbox{% so we can put this in \begin{center}...\end{center}
+     \ifepsfframe \expandafter \epsfframe \fi
+     {\vbox to\epsfysize
+     {%
+        \ifepsfshow
+            % output \special{} at lower-left corner of figure box
+            \vfil
+            \hbox to \epsfxsize{\epsfspecial{#1}\hfil}%
+        \else
+            \vfil
+            \hbox to\epsfxsize{%
+               \hss
+               \ifepsfshowfilename
+               {%
+                  \epsfframemargin=3pt % local change of margin
+                  \epsfframe{{\tt #1}}%
+               }%
+               \fi
+               \hss
+            }%
+            \vfil
+        \fi
+     }%
+   }}%
+   \relax
+   %
+   % Reset \epsfxsize and \epsfysize, as documented above.
+   %
+   \global \epsfxsize = 0pt
+   \global \epsfysize = 0pt
+}%
+%
+%   Now we have to calculate the scale and offset values to use.
+%   First we compute the natural sizes.
+%
+\def \epsfsetsize
+{%
+   \epsfrsize = \epsfury \pspoints
+   \advance \epsfrsize by -\epsflly \pspoints
+   \epsftsize = \epsfurx \pspoints
+   \advance \epsftsize by -\epsfllx \pspoints
+%
+%   If `epsfxsize' is 0, we default to the natural size of the picture.
+%   Otherwise we scale the graph to be \epsfxsize wide.
+%
+   \epsfxsize = \epsfsize{\epsftsize}{\epsfrsize}%
+   \ifnum \epsfxsize = 0
+      \ifnum \epsfysize = 0
+       \epsfxsize = \epsftsize
+        \epsfysize = \epsfrsize
+       \epsfrsize = 0pt
+%
+%   We have a sticky problem here:  TeX doesn't do floating point arithmetic!
+%   Our goal is to compute y = rx/t. The following loop does this reasonably
+%   fast, with an error of at most about 16 sp (about 1/4000 pt).
+%
+      \else
+       \epsftmp = \epsftsize
+        \divide \epsftmp by \epsfrsize
+       \epsfxsize = \epsfysize
+        \multiply \epsfxsize by \epsftmp
+       \multiply \epsftmp by \epsfrsize
+        \advance \epsftsize by -\epsftmp
+       \epsftmp = \epsfysize
+       \loop
+        \advance \epsftsize by \epsftsize
+        \divide \epsftmp by 2
+       \ifnum \epsftmp > 0
+          \ifnum \epsftsize < \epsfrsize
+           \else
+             \advance \epsftsize -\epsfrsize
+              \advance \epsfxsize \epsftmp
+           \fi
+       \repeat
+       \epsfrsize = 0pt
+      \fi
+   \else
+     \ifnum \epsfysize = 0
+       \epsftmp = \epsfrsize
+       \divide \epsftmp by \epsftsize
+       \epsfysize = \epsfxsize
+       \multiply \epsfysize by \epsftmp
+       \multiply \epsftmp by \epsftsize
+       \advance \epsfrsize by -\epsftmp
+       \epsftmp = \epsfxsize
+       \loop
+        \advance \epsfrsize by \epsfrsize
+        \divide \epsftmp by 2
+       \ifnum \epsftmp > 0
+         \ifnum \epsfrsize < \epsftsize
+          \else
+            \advance \epsfrsize by -\epsftsize
+             \advance \epsfysize by \epsftmp
+          \fi
+       \repeat
+       \epsfrsize = 0pt
+     \else
+       \epsfrsize = \epsfysize
+     \fi
+   \fi
+}%
+%
+% Issue some status messages if the user requested them
+%
+\def \epsfstatus #1{% arg = filename
+   \ifepsfverbose
+     \immediate \write16 {#1: BoundingBox:
+                         llx = \epsfllx \space lly = \epsflly \space
+                         urx = \epsfurx \space ury = \epsfury \space}%
+     \immediate \write16 {#1: scaled width = \the\epsfxsize \space
+                         scaled height = \the\epsfysize}%
+   \fi
+}%
+%
+%   We still need to define the tricky \epsfaux macro. This requires
+%   a couple of magic constants for comparison purposes.
+%
+{\catcode`\%=12 \global \let \epsfpercent=%\global \def \epsfbblit {%BoundingBox}}%
+\global \def \epsfatend{(atend)}%
+%
+%   So we're ready to check for `%BoundingBox:' and to grab the
+%   values if they are found.
+%
+%   If we find a line
+%
+%   %%BoundingBox: (atend)
+%
+%   then we ignore it, but set a flag to force parsing all of the
+%   file, so the last %%BoundingBox parsed will be the one used.  This
+%   is necessary, because EPS files can themselves contain other EPS
+%   files with their own %%BoundingBox comments.
+%
+%   If we find a line
+%
+%   %%BoundingBox: llx lly urx ury
+%
+%   then we save the 4 values in \epsfllx, \epsflly, \epsfurx, \epsfury.
+%   Then, if we have not previously parsed an (atend), we flag completion
+%   and can stop reading the file.  Otherwise, we must keep on reading
+%   to end of file so that we find the values on the LAST %%BoundingBox.
+\long \def \epsfaux#1#2:#3\\%
+{%
+   \def \testit {#2}%           % save second character up to just before colon
+   \ifx#1\epsfpercent           % then first char is percent (quick test)
+       \ifx \testit \epsfbblit  % then (slow test) we have %%BoundingBox
+            \epsfgrab #3 . . . \\%
+            \ifx \epsfllx\epsfatend % then ignore %%BoundingBox: (atend)
+                \global \epsfatendtrue
+            \else               % else found %%BoundingBox: llx lly urx ury
+                \ifepsfatend    % then keep parsing ALL %%BoundingBox lines
+                \else           % else stop after first one parsed
+                    \epsffileokfalse
+                \fi
+                \global \epsfbbfoundtrue
+            \fi
+       \fi
+   \fi
+}%
+%
+%   Here we grab the values and stuff them in the appropriate definitions.
+%
+\def \epsfempty {}%
+\def \epsfgrab #1 #2 #3 #4 #5\\{%
+   \global \def \epsfllx {#1}\ifx \epsfllx\epsfempty
+      \epsfgrab #2 #3 #4 #5 .\\\else
+   \global \def \epsflly {#2}%
+   \global \def \epsfurx {#3}\global \def \epsfury {#4}\fi
+}%
+%
+%   We default the epsfsize macro.
+%
+\def \epsfsize #1#2{\epsfxsize}%
+%
+%   Finally, another definition for compatibility with older macros.
+%
+\let \epsffile = \epsfbox
+\endinput