Initial revision
authorkramm <kramm>
Thu, 18 Oct 2001 10:31:20 +0000 (10:31 +0000)
committerkramm <kramm>
Thu, 18 Oct 2001 10:31:20 +0000 (10:31 +0000)
156 files changed:
AUTHORS [new file with mode: 0644]
COPYING [new file with mode: 0644]
ChangeLog [new file with mode: 0644]
INSTALL [new file with mode: 0644]
Makefile.am [new file with mode: 0644]
Makefile.in [new file with mode: 0644]
NEWS [new file with mode: 0644]
README [new file with mode: 0644]
TODO [new file with mode: 0644]
aclocal.m4 [new file with mode: 0644]
config.h.in [new file with mode: 0644]
configure [new file with mode: 0755]
configure.in [new file with mode: 0644]
install-sh [new file with mode: 0755]
lib/Makefile.am [new file with mode: 0644]
lib/Makefile.in [new file with mode: 0644]
lib/example/box.c [new file with mode: 0644]
lib/example/jpegtest.c [new file with mode: 0644]
lib/example/shape1.c [new file with mode: 0644]
lib/example/texbox.c [new file with mode: 0644]
lib/example/texbox_ac.c [new file with mode: 0644]
lib/example/transtest.c [new file with mode: 0644]
lib/log.c [new file with mode: 0644]
lib/log.h [new file with mode: 0644]
lib/modules/swfbits.c [new file with mode: 0644]
lib/modules/swfbutton.c [new file with mode: 0644]
lib/modules/swfcgi.c [new file with mode: 0644]
lib/modules/swfdump.c [new file with mode: 0644]
lib/modules/swfobject.c [new file with mode: 0644]
lib/modules/swfshape.c [new file with mode: 0644]
lib/modules/swftext.c [new file with mode: 0644]
lib/modules/swftools.c [new file with mode: 0644]
lib/rfxswf.c [new file with mode: 0644]
lib/rfxswf.h [new file with mode: 0644]
missing [new file with mode: 0755]
mkinstalldirs [new file with mode: 0755]
pdf2swf/Makefile.am [new file with mode: 0644]
pdf2swf/Makefile.in [new file with mode: 0644]
pdf2swf/SWFOutputDev.cc [new file with mode: 0644]
pdf2swf/SWFOutputDev.h [new file with mode: 0644]
pdf2swf/args.h [new file with mode: 0644]
pdf2swf/fonts/FontDataBase [new file with mode: 0644]
pdf2swf/fonts/Makefile.am [new file with mode: 0644]
pdf2swf/fonts/Makefile.in [new file with mode: 0644]
pdf2swf/fonts/d050000l.afm [new file with mode: 0644]
pdf2swf/fonts/d050000l.pfb [new file with mode: 0644]
pdf2swf/fonts/n019003l.afm [new file with mode: 0644]
pdf2swf/fonts/n019003l.pfb [new file with mode: 0644]
pdf2swf/fonts/n019004l.afm [new file with mode: 0644]
pdf2swf/fonts/n019004l.pfb [new file with mode: 0644]
pdf2swf/fonts/n019023l.afm [new file with mode: 0644]
pdf2swf/fonts/n019023l.pfb [new file with mode: 0644]
pdf2swf/fonts/n019024l.afm [new file with mode: 0644]
pdf2swf/fonts/n019024l.pfb [new file with mode: 0644]
pdf2swf/fonts/n021003l.afm [new file with mode: 0644]
pdf2swf/fonts/n021003l.pfb [new file with mode: 0644]
pdf2swf/fonts/n021004l.afm [new file with mode: 0644]
pdf2swf/fonts/n021004l.pfb [new file with mode: 0644]
pdf2swf/fonts/n021023l.afm [new file with mode: 0644]
pdf2swf/fonts/n021023l.pfb [new file with mode: 0644]
pdf2swf/fonts/n021024l.afm [new file with mode: 0644]
pdf2swf/fonts/n021024l.pfb [new file with mode: 0644]
pdf2swf/fonts/n022003l.afm [new file with mode: 0644]
pdf2swf/fonts/n022003l.pfb [new file with mode: 0644]
pdf2swf/fonts/n022004l.afm [new file with mode: 0644]
pdf2swf/fonts/n022004l.pfb [new file with mode: 0644]
pdf2swf/fonts/n022023l.afm [new file with mode: 0644]
pdf2swf/fonts/n022023l.pfb [new file with mode: 0644]
pdf2swf/fonts/n022024l.afm [new file with mode: 0644]
pdf2swf/fonts/n022024l.pfb [new file with mode: 0644]
pdf2swf/fonts/s050000l.afm [new file with mode: 0644]
pdf2swf/fonts/s050000l.pfb [new file with mode: 0644]
pdf2swf/pdf2swf.1 [new file with mode: 0644]
pdf2swf/pdf2swf.cc [new file with mode: 0644]
pdf2swf/spline.cc [new file with mode: 0644]
pdf2swf/spline.h [new file with mode: 0644]
pdf2swf/swfoutput.cc [new file with mode: 0644]
pdf2swf/swfoutput.h [new file with mode: 0644]
pdf2swf/swfoutput_x11.cc [new file with mode: 0644]
pdf2swf/xpdf/Array.cc [new file with mode: 0644]
pdf2swf/xpdf/Array.h [new file with mode: 0644]
pdf2swf/xpdf/Catalog.cc [new file with mode: 0644]
pdf2swf/xpdf/Catalog.h [new file with mode: 0644]
pdf2swf/xpdf/CompactFontInfo.h [new file with mode: 0644]
pdf2swf/xpdf/Decrypt.cc [new file with mode: 0644]
pdf2swf/xpdf/Decrypt.h [new file with mode: 0644]
pdf2swf/xpdf/Dict.cc [new file with mode: 0644]
pdf2swf/xpdf/Dict.h [new file with mode: 0644]
pdf2swf/xpdf/Error.cc [new file with mode: 0644]
pdf2swf/xpdf/Error.h [new file with mode: 0644]
pdf2swf/xpdf/FontEncoding.cc [new file with mode: 0644]
pdf2swf/xpdf/FontEncoding.h [new file with mode: 0644]
pdf2swf/xpdf/FontFile.cc [new file with mode: 0644]
pdf2swf/xpdf/FontFile.h [new file with mode: 0644]
pdf2swf/xpdf/FontInfo.h [new file with mode: 0644]
pdf2swf/xpdf/FormWidget.cc [new file with mode: 0644]
pdf2swf/xpdf/FormWidget.h [new file with mode: 0644]
pdf2swf/xpdf/GString.cc [new file with mode: 0644]
pdf2swf/xpdf/GString.h [new file with mode: 0644]
pdf2swf/xpdf/Gfx.cc [new file with mode: 0644]
pdf2swf/xpdf/Gfx.h [new file with mode: 0644]
pdf2swf/xpdf/GfxFont.cc [new file with mode: 0644]
pdf2swf/xpdf/GfxFont.h [new file with mode: 0644]
pdf2swf/xpdf/GfxState.cc [new file with mode: 0644]
pdf2swf/xpdf/GfxState.h [new file with mode: 0644]
pdf2swf/xpdf/Lexer.cc [new file with mode: 0644]
pdf2swf/xpdf/Lexer.h [new file with mode: 0644]
pdf2swf/xpdf/Link.cc [new file with mode: 0644]
pdf2swf/xpdf/Link.h [new file with mode: 0644]
pdf2swf/xpdf/Makefile.am [new file with mode: 0644]
pdf2swf/xpdf/Makefile.in [new file with mode: 0644]
pdf2swf/xpdf/Object.cc [new file with mode: 0644]
pdf2swf/xpdf/Object.h [new file with mode: 0644]
pdf2swf/xpdf/OutputDev.cc [new file with mode: 0644]
pdf2swf/xpdf/OutputDev.h [new file with mode: 0644]
pdf2swf/xpdf/PDFDoc.cc [new file with mode: 0644]
pdf2swf/xpdf/PDFDoc.h [new file with mode: 0644]
pdf2swf/xpdf/Page.cc [new file with mode: 0644]
pdf2swf/xpdf/Page.h [new file with mode: 0644]
pdf2swf/xpdf/Params.cc [new file with mode: 0644]
pdf2swf/xpdf/Params.h [new file with mode: 0644]
pdf2swf/xpdf/Parser.cc [new file with mode: 0644]
pdf2swf/xpdf/Parser.h [new file with mode: 0644]
pdf2swf/xpdf/StdFontInfo.h [new file with mode: 0644]
pdf2swf/xpdf/Stream-CCITT.h [new file with mode: 0644]
pdf2swf/xpdf/Stream.cc [new file with mode: 0644]
pdf2swf/xpdf/Stream.h [new file with mode: 0644]
pdf2swf/xpdf/XRef.cc [new file with mode: 0644]
pdf2swf/xpdf/XRef.h [new file with mode: 0644]
pdf2swf/xpdf/config.h [new file with mode: 0644]
pdf2swf/xpdf/gfile.cc [new file with mode: 0644]
pdf2swf/xpdf/gfile.h [new file with mode: 0644]
pdf2swf/xpdf/gmem.c [new file with mode: 0644]
pdf2swf/xpdf/gmem.h [new file with mode: 0644]
pdf2swf/xpdf/gtypes.h [new file with mode: 0644]
release.in [new file with mode: 0644]
src/Makefile.am [new file with mode: 0644]
src/Makefile.in [new file with mode: 0644]
src/args.h [new file with mode: 0644]
src/bitio.c [new file with mode: 0644]
src/bitio.h [new file with mode: 0644]
src/combine.c [new file with mode: 0644]
src/combine.h [new file with mode: 0644]
src/flash.c [new file with mode: 0644]
src/flash.h [new file with mode: 0644]
src/reloc.c [new file with mode: 0644]
src/reloc.h [new file with mode: 0644]
src/settings.h [new file with mode: 0644]
src/swfcombine.1 [new file with mode: 0644]
src/swfcombine.c [new file with mode: 0644]
src/swfdump.1 [new file with mode: 0644]
src/swfdump.c [new file with mode: 0644]
src/swfstrings.1 [new file with mode: 0644]
src/swfstrings.c [new file with mode: 0644]
src/types.h [new file with mode: 0644]
stamp-h.in [new file with mode: 0644]

diff --git a/AUTHORS b/AUTHORS
new file mode 100644 (file)
index 0000000..5e53190
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,2 @@
+Matthias Kramm <kramm@quiss.org>
+Rainer Böhme <rainer@reflex-studio.de>
diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..d60c31a
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,340 @@
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+\f
+                   GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+\f
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+\f
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+\f
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                           NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+           How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644 (file)
index 0000000..6a80a3b
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,10 @@
+0.0.1: initial release
+0.0.2: 
+       * pdf2swf: Added support for pdf bitmaps, clipping, state saving/restoring, colors,
+                  solid fill and line width.
+       * swfcombine: Added stacking option (-t)
+       * swfcombine: Small bugfixes with the command line options
+       * rfxswf-lib: some bugfixes concerning sprites and cgi
+       * swfstrings: New: Allows extraction of text from swf files
+       * swfdump: New: Dumps swf file information. (Only the bare essentials, though)
+
diff --git a/INSTALL b/INSTALL
new file mode 100644 (file)
index 0000000..b42a17a
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,182 @@
+Basic Installation
+==================
+
+   These are generic installation instructions.
+
+   The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions.  Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, a file
+`config.cache' that saves the results of its tests to speed up
+reconfiguring, and a file `config.log' containing compiler output
+(useful mainly for debugging `configure').
+
+   If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release.  If at some point `config.cache'
+contains results you don't want to keep, you may remove or edit it.
+
+   The file `configure.in' is used to create `configure' by a program
+called `autoconf'.  You only need `configure.in' if you want to change
+it or regenerate `configure' using a newer version of `autoconf'.
+
+The simplest way to compile this package is:
+
+  1. `cd' to the directory containing the package's source code and type
+     `./configure' to configure the package for your system.  If you're
+     using `csh' on an old version of System V, you might need to type
+     `sh ./configure' instead to prevent `csh' from trying to execute
+     `configure' itself.
+
+     Running `configure' takes awhile.  While running, it prints some
+     messages telling which features it is checking for.
+
+  2. Type `make' to compile the package.
+
+  3. Optionally, type `make check' to run any self-tests that come with
+     the package.
+
+  4. Type `make install' to install the programs and any data files and
+     documentation.
+
+  5. You can remove the program binaries and object files from the
+     source code directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile the package for
+     a different kind of computer), type `make distclean'.  There is
+     also a `make maintainer-clean' target, but that is intended mainly
+     for the package's developers.  If you use it, you may have to get
+     all sorts of other programs in order to regenerate files that came
+     with the distribution.
+
+Compilers and Options
+=====================
+
+   Some systems require unusual options for compilation or linking that
+the `configure' script does not know about.  You can give `configure'
+initial values for variables by setting them in the environment.  Using
+a Bourne-compatible shell, you can do that on the command line like
+this:
+     CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+
+Or on systems that have the `env' program, you can do it like this:
+     env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+
+Compiling For Multiple Architectures
+====================================
+
+   You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory.  To do this, you must use a version of `make' that
+supports the `VPATH' variable, such as GNU `make'.  `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script.  `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+   If you have to use a `make' that does not supports the `VPATH'
+variable, you have to compile the package for one architecture at a time
+in the source code directory.  After you have installed the package for
+one architecture, use `make distclean' before reconfiguring for another
+architecture.
+
+Installation Names
+==================
+
+   By default, `make install' will install the package's files in
+`/usr/local/bin', `/usr/local/man', etc.  You can specify an
+installation prefix other than `/usr/local' by giving `configure' the
+option `--prefix=PATH'.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+give `configure' the option `--exec-prefix=PATH', the package will use
+PATH as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like `--bindir=PATH' to specify different values for particular
+kinds of files.  Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.
+
+   If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+   Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System).  The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+   For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+   There may be some features `configure' can not figure out
+automatically, but needs to determine by the type of host the package
+will run on.  Usually `configure' can figure that out, but if it prints
+a message saying it can not guess the host type, give it the
+`--host=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name with three fields:
+     CPU-COMPANY-SYSTEM
+
+See the file `config.sub' for the possible values of each field.  If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the host type.
+
+   If you are building compiler tools for cross-compiling, you can also
+use the `--target=TYPE' option to select the type of system they will
+produce code for and the `--build=TYPE' option to select the type of
+system on which you are compiling the package.
+
+Sharing Defaults
+================
+
+   If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists.  Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Operation Controls
+==================
+
+   `configure' recognizes the following options to control how it
+operates.
+
+`--cache-file=FILE'
+     Use and save the results of the tests in FILE instead of
+     `./config.cache'.  Set FILE to `/dev/null' to disable caching, for
+     debugging `configure'.
+
+`--help'
+     Print a summary of the options to `configure', and exit.
+
+`--quiet'
+`--silent'
+`-q'
+     Do not print messages saying which checks are being made.  To
+     suppress all normal output, redirect it to `/dev/null' (any error
+     messages will still be shown).
+
+`--srcdir=DIR'
+     Look for the package's source code in directory DIR.  Usually
+     `configure' can determine that directory automatically.
+
+`--version'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`configure' also accepts some other, not widely useful, options.
diff --git a/Makefile.am b/Makefile.am
new file mode 100644 (file)
index 0000000..53d8840
--- /dev/null
@@ -0,0 +1 @@
+SUBDIRS = lib src pdf2swf pdf2swf
diff --git a/Makefile.in b/Makefile.in
new file mode 100644 (file)
index 0000000..e0de14b
--- /dev/null
@@ -0,0 +1,361 @@
+# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = .
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+AWK = @AWK@
+CC = @CC@
+CPP = @CPP@
+CXX = @CXX@
+EXEEXT = @EXEEXT@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+LN_S = @LN_S@
+MAKEINFO = @MAKEINFO@
+PACKAGE = @PACKAGE@
+RANLIB = @RANLIB@
+VERSION = @VERSION@
+
+SUBDIRS = lib src pdf2swf pdf2swf
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES =  release
+DIST_COMMON =  README ./stamp-h.in AUTHORS COPYING ChangeLog INSTALL \
+Makefile.am Makefile.in NEWS TODO aclocal.m4 config.h.in configure \
+configure.in install-sh missing mkinstalldirs release.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
+       cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile
+
+Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status $(BUILT_SOURCES)
+       cd $(top_builddir) \
+         && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+$(ACLOCAL_M4):  configure.in 
+       cd $(srcdir) && $(ACLOCAL)
+
+config.status: $(srcdir)/configure.in $(CONFIG_STATUS_DEPENDENCIES)
+       $(SHELL) ./config.status --recheck
+$(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
+       cd $(srcdir) && $(AUTOCONF)
+
+config.h: stamp-h
+       @if test ! -f $@; then \
+               rm -f stamp-h; \
+               $(MAKE) stamp-h; \
+       else :; fi
+stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status
+       cd $(top_builddir) \
+         && CONFIG_FILES= CONFIG_HEADERS=config.h \
+            $(SHELL) ./config.status
+       @echo timestamp > stamp-h 2> /dev/null
+$(srcdir)/config.h.in: $(srcdir)/stamp-h.in
+       @if test ! -f $@; then \
+               rm -f $(srcdir)/stamp-h.in; \
+               $(MAKE) $(srcdir)/stamp-h.in; \
+       else :; fi
+$(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) 
+       cd $(top_srcdir) && $(AUTOHEADER)
+       @echo timestamp > $(srcdir)/stamp-h.in 2> /dev/null
+
+mostlyclean-hdr:
+
+clean-hdr:
+
+distclean-hdr:
+       -rm -f config.h
+
+maintainer-clean-hdr:
+release: $(top_builddir)/config.status release.in
+       cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+
+@SET_MAKE@
+
+all-recursive install-data-recursive install-exec-recursive \
+installdirs-recursive install-recursive uninstall-recursive  \
+check-recursive installcheck-recursive info-recursive dvi-recursive:
+       @set fnord $(MAKEFLAGS); amf=$$2; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+          || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+       @set fnord $(MAKEFLAGS); amf=$$2; \
+       dot_seen=no; \
+       rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
+         rev="$$subdir $$rev"; \
+         test "$$subdir" = "." && dot_seen=yes; \
+       done; \
+       test "$$dot_seen" = "no" && rev=". $$rev"; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+          || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+       list='$(SOURCES) $(HEADERS)'; \
+       unique=`for i in $$list; do echo $$i; done | \
+         awk '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       here=`pwd` && cd $(srcdir) \
+         && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+   if test "$$subdir" = .; then :; else \
+           test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
+   fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS)'; \
+       unique=`for i in $$list; do echo $$i; done | \
+         awk '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \
+         || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+       -rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+       -rm -rf $(distdir)
+       GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz
+       mkdir $(distdir)/=build
+       mkdir $(distdir)/=inst
+       dc_install_base=`cd $(distdir)/=inst && pwd`; \
+       cd $(distdir)/=build \
+         && ../configure --srcdir=.. --prefix=$$dc_install_base \
+         && $(MAKE) $(AM_MAKEFLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) dvi \
+         && $(MAKE) $(AM_MAKEFLAGS) check \
+         && $(MAKE) $(AM_MAKEFLAGS) install \
+         && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+         && $(MAKE) $(AM_MAKEFLAGS) dist
+       -rm -rf $(distdir)
+       @banner="$(distdir).tar.gz is ready for distribution"; \
+       dashes=`echo "$$banner" | sed s/./=/g`; \
+       echo "$$dashes"; \
+       echo "$$banner"; \
+       echo "$$dashes"
+dist: distdir
+       -chmod -R a+r $(distdir)
+       GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
+       -rm -rf $(distdir)
+dist-all: distdir
+       -chmod -R a+r $(distdir)
+       GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
+       -rm -rf $(distdir)
+distdir: $(DISTFILES)
+       -rm -rf $(distdir)
+       mkdir $(distdir)
+       -chmod 777 $(distdir)
+       here=`cd $(top_builddir) && pwd`; \
+       top_distdir=`cd $(distdir) && pwd`; \
+       distdir=`cd $(distdir) && pwd`; \
+       cd $(top_srcdir) \
+         && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Makefile
+       @for file in $(DISTFILES); do \
+         d=$(srcdir); \
+         if test -d $$d/$$file; then \
+           cp -pr $$d/$$file $(distdir)/$$file; \
+         else \
+           test -f $(distdir)/$$file \
+           || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+           || cp -p $$d/$$file $(distdir)/$$file || :; \
+         fi; \
+       done
+       for subdir in $(SUBDIRS); do \
+         if test "$$subdir" = .; then :; else \
+           test -d $(distdir)/$$subdir \
+           || mkdir $(distdir)/$$subdir \
+           || exit 1; \
+           chmod 777 $(distdir)/$$subdir; \
+           (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \
+             || exit 1; \
+         fi; \
+       done
+info-am:
+info: info-recursive
+dvi-am:
+dvi: dvi-recursive
+check-am: all-am
+check: check-recursive
+installcheck-am:
+installcheck: installcheck-recursive
+all-recursive-am: config.h
+       $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+install-exec-am:
+install-exec: install-exec-recursive
+
+install-data-am:
+install-data: install-data-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-recursive
+uninstall-am:
+uninstall: uninstall-recursive
+all-am: Makefile config.h
+all-redirect: all-recursive-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs: installdirs-recursive
+installdirs-am:
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -rm -f Makefile $(CONFIG_CLEAN_FILES)
+       -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am:  mostlyclean-hdr mostlyclean-tags mostlyclean-generic
+
+mostlyclean: mostlyclean-recursive
+
+clean-am:  clean-hdr clean-tags clean-generic mostlyclean-am
+
+clean: clean-recursive
+
+distclean-am:  distclean-hdr distclean-tags distclean-generic clean-am
+
+distclean: distclean-recursive
+       -rm -f config.status
+
+maintainer-clean-am:  maintainer-clean-hdr maintainer-clean-tags \
+               maintainer-clean-generic distclean-am
+       @echo "This command is intended for maintainers to use;"
+       @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f config.status
+
+.PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \
+install-data-recursive uninstall-data-recursive install-exec-recursive \
+uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \
+all-recursive check-recursive installcheck-recursive info-recursive \
+dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \
+maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
+distclean-tags clean-tags maintainer-clean-tags distdir info-am info \
+dvi-am dvi check check-am installcheck-am installcheck all-recursive-am \
+install-exec-am install-exec install-data-am install-data install-am \
+install uninstall-am uninstall all-redirect all-am all installdirs-am \
+installdirs mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/NEWS b/NEWS
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/TODO b/TODO
new file mode 100644 (file)
index 0000000..6468d2d
--- /dev/null
+++ b/TODO
@@ -0,0 +1,46 @@
+Priorities:
+1. Make the swfs that pdf2swf generates smaller
+2. Make pdf2swf faster
+3. General improvements
+4. Make pdf2swf cope with more complex pdfs
+5. Do some sample swfs for swfcombine 
+6. Cleanups in rfxswf-lib.
+
+Make the swfs pdf2swf generates smaller:
+
+    * At the moment, the output of pdf2swf is a bunch of
+      polygons. Try using seperate shapes for each character,
+      and packing all shapes of a page in a font. 
+
+Make pdf2swf cope with more complex pdfs:
+
+    The following pdf properties are not yet dealt with:
+    * Links
+    * dashed lines
+    * (type 3 and truetype fonts)
+
+Make pdf2swf faster:
+
+    * Embedded fonts which are used more than once are also converted more
+      than once. Implement a font cache, like the one in xpdf. (font->getID().num
+      seems to be unique for every font)
+
+Do some sample swfs for swfcombine:
+
+    * Some swf for displaying other swfs frame by frame (e.g. with next/previous
+      buttons) would be very handy for swfs generated by pdf2swf
+
+General Improvements:
+
+    * temporary file name generation is broken: pdf2swf/pdf2swf.cc, pdf2swf/xpdf/gfile.cc
+    * fix memory leaks
+    * rfxswf: modules/swfshape doesn't allow changing to fillstyle 0
+    * big jpegs sometimes have wrong colors
+    * write manpages for swfstrings and swfdump
+    * --version should work in all tools.
+
+Cleanups in rfxswf-lib:
+    
+    * LPTAGs etc. should be TAG*s
+    * function names should have a prefix (rfxswf_ or swflib_ or sth.)
+    * GetMatrix should be named GetMATRIX, as it gets a MATRIX datatype. Same for CXFORM etc.
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644 (file)
index 0000000..af170a3
--- /dev/null
@@ -0,0 +1,127 @@
+dnl aclocal.m4 generated automatically by aclocal 1.4-p4
+
+dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+dnl PARTICULAR PURPOSE.
+
+# Do all the work for Automake.  This macro actually does too much --
+# some checks are only needed if your package does certain things.
+# But this isn't really a big deal.
+
+# serial 1
+
+dnl Usage:
+dnl AM_INIT_AUTOMAKE(package,version, [no-define])
+
+AC_DEFUN(AM_INIT_AUTOMAKE,
+[AC_REQUIRE([AC_PROG_INSTALL])
+PACKAGE=[$1]
+AC_SUBST(PACKAGE)
+VERSION=[$2]
+AC_SUBST(VERSION)
+dnl test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
+  AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+fi
+ifelse([$3],,
+AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
+AC_REQUIRE([AM_SANITY_CHECK])
+AC_REQUIRE([AC_ARG_PROGRAM])
+dnl FIXME This is truly gross.
+missing_dir=`cd $ac_aux_dir && pwd`
+AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
+AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
+AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
+AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
+AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
+AC_REQUIRE([AC_PROG_MAKE_SET])])
+
+#
+# Check to make sure that the build environment is sane.
+#
+
+AC_DEFUN(AM_SANITY_CHECK,
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftestfile
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
+   if test "[$]*" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftestfile`
+   fi
+   if test "[$]*" != "X $srcdir/configure conftestfile" \
+      && test "[$]*" != "X conftestfile $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "[$]2" = conftestfile
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+rm -f conftest*
+AC_MSG_RESULT(yes)])
+
+dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
+dnl The program must properly implement --version.
+AC_DEFUN(AM_MISSING_PROG,
+[AC_MSG_CHECKING(for working $2)
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if ($2 --version) < /dev/null > /dev/null 2>&1; then
+   $1=$2
+   AC_MSG_RESULT(found)
+else
+   $1="$3/missing $2"
+   AC_MSG_RESULT(missing)
+fi
+AC_SUBST($1)])
+
+# Like AC_CONFIG_HEADER, but automatically create stamp file.
+
+AC_DEFUN(AM_CONFIG_HEADER,
+[AC_PREREQ([2.12])
+AC_CONFIG_HEADER([$1])
+dnl When config.status generates a header, we must update the stamp-h file.
+dnl This file resides in the same directory as the config header
+dnl that is generated.  We must strip everything past the first ":",
+dnl and everything past the last "/".
+AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl
+ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>,
+<<test -z "<<$>>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>,
+<<am_indx=1
+for am_file in <<$1>>; do
+  case " <<$>>CONFIG_HEADERS " in
+  *" <<$>>am_file "*<<)>>
+    echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx
+    ;;
+  esac
+  am_indx=`expr "<<$>>am_indx" + 1`
+done<<>>dnl>>)
+changequote([,]))])
+
diff --git a/config.h.in b/config.h.in
new file mode 100644 (file)
index 0000000..b7a1e4d
--- /dev/null
@@ -0,0 +1,116 @@
+/* config.h.in.  Generated automatically from configure.in by autoheader.  */
+
+/* Define to empty if the keyword does not work.  */
+#undef const
+
+/* Define if you don't have vprintf but do have _doprnt.  */
+#undef HAVE_DOPRNT
+
+/* Define if you have a working `mmap' system call.  */
+#undef HAVE_MMAP
+
+/* Define if you have the vprintf function.  */
+#undef HAVE_VPRINTF
+
+/* Define as __inline if that's what the C compiler calls it.  */
+#undef inline
+
+/* Define to `long' if <sys/types.h> doesn't define.  */
+#undef off_t
+
+/* Define to `unsigned' if <sys/types.h> doesn't define.  */
+#undef size_t
+
+/* Define if you have the ANSI C header files.  */
+#undef STDC_HEADERS
+
+/* Define if your <sys/time.h> declares struct tm.  */
+#undef TM_IN_SYS_TIME
+
+/* Define if you have the getcwd function.  */
+#undef HAVE_GETCWD
+
+/* Define if you have the getpagesize function.  */
+#undef HAVE_GETPAGESIZE
+
+/* Define if you have the putenv function.  */
+#undef HAVE_PUTENV
+
+/* Define if you have the socket function.  */
+#undef HAVE_SOCKET
+
+/* Define if you have the strcspn function.  */
+#undef HAVE_STRCSPN
+
+/* Define if you have the strdup function.  */
+#undef HAVE_STRDUP
+
+/* Define if you have the strerror function.  */
+#undef HAVE_STRERROR
+
+/* Define if you have the strstr function.  */
+#undef HAVE_STRSTR
+
+/* Define if you have the <dirent.h> header file.  */
+#undef HAVE_DIRENT_H
+
+/* Define if you have the <fcntl.h> header file.  */
+#undef HAVE_FCNTL_H
+
+/* Define if you have the <jpeglib.h> header file.  */
+#undef HAVE_JPEGLIB_H
+
+/* Define if you have the <limits.h> header file.  */
+#undef HAVE_LIMITS_H
+
+/* Define if you have the <malloc.h> header file.  */
+#undef HAVE_MALLOC_H
+
+/* Define if you have the <math.h> header file.  */
+#undef HAVE_MATH_H
+
+/* Define if you have the <memory.h> header file.  */
+#undef HAVE_MEMORY_H
+
+/* Define if you have the <ndir.h> header file.  */
+#undef HAVE_NDIR_H
+
+/* Define if you have the <sys/dir.h> header file.  */
+#undef HAVE_SYS_DIR_H
+
+/* Define if you have the <sys/ndir.h> header file.  */
+#undef HAVE_SYS_NDIR_H
+
+/* Define if you have the <t1lib.h> header file.  */
+#undef HAVE_T1LIB_H
+
+/* Define if you have the <unistd.h> header file.  */
+#undef HAVE_UNISTD_H
+
+/* Define if you have the <zlib.h> header file.  */
+#undef HAVE_ZLIB_H
+
+/* Define if you have the X11 library (-lX11).  */
+#undef HAVE_LIBX11
+
+/* Define if you have the jpeg library (-ljpeg).  */
+#undef HAVE_LIBJPEG
+
+/* Define if you have the m library (-lm).  */
+#undef HAVE_LIBM
+
+/* Define if you have the pthread library (-lpthread).  */
+#undef HAVE_LIBPTHREAD
+
+/* Define if you have the t1 library (-lt1).  */
+#undef HAVE_LIBT1
+
+/* Define if you have the z library (-lz).  */
+#undef HAVE_LIBZ
+
+/* Name of package */
+#undef PACKAGE
+
+/* Version number of package */
+#undef VERSION
+
diff --git a/configure b/configure
new file mode 100755 (executable)
index 0000000..aed6b06
--- /dev/null
+++ b/configure
@@ -0,0 +1,3369 @@
+#! /bin/sh
+
+# Guess values for system-dependent variables and create Makefiles.
+# Generated automatically using autoconf version 2.13 
+# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# Defaults:
+ac_help=
+ac_default_prefix=/usr/local
+# Any additions from configure.in:
+ac_help="$ac_help
+  --with-x                use the X Window System"
+
+# Initialize some variables set by options.
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+build=NONE
+cache_file=./config.cache
+exec_prefix=NONE
+host=NONE
+no_create=
+nonopt=NONE
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+target=NONE
+verbose=
+x_includes=NONE
+x_libraries=NONE
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+# Initialize some other variables.
+subdirs=
+MFLAGS= MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+# Maximum number of lines to put in a shell here document.
+ac_max_here_lines=12
+
+ac_prev=
+for ac_option
+do
+
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval "$ac_prev=\$ac_option"
+    ac_prev=
+    continue
+  fi
+
+  case "$ac_option" in
+  -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+  *) ac_optarg= ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case "$ac_option" in
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir="$ac_optarg" ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build="$ac_optarg" ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file="$ac_optarg" ;;
+
+  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+  | --da=*)
+    datadir="$ac_optarg" ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
+      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+    fi
+    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+    eval "enable_${ac_feature}=no" ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
+      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+    fi
+    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+    case "$ac_option" in
+      *=*) ;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "enable_${ac_feature}='$ac_optarg'" ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix="$ac_optarg" ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he)
+    # Omit some internal or obsolete options to make the list less imposing.
+    # This message is too long to be a string in the A/UX 3.1 sh.
+    cat << EOF
+Usage: configure [options] [host]
+Options: [defaults in brackets after descriptions]
+Configuration:
+  --cache-file=FILE       cache test results in FILE
+  --help                  print this message
+  --no-create             do not create output files
+  --quiet, --silent       do not print \`checking...' messages
+  --version               print the version of autoconf that created configure
+Directory and file names:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [same as prefix]
+  --bindir=DIR            user executables in DIR [EPREFIX/bin]
+  --sbindir=DIR           system admin executables in DIR [EPREFIX/sbin]
+  --libexecdir=DIR        program executables in DIR [EPREFIX/libexec]
+  --datadir=DIR           read-only architecture-independent data in DIR
+                          [PREFIX/share]
+  --sysconfdir=DIR        read-only single-machine data in DIR [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data in DIR
+                          [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data in DIR [PREFIX/var]
+  --libdir=DIR            object code libraries in DIR [EPREFIX/lib]
+  --includedir=DIR        C header files in DIR [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
+  --infodir=DIR           info documentation in DIR [PREFIX/info]
+  --mandir=DIR            man documentation in DIR [PREFIX/man]
+  --srcdir=DIR            find the sources in DIR [configure dir or ..]
+  --program-prefix=PREFIX prepend PREFIX to installed program names
+  --program-suffix=SUFFIX append SUFFIX to installed program names
+  --program-transform-name=PROGRAM
+                          run sed PROGRAM on installed program names
+EOF
+    cat << EOF
+Host type:
+  --build=BUILD           configure for building on BUILD [BUILD=HOST]
+  --host=HOST             configure for HOST [guessed]
+  --target=TARGET         configure for TARGET [TARGET=HOST]
+Features and packages:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --x-includes=DIR        X include files are in DIR
+  --x-libraries=DIR       X library files are in DIR
+EOF
+    if test -n "$ac_help"; then
+      echo "--enable and --with options recognized:$ac_help"
+    fi
+    exit 0 ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host="$ac_optarg" ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir="$ac_optarg" ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir="$ac_optarg" ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir="$ac_optarg" ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir="$ac_optarg" ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst \
+  | --locals | --local | --loca | --loc | --lo)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+    localstatedir="$ac_optarg" ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir="$ac_optarg" ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir="$ac_optarg" ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix="$ac_optarg" ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix="$ac_optarg" ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix="$ac_optarg" ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name="$ac_optarg" ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir="$ac_optarg" ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir="$ac_optarg" ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site="$ac_optarg" ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir="$ac_optarg" ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir="$ac_optarg" ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target="$ac_optarg" ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers)
+    echo "configure generated by autoconf version 2.13"
+    exit 0 ;;
+
+  -with-* | --with-*)
+    ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
+      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+    fi
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    case "$ac_option" in
+      *=*) ;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "with_${ac_package}='$ac_optarg'" ;;
+
+  -without-* | --without-*)
+    ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
+      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+    fi
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    eval "with_${ac_package}=no" ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes="$ac_optarg" ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries="$ac_optarg" ;;
+
+  -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+    ;;
+
+  *)
+    if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
+      echo "configure: warning: $ac_option: invalid host type" 1>&2
+    fi
+    if test "x$nonopt" != xNONE; then
+      { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
+    fi
+    nonopt="$ac_option"
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+fi
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+# File descriptor usage:
+# 0 standard input
+# 1 file creation
+# 2 errors and warnings
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 6 checking for... messages and results
+# 5 compiler messages saved in config.log
+if test "$silent" = yes; then
+  exec 6>/dev/null
+else
+  exec 6>&1
+fi
+exec 5>./config.log
+
+echo "\
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+" 1>&5
+
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell metacharacters.
+ac_configure_args=
+for ac_arg
+do
+  case "$ac_arg" in
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c) ;;
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+  *" "*|*"     "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
+  ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+  *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+  esac
+done
+
+# NLS nuisances.
+# Only set these to C if already set.  These must not be set unconditionally
+# because not all systems understand e.g. LANG=C (notably SCO).
+# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
+# Non-C LC_CTYPE values break the ctype check.
+if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
+if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo > confdefs.h
+
+# A filename unique to this package, relative to the directory that
+# configure is in, which we can look for to find out if srcdir is correct.
+ac_unique_file=pdf2swf/swfoutput.h
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then its parent.
+  ac_prog=$0
+  ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
+  test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+  srcdir=$ac_confdir
+  if test ! -r $srcdir/$ac_unique_file; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+  if test "$ac_srcdir_defaulted" = yes; then
+    { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+  else
+    { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+  fi
+fi
+srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+  if test "x$prefix" != xNONE; then
+    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+  else
+    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+  fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+  if test -r "$ac_site_file"; then
+    echo "loading site script $ac_site_file"
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  echo "loading cache $cache_file"
+  . $cache_file
+else
+  echo "creating cache $cache_file"
+  > $cache_file
+fi
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+ac_exeext=
+ac_objext=o
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+  # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
+  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+    ac_n= ac_c='
+' ac_t='       '
+  else
+    ac_n=-n ac_c= ac_t=
+  fi
+else
+  ac_n= ac_c='\c' ac_t=
+fi
+
+
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+  if test -f $ac_dir/install-sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f $ac_dir/install.sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
+fi
+ac_config_guess=$ac_aux_dir/config.guess
+ac_config_sub=$ac_aux_dir/config.sub
+ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+echo "configure:558: checking for a BSD compatible install" >&5
+if test -z "$INSTALL"; then
+if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+    IFS="${IFS=        }"; ac_save_IFS="$IFS"; IFS=":"
+  for ac_dir in $PATH; do
+    # Account for people who put trailing slashes in PATH elements.
+    case "$ac_dir/" in
+    /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+    *)
+      # OSF1 and SCO ODT 3.0 have their own names for install.
+      # Don't use installbsd from OSF since it installs stuff as root
+      # by default.
+      for ac_prog in ginstall scoinst install; do
+        if test -f $ac_dir/$ac_prog; then
+         if test $ac_prog = install &&
+            grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+           # AIX install.  It has an incompatible calling convention.
+           :
+         else
+           ac_cv_path_install="$ac_dir/$ac_prog -c"
+           break 2
+         fi
+       fi
+      done
+      ;;
+    esac
+  done
+  IFS="$ac_save_IFS"
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL="$ac_cv_path_install"
+  else
+    # As a last resort, use the slow shell script.  We don't cache a
+    # path for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the path is relative.
+    INSTALL="$ac_install_sh"
+  fi
+fi
+echo "$ac_t""$INSTALL" 1>&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
+echo "configure:611: checking whether build environment is sane" >&5
+# Just in case
+sleep 1
+echo timestamp > conftestfile
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftestfile`
+   fi
+   if test "$*" != "X $srcdir/configure conftestfile" \
+      && test "$*" != "X conftestfile $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      { echo "configure: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" 1>&2; exit 1; }
+   fi
+
+   test "$2" = conftestfile
+   )
+then
+   # Ok.
+   :
+else
+   { echo "configure: error: newly created file is older than distributed files!
+Check your system clock" 1>&2; exit 1; }
+fi
+rm -f conftest*
+echo "$ac_t""yes" 1>&6
+if test "$program_transform_name" = s,x,x,; then
+  program_transform_name=
+else
+  # Double any \ or $.  echo might interpret backslashes.
+  cat <<\EOF_SED > conftestsed
+s,\\,\\\\,g; s,\$,$$,g
+EOF_SED
+  program_transform_name="`echo $program_transform_name|sed -f conftestsed`"
+  rm -f conftestsed
+fi
+test "$program_prefix" != NONE &&
+  program_transform_name="s,^,${program_prefix},; $program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s,\$\$,${program_suffix},; $program_transform_name"
+
+# sed with no file args requires a program.
+test "$program_transform_name" = "" && program_transform_name="s,x,x,"
+
+echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
+echo "configure:668: checking whether ${MAKE-make} sets \${MAKE}" >&5
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftestmake <<\EOF
+all:
+       @echo 'ac_maketemp="${MAKE}"'
+EOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+  eval ac_cv_prog_make_${ac_make}_set=yes
+else
+  eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftestmake
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  SET_MAKE=
+else
+  echo "$ac_t""no" 1>&6
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+
+PACKAGE=swftools
+
+VERSION=pre0.0.2
+
+if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
+  { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
+fi
+cat >> confdefs.h <<EOF
+#define PACKAGE "$PACKAGE"
+EOF
+
+cat >> confdefs.h <<EOF
+#define VERSION "$VERSION"
+EOF
+
+
+
+missing_dir=`cd $ac_aux_dir && pwd`
+echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
+echo "configure:714: checking for working aclocal" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if (aclocal --version) < /dev/null > /dev/null 2>&1; then
+   ACLOCAL=aclocal
+   echo "$ac_t""found" 1>&6
+else
+   ACLOCAL="$missing_dir/missing aclocal"
+   echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
+echo "configure:727: checking for working autoconf" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if (autoconf --version) < /dev/null > /dev/null 2>&1; then
+   AUTOCONF=autoconf
+   echo "$ac_t""found" 1>&6
+else
+   AUTOCONF="$missing_dir/missing autoconf"
+   echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working automake""... $ac_c" 1>&6
+echo "configure:740: checking for working automake" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if (automake --version) < /dev/null > /dev/null 2>&1; then
+   AUTOMAKE=automake
+   echo "$ac_t""found" 1>&6
+else
+   AUTOMAKE="$missing_dir/missing automake"
+   echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
+echo "configure:753: checking for working autoheader" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if (autoheader --version) < /dev/null > /dev/null 2>&1; then
+   AUTOHEADER=autoheader
+   echo "$ac_t""found" 1>&6
+else
+   AUTOHEADER="$missing_dir/missing autoheader"
+   echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
+echo "configure:766: checking for working makeinfo" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if (makeinfo --version) < /dev/null > /dev/null 2>&1; then
+   MAKEINFO=makeinfo
+   echo "$ac_t""found" 1>&6
+else
+   MAKEINFO="$missing_dir/missing makeinfo"
+   echo "$ac_t""missing" 1>&6
+fi
+
+
+if test "$program_transform_name" = s,x,x,; then
+  program_transform_name=
+else
+  # Double any \ or $.  echo might interpret backslashes.
+  cat <<\EOF_SED > conftestsed
+s,\\,\\\\,g; s,\$,$$,g
+EOF_SED
+  program_transform_name="`echo $program_transform_name|sed -f conftestsed`"
+  rm -f conftestsed
+fi
+test "$program_prefix" != NONE &&
+  program_transform_name="s,^,${program_prefix},; $program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s,\$\$,${program_suffix},; $program_transform_name"
+
+# sed with no file args requires a program.
+test "$program_transform_name" = "" && program_transform_name="s,x,x,"
+
+
+ echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
+echo "configure:800: checking for Cygwin environment" >&5
+if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 805 "configure"
+#include "confdefs.h"
+
+int main() {
+
+#ifndef __CYGWIN__
+#define __CYGWIN__ __CYGWIN32__
+#endif
+return __CYGWIN__;
+; return 0; }
+EOF
+if { (eval echo configure:816: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  ac_cv_cygwin=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_cygwin=no
+fi
+rm -f conftest*
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_cygwin" 1>&6
+CYGWIN=
+test "$ac_cv_cygwin" = yes && CYGWIN=yes
+ echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6
+echo "configure:833: checking for mingw32 environment" >&5
+if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 838 "configure"
+#include "confdefs.h"
+
+int main() {
+return __MINGW32__;
+; return 0; }
+EOF
+if { (eval echo configure:845: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  ac_cv_mingw32=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_mingw32=no
+fi
+rm -f conftest*
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_mingw32" 1>&6
+MINGW32=
+test "$ac_cv_mingw32" = yes && MINGW32=yes
+
+
+echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
+echo "configure:864: checking for executable suffix" >&5
+if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$CYGWIN" = yes || test "$MINGW32" = yes; then
+  ac_cv_exeext=.exe
+else
+  rm -f conftest*
+  echo 'int main () { return 0; }' > conftest.$ac_ext
+  ac_cv_exeext=
+  if { (eval echo configure:874: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+    for file in conftest.*; do
+      case $file in
+      *.c | *.o | *.obj) ;;
+      *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
+      esac
+    done
+  else
+    { echo "configure: error: installation or configuration problem: compiler cannot create executables." 1>&2; exit 1; }
+  fi
+  rm -f conftest*
+  test x"${ac_cv_exeext}" = x && ac_cv_exeext=no
+fi
+fi
+
+EXEEXT=""
+test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext}
+echo "$ac_t""${ac_cv_exeext}" 1>&6
+ac_exeext=$EXEEXT
+
+
+export CFLAGS
+CFLAGS="-O2 -fomit-frame-pointer"
+export CXXFLAGS
+CXXFLAGS="-O2 -fomit-frame-pointer"
+ for ac_prog in mawk gawk nawk awk
+do
+# Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:904: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_AWK="$ac_prog"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+fi
+fi
+AWK="$ac_cv_prog_AWK"
+if test -n "$AWK"; then
+  echo "$ac_t""$AWK" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+test -n "$AWK" && break
+done
+
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:936: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_CC="gcc"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:966: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_prog_rejected=no
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
+        ac_prog_rejected=yes
+       continue
+      fi
+      ac_cv_prog_CC="cc"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# -gt 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    set dummy "$ac_dir/$ac_word" "$@"
+    shift
+    ac_cv_prog_CC="$@"
+  fi
+fi
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+  if test -z "$CC"; then
+    case "`uname -s`" in
+    *win32* | *WIN32*)
+      # Extract the first word of "cl", so it can be a program name with args.
+set dummy cl; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1017: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_CC="cl"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+ ;;
+    esac
+  fi
+  test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
+echo "configure:1049: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+cat > conftest.$ac_ext << EOF
+
+#line 1060 "configure"
+#include "confdefs.h"
+
+main(){return(0);}
+EOF
+if { (eval echo configure:1065: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  ac_cv_prog_cc_works=yes
+  # If we can't run a trivial program, we are probably using a cross compiler.
+  if (./conftest; exit) 2>/dev/null; then
+    ac_cv_prog_cc_cross=no
+  else
+    ac_cv_prog_cc_cross=yes
+  fi
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  ac_cv_prog_cc_works=no
+fi
+rm -fr conftest*
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
+if test $ac_cv_prog_cc_works = no; then
+  { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
+fi
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
+echo "configure:1091: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
+echo "configure:1096: checking whether we are using GNU C" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.c <<EOF
+#ifdef __GNUC__
+  yes;
+#endif
+EOF
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1105: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+  ac_cv_prog_gcc=yes
+else
+  ac_cv_prog_gcc=no
+fi
+fi
+
+echo "$ac_t""$ac_cv_prog_gcc" 1>&6
+
+if test $ac_cv_prog_gcc = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+
+ac_test_CFLAGS="${CFLAGS+set}"
+ac_save_CFLAGS="$CFLAGS"
+CFLAGS=
+echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
+echo "configure:1124: checking whether ${CC-cc} accepts -g" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  echo 'void f(){}' > conftest.c
+if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+  ac_cv_prog_cc_g=yes
+else
+  ac_cv_prog_cc_g=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS="$ac_save_CFLAGS"
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+
+ echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
+echo "configure:1156: checking how to run the C preprocessor" >&5
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+    # This must be in double quotes, not single quotes, because CPP may get
+  # substituted into the Makefile and "${CC-cc}" will confuse make.
+  CPP="${CC-cc} -E"
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp.
+  cat > conftest.$ac_ext <<EOF
+#line 1171 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1177: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CPP="${CC-cc} -E -traditional-cpp"
+  cat > conftest.$ac_ext <<EOF
+#line 1188 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1194: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CPP="${CC-cc} -nologo -E"
+  cat > conftest.$ac_ext <<EOF
+#line 1205 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1211: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CPP=/lib/cpp
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+  ac_cv_prog_CPP="$CPP"
+fi
+  CPP="$ac_cv_prog_CPP"
+else
+  ac_cv_prog_CPP="$CPP"
+fi
+echo "$ac_t""$CPP" 1>&6
+
+ for ac_prog in $CCC c++ g++ gcc CC cxx cc++ cl
+do
+# Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1240: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_CXX="$ac_prog"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+fi
+fi
+CXX="$ac_cv_prog_CXX"
+if test -n "$CXX"; then
+  echo "$ac_t""$CXX" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+test -n "$CXX" && break
+done
+test -n "$CXX" || CXX="gcc"
+
+
+echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
+echo "configure:1272: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
+
+ac_ext=C
+# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cxx_cross
+
+cat > conftest.$ac_ext << EOF
+
+#line 1283 "configure"
+#include "confdefs.h"
+
+int main(){return(0);}
+EOF
+if { (eval echo configure:1288: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  ac_cv_prog_cxx_works=yes
+  # If we can't run a trivial program, we are probably using a cross compiler.
+  if (./conftest; exit) 2>/dev/null; then
+    ac_cv_prog_cxx_cross=no
+  else
+    ac_cv_prog_cxx_cross=yes
+  fi
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  ac_cv_prog_cxx_works=no
+fi
+rm -fr conftest*
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo "$ac_t""$ac_cv_prog_cxx_works" 1>&6
+if test $ac_cv_prog_cxx_works = no; then
+  { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; }
+fi
+echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
+echo "configure:1314: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6
+cross_compiling=$ac_cv_prog_cxx_cross
+
+echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6
+echo "configure:1319: checking whether we are using GNU C++" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.C <<EOF
+#ifdef __GNUC__
+  yes;
+#endif
+EOF
+if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1328: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+  ac_cv_prog_gxx=yes
+else
+  ac_cv_prog_gxx=no
+fi
+fi
+
+echo "$ac_t""$ac_cv_prog_gxx" 1>&6
+
+if test $ac_cv_prog_gxx = yes; then
+  GXX=yes
+else
+  GXX=
+fi
+
+ac_test_CXXFLAGS="${CXXFLAGS+set}"
+ac_save_CXXFLAGS="$CXXFLAGS"
+CXXFLAGS=
+echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
+echo "configure:1347: checking whether ${CXX-g++} accepts -g" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  echo 'void f(){}' > conftest.cc
+if test -z "`${CXX-g++} -g -c conftest.cc 2>&1`"; then
+  ac_cv_prog_cxx_g=yes
+else
+  ac_cv_prog_cxx_g=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_prog_cxx_g" 1>&6
+if test "$ac_test_CXXFLAGS" = set; then
+  CXXFLAGS="$ac_save_CXXFLAGS"
+elif test $ac_cv_prog_cxx_g = yes; then
+  if test "$GXX" = yes; then
+    CXXFLAGS="-g -O2"
+  else
+    CXXFLAGS="-g"
+  fi
+else
+  if test "$GXX" = yes; then
+    CXXFLAGS="-O2"
+  else
+    CXXFLAGS=
+  fi
+fi
+
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1381: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_RANLIB="ranlib"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
+fi
+fi
+RANLIB="$ac_cv_prog_RANLIB"
+if test -n "$RANLIB"; then
+  echo "$ac_t""$RANLIB" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+ echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
+echo "configure:1409: checking whether ${MAKE-make} sets \${MAKE}" >&5
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftestmake <<\EOF
+all:
+       @echo 'ac_maketemp="${MAKE}"'
+EOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+  eval ac_cv_prog_make_${ac_make}_set=yes
+else
+  eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftestmake
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  SET_MAKE=
+else
+  echo "$ac_t""no" 1>&6
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+ # Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+echo "configure:1447: checking for a BSD compatible install" >&5
+if test -z "$INSTALL"; then
+if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+    IFS="${IFS=        }"; ac_save_IFS="$IFS"; IFS=":"
+  for ac_dir in $PATH; do
+    # Account for people who put trailing slashes in PATH elements.
+    case "$ac_dir/" in
+    /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+    *)
+      # OSF1 and SCO ODT 3.0 have their own names for install.
+      # Don't use installbsd from OSF since it installs stuff as root
+      # by default.
+      for ac_prog in ginstall scoinst install; do
+        if test -f $ac_dir/$ac_prog; then
+         if test $ac_prog = install &&
+            grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+           # AIX install.  It has an incompatible calling convention.
+           :
+         else
+           ac_cv_path_install="$ac_dir/$ac_prog -c"
+           break 2
+         fi
+       fi
+      done
+      ;;
+    esac
+  done
+  IFS="$ac_save_IFS"
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL="$ac_cv_path_install"
+  else
+    # As a last resort, use the slow shell script.  We don't cache a
+    # path for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the path is relative.
+    INSTALL="$ac_install_sh"
+  fi
+fi
+echo "$ac_t""$INSTALL" 1>&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+ echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
+echo "configure:1500: checking whether ln -s works" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  rm -f conftestdata
+if ln -s X conftestdata 2>/dev/null
+then
+  rm -f conftestdata
+  ac_cv_prog_LN_S="ln -s"
+else
+  ac_cv_prog_LN_S=ln
+fi
+fi
+LN_S="$ac_cv_prog_LN_S"
+if test "$ac_cv_prog_LN_S" = "ln -s"; then
+  echo "$ac_t""yes" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+
+ echo $ac_n "checking for sin in -lm""... $ac_c" 1>&6
+echo "configure:1522: checking for sin in -lm" >&5
+ac_lib_var=`echo m'_'sin | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lm  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1530 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char sin();
+
+int main() {
+sin()
+; return 0; }
+EOF
+if { (eval echo configure:1541: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_lib=HAVE_LIB`echo m | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-lm $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+echo "Error: Math library not found.";exit
+fi
+
+ echo $ac_n "checking for jpeg_write_raw_data in -ljpeg""... $ac_c" 1>&6
+echo "configure:1570: checking for jpeg_write_raw_data in -ljpeg" >&5
+ac_lib_var=`echo jpeg'_'jpeg_write_raw_data | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-ljpeg  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1578 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char jpeg_write_raw_data();
+
+int main() {
+jpeg_write_raw_data()
+; return 0; }
+EOF
+if { (eval echo configure:1589: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_lib=HAVE_LIB`echo jpeg | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-ljpeg $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+echo "Error: The jpeg library jpeglib is required.";exit
+fi
+
+ echo $ac_n "checking for crc32 in -lz""... $ac_c" 1>&6
+echo "configure:1618: checking for crc32 in -lz" >&5
+ac_lib_var=`echo z'_'crc32 | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lz  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1626 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char crc32();
+
+int main() {
+crc32()
+; return 0; }
+EOF
+if { (eval echo configure:1637: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_lib=HAVE_LIB`echo z | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-lz $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+echo "Error: The zlib compressiong handling library is required.";exit
+fi
+
+ echo $ac_n "checking for T1_LoadFont in -lt1""... $ac_c" 1>&6
+echo "configure:1666: checking for T1_LoadFont in -lt1" >&5
+ac_lib_var=`echo t1'_'T1_LoadFont | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lt1  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1674 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char T1_LoadFont();
+
+int main() {
+T1_LoadFont()
+; return 0; }
+EOF
+if { (eval echo configure:1685: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_lib=HAVE_LIB`echo t1 | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-lt1 $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+echo "Error: the T1lib truetype handling library is required.";exit
+fi
+
+ echo $ac_n "checking for pthread_create in -lpthread""... $ac_c" 1>&6
+echo "configure:1714: checking for pthread_create in -lpthread" >&5
+ac_lib_var=`echo pthread'_'pthread_create | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lpthread  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1722 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char pthread_create();
+
+int main() {
+pthread_create()
+; return 0; }
+EOF
+if { (eval echo configure:1733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_lib=HAVE_LIB`echo pthread | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-lpthread $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+ echo $ac_n "checking for XFlush in -lX11""... $ac_c" 1>&6
+echo "configure:1761: checking for XFlush in -lX11" >&5
+ac_lib_var=`echo X11'_'XFlush | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lX11  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1769 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char XFlush();
+
+int main() {
+XFlush()
+; return 0; }
+EOF
+if { (eval echo configure:1780: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_lib=HAVE_LIB`echo X11 | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-lX11 $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+
+
+
+
+ # If we find X, set shell vars x_includes and x_libraries to the
+# paths, otherwise set no_x=yes.
+# Uses ac_ vars as temps to allow command line to override cache and checks.
+# --without-x overrides everything else, but does not touch the cache.
+echo $ac_n "checking for X""... $ac_c" 1>&6
+echo "configure:1816: checking for X" >&5
+
+# Check whether --with-x or --without-x was given.
+if test "${with_x+set}" = set; then
+  withval="$with_x"
+  :
+fi
+
+# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
+if test "x$with_x" = xno; then
+  # The user explicitly disabled X.
+  have_x=disabled
+else
+  if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then
+    # Both variables are already set.
+    have_x=yes
+  else
+if eval "test \"`echo '$''{'ac_cv_have_x'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  # One or both of the vars are not set, and there is no cached value.
+ac_x_includes=NO ac_x_libraries=NO
+rm -fr conftestdir
+if mkdir conftestdir; then
+  cd conftestdir
+  # Make sure to not put "make" in the Imakefile rules, since we grep it out.
+  cat > Imakefile <<'EOF'
+acfindx:
+       @echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"'
+EOF
+  if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
+    # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+    eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
+    # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
+    for ac_extension in a so sl; do
+      if test ! -f $ac_im_usrlibdir/libX11.$ac_extension &&
+        test -f $ac_im_libdir/libX11.$ac_extension; then
+        ac_im_usrlibdir=$ac_im_libdir; break
+      fi
+    done
+    # Screen out bogus values from the imake configuration.  They are
+    # bogus both because they are the default anyway, and because
+    # using them would break gcc on systems where it needs fixed includes.
+    case "$ac_im_incroot" in
+       /usr/include) ;;
+       *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes="$ac_im_incroot" ;;
+    esac
+    case "$ac_im_usrlibdir" in
+       /usr/lib | /lib) ;;
+       *) test -d "$ac_im_usrlibdir" && ac_x_libraries="$ac_im_usrlibdir" ;;
+    esac
+  fi
+  cd ..
+  rm -fr conftestdir
+fi
+
+if test "$ac_x_includes" = NO; then
+  # Guess where to find include files, by looking for this one X11 .h file.
+  test -z "$x_direct_test_include" && x_direct_test_include=X11/Intrinsic.h
+
+  # First, try using that file with no special directory specified.
+cat > conftest.$ac_ext <<EOF
+#line 1878 "configure"
+#include "confdefs.h"
+#include <$x_direct_test_include>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1883: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  # We can compile using X headers with no special include directory.
+ac_x_includes=
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  # Look for the header file in a standard set of common directories.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+  for ac_dir in               \
+    /usr/X11/include          \
+    /usr/X11R6/include        \
+    /usr/X11R5/include        \
+    /usr/X11R4/include        \
+                              \
+    /usr/include/X11          \
+    /usr/include/X11R6        \
+    /usr/include/X11R5        \
+    /usr/include/X11R4        \
+                              \
+    /usr/local/X11/include    \
+    /usr/local/X11R6/include  \
+    /usr/local/X11R5/include  \
+    /usr/local/X11R4/include  \
+                              \
+    /usr/local/include/X11    \
+    /usr/local/include/X11R6  \
+    /usr/local/include/X11R5  \
+    /usr/local/include/X11R4  \
+                              \
+    /usr/X386/include         \
+    /usr/x386/include         \
+    /usr/XFree86/include/X11  \
+                              \
+    /usr/include              \
+    /usr/local/include        \
+    /usr/unsupported/include  \
+    /usr/athena/include       \
+    /usr/local/x11r5/include  \
+    /usr/lpp/Xamples/include  \
+                              \
+    /usr/openwin/include      \
+    /usr/openwin/share/include \
+    ; \
+  do
+    if test -r "$ac_dir/$x_direct_test_include"; then
+      ac_x_includes=$ac_dir
+      break
+    fi
+  done
+fi
+rm -f conftest*
+fi # $ac_x_includes = NO
+
+if test "$ac_x_libraries" = NO; then
+  # Check for the libraries.
+
+  test -z "$x_direct_test_library" && x_direct_test_library=Xt
+  test -z "$x_direct_test_function" && x_direct_test_function=XtMalloc
+
+  # See if we find them without any special options.
+  # Don't add to $LIBS permanently.
+  ac_save_LIBS="$LIBS"
+  LIBS="-l$x_direct_test_library $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1952 "configure"
+#include "confdefs.h"
+
+int main() {
+${x_direct_test_function}()
+; return 0; }
+EOF
+if { (eval echo configure:1959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  LIBS="$ac_save_LIBS"
+# We can link X programs with no special library path.
+ac_x_libraries=
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  LIBS="$ac_save_LIBS"
+# First see if replacing the include by lib works.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+for ac_dir in `echo "$ac_x_includes" | sed s/include/lib/` \
+    /usr/X11/lib          \
+    /usr/X11R6/lib        \
+    /usr/X11R5/lib        \
+    /usr/X11R4/lib        \
+                          \
+    /usr/lib/X11          \
+    /usr/lib/X11R6        \
+    /usr/lib/X11R5        \
+    /usr/lib/X11R4        \
+                          \
+    /usr/local/X11/lib    \
+    /usr/local/X11R6/lib  \
+    /usr/local/X11R5/lib  \
+    /usr/local/X11R4/lib  \
+                          \
+    /usr/local/lib/X11    \
+    /usr/local/lib/X11R6  \
+    /usr/local/lib/X11R5  \
+    /usr/local/lib/X11R4  \
+                          \
+    /usr/X386/lib         \
+    /usr/x386/lib         \
+    /usr/XFree86/lib/X11  \
+                          \
+    /usr/lib              \
+    /usr/local/lib        \
+    /usr/unsupported/lib  \
+    /usr/athena/lib       \
+    /usr/local/x11r5/lib  \
+    /usr/lpp/Xamples/lib  \
+    /lib/usr/lib/X11     \
+                          \
+    /usr/openwin/lib      \
+    /usr/openwin/share/lib \
+    ; \
+do
+  for ac_extension in a so sl; do
+    if test -r $ac_dir/lib${x_direct_test_library}.$ac_extension; then
+      ac_x_libraries=$ac_dir
+      break 2
+    fi
+  done
+done
+fi
+rm -f conftest*
+fi # $ac_x_libraries = NO
+
+if test "$ac_x_includes" = NO || test "$ac_x_libraries" = NO; then
+  # Didn't find X anywhere.  Cache the known absence of X.
+  ac_cv_have_x="have_x=no"
+else
+  # Record where we found X for the cache.
+  ac_cv_have_x="have_x=yes \
+               ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries"
+fi
+fi
+  fi
+  eval "$ac_cv_have_x"
+fi # $with_x != no
+
+if test "$have_x" != yes; then
+  echo "$ac_t""$have_x" 1>&6
+  no_x=yes
+else
+  # If each of the values was on the command line, it overrides each guess.
+  test "x$x_includes" = xNONE && x_includes=$ac_x_includes
+  test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
+  # Update the cache value to reflect the command line values.
+  ac_cv_have_x="have_x=yes \
+               ac_x_includes=$x_includes ac_x_libraries=$x_libraries"
+  echo "$ac_t""libraries $x_libraries, headers $x_includes" 1>&6
+fi
+
+ ac_header_dirent=no
+for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6
+echo "configure:2050: checking for $ac_hdr that defines DIR" >&5
+if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2055 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <$ac_hdr>
+int main() {
+DIR *dirp = 0;
+; return 0; }
+EOF
+if { (eval echo configure:2063: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  eval "ac_cv_header_dirent_$ac_safe=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_dirent_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_dirent_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+ ac_header_dirent=$ac_hdr; break
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
+if test $ac_header_dirent = dirent.h; then
+echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6
+echo "configure:2088: checking for opendir in -ldir" >&5
+ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-ldir  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2096 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char opendir();
+
+int main() {
+opendir()
+; return 0; }
+EOF
+if { (eval echo configure:2107: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  LIBS="$LIBS -ldir"
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+else
+echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
+echo "configure:2129: checking for opendir in -lx" >&5
+ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lx  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2137 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char opendir();
+
+int main() {
+opendir()
+; return 0; }
+EOF
+if { (eval echo configure:2148: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  LIBS="$LIBS -lx"
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+fi
+
+ echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
+echo "configure:2171: checking for ANSI C header files" >&5
+if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2176 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:2184: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  ac_cv_header_stdc=yes
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+cat > conftest.$ac_ext <<EOF
+#line 2201 "configure"
+#include "confdefs.h"
+#include <string.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "memchr" >/dev/null 2>&1; then
+  :
+else
+  rm -rf conftest*
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+cat > conftest.$ac_ext <<EOF
+#line 2219 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "free" >/dev/null 2>&1; then
+  :
+else
+  rm -rf conftest*
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+if test "$cross_compiling" = yes; then
+  :
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2240 "configure"
+#include "confdefs.h"
+#include <ctype.h>
+#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int main () { int i; for (i = 0; i < 256; i++)
+if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
+exit (0); }
+
+EOF
+if { (eval echo configure:2251: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  :
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  ac_cv_header_stdc=no
+fi
+rm -fr conftest*
+fi
+
+fi
+fi
+
+echo "$ac_t""$ac_cv_header_stdc" 1>&6
+if test $ac_cv_header_stdc = yes; then
+  cat >> confdefs.h <<\EOF
+#define STDC_HEADERS 1
+EOF
+
+fi
+
+ for ac_hdr in math.h fcntl.h limits.h malloc.h unistd.h memory.h zlib.h jpeglib.h t1lib.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:2278: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2283 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:2288: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+
+
+
+
+ echo $ac_n "checking for working const""... $ac_c" 1>&6
+echo "configure:2319: checking for working const" >&5
+if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2324 "configure"
+#include "confdefs.h"
+
+int main() {
+
+/* Ultrix mips cc rejects this.  */
+typedef int charset[2]; const charset x;
+/* SunOS 4.1.1 cc rejects this.  */
+char const *const *ccp;
+char **p;
+/* NEC SVR4.0.2 mips cc rejects this.  */
+struct point {int x, y;};
+static struct point const zero = {0,0};
+/* AIX XL C 1.02.0.0 rejects this.
+   It does not let you subtract one const X* pointer from another in an arm
+   of an if-expression whose if-part is not a constant expression */
+const char *g = "string";
+ccp = &g + (g ? g-g : 0);
+/* HPUX 7.0 cc rejects these. */
+++ccp;
+p = (char**) ccp;
+ccp = (char const *const *) p;
+{ /* SCO 3.2v4 cc rejects this.  */
+  char *t;
+  char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+  *t++ = 0;
+}
+{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
+  int x[] = {25, 17};
+  const int *foo = &x[0];
+  ++foo;
+}
+{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+  typedef const int *iptr;
+  iptr p = 0;
+  ++p;
+}
+{ /* AIX XL C 1.02.0.0 rejects this saying
+     "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+  struct s { int j; const int *ap[3]; };
+  struct s *b; b->j = 5;
+}
+{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+  const int foo = 10;
+}
+
+; return 0; }
+EOF
+if { (eval echo configure:2373: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  ac_cv_c_const=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_c_const=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_c_const" 1>&6
+if test $ac_cv_c_const = no; then
+  cat >> confdefs.h <<\EOF
+#define const 
+EOF
+
+fi
+
+ echo $ac_n "checking for inline""... $ac_c" 1>&6
+echo "configure:2394: checking for inline" >&5
+if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+  cat > conftest.$ac_ext <<EOF
+#line 2401 "configure"
+#include "confdefs.h"
+
+int main() {
+} $ac_kw foo() {
+; return 0; }
+EOF
+if { (eval echo configure:2408: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  ac_cv_c_inline=$ac_kw; break
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+fi
+rm -f conftest*
+done
+
+fi
+
+echo "$ac_t""$ac_cv_c_inline" 1>&6
+case "$ac_cv_c_inline" in
+  inline | yes) ;;
+  no) cat >> confdefs.h <<\EOF
+#define inline 
+EOF
+ ;;
+  *)  cat >> confdefs.h <<EOF
+#define inline $ac_cv_c_inline
+EOF
+ ;;
+esac
+
+ echo $ac_n "checking for off_t""... $ac_c" 1>&6
+echo "configure:2434: checking for off_t" >&5
+if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2439 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#if STDC_HEADERS
+#include <stdlib.h>
+#include <stddef.h>
+#endif
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "(^|[^a-zA-Z_0-9])off_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
+  rm -rf conftest*
+  ac_cv_type_off_t=yes
+else
+  rm -rf conftest*
+  ac_cv_type_off_t=no
+fi
+rm -f conftest*
+
+fi
+echo "$ac_t""$ac_cv_type_off_t" 1>&6
+if test $ac_cv_type_off_t = no; then
+  cat >> confdefs.h <<\EOF
+#define off_t long
+EOF
+
+fi
+
+ echo $ac_n "checking for size_t""... $ac_c" 1>&6
+echo "configure:2467: checking for size_t" >&5
+if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2472 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#if STDC_HEADERS
+#include <stdlib.h>
+#include <stddef.h>
+#endif
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "(^|[^a-zA-Z_0-9])size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
+  rm -rf conftest*
+  ac_cv_type_size_t=yes
+else
+  rm -rf conftest*
+  ac_cv_type_size_t=no
+fi
+rm -f conftest*
+
+fi
+echo "$ac_t""$ac_cv_type_size_t" 1>&6
+if test $ac_cv_type_size_t = no; then
+  cat >> confdefs.h <<\EOF
+#define size_t unsigned
+EOF
+
+fi
+
+ echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6
+echo "configure:2500: checking whether struct tm is in sys/time.h or time.h" >&5
+if eval "test \"`echo '$''{'ac_cv_struct_tm'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2505 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <time.h>
+int main() {
+struct tm *tp; tp->tm_sec;
+; return 0; }
+EOF
+if { (eval echo configure:2513: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  ac_cv_struct_tm=time.h
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_struct_tm=sys/time.h
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_struct_tm" 1>&6
+if test $ac_cv_struct_tm = sys/time.h; then
+  cat >> confdefs.h <<\EOF
+#define TM_IN_SYS_TIME 1
+EOF
+
+fi
+
+
+ echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6
+echo "configure:2535: checking for 8-bit clean memcmp" >&5
+if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+  ac_cv_func_memcmp_clean=no
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2543 "configure"
+#include "confdefs.h"
+
+main()
+{
+  char c0 = 0x40, c1 = 0x80, c2 = 0x81;
+  exit(memcmp(&c0, &c2, 1) < 0 && memcmp(&c1, &c2, 1) < 0 ? 0 : 1);
+}
+
+EOF
+if { (eval echo configure:2553: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  ac_cv_func_memcmp_clean=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  ac_cv_func_memcmp_clean=no
+fi
+rm -fr conftest*
+fi
+
+fi
+
+echo "$ac_t""$ac_cv_func_memcmp_clean" 1>&6
+test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}"
+
+ for ac_hdr in unistd.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:2574: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2579 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:2584: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+for ac_func in getpagesize
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:2613: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2618 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:2641: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+echo $ac_n "checking for working mmap""... $ac_c" 1>&6
+echo "configure:2666: checking for working mmap" >&5
+if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+  ac_cv_func_mmap_fixed_mapped=no
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2674 "configure"
+#include "confdefs.h"
+
+/* Thanks to Mike Haertel and Jim Avera for this test.
+   Here is a matrix of mmap possibilities:
+       mmap private not fixed
+       mmap private fixed at somewhere currently unmapped
+       mmap private fixed at somewhere already mapped
+       mmap shared not fixed
+       mmap shared fixed at somewhere currently unmapped
+       mmap shared fixed at somewhere already mapped
+   For private mappings, we should verify that changes cannot be read()
+   back from the file, nor mmap's back from the file at a different
+   address.  (There have been systems where private was not correctly
+   implemented like the infamous i386 svr4.0, and systems where the
+   VM page cache was not coherent with the filesystem buffer cache
+   like early versions of FreeBSD and possibly contemporary NetBSD.)
+   For shared mappings, we should conversely verify that changes get
+   propogated back to all the places they're supposed to be.
+
+   Grep wants private fixed already mapped.
+   The main things grep needs to know about mmap are:
+   * does it exist and is it safe to write into the mmap'd area
+   * how to use it (BSD variants)  */
+#include <sys/types.h>
+#include <fcntl.h>
+#include <sys/mman.h>
+
+/* This mess was copied from the GNU getpagesize.h.  */
+#ifndef HAVE_GETPAGESIZE
+# ifdef HAVE_UNISTD_H
+#  include <unistd.h>
+# endif
+
+/* Assume that all systems that can run configure have sys/param.h.  */
+# ifndef HAVE_SYS_PARAM_H
+#  define HAVE_SYS_PARAM_H 1
+# endif
+
+# ifdef _SC_PAGESIZE
+#  define getpagesize() sysconf(_SC_PAGESIZE)
+# else /* no _SC_PAGESIZE */
+#  ifdef HAVE_SYS_PARAM_H
+#   include <sys/param.h>
+#   ifdef EXEC_PAGESIZE
+#    define getpagesize() EXEC_PAGESIZE
+#   else /* no EXEC_PAGESIZE */
+#    ifdef NBPG
+#     define getpagesize() NBPG * CLSIZE
+#     ifndef CLSIZE
+#      define CLSIZE 1
+#     endif /* no CLSIZE */
+#    else /* no NBPG */
+#     ifdef NBPC
+#      define getpagesize() NBPC
+#     else /* no NBPC */
+#      ifdef PAGESIZE
+#       define getpagesize() PAGESIZE
+#      endif /* PAGESIZE */
+#     endif /* no NBPC */
+#    endif /* no NBPG */
+#   endif /* no EXEC_PAGESIZE */
+#  else /* no HAVE_SYS_PARAM_H */
+#   define getpagesize() 8192  /* punt totally */
+#  endif /* no HAVE_SYS_PARAM_H */
+# endif /* no _SC_PAGESIZE */
+
+#endif /* no HAVE_GETPAGESIZE */
+
+#ifdef __cplusplus
+extern "C" { void *malloc(unsigned); }
+#else
+char *malloc();
+#endif
+
+int
+main()
+{
+       char *data, *data2, *data3;
+       int i, pagesize;
+       int fd;
+
+       pagesize = getpagesize();
+
+       /*
+        * First, make a file with some known garbage in it.
+        */
+       data = malloc(pagesize);
+       if (!data)
+               exit(1);
+       for (i = 0; i < pagesize; ++i)
+               *(data + i) = rand();
+       umask(0);
+       fd = creat("conftestmmap", 0600);
+       if (fd < 0)
+               exit(1);
+       if (write(fd, data, pagesize) != pagesize)
+               exit(1);
+       close(fd);
+
+       /*
+        * Next, try to mmap the file at a fixed address which
+        * already has something else allocated at it.  If we can,
+        * also make sure that we see the same garbage.
+        */
+       fd = open("conftestmmap", O_RDWR);
+       if (fd < 0)
+               exit(1);
+       data2 = malloc(2 * pagesize);
+       if (!data2)
+               exit(1);
+       data2 += (pagesize - ((int) data2 & (pagesize - 1))) & (pagesize - 1);
+       if (data2 != mmap(data2, pagesize, PROT_READ | PROT_WRITE,
+           MAP_PRIVATE | MAP_FIXED, fd, 0L))
+               exit(1);
+       for (i = 0; i < pagesize; ++i)
+               if (*(data + i) != *(data2 + i))
+                       exit(1);
+
+       /*
+        * Finally, make sure that changes to the mapped area
+        * do not percolate back to the file as seen by read().
+        * (This is a bug on some variants of i386 svr4.0.)
+        */
+       for (i = 0; i < pagesize; ++i)
+               *(data2 + i) = *(data2 + i) + 1;
+       data3 = malloc(pagesize);
+       if (!data3)
+               exit(1);
+       if (read(fd, data3, pagesize) != pagesize)
+               exit(1);
+       for (i = 0; i < pagesize; ++i)
+               if (*(data + i) != *(data3 + i))
+                       exit(1);
+       close(fd);
+       unlink("conftestmmap");
+       exit(0);
+}
+
+EOF
+if { (eval echo configure:2814: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  ac_cv_func_mmap_fixed_mapped=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  ac_cv_func_mmap_fixed_mapped=no
+fi
+rm -fr conftest*
+fi
+
+fi
+
+echo "$ac_t""$ac_cv_func_mmap_fixed_mapped" 1>&6
+if test $ac_cv_func_mmap_fixed_mapped = yes; then
+  cat >> confdefs.h <<\EOF
+#define HAVE_MMAP 1
+EOF
+
+fi
+
+ echo $ac_n "checking for vprintf""... $ac_c" 1>&6
+echo "configure:2837: checking for vprintf" >&5
+if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2842 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char vprintf(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char vprintf();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_vprintf) || defined (__stub___vprintf)
+choke me
+#else
+vprintf();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:2865: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_vprintf=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_vprintf=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'vprintf`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  cat >> confdefs.h <<\EOF
+#define HAVE_VPRINTF 1
+EOF
+
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+if test "$ac_cv_func_vprintf" != yes; then
+echo $ac_n "checking for _doprnt""... $ac_c" 1>&6
+echo "configure:2889: checking for _doprnt" >&5
+if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2894 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char _doprnt(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char _doprnt();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub__doprnt) || defined (__stub____doprnt)
+choke me
+#else
+_doprnt();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:2917: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func__doprnt=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func__doprnt=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'_doprnt`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  cat >> confdefs.h <<\EOF
+#define HAVE_DOPRNT 1
+EOF
+
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+fi
+
+ for ac_func in getcwd putenv socket strcspn strdup strerror strstr
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:2944: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2949 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:2972: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+
+trap '' 1 2 15
+cat > confcache <<\EOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs.  It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already.  You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+EOF
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(set) 2>&1 |
+  case `(ac_space=' '; set | grep ac_space) 2>&1` in
+  *ac_space=\ *)
+    # `set' does not quote correctly, so add quotes (double-quote substitution
+    # turns \\\\ into \\, and sed turns \\ into \).
+    sed -n \
+      -e "s/'/'\\\\''/g" \
+      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+    ;;
+  *)
+    # `set' quotes correctly as required by POSIX, so do not add quotes.
+    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+    ;;
+  esac >> confcache
+if cmp -s $cache_file confcache; then
+  :
+else
+  if test -w $cache_file; then
+    echo "updating cache $cache_file"
+    cat confcache > $cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Any assignment to VPATH causes Sun make to only execute
+# the first set of double-colon rules, so remove it if not needed.
+# If there is a colon in the path, we need to keep it.
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[        ]*VPATH[        ]*=[^:]*$/d'
+fi
+
+trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+
+DEFS=-DHAVE_CONFIG_H
+
+# Without the "./", some shells look in PATH for config.status.
+: ${CONFIG_STATUS=./config.status}
+
+echo creating $CONFIG_STATUS
+rm -f $CONFIG_STATUS
+cat > $CONFIG_STATUS <<EOF
+#! /bin/sh
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# This directory was configured as follows,
+# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+#
+# $0 $ac_configure_args
+#
+# Compiler output produced by configure, useful for debugging
+# configure, is in ./config.log if it exists.
+
+ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
+for ac_option
+do
+  case "\$ac_option" in
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
+    exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
+  -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
+    echo "$CONFIG_STATUS generated by autoconf version 2.13"
+    exit 0 ;;
+  -help | --help | --hel | --he | --h)
+    echo "\$ac_cs_usage"; exit 0 ;;
+  *) echo "\$ac_cs_usage"; exit 1 ;;
+  esac
+done
+
+ac_given_srcdir=$srcdir
+ac_given_INSTALL="$INSTALL"
+
+trap 'rm -fr `echo "./release Makefile lib/Makefile src/Makefile pdf2swf/Makefile pdf2swf/xpdf/Makefile pdf2swf/fonts/Makefile config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
+$ac_vpsub
+$extrasub
+s%@SHELL@%$SHELL%g
+s%@CFLAGS@%$CFLAGS%g
+s%@CPPFLAGS@%$CPPFLAGS%g
+s%@CXXFLAGS@%$CXXFLAGS%g
+s%@FFLAGS@%$FFLAGS%g
+s%@DEFS@%$DEFS%g
+s%@LDFLAGS@%$LDFLAGS%g
+s%@LIBS@%$LIBS%g
+s%@exec_prefix@%$exec_prefix%g
+s%@prefix@%$prefix%g
+s%@program_transform_name@%$program_transform_name%g
+s%@bindir@%$bindir%g
+s%@sbindir@%$sbindir%g
+s%@libexecdir@%$libexecdir%g
+s%@datadir@%$datadir%g
+s%@sysconfdir@%$sysconfdir%g
+s%@sharedstatedir@%$sharedstatedir%g
+s%@localstatedir@%$localstatedir%g
+s%@libdir@%$libdir%g
+s%@includedir@%$includedir%g
+s%@oldincludedir@%$oldincludedir%g
+s%@infodir@%$infodir%g
+s%@mandir@%$mandir%g
+s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
+s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
+s%@INSTALL_DATA@%$INSTALL_DATA%g
+s%@PACKAGE@%$PACKAGE%g
+s%@VERSION@%$VERSION%g
+s%@ACLOCAL@%$ACLOCAL%g
+s%@AUTOCONF@%$AUTOCONF%g
+s%@AUTOMAKE@%$AUTOMAKE%g
+s%@AUTOHEADER@%$AUTOHEADER%g
+s%@MAKEINFO@%$MAKEINFO%g
+s%@SET_MAKE@%$SET_MAKE%g
+s%@EXEEXT@%$EXEEXT%g
+s%@AWK@%$AWK%g
+s%@CC@%$CC%g
+s%@CPP@%$CPP%g
+s%@CXX@%$CXX%g
+s%@RANLIB@%$RANLIB%g
+s%@LN_S@%$LN_S%g
+s%@HAVE_UNISTD_H@%$HAVE_UNISTD_H%g
+s%@LIBOBJS@%$LIBOBJS%g
+
+CEOF
+EOF
+
+cat >> $CONFIG_STATUS <<\EOF
+
+# Split the substitutions into bite-sized pieces for seds with
+# small command number limits, like on Digital OSF/1 and HP-UX.
+ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
+ac_file=1 # Number of current file.
+ac_beg=1 # First line for current file.
+ac_end=$ac_max_sed_cmds # Line after last line for current file.
+ac_more_lines=:
+ac_sed_cmds=""
+while $ac_more_lines; do
+  if test $ac_beg -gt 1; then
+    sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
+  else
+    sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+  fi
+  if test ! -s conftest.s$ac_file; then
+    ac_more_lines=false
+    rm -f conftest.s$ac_file
+  else
+    if test -z "$ac_sed_cmds"; then
+      ac_sed_cmds="sed -f conftest.s$ac_file"
+    else
+      ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+    fi
+    ac_file=`expr $ac_file + 1`
+    ac_beg=$ac_end
+    ac_end=`expr $ac_end + $ac_max_sed_cmds`
+  fi
+done
+if test -z "$ac_sed_cmds"; then
+  ac_sed_cmds=cat
+fi
+EOF
+
+cat >> $CONFIG_STATUS <<EOF
+
+CONFIG_FILES=\${CONFIG_FILES-"./release Makefile lib/Makefile src/Makefile pdf2swf/Makefile pdf2swf/xpdf/Makefile pdf2swf/fonts/Makefile"}
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case "$ac_file" in
+  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+  *) ac_file_in="${ac_file}.in" ;;
+  esac
+
+  # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
+
+  # Remove last slash and all that follows it.  Not all systems have dirname.
+  ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+  if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+    # The file is in a subdirectory.
+    test ! -d "$ac_dir" && mkdir "$ac_dir"
+    ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+    # A "../" for each directory in $ac_dir_suffix.
+    ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+  else
+    ac_dir_suffix= ac_dots=
+  fi
+
+  case "$ac_given_srcdir" in
+  .)  srcdir=.
+      if test -z "$ac_dots"; then top_srcdir=.
+      else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
+  /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+  *) # Relative path.
+    srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
+    top_srcdir="$ac_dots$ac_given_srcdir" ;;
+  esac
+
+  case "$ac_given_INSTALL" in
+  [/$]*) INSTALL="$ac_given_INSTALL" ;;
+  *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+  esac
+
+  echo creating "$ac_file"
+  rm -f "$ac_file"
+  configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
+  case "$ac_file" in
+  *Makefile*) ac_comsub="1i\\
+# $configure_input" ;;
+  *) ac_comsub= ;;
+  esac
+
+  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+  sed -e "$ac_comsub
+s%@configure_input@%$configure_input%g
+s%@srcdir@%$srcdir%g
+s%@top_srcdir@%$top_srcdir%g
+s%@INSTALL@%$INSTALL%g
+" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
+fi; done
+rm -f conftest.s*
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s%^\([  ]*\)#\([        ]*define[       ][      ]*\)'
+ac_dB='\([     ][      ]*\)[^  ]*%\1#\2'
+ac_dC='\3'
+ac_dD='%g'
+# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
+ac_uA='s%^\([  ]*\)#\([        ]*\)undef\([    ][      ]*\)'
+ac_uB='\([     ]\)%\1#\2define\3'
+ac_uC=' '
+ac_uD='\4%g'
+# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_eA='s%^\([  ]*\)#\([        ]*\)undef\([    ][      ]*\)'
+ac_eB='$%\1#\2define\3'
+ac_eC=' '
+ac_eD='%g'
+
+if test "${CONFIG_HEADERS+set}" != set; then
+EOF
+cat >> $CONFIG_STATUS <<EOF
+  CONFIG_HEADERS="config.h"
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+fi
+for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case "$ac_file" in
+  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+  *) ac_file_in="${ac_file}.in" ;;
+  esac
+
+  echo creating $ac_file
+
+  rm -f conftest.frag conftest.in conftest.out
+  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+  cat $ac_file_inputs > conftest.in
+
+EOF
+
+# Transform confdefs.h into a sed script conftest.vals that substitutes
+# the proper values into config.h.in to produce config.h.  And first:
+# Protect against being on the right side of a sed subst in config.status.
+# Protect against being in an unquoted here document in config.status.
+rm -f conftest.vals
+cat > conftest.hdr <<\EOF
+s/[\\&%]/\\&/g
+s%[\\$`]%\\&%g
+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
+s%ac_d%ac_u%gp
+s%ac_u%ac_e%gp
+EOF
+sed -n -f conftest.hdr confdefs.h > conftest.vals
+rm -f conftest.hdr
+
+# This sed command replaces #undef with comments.  This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >> conftest.vals <<\EOF
+s%^[   ]*#[    ]*undef[        ][      ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
+EOF
+
+# Break up conftest.vals because some shells have a limit on
+# the size of here documents, and old seds have small limits too.
+
+rm -f conftest.tail
+while :
+do
+  ac_lines=`grep -c . conftest.vals`
+  # grep -c gives empty output for an empty file on some AIX systems.
+  if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
+  # Write a limited-size here document to conftest.frag.
+  echo '  cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
+  echo 'CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+' >> $CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
+  rm -f conftest.vals
+  mv conftest.tail conftest.vals
+done
+rm -f conftest.vals
+
+cat >> $CONFIG_STATUS <<\EOF
+  rm -f conftest.frag conftest.h
+  echo "/* $ac_file.  Generated automatically by configure.  */" > conftest.h
+  cat conftest.in >> conftest.h
+  rm -f conftest.in
+  if cmp -s $ac_file conftest.h 2>/dev/null; then
+    echo "$ac_file is unchanged"
+    rm -f conftest.h
+  else
+    # Remove last slash and all that follows it.  Not all systems have dirname.
+      ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+      if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+      # The file is in a subdirectory.
+      test ! -d "$ac_dir" && mkdir "$ac_dir"
+    fi
+    rm -f $ac_file
+    mv conftest.h $ac_file
+  fi
+fi; done
+
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h
+
+exit 0
+EOF
+chmod +x $CONFIG_STATUS
+rm -fr confdefs* $ac_clean_files
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
diff --git a/configure.in b/configure.in
new file mode 100644 (file)
index 0000000..04e6f44
--- /dev/null
@@ -0,0 +1,62 @@
+dnl Process this file with autoconf to produce a configure script.
+AC_INIT(pdf2swf/swfoutput.h)
+AM_INIT_AUTOMAKE(swftools, pre0.0.2)
+AC_ARG_PROGRAM
+
+dnl Checks for system services
+ AC_CYGWIN
+ AC_EXEEXT
+
+export CFLAGS
+CFLAGS="-O2 -fomit-frame-pointer"
+export CXXFLAGS
+CXXFLAGS="-O2 -fomit-frame-pointer"
+dnl Checks for programs.
+ AC_PROG_AWK
+ AC_PROG_CC
+ AC_PROG_CPP
+ AC_PROG_CXX
+ AC_PROG_RANLIB
+ AC_PROG_MAKE_SET
+ AC_PROG_INSTALL
+ AC_PROG_LN_S
+
+dnl Checks for libraries.
+ AC_CHECK_LIB(m, sin,, echo "Error: Math library not found.";exit)
+ AC_CHECK_LIB(jpeg, jpeg_write_raw_data,, echo "Error: The jpeg library jpeglib is required.";exit)
+ AC_CHECK_LIB(z, crc32,, echo "Error: The zlib compressiong handling library is required.";exit)
+ AC_CHECK_LIB(t1, T1_LoadFont,,echo "Error: the T1lib truetype handling library is required.";exit)
+dnl do we need those?
+ AC_CHECK_LIB(pthread, pthread_create)
+ AC_CHECK_LIB(X11, XFlush)
+
+dnl Checks for header files.
+AM_CONFIG_HEADER(config.h)
+ AC_PATH_X
+dnl AC_PATH_XTRA
+ AC_HEADER_DIRENT
+ AC_HEADER_STDC
+ AC_CHECK_HEADERS(math.h fcntl.h limits.h malloc.h unistd.h memory.h zlib.h jpeglib.h t1lib.h)
+
+AC_SUBST(HAVE_UNISTD_H)
+AC_SUBST(EXEEXT)
+
+dnl Checks for typedefs, structures, and compiler characteristics.
+ AC_C_CONST
+ AC_C_INLINE
+ AC_TYPE_OFF_T
+ AC_TYPE_SIZE_T
+ AC_STRUCT_TM
+dnl AC_CHECK_TYPE(uchar,unsigned char)
+dnl AC_CHECK_TYPE(schar,signed char)
+dnl AC_CHECK_TYPE(word,unsigned short int)
+dnl AC_CHECK_TYPE(sword,unsigned short int)
+dnl AC_CHECK_TYPE(uint,unsigned long int)
+
+dnl Checks for library functions.
+ AC_FUNC_MEMCMP
+ AC_FUNC_MMAP
+ AC_FUNC_VPRINTF
+ AC_CHECK_FUNCS(getcwd putenv socket strcspn strdup strerror strstr)
+
+AC_OUTPUT(./release Makefile lib/Makefile src/Makefile pdf2swf/Makefile pdf2swf/xpdf/Makefile pdf2swf/fonts/Makefile)
diff --git a/install-sh b/install-sh
new file mode 100755 (executable)
index 0000000..e9de238
--- /dev/null
@@ -0,0 +1,251 @@
+#!/bin/sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5 (mit/util/scripts/install.sh).
+#
+# Copyright 1991 by the Massachusetts Institute of Technology
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of M.I.T. not be used in advertising or
+# publicity pertaining to distribution of the software without specific,
+# written prior permission.  M.I.T. makes no representations about the
+# suitability of this software for any purpose.  It is provided "as is"
+# without express or implied warranty.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.  It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+    case $1 in
+       -c) instcmd="$cpprog"
+           shift
+           continue;;
+
+       -d) dir_arg=true
+           shift
+           continue;;
+
+       -m) chmodcmd="$chmodprog $2"
+           shift
+           shift
+           continue;;
+
+       -o) chowncmd="$chownprog $2"
+           shift
+           shift
+           continue;;
+
+       -g) chgrpcmd="$chgrpprog $2"
+           shift
+           shift
+           continue;;
+
+       -s) stripcmd="$stripprog"
+           shift
+           continue;;
+
+       -t=*) transformarg=`echo $1 | sed 's/-t=//'`
+           shift
+           continue;;
+
+       -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+           shift
+           continue;;
+
+       *)  if [ x"$src" = x ]
+           then
+               src=$1
+           else
+               # this colon is to work around a 386BSD /bin/sh bug
+               :
+               dst=$1
+           fi
+           shift
+           continue;;
+    esac
+done
+
+if [ x"$src" = x ]
+then
+       echo "install:  no input file specified"
+       exit 1
+else
+       true
+fi
+
+if [ x"$dir_arg" != x ]; then
+       dst=$src
+       src=""
+       
+       if [ -d $dst ]; then
+               instcmd=:
+               chmodcmd=""
+       else
+               instcmd=mkdir
+       fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad 
+# if $src (and thus $dsttmp) contains '*'.
+
+       if [ -f $src -o -d $src ]
+       then
+               true
+       else
+               echo "install:  $src does not exist"
+               exit 1
+       fi
+       
+       if [ x"$dst" = x ]
+       then
+               echo "install:  no destination specified"
+               exit 1
+       else
+               true
+       fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+       if [ -d $dst ]
+       then
+               dst="$dst"/`basename $src`
+       else
+               true
+       fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+#  this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='   
+'
+IFS="${IFS-${defaultIFS}}"
+
+oIFS="${IFS}"
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS="${oIFS}"
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+       pathcomp="${pathcomp}${1}"
+       shift
+
+       if [ ! -d "${pathcomp}" ] ;
+        then
+               $mkdirprog "${pathcomp}"
+       else
+               true
+       fi
+
+       pathcomp="${pathcomp}/"
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+       $doit $instcmd $dst &&
+
+       if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
+       if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
+       if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
+       if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+       if [ x"$transformarg" = x ] 
+       then
+               dstfile=`basename $dst`
+       else
+               dstfile=`basename $dst $transformbasename | 
+                       sed $transformarg`$transformbasename
+       fi
+
+# don't allow the sed command to completely eliminate the filename
+
+       if [ x"$dstfile" = x ] 
+       then
+               dstfile=`basename $dst`
+       else
+               true
+       fi
+
+# Make a temp file name in the proper directory.
+
+       dsttmp=$dstdir/#inst.$$#
+
+# Move or copy the file name to the temp name
+
+       $doit $instcmd $src $dsttmp &&
+
+       trap "rm -f ${dsttmp}" 0 &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing.  If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+       if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
+       if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
+       if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
+       if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
+
+# Now rename the file to the real destination.
+
+       $doit $rmcmd -f $dstdir/$dstfile &&
+       $doit $mvcmd $dsttmp $dstdir/$dstfile 
+
+fi &&
+
+
+exit 0
diff --git a/lib/Makefile.am b/lib/Makefile.am
new file mode 100644 (file)
index 0000000..1e2da91
--- /dev/null
@@ -0,0 +1,3 @@
+all:
+       gcc -c rfxswf.c
+       gcc -c log.c
diff --git a/lib/Makefile.in b/lib/Makefile.in
new file mode 100644 (file)
index 0000000..0a7c957
--- /dev/null
@@ -0,0 +1,181 @@
+# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+AWK = @AWK@
+CC = @CC@
+CPP = @CPP@
+CXX = @CXX@
+EXEEXT = @EXEEXT@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+LN_S = @LN_S@
+MAKEINFO = @MAKEINFO@
+PACKAGE = @PACKAGE@
+RANLIB = @RANLIB@
+VERSION = @VERSION@
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../config.h
+CONFIG_CLEAN_FILES = 
+DIST_COMMON =  Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
+       cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Makefile
+
+Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status $(BUILT_SOURCES)
+       cd $(top_builddir) \
+         && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+tags: TAGS
+TAGS:
+
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = lib
+
+distdir: $(DISTFILES)
+       here=`cd $(top_builddir) && pwd`; \
+       top_distdir=`cd $(top_distdir) && pwd`; \
+       distdir=`cd $(distdir) && pwd`; \
+       cd $(top_srcdir) \
+         && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu lib/Makefile
+       @for file in $(DISTFILES); do \
+         d=$(srcdir); \
+         if test -d $$d/$$file; then \
+           cp -pr $$d/$$file $(distdir)/$$file; \
+         else \
+           test -f $(distdir)/$$file \
+           || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+           || cp -p $$d/$$file $(distdir)/$$file || :; \
+         fi; \
+       done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am:
+install-data: install-data-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am:
+uninstall: uninstall-am
+all-am: Makefile
+all-redirect: all-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -rm -f Makefile $(CONFIG_CLEAN_FILES)
+       -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am:  mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am:  clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am:  distclean-generic clean-am
+
+distclean: distclean-am
+
+maintainer-clean-am:  maintainer-clean-generic distclean-am
+       @echo "This command is intended for maintainers to use;"
+       @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: tags distdir info-am info dvi-am dvi check check-am \
+installcheck-am installcheck install-exec-am install-exec \
+install-data-am install-data install-am install uninstall-am uninstall \
+all-redirect all-am all installdirs mostlyclean-generic \
+distclean-generic clean-generic maintainer-clean-generic clean \
+mostlyclean distclean maintainer-clean
+
+
+all:
+       gcc -c rfxswf.c
+       gcc -c log.c
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/lib/example/box.c b/lib/example/box.c
new file mode 100644 (file)
index 0000000..5b10d4b
--- /dev/null
@@ -0,0 +1,305 @@
+
+// linux/gcc: cc box.c ../rfxswf.c -funsigned-char -o box -lm; cp box /home/www/cgi-bin/box
+
+#include <stdio.h>
+#include <fcntl.h>
+#include <math.h>
+#include "../rfxswf.h"
+
+// Box
+
+#define BANNER_TEXT    "reflex"
+#define ID_FONT        2000
+#define ID_BANNER      2001
+#define ID_HIGHLIGHT   2002
+#define ID_BUTTON      2003
+
+#define a 200
+int sX[] = { a,-a, a,-a, a,-a, a,-a};
+int sY[] = { a, a,-a,-a, a, a,-a,-a};
+int sZ[] = { a, a, a, a,-a,-a,-a,-a};
+#undef a
+  
+int dX[8];
+int dY[8];
+
+int sin_[512],cos_[512];
+
+void calcTables()
+{ int i;
+  double d;
+  for (i=0;i<512;i++)
+  { d = ((double)i)/128*3.14159;
+    sin_[i] = (int)(sin(d)*256);
+    cos_[i] = (int)(cos(d)*256);
+  }
+}
+
+void ShapeSquare(LPTAG t,LPSHAPE s,int p1,int p2,int p3,int p4,int dx,int dy)
+{ 
+  // Hidden-Line-Check
+    if (((dX[p2]-dX[p1])*(dY[p3]-dY[p1])-(dX[p3]-dX[p1])*(dY[p2]-dY[p1]))<0) return;
+
+  ShapeSetMove(t,s,dX[p1]+dx,dY[p1]+dy);
+  ShapeSetLine(t,s,dX[p2]-dX[p1],dY[p2]-dY[p1]);
+  ShapeSetLine(t,s,dX[p3]-dX[p2],dY[p3]-dY[p2]);
+  ShapeSetLine(t,s,dX[p4]-dX[p3],dY[p4]-dY[p3]);
+  ShapeSetLine(t,s,dX[p1]-dX[p4],dY[p1]-dY[p4]);
+}
+
+
+void mapBox(int xw,int yw,int zw)
+{ int i;
+  int x1,y1,z1,x2,y2,z2,x3,y3,z3;
+  int y,x,z;
+  
+  xw &= 255;
+  yw &= 255;
+  zw &= 255;
+
+  for (i=0;i<8;i++)
+  { x = sX[i];
+    y = sY[i];
+    z = sZ[i];
+                 
+    y1 = ( y*cos_[xw]- z*sin_[xw])>>8;
+    z1 = ( y*sin_[xw]+ z*cos_[xw])>>8;
+    x1 = x;
+
+    x2 = (x1*cos_[yw]+z1*sin_[yw])>>8;
+    y2 = y1;
+
+    x3 = (x2*cos_[zw]-y2*sin_[zw])>>8;
+    y3 = (x2*sin_[zw]+y2*cos_[zw])>>8;
+    z3 = (z1*cos_[yw]-x1*sin_[yw])>>8;
+
+    dX[i] = x3*4000/(z3+950);
+    dY[i] = y3*4000/(z3+950);
+       
+  }
+}
+               
+int main (int argc,char ** argv)
+{ SWF swf;
+  LPTAG t;
+  RGBA rgb;
+  SRECT r;
+  LPSHAPE s;
+  S32 width = 800,height = 800;
+  U8 gbits,abits;
+  LPSWFFONT font;
+  FONTUSAGE use;
+  CXFORM cx1,cx2;
+  MATRIX m;
+  
+  int f,i,j,frame;
+  
+/*  f = open("Arial.efont",O_RDONLY);
+  if (f>=0)
+  { if (FAILED(FontImport(f,&font)))
+    { fprintf(stderr,"Font import failed\n");
+      close(f);
+      return -1;
+    }
+  }
+  else
+  { fprintf(stderr,"Font not found\n");
+    return -1;
+  }
+  close(f);
+
+  FontSetID(font,ID_FONT);
+  FontInitUsage(&use);
+  FontUse(&use,BANNER_TEXT);
+  FontReduce(font,&use);*/
+  
+  calcTables();
+  
+  memset(&swf,0x00,sizeof(SWF));
+
+  swf.FileVersion    = 4;
+  swf.FrameRate      = 0x4000;
+  swf.MovieSize.xmax = 4*width;
+  swf.MovieSize.ymax = 4*height;
+
+  swf.FirstTag = InsertTag(NULL,ST_SETBACKGROUNDCOLOR);
+  t = swf.FirstTag;
+
+        rgb.r = 0xff;
+        rgb.g = 0xff;
+        rgb.b = 0xff;
+        SetRGB(t,&rgb);
+
+  t = InsertTag(t,ST_DEFINEFONT);
+
+        FontSetDefine(t,font);
+
+  t = InsertTag(t,ST_DEFINEFONTINFO);
+
+        FontSetInfo(t,font);
+
+  t = InsertTag(t,ST_DEFINETEXT);
+
+        SetU16(t,ID_BANNER);            // ID
+        
+        r.xmin = 0;
+        r.ymin = 0;
+        r.xmax = 400;
+        r.ymax = 400;
+        SetRect(t,&r);
+
+        SetMatrix(t,NULL);
+
+        TextCountBits(font,BANNER_TEXT,80,&gbits,&abits);
+        
+        SetU8(t,gbits);
+        SetU8(t,abits);
+
+        rgb.r = 0xc0;
+        rgb.g = 0xc0;
+        rgb.b = 0xc0;
+
+        TextSetInfoRecord(t,font,height/4,&rgb,0,200);
+        TextSetCharRecord(t,font,BANNER_TEXT,80,gbits,abits);
+
+        SetU8(t,0);
+        
+  t = InsertTag(t,ST_DEFINETEXT);
+
+        SetU16(t,ID_HIGHLIGHT);            // ID
+        
+        r.xmin = 0;
+        r.ymin = 0;
+        r.xmax = 800;
+        r.ymax = 400;
+        SetRect(t,&r);
+
+        SetMatrix(t,NULL);
+
+        TextCountBits(font,BANNER_TEXT,80,&gbits,&abits);
+        
+        SetU8(t,gbits);
+        SetU8(t,abits);
+
+        rgb.r = 0x20;
+        rgb.g = 0x20;
+        rgb.b = 0x20;
+
+        TextSetInfoRecord(t,font,height/4,&rgb,0,200);
+        TextSetCharRecord(t,font,BANNER_TEXT,80,gbits,abits);
+
+        SetU8(t,0);
+       
+    t = InsertTag(t,ST_DEFINEBUTTON);
+    
+        GetMatrix(NULL,&m);
+       
+       m.tx = 3*width;
+       m.ty = 7*height/2;
+        
+        SetU16(t,ID_BUTTON); // ID
+       ButtonSetRecord(t,BS_UP,ID_BANNER,1,&m,NULL);
+       ButtonSetRecord(t,BS_DOWN|BS_HIT|BS_OVER,ID_HIGHLIGHT,1,&m,NULL);
+       SetU8(t,0); // End of Button Records
+       SetU8(t,0); // End of Action Records
+    
+      
+    t = InsertTag(t,ST_PLACEOBJECT2);
+
+         ObjectPlace(t,ID_BUTTON,1,NULL,NULL,NULL);
+        
+    GetCXForm(NULL,&cx1,1);
+    GetCXForm(NULL,&cx2,1);
+    
+//    cx1.a1 = -(0x40*1);
+//    cx2.a1 = -(0x40*2);
+    
+    cx1.r1 = cx1.g1 = 0x80;
+    cx2.r1 = cx2.g1 = 0xc0;    
+    
+
+       
+  for (frame=0;frame<256;frame+=2)
+  { int id = frame +1;
+    
+    t = InsertTag(t,ST_DEFINESHAPE);
+
+        NewShape(&s);
+        rgb.r = rgb.g = 0x00; rgb.b = 0xff;
+        j = ShapeAddLineStyle(s,40,&rgb);
+
+        SetU16(t,id);  // ID
+
+        r.xmin = 0;
+        r.ymin = 0;
+        r.xmax = 4*width;
+        r.ymax = 4*height;
+        
+        SetRect(t,&r);
+
+        SetShapeStyles(t,s);
+        ShapeCountBits(s,NULL,NULL);
+        SetShapeBits(t,s);
+
+        ShapeSetAll(t,s,0,0,j,0,0);
+       
+       mapBox(frame,frame,frame>>1);
+
+       ShapeSquare(t,s,0,2,3,1,2*width,2*height);
+       ShapeSquare(t,s,4,5,7,6,2*width,2*height);
+       ShapeSquare(t,s,0,4,6,2,2*width,2*height);
+       ShapeSquare(t,s,1,3,7,5,2*width,2*height);
+       ShapeSquare(t,s,0,1,5,4,2*width,2*height);
+       ShapeSquare(t,s,2,6,7,3,2*width,2*height);
+       
+        ShapeSetEnd(t);
+  }
+  
+  for (frame=0;frame<256;frame+=2)
+  { int id = frame +1;
+    int id2 = ((frame-2)&255)+1;
+    int id3 = ((frame-4)&255)+1;
+
+    if (frame)
+    { t = InsertTag(t,ST_REMOVEOBJECT2); SetU16(t,2); // depth
+      t = InsertTag(t,ST_REMOVEOBJECT2); SetU16(t,3); // depth
+      t = InsertTag(t,ST_REMOVEOBJECT2); SetU16(t,4); // depth
+    }
+
+    t = InsertTag(t,ST_PLACEOBJECT2);
+
+        ObjectPlace(t,id,4,NULL,NULL,NULL);
+       
+    t = InsertTag(t,ST_PLACEOBJECT2);
+
+        ObjectPlace(t,id2,3,NULL,&cx1,NULL);
+  
+    t = InsertTag(t,ST_PLACEOBJECT2);
+
+        ObjectPlace(t,id3,2,NULL,&cx2,NULL);
+    
+    t = InsertTag(t,ST_SHOWFRAME);
+  }
+  
+  
+
+  t = InsertTag(t,ST_END);
+//  WriteCGI(&swf);
+  
+
+  f = open("shape1.swf",O_RDWR|O_CREAT|O_TRUNC);
+  if FAILED(WriteSWF(f,&swf)) fprintf(stderr,"WriteSWF() failed.\n");
+  close(f);
+
+  FreeTags(&swf);
+
+#ifdef __NT__
+  system("start ..\\shape1.swf");
+#endif
+  
+  return 0;
+}
+
+
diff --git a/lib/example/jpegtest.c b/lib/example/jpegtest.c
new file mode 100644 (file)
index 0000000..76eb1ea
--- /dev/null
@@ -0,0 +1,124 @@
+// linux/gcc cc jpegtest.c ../rfxswf.c -funsigned-char -o jpegtest -lm -ljpeg; cp jpegtest /home/www/cgi-bin/jpegtest
+
+#include <stdio.h>
+#include <math.h>      
+#include "../rfxswf.h"
+
+#define WIDTH          256
+#define HEIGHT         256
+#define QUALITY        85
+
+#define ID_BITS        1
+#define ID_SHAPE       2
+
+int main ( int argc, char ** argv)
+{ SWF swf;
+  LPTAG t;
+  RGBA rgb;
+  LPSHAPE s;
+  MATRIX m;
+  SRECT r;
+  LPJPEGBITS jpeg;
+  
+  int ls; // line style
+  int fs; // fill style
+  int frame;
+
+  memset(&swf,0x00,sizeof(SWF));
+
+  swf.FileVersion      = 4;
+  swf.FrameRate                = 0x1800;
+  swf.MovieSize.xmax   = 20*WIDTH;
+  swf.MovieSize.ymax   = 20*HEIGHT;
+
+  swf.FirstTag = InsertTag(NULL,ST_SETBACKGROUNDCOLOR);
+  t = swf.FirstTag;
+
+    rgb.r = 0xff;
+    rgb.b = 0xff;
+    rgb.g = 0xff;
+    SetRGB(t,&rgb);
+
+  t = InsertTag(t,ST_DEFINEBITSJPEG2);
+
+    SetU16(t,ID_BITS);
+    SetJPEGBits(t,"eye.jpg",QUALITY);
+    
+/*    jpeg = SetJPEGBitsStart(t,WIDTH,HEIGHT,QUALITY);
+    { int y;
+      for (y=0;y<HEIGHT;y++)
+      { U8 scanline[3*WIDTH];
+        int x,p = 0;
+        for (x=0;x<WIDTH;x++) 
+        { scanline[p++] = x;    // R
+          scanline[p++] = y;    // G
+          scanline[p++] = 0x80; // B          
+        }
+        SetJPEGBitsLine(jpeg,scanline);
+      }
+    }
+    SetJPEGBitsFinish(jpeg);
+*/
+
+for (frame=0;frame<64;frame++)
+{
+  t = InsertTag(t,ST_DEFINESHAPE);
+    
+    NewShape(&s);
+    rgb.b = rgb.g = rgb.r = 0x00;
+    ls = ShapeAddLineStyle(s,40,&rgb); 
+    rgb.b = 0xff;
+  //  fs = ShapeAddSolidFillStyle(s,&rgb);
+    //  
+    GetMatrix(NULL,&m);
+    m.sy = m.sx = (int)(cos(((float)(frame))/32*3.141)*0x80000);
+    m.r0 = (int)(sin(((float)(frame))/32*3.141)*0x80000);
+    m.r1 = -m.r0;
+       
+    fs = ShapeAddBitmapFillStyle(s,&m,ID_BITS,0);
+    
+    SetU16(t,ID_SHAPE+frame);  // ID   
+
+    r.xmin = 0;
+    r.ymin = 0;
+    r.xmax = 10*WIDTH;
+    r.ymax = 10*HEIGHT;
+
+    SetRect(t,&r);
+
+    SetShapeStyles(t,s);
+    ShapeCountBits(s,NULL,NULL);
+    SetShapeBits(t,s);
+
+    ShapeSetAll(t,s,0,0,ls,fs,0);
+
+    ShapeSetLine(t,s,10*WIDTH,0);
+    ShapeSetLine(t,s,-10*WIDTH,10*HEIGHT);
+//    ShapeSetLine(t,s,-10*WIDTH,-10*WIDTH);
+    ShapeSetLine(t,s,0,-10*HEIGHT);
+    ShapeSetEnd(t);
+
+  if (frame) 
+  { t = InsertTag(t,ST_REMOVEOBJECT2); SetU16(t,1);
+    t = InsertTag(t,ST_REMOVEOBJECT2); SetU16(t,2);
+  }
+        
+  t = InsertTag(t,ST_PLACEOBJECT2);
+    ObjectPlace(t,ID_SHAPE+frame,1,NULL,NULL,NULL); 
+
+  t = InsertTag(t,ST_PLACEOBJECT2);
+    GetMatrix(NULL,&m);
+    m.tx = m.ty = 10*WIDTH+frame*10;
+    m.sx = m.sy = 0xfffeffff;
+    ObjectPlace(t,ID_SHAPE+frame,2,&m,NULL,NULL);
+
+
+  t = InsertTag(t,ST_SHOWFRAME);
+}
+
+  t = InsertTag(t,ST_END);
+
+  WriteCGI(&swf);
+  FreeTags(&swf);
+  return 0;
+}
diff --git a/lib/example/shape1.c b/lib/example/shape1.c
new file mode 100644 (file)
index 0000000..5a7da4e
--- /dev/null
@@ -0,0 +1,86 @@
+#include <stdio.h>
+#include <fcntl.h>
+#include <math.h>
+#include "../rfxswf.h"
+
+               
+int main (int argc,char ** argv)
+{ SWF swf;
+  LPTAG t;
+  RGBA rgb;
+  SRECT r;
+  LPSHAPE s;
+  S32 width=300,height = 300;
+  
+  int f,i,j;
+
+  memset(&swf,0x00,sizeof(SWF));
+
+  swf.FileVersion    = 4;
+  swf.FrameRate      = 0x1900;
+  swf.MovieSize.xmax = 20*width;
+  swf.MovieSize.ymax = 20*height;
+
+  swf.FirstTag = InsertTag(NULL,ST_SETBACKGROUNDCOLOR);
+  t = swf.FirstTag;
+
+        rgb.r = 0xff;
+        rgb.g = 0xff;
+        rgb.b = 0xff;
+        SetRGB(t,&rgb);
+
+  t = InsertTag(t,ST_DEFINESHAPE);
+
+        NewShape(&s);
+        rgb.b = rgb.g = 0x00;
+        j = ShapeAddLineStyle(s,40,&rgb);
+        rgb.r = 0; rgb.b = 0xff;
+        ShapeAddLineStyle(s,40,&rgb);
+
+        SetU16(t,1);  // ID
+
+        r.xmin = 0;
+        r.ymin = 0;
+        r.xmax = 4*width;
+        r.ymax = 4*height;
+        
+        SetRect(t,&r);
+
+        SetShapeStyles(t,s);
+        ShapeCountBits(s,NULL,NULL);
+        SetShapeBits(t,s);
+
+        ShapeSetAll(t,s,0,0,j,0,0);
+//        ShapeSetCurve(t,s,4*width,0,0,4*height);
+        ShapeSetLine(t,s,4*width,4*height);
+        ShapeSetStyle(t,s,2,0,0);
+        for (i=1;i<10;i++)
+        ShapeSetCircle(t,s,4*width,4*height,i*width/2,i*height/2);
+        ShapeSetEnd(t);
+
+  t = InsertTag(t,ST_PLACEOBJECT2);
+
+        ObjectPlace(t,1,1,NULL,NULL,NULL);
+
+  t = InsertTag(t,ST_SHOWFRAME);
+
+  t = InsertTag(t,ST_END);
+  
+//  WriteCGI(&swf);
+  
+
+  f = open("shape1.swf",O_WRONLY|O_CREAT, 0777);
+//  f = 1;
+  if FAILED(WriteSWF(f,&swf)) fprintf(stderr,"WriteSWF() failed.\n");
+  close(f);
+
+  FreeTags(&swf);
+
+#ifdef __NT__
+  system("start ..\\shape1.swf");
+#endif
+  
+  return 0;
+}
+
+
diff --git a/lib/example/texbox.c b/lib/example/texbox.c
new file mode 100644 (file)
index 0000000..7685e5b
--- /dev/null
@@ -0,0 +1,367 @@
+
+// linux/gcc: cc texbox.c ../rfxswf.c -funsigned-char -o texbox -lm -ljpeg; cp texbox /home/www/cgi-bin/texbox
+
+#include <stdio.h>
+#include <fcntl.h>
+#include <math.h>
+#include "../rfxswf.h"
+
+// Box
+
+#define BANNER_TEXT    "reflex"
+#define QUALITY        80
+#define ID_FONT        2000
+#define ID_BANNER      2001
+#define ID_HIGHLIGHT   2002
+#define ID_BUTTON      2003
+#define ID_BITMAP      2004
+#define ID_SHAPE       2005
+#define ID_SHAPE2      2006
+
+#define a 200
+int sX[] = { a,-a, a,-a, a,-a, a,-a};
+int sY[] = { a, a,-a,-a, a, a,-a,-a};
+int sZ[] = { a, a, a, a,-a,-a,-a,-a};
+#undef a
+
+#define PRECISION 16
+
+int SHADE = 1;
+
+int dX[8];
+int dY[8];
+int square_visible[6]  = {0,0,0,0,0,0};
+int square_depth[6][2] = {{2,3},{4,5},{6,7},{8,9},{10,11},{12,13}};
+int square_light[6]    = {0,0,64,64,-64,-64};
+
+int sin_[512],cos_[512];
+
+void calcTables()      
+{ int i;
+  double d;
+  for (i=0;i<512;i++)
+  { d = ((double)i)/128*3.14159;
+    sin_[i] = (int)(sin(d)*(1<<PRECISION));
+    cos_[i] = (int)(cos(d)*(1<<PRECISION));
+  }
+}
+
+LPTAG MapSquare(LPTAG t,int dx0,int dy0,int p1,int p2,int p3,int p4,int dx,int dy,int square)
+{ MATRIX m;
+  CXFORM cx;
+
+  if (SHADE)
+  { GetCXForm(NULL,&cx,1);
+    cx.r1 = cx.b1 = cx.g1 = square_light[square];
+  }
+        
+  if (((dX[p2]-dX[p1])*(dY[p3]-dY[p1])-(dX[p3]-dX[p1])*(dY[p2]-dY[p1]))<0) 
+  { if (square_visible[square])
+    { t = InsertTag(t,ST_REMOVEOBJECT2); SetU16(t,square_depth[square][0]);
+      t = InsertTag(t,ST_REMOVEOBJECT2); SetU16(t,square_depth[square][1]);
+    }
+    square_visible[square] = 0;
+    return t; 
+  }
+
+  t = InsertTag(t,ST_PLACEOBJECT2);
+  
+  MatrixMapTriangle(&m,dx0,dy0,dX[p1]+dx,dY[p1]+dy,
+                       dX[p2]+dx,dY[p2]+dy,
+                dX[p4]+dx,dY[p4]+dy);
+
+  if (!square_visible[square])
+    ObjectPlace(t,ID_SHAPE,square_depth[square][0],&m,SHADE?&cx:NULL,NULL);
+  else
+    ObjectMove(t,square_depth[square][0],&m,SHADE?&cx:NULL);
+
+  t = InsertTag(t,ST_PLACEOBJECT2);
+  
+  MatrixMapTriangle(&m,dx0,dy0,dX[p3]+dx,dY[p3]+dy,
+                       dX[p4]+dx,dY[p4]+dy,
+                dX[p2]+dx,dY[p2]+dy);
+
+  if (!square_visible[square])
+    ObjectPlace(t,ID_SHAPE2,square_depth[square][1],&m,SHADE?&cx:NULL,NULL);
+  else
+    ObjectMove(t,square_depth[square][1],&m,SHADE?&cx:NULL);
+
+  square_visible[square] = 1;
+  return t;
+}
+
+void mapBox(int xw,int yw,int zw)
+{ int i;
+  int x1,y1,z1,x2,y2,z2,x3,y3,z3;
+  int y,x,z;
+  
+  xw &= 255;
+  yw &= 255;
+  zw &= 255;
+
+  for (i=0;i<8;i++)
+  { x = sX[i];
+    y = sY[i];
+    z = sZ[i];
+                 
+    y1 = ( y*cos_[xw]- z*sin_[xw])>>PRECISION;
+    z1 = ( y*sin_[xw]+ z*cos_[xw])>>PRECISION;
+    x1 = x;
+
+    x2 = (x1*cos_[yw]+z1*sin_[yw])>>PRECISION;
+    y2 = y1;
+
+    x3 = (x2*cos_[zw]-y2*sin_[zw])>>PRECISION;
+    y3 = (x2*sin_[zw]+y2*cos_[zw])>>PRECISION;
+    z3 = (z1*cos_[yw]-x1*sin_[yw])>>PRECISION;
+
+    dX[i] = x3*4000/(z3+950);
+    dY[i] = y3*4000/(z3+950);
+       
+  }
+}
+
+void mapLights(int xw,int yw,int zw)
+{ int i;
+  int x1,y1,z1,x2,y2,z2,x3,y3,z3;
+
+  int y[] = {0,0,0,0,256,-256};
+  int x[] = {0,0,256,-256,0,0};
+  int z[] = {256,-256,0,0,0,0};
+
+  int lz = 256;        // lightvector
+  int lx = 200, ly = 200;
+
+  for (i=0;i<6;i++)
+  { y1 = (y[i]*cos_[xw]-z[i]*sin_[xw])>>PRECISION;
+    z1 = (y[i]*sin_[xw]+z[i]*cos_[xw])>>PRECISION;
+    x1 = x[i];
+
+    x2 = (x1*cos_[yw]+z1*sin_[yw])>>PRECISION;
+    y2 = y1;
+    z2 = (z1*cos_[yw]-x1*sin_[yw])>>PRECISION;
+
+    x3 = (x2*cos_[zw]-y2*sin_[zw])>>PRECISION;
+    y3 = (x2*sin_[zw]+y2*cos_[zw])>>PRECISION;
+    z3 = z2;
+
+    square_light[i] = -128-((x3*lx + y3*ly + z3*lz)>>9);
+  }
+}
+
+
+int main (int argc,char ** argv)
+{ SWF swf;
+  LPTAG t;
+  RGBA rgb;
+  SRECT r;
+  LPSHAPE s;
+  S32 width = 800,height = 800;
+  U8 gbits,abits;
+  int fs,ls; // line & fillstyle
+  LPSWFFONT font;
+  FONTUSAGE use;
+  LPJPEGBITS jpeg;
+  MATRIX m;  
+  
+  int f,i,j,frame;
+  
+  f = open("Arial.efont",O_RDONLY);
+  if (f>=0)
+  { if (FAILED(FontImport(f,&font)))
+    { fprintf(stderr,"Font import failed\n");
+      close(f);
+      return -1;
+    }
+  }
+  else
+  { fprintf(stderr,"Font not found\n");
+    return -1;
+  }
+  close(f);
+
+  FontSetID(font,ID_FONT);
+  FontInitUsage(&use);
+  FontUse(&use,BANNER_TEXT);
+  FontReduce(font,&use);
+  
+  calcTables();
+  
+  memset(&swf,0x00,sizeof(SWF));
+
+  swf.FileVersion    = 4;
+  swf.FrameRate      = 0x4000;
+  swf.MovieSize.xmax = 4*width;
+  swf.MovieSize.ymax = 4*height;
+
+  swf.FirstTag = InsertTag(NULL,ST_SETBACKGROUNDCOLOR);
+  t = swf.FirstTag;
+
+        rgb.r = 0xff;
+        rgb.g = 0xff;
+        rgb.b = 0xff;
+        SetRGB(t,&rgb);
+
+  t = InsertTag(t,ST_DEFINEFONT);
+
+        FontSetDefine(t,font);
+
+  t = InsertTag(t,ST_DEFINEFONTINFO);
+
+        FontSetInfo(t,font);
+
+  t = InsertTag(t,ST_DEFINETEXT);
+
+        SetU16(t,ID_BANNER);            // ID
+        
+        r.xmin = 0;
+        r.ymin = 0;
+        r.xmax = 400;
+        r.ymax = 400;
+        SetRect(t,&r);
+
+        SetMatrix(t,NULL);
+
+        TextCountBits(font,BANNER_TEXT,80,&gbits,&abits);
+        
+        SetU8(t,gbits);
+        SetU8(t,abits);
+
+        rgb.r = 0xc0;
+        rgb.g = 0xc0;
+        rgb.b = 0xc0;
+
+        TextSetInfoRecord(t,font,height/4,&rgb,0,200);
+        TextSetCharRecord(t,font,BANNER_TEXT,80,gbits,abits);
+
+        SetU8(t,0);
+        
+  t = InsertTag(t,ST_DEFINETEXT);
+
+        SetU16(t,ID_HIGHLIGHT);            // ID
+        
+        r.xmin = 0; r.ymin = 0; r.xmax = 800; r.ymax = 400;
+        SetRect(t,&r);
+
+        SetMatrix(t,NULL);
+        TextCountBits(font,BANNER_TEXT,80,&gbits,&abits);
+        
+        SetU8(t,gbits);
+        SetU8(t,abits);
+
+        rgb.r = 0x20;
+        rgb.g = 0x20;
+        rgb.b = 0x20;
+
+        TextSetInfoRecord(t,font,height/4,&rgb,0,200);
+        TextSetCharRecord(t,font,BANNER_TEXT,80,gbits,abits);
+
+        SetU8(t,0);
+       
+    t = InsertTag(t,ST_DEFINEBUTTON);
+    
+        GetMatrix(NULL,&m);
+       
+       m.tx = 3*width;
+       m.ty = 7*height/2;
+        
+        SetU16(t,ID_BUTTON); // ID
+       ButtonSetRecord(t,BS_UP,ID_BANNER,1,&m,NULL);
+       ButtonSetRecord(t,BS_DOWN|BS_HIT|BS_OVER,ID_HIGHLIGHT,1,&m,NULL);
+       SetU8(t,0); // End of Button Records
+       SetU8(t,0); // End of Action Records
+    
+      
+    t = InsertTag(t,ST_PLACEOBJECT2);
+
+         ObjectPlace(t,ID_BUTTON,1,NULL,NULL,NULL);
+
+    t = InsertTag(t,ST_DEFINEBITSJPEG2);
+
+         SetU16(t,ID_BITMAP);
+         SetJPEGBits(t,"eye.jpg",QUALITY);
+         
+    t = InsertTag(t,ST_DEFINESHAPE);
+    
+         NewShape(&s);
+         rgb.b = rgb.g = rgb.r = 0x00;
+         ls = ShapeAddLineStyle(s,10,&rgb);    
+         rgb.b = 0xff;
+
+         m.tx = m.ty = 0;
+         m.r0 = m.r1 = 0;
+         m.sx = m.sy = width<<8;
+  
+         fs = ShapeAddBitmapFillStyle(s,&m,ID_BITMAP,0);
+    
+         SetU16(t,ID_SHAPE);   // ID   
+         
+         r.xmin = 0; r.ymin = 0;
+         r.xmax = 2*width; r.ymax = 2*height;
+         SetRect(t,&r);
+
+         SetShapeHeader(t,s);
+         ShapeSetAll(t,s,width,0,0,fs,0);
+         ShapeSetLine(t,s,-width,height);
+         ShapeSetStyle(t,s,ls,fs,0);
+         ShapeSetLine(t,s,0,-height);
+         ShapeSetLine(t,s,width,0);
+         ShapeSetEnd(t);
+
+         ShapeFree(s);
+         
+    t = InsertTag(t,ST_DEFINESHAPE);
+    
+         NewShape(&s);
+         rgb.b = rgb.g = rgb.r = 0x00;
+         ls = ShapeAddLineStyle(s,10,&rgb);    
+         rgb.b = 0xff;
+
+         m.tx = m.ty = 0;
+         m.r0 = m.r1 = 0;
+         m.sx = m.sy = -(width<<8);
+  
+         fs = ShapeAddBitmapFillStyle(s,&m,ID_BITMAP,0);
+    
+         SetU16(t,ID_SHAPE2);  // ID   
+         
+         r.xmin = 0; r.ymin = 0;
+         r.xmax = 2*width; r.ymax = 2*height;
+         SetRect(t,&r);
+
+         SetShapeHeader(t,s);
+         ShapeSetAll(t,s,width,0,0,fs,0);
+         ShapeSetLine(t,s,-width,height);
+         ShapeSetStyle(t,s,ls,fs,0);
+         ShapeSetLine(t,s,0,-height);
+         ShapeSetLine(t,s,width,0);
+         ShapeSetEnd(t);
+
+         ShapeFree(s);
+   
+  for (frame=0;frame<256;frame++)
+  { int dc = 3; // whitespace correction
+
+    mapBox(frame<<1,frame<<1,frame);
+    if (SHADE) mapLights(frame<<1,frame<<1,frame);
+    
+    t = MapSquare(t,width-dc,height-dc,0,2,3,1,2*width,2*height,0);
+    t = MapSquare(t,width-dc,height-dc,4,5,7,6,2*width,2*height,1);
+    t = MapSquare(t,width-dc,height-dc,0,4,6,2,2*width,2*height,2);
+    t = MapSquare(t,width-dc,height-dc,1,3,7,5,2*width,2*height,3);
+    t = MapSquare(t,width-dc,height-dc,0,1,5,4,2*width,2*height,4);
+    t = MapSquare(t,width-dc,height-dc,2,6,7,3,2*width,2*height,5);
+        
+    t = InsertTag(t,ST_SHOWFRAME);
+  }
+  
+  
+  t = InsertTag(t,ST_END);
+  
+  WriteCGI(&swf);
+  FreeTags(&swf);
+  return 0;
+}
+
+
diff --git a/lib/example/texbox_ac.c b/lib/example/texbox_ac.c
new file mode 100644 (file)
index 0000000..c94ec36
--- /dev/null
@@ -0,0 +1,374 @@
+\r
+// linux/gcc: cc texbox_ac.c ../rfxswf.c -funsigned-char -o texbox -lmingac -lm -ljpeg; cp texbox /home/www/cgi-bin/texbox\r
+\r
+#include <stdio.h>\r
+#include <fcntl.h>\r
+#include <math.h>\r
+#include "../rfxswf.h"\r
+#include "../mingac.h"  // Action Compiler of MING library\r
+\r
+// Box\r
+\r
+#define BANNER_TEXT     "reflex"\r
+#define QUALITY 80\r
+#define ID_FONT         2000\r
+#define ID_BANNER       2001\r
+#define ID_HIGHLIGHT    2002\r
+#define ID_BUTTON       2003\r
+#define ID_BITMAP       2004\r
+#define ID_SHAPE        2005\r
+#define ID_SHAPE2       2006\r
+\r
+#define a 200\r
+int sX[] = { a,-a, a,-a, a,-a, a,-a};\r
+int sY[] = { a, a,-a,-a, a, a,-a,-a};\r
+int sZ[] = { a, a, a, a,-a,-a,-a,-a};\r
+#undef a\r
+\r
+#define PRECISION 16\r
+\r
+int SHADE = 1;\r
+\r
+int dX[8];\r
+int dY[8];\r
+int square_visible[6]  = {0,0,0,0,0,0};\r
+int square_depth[6][2] = {{2,3},{4,5},{6,7},{8,9},{10,11},{12,13}};\r
+int square_light[6]    = {0,0,64,64,-64,-64};\r
+\r
+int sin_[512],cos_[512];\r
+\r
+void calcTables()       \r
+{ int i;\r
+  double d;\r
+  for (i=0;i<512;i++)\r
+  { d = ((double)i)/128*3.14159;\r
+    sin_[i] = (int)(sin(d)*(1<<PRECISION));\r
+    cos_[i] = (int)(cos(d)*(1<<PRECISION));\r
+  }\r
+}\r
+\r
+LPTAG MapSquare(LPTAG t,int dx0,int dy0,int p1,int p2,int p3,int p4,int dx,int dy,int square)\r
+{ MATRIX m;\r
+  CXFORM cx;\r
+\r
+  if (SHADE)\r
+  { GetCXForm(NULL,&cx,1);\r
+    cx.r1 = cx.b1 = cx.g1 = square_light[square];\r
+  }\r
+        \r
+  if (((dX[p2]-dX[p1])*(dY[p3]-dY[p1])-(dX[p3]-dX[p1])*(dY[p2]-dY[p1]))<0) \r
+  { if (square_visible[square])\r
+    { t = InsertTag(t,ST_REMOVEOBJECT2); SetU16(t,square_depth[square][0]);\r
+      t = InsertTag(t,ST_REMOVEOBJECT2); SetU16(t,square_depth[square][1]);\r
+    }\r
+    square_visible[square] = 0;\r
+    return t; \r
+  }\r
+\r
+  t = InsertTag(t,ST_PLACEOBJECT2);\r
+  \r
+  MatrixMapTriangle(&m,dx0,dy0,dX[p1]+dx,dY[p1]+dy,\r
+                        dX[p2]+dx,dY[p2]+dy,\r
+                 dX[p4]+dx,dY[p4]+dy);\r
+\r
+  if (!square_visible[square])\r
+    ObjectPlace(t,ID_SHAPE,square_depth[square][0],&m,SHADE?&cx:NULL,NULL);\r
+  else\r
+    ObjectMove(t,square_depth[square][0],&m,SHADE?&cx:NULL);\r
+\r
+  t = InsertTag(t,ST_PLACEOBJECT2);\r
+  \r
+  MatrixMapTriangle(&m,dx0,dy0,dX[p3]+dx,dY[p3]+dy,\r
+                        dX[p4]+dx,dY[p4]+dy,\r
+                 dX[p2]+dx,dY[p2]+dy);\r
+\r
+  if (!square_visible[square])\r
+    ObjectPlace(t,ID_SHAPE2,square_depth[square][1],&m,SHADE?&cx:NULL,NULL);\r
+  else\r
+    ObjectMove(t,square_depth[square][1],&m,SHADE?&cx:NULL);\r
+\r
+  square_visible[square] = 1;\r
\r
+  return t;\r
+}\r
+\r
+void mapBox(int xw,int yw,int zw)\r
+{ int i;\r
+  int x1,y1,z1,x2,y2,z2,x3,y3,z3;\r
+  int y,x,z;\r
+  \r
+  xw &= 255;\r
+  yw &= 255;\r
+  zw &= 255;\r
+\r
+  for (i=0;i<8;i++)\r
+  { x = sX[i];\r
+    y = sY[i];\r
+    z = sZ[i];\r
+                  \r
+    y1 = ( y*cos_[xw]- z*sin_[xw])>>PRECISION;\r
+    z1 = ( y*sin_[xw]+ z*cos_[xw])>>PRECISION;\r
+    x1 = x;\r
+\r
+    x2 = (x1*cos_[yw]+z1*sin_[yw])>>PRECISION;\r
+    y2 = y1;\r
+\r
+    x3 = (x2*cos_[zw]-y2*sin_[zw])>>PRECISION;\r
+    y3 = (x2*sin_[zw]+y2*cos_[zw])>>PRECISION;\r
+    z3 = (z1*cos_[yw]-x1*sin_[yw])>>PRECISION;\r
+\r
+    dX[i] = x3*4000/(z3+950);\r
+    dY[i] = y3*4000/(z3+950);\r
+        \r
+  }\r
+}\r
+\r
+void mapLights(int xw,int yw,int zw)\r
+{ int i;\r
+  int x1,y1,z1,x2,y2,z2,x3,y3,z3;\r
+\r
+  int y[] = {0,0,0,0,256,-256};\r
+  int x[] = {0,0,256,-256,0,0};\r
+  int z[] = {256,-256,0,0,0,0};\r
+\r
+  int lz = 256; // lightvector\r
+  int lx = 200, ly = 200;\r
+\r
+  for (i=0;i<6;i++)\r
+  { y1 = (y[i]*cos_[xw]-z[i]*sin_[xw])>>PRECISION;\r
+    z1 = (y[i]*sin_[xw]+z[i]*cos_[xw])>>PRECISION;\r
+    x1 = x[i];\r
+\r
+    x2 = (x1*cos_[yw]+z1*sin_[yw])>>PRECISION;\r
+    y2 = y1;\r
+    z2 = (z1*cos_[yw]-x1*sin_[yw])>>PRECISION;\r
+\r
+    x3 = (x2*cos_[zw]-y2*sin_[zw])>>PRECISION;\r
+    y3 = (x2*sin_[zw]+y2*cos_[zw])>>PRECISION;\r
+    z3 = z2;\r
+\r
+    square_light[i] = -128-((x3*lx + y3*ly + z3*lz)>>9);\r
+  }\r
+}\r
+\r
+\r
+int main (int argc,char ** argv)\r
+{ SWF swf;\r
+  LPTAG t;\r
+  RGBA rgb;\r
+  SRECT r;\r
+  LPSHAPE s;\r
+  S32 width = 800,height = 800;\r
+  U8 gbits,abits;\r
+  int fs,ls; // line & fillstyle\r
+  LPSWFFONT font;\r
+  FONTUSAGE use;\r
+  LPJPEGBITS jpeg;\r
+  MATRIX m;  \r
+  \r
+  int f,i,j,frame;\r
+  \r
+  InitCompiler(AC_DEFAULT);\r
+  \r
+  f = open("Arial.efont",O_RDONLY);\r
+  if (f>=0)\r
+  { if (FAILED(FontImport(f,&font)))\r
+    { fprintf(stderr,"Font import failed\n");\r
+      close(f);\r
+      return -1;\r
+    }\r
+  }\r
+  else\r
+  { fprintf(stderr,"Font not found\n");\r
+    return -1;\r
+  }\r
+  close(f);\r
+\r
+  FontSetID(font,ID_FONT);\r
+  FontInitUsage(&use);\r
+  FontUse(&use,BANNER_TEXT);\r
+  FontReduce(font,&use);\r
+  \r
+  calcTables();\r
+  \r
+  memset(&swf,0x00,sizeof(SWF));\r
+\r
+  swf.FileVersion    = 4;\r
+  swf.FrameRate      = 0x4000;\r
+  swf.MovieSize.xmax = 4*width;\r
+  swf.MovieSize.ymax = 4*height;\r
+\r
+  swf.FirstTag = InsertTag(NULL,ST_SETBACKGROUNDCOLOR);\r
+  t = swf.FirstTag;\r
+\r
+        rgb.r = 0xff;\r
+        rgb.g = 0xff;\r
+        rgb.b = 0xff;\r
+        SetRGB(t,&rgb);\r
+\r
+  t = InsertTag(t,ST_DEFINEFONT);\r
+\r
+        FontSetDefine(t,font);\r
+\r
+  t = InsertTag(t,ST_DEFINEFONTINFO);\r
+\r
+        FontSetInfo(t,font);\r
+\r
+  t = InsertTag(t,ST_DEFINETEXT);\r
+\r
+        SetU16(t,ID_BANNER);            // ID\r
+        \r
+        r.xmin = 0;\r
+        r.ymin = 0;\r
+        r.xmax = 400;\r
+        r.ymax = 400;\r
+        SetRect(t,&r);\r
+\r
+        SetMatrix(t,NULL);\r
+\r
+        TextCountBits(font,BANNER_TEXT,80,&gbits,&abits);\r
+        \r
+        SetU8(t,gbits);\r
+        SetU8(t,abits);\r
+\r
+        rgb.r = 0xc0;\r
+        rgb.g = 0xc0;\r
+        rgb.b = 0xc0;\r
+\r
+        TextSetInfoRecord(t,font,height/4,&rgb,0,200);\r
+        TextSetCharRecord(t,font,BANNER_TEXT,80,gbits,abits);\r
+\r
+        SetU8(t,0);\r
+        \r
+  t = InsertTag(t,ST_DEFINETEXT);\r
+\r
+        SetU16(t,ID_HIGHLIGHT);            // ID\r
+        \r
+        r.xmin = 0; r.ymin = 0; r.xmax = 800; r.ymax = 400;\r
+        SetRect(t,&r);\r
+\r
+        SetMatrix(t,NULL);\r
+        TextCountBits(font,BANNER_TEXT,80,&gbits,&abits);\r
+        \r
+        SetU8(t,gbits);\r
+        SetU8(t,abits);\r
+\r
+        rgb.r = 0x20;\r
+        rgb.g = 0x20;\r
+        rgb.b = 0x20;\r
+\r
+        TextSetInfoRecord(t,font,height/4,&rgb,0,200);\r
+        TextSetCharRecord(t,font,BANNER_TEXT,80,gbits,abits);\r
+\r
+        SetU8(t,0);\r
+        \r
+    t = InsertTag(t,ST_DEFINEBUTTON);\r
+    \r
+        GetMatrix(NULL,&m);\r
+        \r
+        m.tx = 3*width;\r
+        m.ty = 7*height/2;\r
+        \r
+        SetU16(t,ID_BUTTON); // ID\r
+        ButtonSetRecord(t,BS_UP,ID_BANNER,1,&m,NULL);\r
+        ButtonSetRecord(t,BS_DOWN|BS_HIT|BS_OVER,ID_HIGHLIGHT,1,&m,NULL);\r
+        SetU8(t,0); // End of Button Records\r
+        \r
+        ActionCompile(t,"if (status==1) { status = 0; stop();} else { status=1; play();}");\r
+    \r
+      \r
+    t = InsertTag(t,ST_PLACEOBJECT2);\r
+\r
+         ObjectPlace(t,ID_BUTTON,1,NULL,NULL,NULL);\r
+\r
+    t = InsertTag(t,ST_DEFINEBITSJPEG2);\r
+\r
+         SetU16(t,ID_BITMAP);\r
+         SetJPEGBits(t,"eye.jpg",QUALITY);\r
+         \r
+    t = InsertTag(t,ST_DEFINESHAPE);\r
+    \r
+         NewShape(&s);\r
+         rgb.b = rgb.g = rgb.r = 0x00;\r
+         ls = ShapeAddLineStyle(s,10,&rgb);     \r
+         rgb.b = 0xff;\r
+\r
+         m.tx = m.ty = 0;\r
+         m.r0 = m.r1 = 0;\r
+         m.sx = m.sy = width<<8;\r
+  \r
+         fs = ShapeAddBitmapFillStyle(s,&m,ID_BITMAP,0);\r
+    \r
+         SetU16(t,ID_SHAPE);    // ID   \r
+         \r
+         r.xmin = 0; r.ymin = 0;\r
+         r.xmax = 2*width; r.ymax = 2*height;\r
+         SetRect(t,&r);\r
+\r
+         SetShapeHeader(t,s);\r
+         ShapeSetAll(t,s,width,0,0,fs,0);\r
+         ShapeSetLine(t,s,-width,height);\r
+         ShapeSetStyle(t,s,ls,fs,0);\r
+         ShapeSetLine(t,s,0,-height);\r
+         ShapeSetLine(t,s,width,0);\r
+         ShapeSetEnd(t);\r
+\r
+         ShapeFree(s);\r
+         \r
+    t = InsertTag(t,ST_DEFINESHAPE);\r
+    \r
+         NewShape(&s);\r
+         rgb.b = rgb.g = rgb.r = 0x00;\r
+         ls = ShapeAddLineStyle(s,10,&rgb);     \r
+         rgb.b = 0xff;\r
+\r
+         m.tx = m.ty = 0;\r
+         m.r0 = m.r1 = 0;\r
+         m.sx = m.sy = -(width<<8);\r
+  \r
+         fs = ShapeAddBitmapFillStyle(s,&m,ID_BITMAP,0);\r
+    \r
+         SetU16(t,ID_SHAPE2);   // ID   \r
+         \r
+         r.xmin = 0; r.ymin = 0;\r
+         r.xmax = 2*width; r.ymax = 2*height;\r
+         SetRect(t,&r);\r
+\r
+         SetShapeHeader(t,s);\r
+         ShapeSetAll(t,s,width,0,0,fs,0);\r
+         ShapeSetLine(t,s,-width,height);\r
+         ShapeSetStyle(t,s,ls,fs,0);\r
+         ShapeSetLine(t,s,0,-height);\r
+         ShapeSetLine(t,s,width,0);\r
+         ShapeSetEnd(t);\r
+\r
+         ShapeFree(s);\r
+   \r
+  for (frame=0;frame<256;frame++)\r
+  { int dc = 3; // whitespace correction\r
+\r
+    mapBox(frame<<1,frame<<1,frame);\r
+    if (SHADE) mapLights(frame<<1,frame<<1,frame);\r
+    \r
+    t = MapSquare(t,width-dc,height-dc,0,2,3,1,2*width,2*height,0);\r
+    t = MapSquare(t,width-dc,height-dc,4,5,7,6,2*width,2*height,1);\r
+    t = MapSquare(t,width-dc,height-dc,0,4,6,2,2*width,2*height,2);\r
+    t = MapSquare(t,width-dc,height-dc,1,3,7,5,2*width,2*height,3);\r
+    t = MapSquare(t,width-dc,height-dc,0,1,5,4,2*width,2*height,4);\r
+    t = MapSquare(t,width-dc,height-dc,2,6,7,3,2*width,2*height,5);\r
+        \r
+    t = InsertTag(t,ST_SHOWFRAME);\r
+  }\r
+  /*\r
+    t = InsertTag(t,ST_DOACTION);\r
+\r
+      ActionCompile(t,"stop();");\r
+    */  \r
+    t = InsertTag(t,ST_END);\r
+  \r
+  WriteCGI(&swf);\r
+  FreeTags(&swf);\r
+  return 0;\r
+}\r
+\r
+\r
diff --git a/lib/example/transtest.c b/lib/example/transtest.c
new file mode 100644 (file)
index 0000000..647a615
--- /dev/null
@@ -0,0 +1,350 @@
+
+// linux/gcc: cc transtest.c ../rfxswf.c -funsigned-char -o transtest -lm -ljpeg; cp transtest /home/www/cgi-bin/transtest
+
+#include <stdio.h>
+#include <fcntl.h>
+#include <math.h>
+#include "../rfxswf.h"
+
+// Box
+
+#define BANNER_TEXT    "reflex"
+#define QUALITY        80
+#define ID_FONT        2000
+#define ID_BANNER      2001
+#define ID_HIGHLIGHT   2002
+#define ID_BUTTON      2003
+#define ID_BITMAP      2004
+#define ID_SHAPE       2005
+
+#define a 200
+int sX[] = { a,-a, a,-a, a,-a, a,-a};
+int sY[] = { a, a,-a,-a, a, a,-a,-a};
+int sZ[] = { a, a, a, a,-a,-a,-a,-a};
+#undef a
+  
+int dX[8];
+int dY[8];
+
+int sin_[512],cos_[512];
+
+void calcTables()      
+{ int i;
+  double d;
+  for (i=0;i<512;i++)
+  { d = ((double)i)/128*3.14159;
+    sin_[i] = (int)(sin(d)*256);
+    cos_[i] = (int)(cos(d)*256);
+  }
+}
+
+void ShapeSquare(LPTAG t,LPSHAPE s,int p1,int p2,int p3,int p4,int dx,int dy)
+{ 
+  // Hidden-Line-Check
+    if (((dX[p2]-dX[p1])*(dY[p3]-dY[p1])-(dX[p3]-dX[p1])*(dY[p2]-dY[p1]))<0) return;
+
+  ShapeSetMove(t,s,dX[p1]+dx,dY[p1]+dy);
+  ShapeSetLine(t,s,dX[p2]-dX[p1],dY[p2]-dY[p1]);
+  ShapeSetLine(t,s,dX[p3]-dX[p2],dY[p3]-dY[p2]);
+  ShapeSetLine(t,s,dX[p4]-dX[p3],dY[p4]-dY[p3]);
+  ShapeSetLine(t,s,dX[p1]-dX[p4],dY[p1]-dY[p4]);
+}
+
+
+void mapBox(int xw,int yw,int zw)
+{ int i;
+  int x1,y1,z1,x2,y2,z2,x3,y3,z3;
+  int y,x,z;
+  
+  xw &= 255;
+  yw &= 255;
+  zw &= 255;
+
+  for (i=0;i<8;i++)
+  { x = sX[i];
+    y = sY[i];
+    z = sZ[i];
+                 
+    y1 = ( y*cos_[xw]- z*sin_[xw])>>8;
+    z1 = ( y*sin_[xw]+ z*cos_[xw])>>8;
+    x1 = x;
+
+    x2 = (x1*cos_[yw]+z1*sin_[yw])>>8;
+    y2 = y1;
+
+    x3 = (x2*cos_[zw]-y2*sin_[zw])>>8;
+    y3 = (x2*sin_[zw]+y2*cos_[zw])>>8;
+    z3 = (z1*cos_[yw]-x1*sin_[yw])>>8;
+
+    dX[i] = x3*4000/(z3+950);
+    dY[i] = y3*4000/(z3+950);
+       
+  }
+}
+
+
+#define S64 long long
+SFIXED SP(SFIXED a1,SFIXED a2,SFIXED b1,SFIXED b2)
+{ S64 a;
+  a = (S64)a1*(S64)b1+(S64)a2*(S64)b2;
+  return (SFIXED)(a>>16);
+}
+SFIXED QFIX(int zaehler,int nenner) // bildet Quotient von zwei INTs in SFIXED
+{ S64 z = zaehler<<16;
+  S64 a = z/(S64)nenner;
+  return (SFIXED)a;
+}
+#undef S64
+
+LPMATRIX MatrixJoin(LPMATRIX d,LPMATRIX s1,LPMATRIX s2)
+{        
+  if (!d) return NULL;
+  if (!s1) return (s2)?(LPMATRIX)memcpy(d,s2,sizeof(MATRIX)):NULL;
+  if (!s2) return (LPMATRIX)memcpy(d,s1,sizeof(MATRIX));
+  
+  d->tx = s1->tx + s2->tx;
+  d->ty = s1->ty + s2->ty;
+  
+  d->sx = SP(s1->sx,s1->r1,s2->sx,s2->r0);
+  d->sy = SP(s1->r0,s1->sy,s2->r1,s2->sy);
+  d->r0 = SP(s1->r0,s1->sy,s2->sx,s2->r0);
+  d->r1 = SP(s1->sx,s1->r1,s2->r1,s2->sy);
+
+  //DumpMatrix(NULL,d);
+  
+  return d;
+}
+
+LPMATRIX MatrixMapTriangle(LPMATRIX m,int dx,int dy,int x0,int y0,
+                              int x1,int y1,int x2,int y2)
+{ int dx1 = x1 - x0;
+  int dy1 = y1 - y0;
+  int dx2 = x2 - x0;
+  int dy2 = y2 - y0;
+  
+  if (!m) return NULL;
+  if ((!dx)||(!dy)) return NULL; // check DIV by zero
+
+  m->tx = x0;
+  m->ty = y0;
+  m->sx = QFIX(dx1,dx);
+  m->sy = QFIX(dy2,dy);
+  m->r0 = QFIX(dy1,dx);
+  m->r1 = QFIX(dx2,dy);
+  
+  return m;
+}
+
+int main (int argc,char ** argv)
+{ SWF swf;
+  LPTAG t;
+  RGBA rgb;
+  SRECT r;
+  LPSHAPE s;
+  S32 width = 800,height = 800;
+  U8 gbits,abits;
+  int fs,ls; // line & fillstyle
+  LPSWFFONT font;
+  FONTUSAGE use;
+  LPJPEGBITS jpeg;
+  MATRIX m;  
+  
+  int f,i,j,frame;
+  
+  f = open("Arial.efont",O_RDONLY);
+  if (f>=0)
+  { if (FAILED(FontImport(f,&font)))
+    { fprintf(stderr,"Font import failed\n");
+      close(f);
+      return -1;
+    }
+  }
+  else
+  { fprintf(stderr,"Font not found\n");
+    return -1;
+  }
+  close(f);
+
+  FontSetID(font,ID_FONT);
+  FontInitUsage(&use);
+  FontUse(&use,BANNER_TEXT);
+  FontReduce(font,&use);
+  
+  calcTables();
+  
+  memset(&swf,0x00,sizeof(SWF));
+
+  swf.FileVersion    = 4;
+  swf.FrameRate      = 0x4000;
+  swf.MovieSize.xmax = 4*width;
+  swf.MovieSize.ymax = 4*height;
+
+  swf.FirstTag = InsertTag(NULL,ST_SETBACKGROUNDCOLOR);
+  t = swf.FirstTag;
+
+        rgb.r = 0xff;
+        rgb.g = 0xff;
+        rgb.b = 0xff;
+        SetRGB(t,&rgb);
+
+  t = InsertTag(t,ST_DEFINEFONT);
+
+        FontSetDefine(t,font);
+
+  t = InsertTag(t,ST_DEFINEFONTINFO);
+
+        FontSetInfo(t,font);
+
+  t = InsertTag(t,ST_DEFINETEXT);
+
+        SetU16(t,ID_BANNER);            // ID
+        
+        r.xmin = 0;
+        r.ymin = 0;
+        r.xmax = 400;
+        r.ymax = 400;
+        SetRect(t,&r);
+
+        SetMatrix(t,NULL);
+
+        TextCountBits(font,BANNER_TEXT,80,&gbits,&abits);
+        
+        SetU8(t,gbits);
+        SetU8(t,abits);
+
+        rgb.r = 0xc0;
+        rgb.g = 0xc0;
+        rgb.b = 0xc0;
+
+        TextSetInfoRecord(t,font,height/4,&rgb,0,200);
+        TextSetCharRecord(t,font,BANNER_TEXT,80,gbits,abits);
+
+        SetU8(t,0);
+        
+  t = InsertTag(t,ST_DEFINETEXT);
+
+        SetU16(t,ID_HIGHLIGHT);            // ID
+        
+        r.xmin = 0;
+        r.ymin = 0;
+        r.xmax = 800;
+        r.ymax = 400;
+        SetRect(t,&r);
+
+        SetMatrix(t,NULL);
+
+        TextCountBits(font,BANNER_TEXT,80,&gbits,&abits);
+        
+        SetU8(t,gbits);
+        SetU8(t,abits);
+
+        rgb.r = 0x20;
+        rgb.g = 0x20;
+        rgb.b = 0x20;
+
+        TextSetInfoRecord(t,font,height/4,&rgb,0,200);
+        TextSetCharRecord(t,font,BANNER_TEXT,80,gbits,abits);
+
+        SetU8(t,0);
+       
+    t = InsertTag(t,ST_DEFINEBUTTON);
+    
+        GetMatrix(NULL,&m);
+       
+       m.tx = 3*width;
+       m.ty = 7*height/2;
+        
+        SetU16(t,ID_BUTTON); // ID
+       ButtonSetRecord(t,BS_UP,ID_BANNER,1,&m,NULL);
+       ButtonSetRecord(t,BS_DOWN|BS_HIT|BS_OVER,ID_HIGHLIGHT,1,&m,NULL);
+       SetU8(t,0); // End of Button Records
+       SetU8(t,0); // End of Action Records
+    
+      
+    t = InsertTag(t,ST_PLACEOBJECT2);
+
+         ObjectPlace(t,ID_BUTTON,1,NULL,NULL,NULL);
+
+    t = InsertTag(t,ST_DEFINEBITSJPEG2);
+
+         SetU16(t,ID_BITMAP);
+         SetJPEGBits(t,"eye.jpg",QUALITY);
+         
+    t = InsertTag(t,ST_DEFINESHAPE);
+    
+         NewShape(&s);
+         rgb.b = rgb.g = rgb.r = 0x00;
+        // ls = ShapeAddLineStyle(s,40,&rgb);  
+         ls = 0;
+         rgb.b = 0xff;
+  
+         fs = ShapeAddBitmapFillStyle(s,&m,ID_BITMAP,0);
+    
+         SetU16(t,ID_SHAPE);   // ID   
+         
+         r.xmin = 0;
+         r.ymin = 0;
+         r.xmax = 2*width;
+         r.ymax = 2*height;
+         
+         SetRect(t,&r);
+
+         SetShapeHeader(t,s);
+         
+         ShapeSetAll(t,s,0,0,ls,fs,0);
+         ShapeSetLine(t,s,width,0);
+         ShapeSetLine(t,s,-width,height);
+         ShapeSetLine(t,s,0,-height);
+         ShapeSetEnd(t);
+
+         ShapeFree(s);
+    
+
+  for (frame=0;frame<64;frame++)
+  { /*MATRIX m1,m2;
+     
+    m1.sy = m1.sx = (int)(cos(((float)(frame))/32*3.141)*0x10000);
+    m1.r0 = (int)(sin(((float)(frame))/32*3.141)*0x10000);
+    m1.r1 = -m1.r0;
+    m1.tx = width+frame*4; m1.ty = height;
+
+    m2.sy = m2.sx = (int)(cos(((float)(64-frame))/32*3.141)*0x10000);
+    m2.r0 = (int)(sin(((float)(64-frame))/32*3.141)*0x10000);
+    m2.r1 = -m2.r0;
+    m2.tx = width; m2.ty = height;
+
+    MatrixJoin(&m,&m1,&m2); */
+
+    int dx0 = width;  // Konstanten der Shapes
+    int dy0 = width;
+
+    int px0 = 2*width;  // Zielpunkte des Mappings
+    int py0 = 2*width;
+
+    int px1 = 3*width;
+    int py1 = 2*width-frame*4;
+
+    int px2 = 2*width-frame*8;
+    int py2 = 3*width;
+
+    MatrixMapTriangle(&m,dx0,dy0,px0,py0,px1,py1,px2,py2);
+
+    t = InsertTag(t,ST_PLACEOBJECT2);
+
+        if (!frame)
+         ObjectPlace(t,ID_SHAPE,1,&m,NULL,NULL);
+        else
+          ObjectMove(t,1,&m,NULL);
+    t = InsertTag(t,ST_SHOWFRAME);
+  }
+  
+  
+  t = InsertTag(t,ST_END);
+  
+  WriteCGI(&swf);
+  FreeTags(&swf);
+  return 0;
+}
+
+
diff --git a/lib/log.c b/lib/log.c
new file mode 100644 (file)
index 0000000..6c705ee
--- /dev/null
+++ b/lib/log.c
@@ -0,0 +1,252 @@
+/* log.c \r
+   Logging facilities for displaying information on screen, as well as\r
+   (optional) storing it to a file and transmitting it over the network.\r
+\r
+   Part of the swftools package.\r
+   \r
+   Copyright (c) 2001 Matthias Kramm <kramm@quiss.org> \r
+\r
+   This file is distributed under the GPL, see file COPYING for details */\r
+\r
+#ifdef __NT__\r
+#include "stdafx.h"\r
+#include <string.h>\r
+#include <winsock2.h>\r
+#include <stdlib.h>\r
+#include <malloc.h>\r
+#if _MSC_VER > 1000\r
+#pragma once\r
+#endif // _MSC_VER > 1000\r
+#else\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <stdarg.h>\r
+#include <string.h>\r
+#include <unistd.h>\r
+#endif\r
+\r
+#include "log.h"\r
+\r
+#define LOGLEVEL_FATAL 0\r
+#define LOGLEVEL_ERROR 1\r
+#define LOGLEVEL_WARNING 2\r
+#define LOGLEVEL_NOTICE 3\r
+#define LOGLEVEL_VERBOSE 4\r
+#define LOGLEVEL_DEBUG 5\r
+\r
+int screenloglevel;\r
+int fileloglevel;\r
+int socketloglevel;\r
+FILE *logFile = 0;\r
+#ifdef __NT__\r
+SOCKET logSocket;\r
+#else\r
+int logSocket = 0;\r
+#endif\r
+\r
+char bLogToSock = 0;\r
+\r
+void initlogSocket(char* servAddr, char* logPort);\r
+\r
+void initLog(char* pLogName, int fileloglevel, char* servAddr, char* logPort, int serverlevel, int screenlevel)\r
+{\r
+   screenloglevel = screenlevel;\r
+   fileloglevel = fileloglevel;\r
+   socketloglevel = screenlevel;\r
+   logFile = NULL;\r
+   bLogToSock = 0;\r
+\r
+   if (pLogName && fileloglevel>=0)\r
+   logFile = fopen(pLogName, "a+");\r
+   bLogToSock = (servAddr && logPort && (serverlevel>=0));\r
+   if(bLogToSock)\r
+       initlogSocket(servAddr, logPort);\r
+}\r
+\r
+void initlogSocket(char* servAddr, char* logPort)\r
+{\r
+#ifndef __NT__\r
+   bLogToSock = 0;\r
+#else\r
+   // init winsock\r
+   // check and prepare WinSock DLL\r
+   WORD wVersionRequested = MAKEWORD( 2, 2 );\r
+   WSADATA wsaData;\r
+   if ( WSAStartup(wVersionRequested, &wsaData) != 0 )\r
+   {\r
+      bLogToSock = false;\r
+      return;\r
+   }\r
+   // Confirm that the WinSock DLL supports 2.2.\r
+   // Note that if the DLL supports versions greater\r
+   // than 2.2 in addition to 2.2, it will still return\r
+   // 2.2 in wVersion since that is the version we\r
+   // requested.\r
+\r
+   if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 )\r
+   {\r
+      bLogToSock = false;\r
+      return;\r
+   }\r
+\r
+   struct hostent *hp;\r
+   hp = gethostbyname(servAddr);\r
+   if (hp == NULL) // we don't know who this host is\r
+   {\r
+      bLogToSock = false;\r
+      return;\r
+   }\r
+\r
+   // connect socket\r
+   sockaddr_in SocketAddress;\r
+\r
+   memset(&SocketAddress, 0, sizeof(SocketAddress));\r
+   memcpy((char*)&SocketAddress.sin_addr, hp->h_addr, hp->h_length); // set address\r
+   SocketAddress.sin_family = hp->h_addrtype;\r
+   SocketAddress.sin_port = htons((u_short)atoi(logPort));\r
+\r
+   logSocket = socket(hp->h_addrtype, SOCK_STREAM, 0);\r
+   if (logSocket == INVALID_SOCKET)\r
+   {\r
+      bLogToSock = false;\r
+      return;\r
+   }\r
+\r
+   // try to connect to the specified socket\r
+   if ( connect(logSocket, (struct sockaddr*)&SocketAddress, sizeof (SocketAddress)) == SOCKET_ERROR) {\r
+      bLogToSock = false;\r
+      return;\r
+   }\r
+   bLogToSock = true;\r
+#endif\r
+}\r
+\r
+void exitLog()\r
+{\r
+   // close socket communication\r
+   if(bLogToSock)\r
+#ifndef __NT__\r
+     close(logSocket);\r
+#else\r
+     closesocket(logSocket);\r
+#endif\r
+   // close file\r
+   if(logFile != NULL)\r
+     fclose(logFile);\r
+}\r
+\r
+\r
+static char * logimportance[]= {"Fatal","Error","Warning","Notice","Verbose","Debug"};\r
+static int loglevels=6;\r
+static char * logimportance2[]= {"       ","FATAL  ","ERROR  ","WARNING","NOTICE ","VERBOSE","DEBUG  "};\r
+void log(char* logString)\r
+{\r
+   char timebuffer[32];\r
+   char* logBuffer;\r
+   char dbuffer[9];\r
+   char tbuffer[9];\r
+   int level;\r
+   char*lt;\r
+   char*gt;\r
+   int l;\r
+\r
+   logBuffer = (char*)malloc (strlen(logString) + 24 + 15);\r
+#ifndef __NT__\r
+   {\r
+     /*time_t t = time(0);\r
+     tm*t2 = localtime(t);\r
+     strftime(dbuffer, 8, "%m %d", t2);\r
+     strftime(tbuffer, 8, "%m %d", t2);\r
+     dbuffer[0]=0; //FIXME\r
+     tbuffer[0]=0;*/\r
+     time_t t = time(0);\r
+     char* a = ctime(&t);\r
+     int l = strlen(a);\r
+     while(a[l-1] == 13 || a[l-1] == 10)\r
+       l--;\r
+     a[l]=0;\r
+     sprintf(timebuffer, "%s", a);\r
+   }\r
+#else\r
+   _strdate( dbuffer );\r
+   _strtime( tbuffer );\r
+   sprintf(timebuffer, "%s - %s",dbuffer,tbuffer);\r
+#endif\r
+\r
+   // search for <level> field\r
+   level = -1;\r
+   lt=strchr(logString, '<');\r
+   gt=strchr(logString, '>');\r
+   if(lt && gt && lt<gt)\r
+   {\r
+       int t;\r
+       for(t=0;t<loglevels;t++)\r
+       {\r
+#ifndef __NT__\r
+          if(!strncasecmp(lt+1,logimportance[t],strlen(logimportance[t])))\r
+#else\r
+          if(!strnicmp(lt+1,logimportance[t],strlen(logimportance[t])))\r
+#endif\r
+          {\r
+              logString = gt+1;\r
+              while(logString[0]==' ') logString ++;\r
+              level = t;\r
+              break;\r
+          }\r
+       }\r
+   }\r
+   \r
+//   sprintf(logBuffer, "%s: %s %s", timebuffer, logimportance2[level + 1],logString);\r
+   sprintf(logBuffer, "%s %s", logimportance2[level + 1],logString);\r
+\r
+   // we always do exactly one newline.\r
+   \r
+   l=strlen(logBuffer)-1;\r
+   while((logBuffer[l]==13 || logBuffer[l]==10) && l>=0)\r
+   {\r
+       logBuffer[l]=0;\r
+       l--;\r
+   }\r
+\r
+   if (level <= screenloglevel)\r
+   {\r
+       printf("%s\n", logBuffer); \r
+       fflush(stdout);\r
+   }\r
+\r
+   if (level <= fileloglevel)\r
+   {\r
+       if (logFile != NULL)\r
+       {\r
+         fprintf(logFile, "%s\n", logBuffer); \r
+         fflush(logFile);\r
+       }\r
+   }\r
+\r
+   if (level <= socketloglevel)\r
+   {\r
+       if (bLogToSock)\r
+       {\r
+         // send data\r
+#ifndef __NT__\r
+         write(logSocket, logBuffer, strlen(logBuffer));\r
+#else\r
+         send(logSocket, logBuffer, strlen(logBuffer), 0);\r
+#endif\r
+       }\r
+   }\r
+   free (logBuffer);\r
+}\r
+\r
+void logf(const char* pszFormat, ...)\r
+{\r
+    char buf[1024];\r
+       va_list arglist;\r
+       va_start(arglist, pszFormat);\r
+    buf[0] = 0;\r
+    vsprintf(&buf[strlen(buf)], pszFormat, arglist);\r
+       va_end(arglist);\r
+    strcat(buf, "\n");\r
+    log(buf);\r
+}\r
+\r
diff --git a/lib/log.h b/lib/log.h
new file mode 100644 (file)
index 0000000..e3fbc2d
--- /dev/null
+++ b/lib/log.h
@@ -0,0 +1,39 @@
+/* log.h \r
+   Header file for log.c.\r
+\r
+   Part of the swftools package.\r
+   \r
+   Copyright (c) 2001 Matthias Kramm <kramm@quiss.org> \r
+\r
+   This file is distributed under the GPL, see file COPYING for details */\r
+\r
+#ifndef __log_h__\r
+#define __log_h__\r
+\r
+#ifdef __NT__\r
+#include "stdafx.h"\r
+#include <time.h>\r
+#include <windef.h>\r
+#else\r
+#include <stdlib.h>\r
+#include <stdio.h>\r
+#include <time.h>\r
+#endif\r
+\r
+#define LOGLEVEL_FATAL 0\r
+#define LOGLEVEL_ERROR 1\r
+#define LOGLEVEL_WARNING 2\r
+#define LOGLEVEL_NOTICE 3\r
+#define LOGLEVEL_VERBOSE 4\r
+#define LOGLEVEL_DEBUG 5\r
+\r
+extern int screenloglevel;\r
+extern int socketloglevel;\r
+extern int fileloglevel;\r
+\r
+extern void initLog(char* pLogDir, int fileloglevel, char* servAddr, char* logPort, int serverloglevel, int screenloglevel);\r
+extern void log(char* logString);\r
+extern void logf(const char* logFormat, ...);\r
+extern void exitLog(void);\r
\r
+#endif  // __log_h__\r
diff --git a/lib/modules/swfbits.c b/lib/modules/swfbits.c
new file mode 100644 (file)
index 0000000..05b21fb
--- /dev/null
@@ -0,0 +1,152 @@
+/* swfbits.c\r
+\r
+   Bitmap functions (needs libjpeg) \r
+\r
+   Extension module for the rfxswf library.\r
+   Part of the swftools package.\r
+\r
+   Copyright (c) 2000, 2001 Rainer Böhme <rfxswf@reflex-studio.de>\r
\r
+   This file is distributed under the GPL, see file COPYING for details \r
+\r
+*/\r
+\r
+#ifdef _JPEGLIB_INCLUDED_\r
+#define OUTBUFFER_SIZE 32768\r
+\r
+typedef struct _JPEGDESTMGR\r
+{ struct jpeg_destination_mgr mgr;\r
+  LPTAG  t;\r
+  JOCTET * buffer;\r
+  struct jpeg_compress_struct cinfo;\r
+  struct jpeg_error_mgr jerr;\r
+} JPEGDESTMGR, * LPJPEGDESTMGR;\r
+\r
+// Destination manager callbacks\r
+\r
+void swf_init_destination(j_compress_ptr cinfo) \r
+{ LPJPEGDESTMGR dmgr = (LPJPEGDESTMGR)cinfo->dest;\r
+  dmgr->buffer = (JOCTET*)malloc(OUTBUFFER_SIZE);\r
+  dmgr->mgr.next_output_byte = dmgr->buffer;\r
+  dmgr->mgr.free_in_buffer = OUTBUFFER_SIZE;\r
+}\r
+\r
+boolean swf_empty_output_buffer(j_compress_ptr cinfo)\r
+{ LPJPEGDESTMGR dmgr = (LPJPEGDESTMGR)cinfo->dest;\r
+  SetBlock(dmgr->t,\r
+           (U8*)dmgr->buffer,\r
+           OUTBUFFER_SIZE-dmgr->mgr.free_in_buffer);\r
+  dmgr->mgr.next_output_byte = dmgr->buffer;\r
+  dmgr->mgr.free_in_buffer = OUTBUFFER_SIZE;\r
+}\r
+\r
+void swf_term_destination(j_compress_ptr cinfo) \r
+{ LPJPEGDESTMGR dmgr = (LPJPEGDESTMGR)cinfo->dest;\r
+  swf_empty_output_buffer(cinfo);\r
+  free(dmgr->buffer);\r
+  dmgr->mgr.free_in_buffer = 0;\r
+}\r
+\r
+LPJPEGBITS SetJPEGBitsStart(LPTAG t,int width,int height,int quality)\r
+{\r
+  LPJPEGDESTMGR jpeg;\r
+        \r
+  // redirect compression lib output to local SWF Tag structure\r
+  \r
+  jpeg = (LPJPEGDESTMGR)malloc(sizeof(JPEGDESTMGR));\r
+  if (!jpeg) return NULL;\r
+  \r
+  memset(jpeg,0x00,sizeof(JPEGDESTMGR));\r
+  jpeg->cinfo.err = jpeg_std_error(&jpeg->jerr);\r
+\r
+  jpeg_create_compress(&jpeg->cinfo);\r
+\r
+  jpeg->mgr.init_destination =  swf_init_destination;\r
+  jpeg->mgr.empty_output_buffer =       swf_empty_output_buffer;\r
+  jpeg->mgr.term_destination =  swf_term_destination;\r
+      \r
+  jpeg->t = t;\r
+\r
+  jpeg->cinfo.dest = (struct jpeg_destination_mgr *)jpeg;\r
+\r
+  // init compression\r
+  \r
+  jpeg->cinfo.image_width  = width;\r
+  jpeg->cinfo.image_height = height;\r
+  jpeg->cinfo.input_components = 3;\r
+  jpeg->cinfo.in_color_space = JCS_RGB;\r
+\r
+  jpeg_set_defaults(&jpeg->cinfo);\r
+  jpeg_set_quality(&jpeg->cinfo,quality,TRUE);\r
+\r
+  // write tables to SWF\r
+  \r
+  jpeg_write_tables(&jpeg->cinfo);\r
+\r
+  // compess image to SWF\r
+   \r
+  jpeg_suppress_tables(&jpeg->cinfo, TRUE);\r
+  jpeg_start_compress(&jpeg->cinfo, FALSE);\r
+\r
+  return (LPJPEGBITS)jpeg;\r
+}\r
+\r
+int SetJPEGBitsLines(LPJPEGBITS jpegbits,U8 ** data,int n)\r
+{ LPJPEGDESTMGR jpeg = (LPJPEGDESTMGR)jpegbits;\r
+  if (!jpeg) return -1;\r
+  jpeg_write_scanlines(&jpeg->cinfo,data,n);\r
+  return 0;\r
+}\r
+\r
+int SetJPEGBitsLine(LPJPEGBITS jpegbits,U8 * data)\r
+{ return SetJPEGBitsLines(jpegbits,&data,1);\r
+}\r
+\r
+int SetJPEGBitsFinish(LPJPEGBITS jpegbits)\r
+{ LPJPEGDESTMGR jpeg = (LPJPEGDESTMGR)jpegbits;\r
+  if (!jpeg) return -1;\r
+  jpeg_finish_compress(&jpeg->cinfo);\r
+  free(jpeg);\r
+  return 0;\r
+}\r
+\r
+int SetJPEGBits(LPTAG t,char * fname,int quality)\r
+{ struct jpeg_decompress_struct cinfo;\r
+  struct jpeg_error_mgr jerr;\r
+  LPJPEGBITS out;\r
+  FILE * f;\r
+  U8 * scanline;\r
+  \r
+  cinfo.err = jpeg_std_error(&jerr);\r
+  jpeg_create_decompress(&cinfo); \r
+\r
+  if ((f=fopen(fname,"rb"))==NULL) return -1;\r
+  \r
+\r
+  jpeg_stdio_src(&cinfo,f);\r
+  jpeg_read_header(&cinfo, TRUE);\r
+  jpeg_start_decompress(&cinfo);\r
+\r
+  out = SetJPEGBitsStart(t,cinfo.output_width,cinfo.output_height,quality);\r
+  scanline = (U8*)malloc(4*cinfo.output_width);\r
+  \r
+  if (scanline)\r
+  { int y;\r
+    U8 * js = scanline;\r
+    for (y=0;y<cinfo.output_height;y++)\r
+    { jpeg_read_scanlines(&cinfo,&js,1);\r
+      SetJPEGBitsLines(out,(U8**)&js,1);\r
+    }\r
+  }\r
+\r
+  SetJPEGBitsFinish(out);\r
+  jpeg_finish_decompress(&cinfo);\r
+  fclose(f);\r
+  \r
+  return 0;\r
+}\r
+\r
+#undef OUTBUFFER_SIZE\r
+#endif\r
+\r
+// insert zlib/PNG functions here\r
diff --git a/lib/modules/swfbutton.c b/lib/modules/swfbutton.c
new file mode 100644 (file)
index 0000000..23bd3c7
--- /dev/null
@@ -0,0 +1,92 @@
+/* swfbutton.c\r
+\r
+   Button functions\r
+\r
+   Extension module for the rfxswf library.\r
+   Part of the swftools package.\r
+\r
+   Copyright (c) 2000, 2001 Rainer Böhme <rfxswf@reflex-studio.de>\r
\r
+   This file is distributed under the GPL, see file COPYING for details \r
+\r
+*/\r
+\r
+int ButtonSetRecord(LPTAG t,U8 state,U16 id,U16 layer,LPMATRIX m,LPCXFORM cx)\r
+\r
+{ SetU8(t,state);\r
+  SetU16(t,id);\r
+  SetU16(t,layer);\r
+  SetMatrix(t,m);\r
+//  SetCXForm(t,cx,0);\r
+  return 0;\r
+}\r
+\r
+int ButtonSetCondition(LPTAG t,U16 condition)\r
+{ SetU16(t,0); // dummy for Action Offset -> later set by ButtonPostProcess\r
+  SetU16(t,condition);\r
+  return 0;\r
+}\r
+\r
+int ButtonSetFlags(LPTAG t,U8 flags)\r
+{ if (GetTagID(t)==ST_DEFINEBUTTON2)\r
+  { SetU8(t,flags);\r
+    SetU16(t,0); // dummy for Action Offset -> later set by ButtonPostProcess\r
+  }\r
+  return 0;\r
+}\r
+\r
+void SetButtonOffset(LPTAG t,U32 offsetpos)\r
+{ U32 now = GetTagPos(t);\r
+  U16 diff = now-offsetpos;\r
+  SetTagPos(t,offsetpos);\r
+  t->data[t->pos++] = (U8)(diff&0xff);\r
+  t->data[t->pos++] = (U8)(diff>>8);\r
+  SetTagPos(t,now);\r
+}\r
+\r
+int ButtonPostProcess(LPTAG t,int anz_action)\r
+{ if (GetTagID(t)==ST_DEFINEBUTTON2)\r
+  { U32 oldTagPos;\r
+    U32 offsetpos;\r
+\r
+    oldTagPos = GetTagPos(t);\r
+\r
+    // scan DefineButton2 Record\r
+    \r
+    GetU16(t);          // Character ID\r
+    GetU8(t);           // Flags;\r
+\r
+    offsetpos = GetTagPos(t);  // first offset\r
+    GetU16(t);\r
+\r
+    while (GetU8(t))      // state  -> parse ButtonRecord\r
+    { GetU16(t);          // id\r
+      GetU16(t);          // layer\r
+      GetMatrix(t,NULL);  // matrix\r
+      // evtl.: CXForm\r
+    }\r
+\r
+    SetButtonOffset(t,offsetpos);\r
+\r
+    while(anz_action)\r
+    { U8 a;\r
+        \r
+      offsetpos = GetTagPos(t); // offset\r
+      GetU16(t);\r
+\r
+      GetU16(t);                // condition\r
+      \r
+      while (a=GetU8(t))        // skip action records\r
+      { if (a&0x80)\r
+        { U16 l = GetU16(t);\r
+          GetBlock(t,NULL,l);\r
+        }\r
+      }\r
+      \r
+      if (--anz_action) SetButtonOffset(t,offsetpos);\r
+    }\r
+    \r
+    SetTagPos(t,oldTagPos);\r
+  }\r
+  return 0;\r
+}\r
diff --git a/lib/modules/swfcgi.c b/lib/modules/swfcgi.c
new file mode 100644 (file)
index 0000000..98e5f03
--- /dev/null
@@ -0,0 +1,179 @@
+/* swfcgi.c\r
+\r
+   Parse CGI parameters\r
+   \r
+   Partly adopted from Steven Grimm's uncgi tool and library.\r
+\r
+   Extension module for the rfxswf library.\r
+   Part of the swftools package.\r
+\r
+   Copyright (c) 2001 Rainer Böhme <rfxswf@reflex-studio.de>\r
\r
+   This file is distributed under the GPL, see file COPYING for details \r
+\r
+*/\r
+\r
+\r
+#define ishex(x) (((x) >= '0' && (x) <= '9') || ((x) >= 'a' && (x) <= 'f') || ((x) >= 'A' && (x) <= 'F'))\r
+\r
+#define PREFIX "WWW_"\r
+\r
+static int htoi(unsigned char * s)\r
+{ int     value;\r
+  char    c;\r
+\r
+  c = s[0];\r
+  if (isupper(c)) c = tolower(c);\r
+  value = (c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10) * 16;\r
+\r
+  c = s[1];\r
+  if (isupper(c)) c = tolower(c);\r
+  value += c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10;\r
+\r
+  return (value);\r
+}\r
+\r
+static void url_unescape(unsigned char * s)\r
+{ unsigned char  *dest = s;\r
+\r
+  while (s[0])\r
+  { if (s[0] == '+') dest[0] = ' ';\r
+    else\r
+    { if (s[0] == '%' && ishex(s[1]) && ishex(s[2]))\r
+      { dest[0] = (unsigned char) htoi(s + 1);\r
+        s += 2;\r
+      }\r
+      else dest[0] = s[0];\r
+    }\r
+    s++;dest++;\r
+  }\r
+  dest[0] = 0;\r
+}\r
+\r
+static void cgienv(unsigned char * var)\r
+{ unsigned char *buf, *c, *s, *t, *oldval = NULL, *newval;\r
+  int despace = 0, got_cr = 0;\r
+\r
+  // fprintf(stderr,"%s\n",var);\r
+  url_unescape(var);\r
+  // fprintf(stderr,"%s\n",var);\r
+\r
+  \r
+  buf = (unsigned char*)malloc(strlen(var) + sizeof(PREFIX) + 2);\r
+  if (!buf) return;\r
+\r
+  strcpy(buf, PREFIX);\r
+  if (var[0] == '_')\r
+  { strcpy(&buf[sizeof(PREFIX)-1], &var[1]);\r
+    despace = 1;\r
+  }\r
+  else strcpy(&buf[sizeof(PREFIX)-1], var);\r
+\r
+  for (c = buf; c[0] ; c++)\r
+  { if (c[0] == '.') c[0] = '_';\r
+    if (c[0] == '=') break;\r
+  }\r
+  if (!c[0]) c[1] = 0;\r
+  c[0] = 0;\r
+\r
+  if (despace && c[1])\r
+  { for (s = c+1; s[0] && isspace(s[0]); s++);\r
+    t = c + 1;\r
+    while (s[0])\r
+    { if (s[0] == '\r')\r
+      { got_cr = 1;\r
+        s++;\r
+        continue;\r
+      }\r
+      if (got_cr)\r
+      { if (s[0] != '\n')\r
+        *t++ = '\n';\r
+        got_cr = 0;\r
+      }\r
+      *t++ = *s++;\r
+    }\r
+    while (t > c && isspace(*--t));\r
+    t[1] = 0;\r
+  }\r
+\r
+  if ((oldval = getenv(buf)))\r
+  { newval = (unsigned char*)malloc(strlen(oldval) + strlen(buf) + strlen(&c[1]) + 3);\r
+    if (!newval) return;\r
+\r
+    c[0] = '=';\r
+    sprintf(newval, "%s#%s", buf, oldval);\r
+    c[0] = 0;\r
+\r
+    oldval -= strlen(buf) + 1; // skip past VAR= \r
+  }\r
+  else \r
+  { c[0] = '=';\r
+    newval = buf;\r
+  }\r
+  \r
+  putenv(newval);\r
+        \r
+  if (oldval)\r
+  { free(oldval);\r
+    free(buf);\r
+  }\r
+}\r
+\r
+static void scanquery(char * q)\r
+{ char *next = q;\r
+  if (!q) return;\r
+\r
+  while (next)\r
+  { next = strchr(q, '&');\r
+    if (next) next[0] = 0;\r
+    cgienv(q);\r
+    if (next)\r
+    { next[0] = '&';\r
+      q = next+1;\r
+    }\r
+  } \r
+}\r
+\r
+char * postread()\r
+{ char * buf = NULL;\r
+  int size = 0, sofar = 0, got;\r
+\r
+  buf = getenv("CONTENT_TYPE");\r
+  if ((!buf) || strcmp(buf, "application/x-www-form-urlencoded")) return NULL;\r
+\r
+  buf = getenv("CONTENT_LENGTH");\r
+  if (!buf) return NULL;\r
+        \r
+  size = atoi(buf);\r
+  buf = (unsigned char*)malloc(size + 1);\r
+  if (buf)\r
+  { do\r
+    { got = fread(buf + sofar, 1, size - sofar, stdin);\r
+      sofar += got;\r
+    } while (got && sofar < size);\r
+    buf[sofar] = 0;\r
+  }\r
+\r
+  return buf;\r
+}\r
+\r
+void uncgi()\r
+{ char *query, *dupquery, *method;\r
+\r
+  query = getenv("QUERY_STRING");\r
+  if ((query) && strlen(query))\r
+  { dupquery = strdup(query);\r
+    scanquery(dupquery);\r
+    free(dupquery);\r
+  }\r
+\r
+  method = getenv("REQUEST_METHOD");\r
+  if ((method) && ! strcmp(method, "POST"))\r
+  { query = postread();\r
+    if ((query)&&(query[0]!=0)) scanquery(query);\r
+    free(query);\r
+  }\r
+  \r
+}\r
+      \r
+#undef ishex\r
diff --git a/lib/modules/swfdump.c b/lib/modules/swfdump.c
new file mode 100644 (file)
index 0000000..12b3fdf
--- /dev/null
@@ -0,0 +1,131 @@
+/* swfdump.c\r
+\r
+   Dump / debug functions\r
+   \r
+   Extension module for the rfxswf library.\r
+   Part of the swftools package.\r
+\r
+   Copyright (c) 2001 Rainer Böhme <rfxswf@reflex-studio.de>\r
\r
+   This file is distributed under the GPL, see file COPYING for details \r
+\r
+*/\r
+\r
+void DumpHeader(FILE * f,LPSWF swf)\r
+{ if (!f) f = stderr;\r
+  fprintf(f,"File size\t%u\n",swf->FileSize);\r
+  fprintf(f,"Movie width\t%u\n",(swf->MovieSize.xmax - swf->MovieSize.xmin)/20);\r
+  fprintf(f,"Movie height\t%u\n",(swf->MovieSize.ymax - swf->MovieSize.ymin)/20);\r
+  fprintf(f,"Frame rate\t%u.%u\n",swf->FrameRate>>8,swf->FrameRate&0xff);\r
+  fprintf(f,"Frame count\t%u\n",swf->FrameCount);\r
+}\r
+\r
+void DumpMatrix(FILE * f,LPMATRIX m)\r
+{ if (!f) f = stderr;\r
+  fprintf(f,"[%08x][%08x]\n",m->sx,m->r1);\r
+  fprintf(f,"[%08x][%08x]\n",m->r0,m->sy);\r
+  fprintf(f," %08x, %08x\n",m->tx,m->ty);\r
+}\r
+\r
+void DumpTag(FILE * f,LPTAG t)\r
+{ int i;\r
+  if (!f) f = stderr;\r
+  for (i=0;i<t->len;i++)\r
+  { if (!(i&15)) fprintf(f,"\n");\r
+    fprintf(f,"%02x ",t->data[i]);\r
+  }\r
+  fprintf(f,"\n");\r
+}\r
+\r
+char* getTagName(TAG*tag)\r
+{\r
+    switch(tag->id)\r
+    {\r
+       case ST_END:\r
+           return "END";\r
+       case ST_SHOWFRAME:\r
+           return "SHOWFRAME";\r
+       case ST_DEFINESHAPE:\r
+           return "DEFINESHAPE";\r
+       case ST_FREECHARACTER:\r
+           return "FREECHARACTER";\r
+       case ST_PLACEOBJECT:\r
+           return "PLACEOBJECT";\r
+       case ST_REMOVEOBJECT:\r
+           return "REMOVEOBJECT";\r
+       case ST_DEFINEBITS:\r
+           return "DEFINEBITS";\r
+       case ST_DEFINEBUTTON:\r
+           return "DEFINEBUTTON";\r
+       case ST_JPEGTABLES:\r
+           return "JPEGTABLES";\r
+       case ST_SETBACKGROUNDCOLOR:\r
+           return "SETBACKGROUNDCOLOR";\r
+       case ST_DEFINEFONT:\r
+           return "DEFINEFONT";\r
+       case ST_DEFINETEXT:\r
+           return "DEFINETEXT";\r
+       case ST_DOACTION:\r
+           return "DOACTION";\r
+       case ST_DEFINEFONTINFO:\r
+           return "DEFINEFONTINFO";\r
+       case ST_DEFINESOUND:\r
+           return "DEFINESOUND";\r
+       case ST_STARTSOUND:\r
+           return "STARTSOUND";\r
+       case ST_DEFINEBUTTONSOUND:\r
+           return "DEFINEBUTTONSOUND";\r
+       case ST_SOUNDSTREAMHEAD:\r
+           return "SOUNDSTREAMHEAD";\r
+       case ST_SOUNDSTREAMBLOCK:\r
+           return "SOUNDSTREAMBLOCK";\r
+       case ST_DEFINEBITSLOSSLESS:\r
+           return "DEFINEBITSLOSSLESS";\r
+       case ST_DEFINEBITSJPEG2:\r
+           return "DEFINEBITSJPEG2";\r
+       case ST_DEFINESHAPE2:\r
+           return "DEFINESHAPE2";\r
+       case ST_DEFINEBUTTONCXFORM:\r
+           return "DEFINEBUTTONCXFORM";\r
+       case ST_PROTECT:\r
+           return "PROTECT";\r
+       case ST_PLACEOBJECT2:\r
+           return "PLACEOBJECT2";\r
+       case ST_REMOVEOBJECT2:\r
+           return "REMOVEOBJECT2";\r
+       case ST_DEFINESHAPE3:\r
+           return "DEFINESHAPE3";\r
+       case ST_DEFINETEXT2:\r
+           return "DEFINETEXT2";\r
+       case ST_DEFINEBUTTON2:\r
+           return "DEFINEBUTTON2";\r
+       case ST_DEFINEBITSJPEG3:\r
+           return "DEFINEBITSJPEG3";\r
+       case ST_DEFINEBITSLOSSLESS2:\r
+           return "DEFINEBITSLOSSLESS2";\r
+       case ST_DEFINESPRITE:\r
+           return "DEFINESPRITE";\r
+       case ST_NAMECHARACTER:\r
+           return "NAMECHARACTER";\r
+       case ST_SERIALNUMBER:\r
+           return "SERIALNUMBER";\r
+       case ST_GENERATORTEXT:\r
+           return "GENERATORTEXT";\r
+       case ST_FRAMELABEL:\r
+           return "FRAMELABEL";\r
+       case ST_SOUNDSTREAMHEAD2:\r
+           return "SOUNDSTREAMHEAD2";\r
+       case ST_DEFINEMORPHSHAPE:\r
+           return "DEFINEMORPHSHAPE";\r
+       case ST_DEFINEFONT2:\r
+           return "DEFINEFONT2";\r
+       case ST_TEMPLATECOMMAND:\r
+           return "TEMPLATECOMMAND";\r
+       case ST_GENERATOR3:\r
+           return "GENERATOR3";\r
+       case ST_EXTERNALFONT:\r
+           return "EXTERNALFONT";\r
+       case ST_REFLEX:\r
+           return "REFLEX";\r
+    }\r
+}\r
diff --git a/lib/modules/swfobject.c b/lib/modules/swfobject.c
new file mode 100644 (file)
index 0000000..132f116
--- /dev/null
@@ -0,0 +1,59 @@
+/* swfobject.c\r
+\r
+   Object place and move routines\r
+      \r
+   Extension module for the rfxswf library.\r
+   Part of the swftools package.\r
+\r
+   Copyright (c) 2001 Rainer Böhme <rfxswf@reflex-studio.de>\r
\r
+   This file is distributed under the GPL, see file COPYING for details \r
+\r
+*/\r
+\r
+#define PF_MOVE         0x01\r
+#define PF_CHAR         0x02\r
+#define PF_MATRIX       0x04\r
+#define PF_CXFORM       0x08\r
+#define PF_RATIO        0x10\r
+#define PF_NAME         0x20\r
+#define PF_CLIPACTION   0x40\r
+\r
+int ObjectPlace(LPTAG t,U16 id,U16 depth,LPMATRIX m,LPCXFORM cx,U8 * name)\r
+{ U8 flags;\r
+  if (!t) return -1;\r
+\r
+  flags = (id?PF_CHAR:0)|(m?PF_MATRIX:0)|(cx?PF_CXFORM:0)|(name?PF_NAME:0)|((m||cx)&&(!id)?PF_MOVE:0);\r
+\r
+  SetU8(t,flags);\r
+  SetU16(t,depth);\r
+  if (flags&PF_CHAR) SetU16(t,id);\r
+  if (flags&PF_MATRIX) SetMatrix(t,m);\r
+  if (flags&PF_CXFORM) SetCXForm(t,cx,(cx->a0!=256)||(cx->a1));\r
+  if (flags&PF_RATIO) SetU16(t,0);\r
+  if (flags&PF_NAME) SetString(t,name);\r
+  \r
+  return 0; \r
+}\r
+\r
+int PlaceObject(LPTAG t,U16 id,U16 depth,LPMATRIX m,LPCXFORM cx,U8 * name, U16 clipaction)\r
+{ U8 flags;\r
+  if (!t) return -1;\r
+\r
+  flags = (id?PF_CHAR:0)|(m?PF_MATRIX:0)|(cx?PF_CXFORM:0)|(name?PF_NAME:0)|\r
+          ((m||cx)&&(!id)?PF_MOVE:0)|(clipaction?PF_CLIPACTION:0);\r
+\r
+  SetU8(t,flags);\r
+  SetU16(t,depth);\r
+  if (flags&PF_CHAR) SetU16(t,id);\r
+  if (flags&PF_MATRIX) SetMatrix(t,m);\r
+  if (flags&PF_CXFORM) SetCXForm(t,cx,(cx->a0!=256)||(cx->a1));\r
+  if (flags&PF_RATIO) SetU16(t,0);\r
+  if (flags&PF_NAME) SetString(t,name);\r
+  if (flags&PF_CLIPACTION) SetU16(t, clipaction);\r
+  return 0; \r
+}\r
+\r
+int ObjectMove(LPTAG t,U16 depth,LPMATRIX m,LPCXFORM cx)\r
+{ return ObjectPlace(t,0,depth,m,cx,NULL);\r
+}\r
diff --git a/lib/modules/swfshape.c b/lib/modules/swfshape.c
new file mode 100644 (file)
index 0000000..c09f30d
--- /dev/null
@@ -0,0 +1,523 @@
+/* swfshape.c\r
+\r
+   shape functions\r
+      \r
+   Extension module for the rfxswf library.\r
+   Part of the swftools package.\r
+\r
+   Copyright (c) 2001 Rainer Böhme <rfxswf@reflex-studio.de>\r
\r
+   This file is distributed under the GPL, see file COPYING for details \r
+\r
+*/\r
+\r
+#define SF_MOVETO       0x01\r
+#define SF_FILL0        0x02\r
+#define SF_FILL1        0x04\r
+#define SF_LINE         0x08\r
+#define SF_NEWSTYLE     0x10\r
+\r
+#define FILL_SOLID      0x00\r
+#define FILL_LINEAR     0x10  // Gradient\r
+#define FILL_RADIAL     0x12\r
+#define FILL_TILED      0x40  // Bitmap\r
+#define FILL_CLIPPED    0x41\r
+\r
+void ShapeFree(LPSHAPE s)\r
+{ if (s)\r
+  { if (s->linestyle.data) free(s->linestyle.data);\r
+    s->linestyle.data = NULL;\r
+    s->linestyle.n    = 0;\r
+    if (s->fillstyle.data) free(s->fillstyle.data);\r
+    s->fillstyle.data = NULL;\r
+    s->fillstyle.n    = 0;\r
+    if (s->data) free(s->data);\r
+    s->data = NULL;\r
+  }\r
+  free(s);\r
+}\r
+\r
+int NewShape(LPSHAPE * s)\r
+{ LPSHAPE sh;\r
+  if (!s) return -1;\r
+  sh = (LPSHAPE)malloc(sizeof(SHAPE)); s[0] = sh;\r
+  if (sh) memset(sh,0x00,sizeof(SHAPE));\r
+  return sh?0:-1;\r
+}\r
+\r
+int GetSimpleShape(LPTAG t,LPSHAPE * s) // without Linestyle/Fillstyle Record\r
+{ LPSHAPE sh;\r
+  int bitl, len;\r
+  int end;\r
+  U32 pos;\r
+  \r
+  if (FAILED(NewShape(s))) return -1;\r
+  sh = s[0];\r
+\r
+  ResetBitmask(t); \r
+  sh->bits.fill = (U16)GetBits(t,4);\r
+  sh->bits.line = (U16)GetBits(t,4);\r
+  bitl = 0; end = 0; pos = GetTagPos(t);\r
+\r
+  while (!end)\r
+  { int edge = GetBits(t,1); bitl+=1;\r
+    if (edge)\r
+    { bitl+=1;\r
+      if (GetBits(t,1))                 // Line\r
+      { U16 nbits = GetBits(t,4)+2;\r
+        bitl+=5;\r
+\r
+        if (GetBits(t,1))               // x/y Line\r
+        { GetBits(t,nbits);\r
+          GetBits(t,nbits);\r
+          bitl+=nbits*2;\r
+        }\r
+        else                            // hline/vline\r
+        { GetBits(t,nbits+1);\r
+          bitl+=nbits+1;\r
+        }\r
+      }\r
+      else                              // Curve\r
+      { U16 nbits = GetBits(t,4)+2;\r
+        bitl+=4;\r
+\r
+        GetBits(t,nbits);\r
+        GetBits(t,nbits);\r
+        GetBits(t,nbits);\r
+        GetBits(t,nbits);\r
+\r
+        bitl+=4*nbits;\r
+      }\r
+    }\r
+    else\r
+    { U16 flags = GetBits(t,5); bitl+=5;\r
+      if (flags)\r
+      {\r
+        if (flags&SF_MOVETO)\r
+        { U16 nbits = GetBits(t,5); bitl+=5;\r
+          GetBits(t,nbits);\r
+          GetBits(t,nbits);\r
+          bitl+=2*nbits;\r
+        }\r
+        \r
+        if (flags&SF_FILL0)\r
+        { GetBits(t,sh->bits.fill);\r
+          bitl+=sh->bits.fill;\r
+        }\r
+        \r
+        if (flags&SF_FILL1)\r
+        { GetBits(t,sh->bits.fill);\r
+          bitl+=sh->bits.fill;\r
+        }\r
+\r
+        if (flags&SF_LINE)\r
+        { GetBits(t,sh->bits.line);\r
+          bitl+=sh->bits.line;\r
+        }\r
+\r
+        if (flags&SF_NEWSTYLE)\r
+        { fprintf(stderr,"Can't process extended styles in shape.\n");\r
+        }\r
+      }\r
+      else end = 1;\r
+    }\r
+  }\r
+  SetTagPos(t,pos);\r
+  len = (bitl+7)/8;\r
+  \r
+  if (sh->data) free(sh->data);\r
+  sh->data = (U8*)malloc(len);\r
+  \r
+  if (sh->data)\r
+  { sh->bitlen = bitl;\r
+    GetBlock(t,sh->data,len);\r
+  }\r
+  else return -1;\r
+  \r
+  return len;\r
+}\r
+\r
+int SetSimpleShape(LPTAG t,LPSHAPE s) // without Linestyle/Fillstyle Record\r
+{ int l;\r
+\r
+  if (!s) return -1;\r
+  l = (s->bitlen+7)/8;\r
+\r
+  if (t)\r
+  { ResetBitcount(t);\r
+\r
+    SetBits(t,s->bits.fill,4);\r
+    SetBits(t,s->bits.line,4);\r
+    SetBlock(t,s->data,l);\r
+\r
+    ResetBitcount(t);\r
+  }\r
+  return l+1;\r
+}\r
+\r
+int SetFillStyle(LPTAG t,LPFILLSTYLE f)\r
+{ if ((!t)||(!f)) return -1;\r
+  SetU8(t,f->type);\r
+  \r
+  // no gradients yet!\r
+  \r
+  switch (f->type)\r
+  { case FILL_SOLID:\r
+      if (GetTagID(t)!=ST_DEFINESHAPE3) SetRGB(t,&f->color);\r
+      else SetRGBA(t,&f->color);\r
+      break;\r
+\r
+    case FILL_TILED:\r
+    case FILL_CLIPPED:\r
+      SetU16(t,f->id_bitmap);\r
+      SetMatrix(t,&f->m);\r
+      break;\r
+  }\r
+  \r
+  return 0;\r
+}\r
+\r
+int SetLineStyle(LPTAG t,LPLINESTYLE l)\r
+{ if ((!l)||(!t)) return -1;\r
+  SetU16(t,l->width);\r
+\r
+  if (GetTagID(t)!=ST_DEFINESHAPE3) SetRGB(t,&l->color);\r
+  else SetRGBA(t,&l->color);\r
+  \r
+  return 0;\r
+}\r
+\r
+int SetShapeStyleCount(LPTAG t,U16 n)\r
+{ if (n>254)\r
+  { SetU8(t,0xff);\r
+    SetU16(t,n);\r
+    return 3;\r
+  }\r
+  else\r
+  { SetU8(t,n);\r
+    return 1;\r
+  }\r
+}\r
+\r
+int SetShapeStyles(LPTAG t,LPSHAPE s)\r
+{ int i,l;\r
+  if (!s) return -1;\r
+\r
+  l = 0;\r
+  l += SetShapeStyleCount(t,s->fillstyle.n);\r
+\r
+  for (i=0;i<s->fillstyle.n;i++)\r
+    l+=SetFillStyle(t,&s->fillstyle.data[i]);\r
+\r
+  l += SetShapeStyleCount(t,s->linestyle.n);\r
+\r
+  for (i=0;i<s->linestyle.n;i++)\r
+    l+=SetLineStyle(t,&s->linestyle.data[i]);\r
+\r
+  return l;\r
+}\r
+\r
+int ShapeCountBits(LPSHAPE s,U8 * fbits,U8 * lbits)\r
+{ if (!s) return -1;\r
+    \r
+  s->bits.fill = CountBits(s->fillstyle.n,0);\r
+  s->bits.line = CountBits(s->linestyle.n,0);\r
+\r
+  if (fbits) fbits[0] = s->bits.fill;\r
+  if (lbits) lbits[0] = s->bits.line;\r
+  \r
+  return 0;    \r
+}\r
+\r
+int SetShapeBits(LPTAG t,LPSHAPE s)\r
+{ if ((!t)||(!s)) return -1;\r
+  ResetBitcount(t);\r
+  SetBits(t,s->bits.fill,4);\r
+  SetBits(t,s->bits.line,4);\r
+  return 0;\r
+}\r
+\r
+int SetShapeHeader(LPTAG t,LPSHAPE s)\r
+{ int res;\r
+  res = SetShapeStyles(t,s);\r
+  if (res>=0) res = ShapeCountBits(s,NULL,NULL);\r
+  if (res>=0) res = SetShapeBits(t,s);\r
+  return res;\r
+}\r
+\r
+int ShapeExport(int handle,LPSHAPE s)  // without Linestyle/Fillstyle Record\r
+{ int l;\r
+  if (!s) return 0;\r
+\r
+  l = sizeof(SHAPE);\r
+\r
+  if (handle>=0)\r
+    if (write(handle,s,sizeof(SHAPE))!=sizeof(SHAPE)) return -1;\r
+\r
+  // Fillstyle, Linestyle ...\r
+\r
+  if (s->data)\r
+  { int ll = (s->bitlen+7)/8;\r
+    l+=ll;\r
+    if (handle>=0)\r
+      if (write(handle,s->data,ll)!=ll) return -1;\r
+  }\r
+\r
+  return l;\r
+}\r
+\r
+int ShapeImport(int handle,LPSHAPE * shape)\r
+{ LPSHAPE s;\r
+\r
+  if (handle<0) return -1;\r
+\r
+  s = (LPSHAPE)malloc(sizeof(SHAPE)); shape[0] = s;\r
+  if (!s) return -1;\r
+\r
+  if (read(handle,s,sizeof(SHAPE))!=sizeof(SHAPE))\r
+  { shape[0] = NULL;\r
+    free(s);\r
+    return -1;\r
+  }\r
+\r
+  if (s->data)\r
+  { int ll = (s->bitlen+7)/8;\r
+    s->data = (U8*)malloc(ll);\r
+    if (!s->data)\r
+    { shape[0] = NULL;\r
+      free(s);\r
+      return -1;\r
+    }\r
+    if (read(handle,s->data,ll)!=ll)\r
+    { free(s->data);\r
+      free(s);\r
+      shape[0] = NULL;\r
+      return -1;\r
+    }\r
+  }\r
+\r
+  return 0;\r
+}\r
+\r
+int ShapeAddFillStyle(LPSHAPE s,U8 type,LPMATRIX m,LPRGBA color,U16 id_bitmap)\r
+{ RGBA def_c;\r
+  MATRIX def_m;    \r
+\r
+  // handle defaults\r
+  \r
+  if (!s) return -1;\r
+  if (!color)\r
+  { color = &def_c;\r
+    def_c.a = 0xff;\r
+    def_c.r = def_c.g = def_c.b = 0;\r
+  }\r
+  if (!m)\r
+  { m = &def_m;\r
+    GetMatrix(NULL,m);\r
+  }\r
+\r
+  // handle memory\r
+  \r
+  if (s->fillstyle.data)\r
+  { LPFILLSTYLE new = (LPFILLSTYLE)realloc(s->fillstyle.data,(s->fillstyle.n+1)*sizeof(FILLSTYLE));\r
+    if (!new) return -1;\r
+    s->fillstyle.data = new;\r
+  }\r
+  else\r
+  { s->fillstyle.data = (LPFILLSTYLE)malloc(sizeof(FILLSTYLE));\r
+    s->fillstyle.n = 0;\r
+    if (!s->fillstyle.data) return -1;\r
+  }\r
+\r
+  // set fillstyle  (no gradients yet!)\r
+  \r
+  s->fillstyle.data[s->fillstyle.n].type = type; \r
+  s->fillstyle.data[s->fillstyle.n].id_bitmap = id_bitmap;\r
+  memcpy(&s->fillstyle.data[s->fillstyle.n].m,m,sizeof(MATRIX));\r
+  memcpy(&s->fillstyle.data[s->fillstyle.n].color,color,sizeof(RGBA));\r
+          \r
+  return (++s->fillstyle.n);\r
+}\r
+\r
+int ShapeAddSolidFillStyle(LPSHAPE s,LPRGBA color)\r
+{ return ShapeAddFillStyle(s,FILL_SOLID,NULL,color,0);\r
+}\r
+\r
+int ShapeAddBitmapFillStyle(LPSHAPE s,LPMATRIX m,U16 id_bitmap,int clip)\r
+{ return ShapeAddFillStyle(s,clip?FILL_CLIPPED:FILL_TILED,m,NULL,id_bitmap);\r
+}\r
+\r
+int ShapeAddLineStyle(LPSHAPE s,U16 width,LPRGBA color)\r
+{ RGBA def;\r
+  if (!s) return -1;\r
+  if (!color)\r
+  { color = &def;\r
+    def.a = 0xff;\r
+    def.r = def.g = def.b = 0; \r
+  }\r
+  if (s->linestyle.data)\r
+  { LPLINESTYLE new = (LPLINESTYLE)realloc(s->linestyle.data,(s->linestyle.n+1)*sizeof(LINESTYLE));\r
+    if (!new) return -1;\r
+    s->linestyle.data = new;\r
+  }\r
+  else\r
+  { s->linestyle.data = (LPLINESTYLE)malloc(sizeof(LINESTYLE));\r
+    s->linestyle.n = 0;\r
+    if (!s->linestyle.data) return -1;\r
+  }\r
+  \r
+  s->linestyle.data[s->linestyle.n].width = width;\r
+  memcpy(&s->linestyle.data[s->linestyle.n].color,color,sizeof(RGBA));\r
+\r
+  return (++s->linestyle.n);\r
+}\r
+\r
+int ShapeSetMove(LPTAG t,LPSHAPE s,S32 x,S32 y)\r
+{ U8 b;\r
+  if (!t) return -1;\r
+  SetBits(t,0,1);\r
+  SetBits(t,SF_MOVETO,5);\r
+  \r
+  b = CountBits(x,0);\r
+  b = CountBits(y,b);\r
+  \r
+  SetBits(t,b,5);\r
+  SetBits(t,x,b);\r
+  SetBits(t,y,b);\r
+\r
+  if (s)\r
+  { s->px = x;\r
+    s->py = y;\r
+  }\r
+  return 0;\r
+}\r
+\r
+int ShapeSetStyle(LPTAG t,LPSHAPE s,U16 line,U16 fill0,U16 fill1)\r
+{ if ((!t)||(!s)) return -1;\r
+    \r
+  SetBits(t,0,1);\r
+  SetBits(t,(line?SF_LINE:0)|(fill0?SF_FILL0:0)|(fill1?SF_FILL1:0),5);\r
+\r
+  if (fill0) SetBits(t,fill0,s->bits.fill);\r
+  if (fill1) SetBits(t,fill1,s->bits.fill);\r
+  if (line)  SetBits(t,line ,s->bits.line);\r
+  \r
+  return 0;\r
+}\r
+\r
+/* TODO: sometimes we want to set fillstyle 0, as that's the empty fill\r
+   used for line drawings. At the moment, we can't, as 0 fill be considered\r
+   nonexistent and therefore not set.\r
+   these defines are a workaround (they also reduce the maximal number of\r
+   fill styles to 32768)\r
+ */\r
+#define FILL_RESET 0x8000\r
+#define LINE_RESET 0x8000\r
+int ShapeSetAll(LPTAG t,LPSHAPE s,S32 x,S32 y,U16 line,U16 fill0,U16 fill1)\r
+{ U8 b;\r
+  if ((!t)||(!s)) return -1;\r
+\r
+  SetBits(t,0,1);\r
+  SetBits(t,SF_MOVETO|(line?SF_LINE:0)|(fill0?SF_FILL0:0)|(fill1?SF_FILL1:0),5);\r
+\r
+  b = CountBits(x,0);\r
+  b = CountBits(y,b);\r
+  SetBits(t,b,5);\r
+  SetBits(t,x,b);\r
+  SetBits(t,y,b);\r
+  s->px = x;\r
+  s->py = y;\r
+\r
+  if (fill0) SetBits(t,fill0,s->bits.fill);\r
+  if (fill1) SetBits(t,fill1,s->bits.fill);\r
+  if (line)  SetBits(t,line ,s->bits.line);\r
+  \r
+  return 0;\r
+}\r
+\r
+int ShapeSetEnd(LPTAG t)\r
+{ if (!t) return -1;\r
+  SetBits(t,0,6);\r
+  return 0;\r
+}\r
+\r
+int ShapeSetLine(LPTAG t,LPSHAPE s,S32 x,S32 y)\r
+{ U8 b;\r
+  if (!t) return -1;\r
+  SetBits(t,3,2); // Straight Edge\r
+\r
+  if ((!s)||(s->px!=x)||(s->py!=y))\r
+  { b = CountBits(x,2);\r
+    b = CountBits(y,b);\r
+    SetBits(t,b-2,4);\r
+    SetBits(t,1,1);\r
+    SetBits(t,x,b);\r
+    SetBits(t,y,b);\r
+    if (s)\r
+    { s->px += x;\r
+      s->py += y;\r
+    }\r
+    return 0;\r
+  }\r
+\r
+  if (s->px==x)\r
+  { b = CountBits(y,2);\r
+    SetBits(t,b-2,4);\r
+    SetBits(t,1,2);\r
+    SetBits(t,y,b);\r
+    s->py += y;\r
+  }\r
+  else\r
+  { b = CountBits(x,2);\r
+    SetBits(t,b-2,4);\r
+    SetBits(t,0,2);\r
+    SetBits(t,x,b);\r
+    s->px += x;\r
+  }\r
+  return 0;\r
+}\r
+\r
+int ShapeSetCurve(LPTAG t,LPSHAPE s,S32 x,S32 y,S32 ax,S32 ay)\r
+{ U8 b;\r
+  if (!t) return -1;\r
+\r
+  SetBits(t,2,2);\r
+\r
+  b = CountBits(ax,2);\r
+  b = CountBits(ay,b);\r
+  b = CountBits(x,b);\r
+  b = CountBits(y,b);\r
+\r
+  SetBits(t,b-2,4);\r
+  SetBits(t,x,b);\r
+  SetBits(t,y,b);\r
+  SetBits(t,ax,b);\r
+  SetBits(t,ay,b);\r
+\r
+  if (s)\r
+  { s->px += x+ax;\r
+    s->py += y+ay;\r
+  }\r
+  return 0;\r
+}\r
+\r
+int ShapeSetCircle(LPTAG t,LPSHAPE s,S32 x,S32 y,S32 rx,S32 ry)\r
+{ double C1 = 0.2930;    \r
+  double C2 = 0.4140;   \r
+  double begin = 0.7070; \r
+\r
+  if (!t) return -1;\r
+  \r
+  ShapeSetMove(t,s,x+begin*rx,y+begin*ry);\r
+  ShapeSetCurve(t,s, -C1*rx,  C1*ry, -C2*rx,      0);\r
+  ShapeSetCurve(t,s, -C2*rx,      0, -C1*rx, -C1*ry);\r
+  ShapeSetCurve(t,s, -C1*rx, -C1*ry,      0, -C2*ry);\r
+  ShapeSetCurve(t,s,      0, -C2*ry,  C1*rx, -C1*ry);\r
+  ShapeSetCurve(t,s,  C1*rx, -C1*ry,  C2*rx,      0);\r
+  ShapeSetCurve(t,s,  C2*rx,      0,  C1*rx,  C1*ry);\r
+  ShapeSetCurve(t,s,  C1*rx,  C1*ry,      0,  C2*ry);\r
+  ShapeSetCurve(t,s,      0,  C2*ry, -C1*rx,  C1*ry);\r
+  \r
+  return 0;\r
+}\r
+\r
diff --git a/lib/modules/swftext.c b/lib/modules/swftext.c
new file mode 100644 (file)
index 0000000..3c9eb07
--- /dev/null
@@ -0,0 +1,503 @@
+/* swftext.c\r
+\r
+   Text and font routines\r
+      \r
+   Extension module for the rfxswf library.\r
+   Part of the swftools package.\r
+\r
+   Copyright (c) 2001 Rainer Böhme <rfxswf@reflex-studio.de>\r
\r
+   This file is distributed under the GPL, see file COPYING for details \r
+\r
+*/\r
+\r
+#define TF_TEXTCONTROL  0x80\r
+#define TF_HASFONT      0x08\r
+#define TF_HASCOLOR     0x04\r
+#define TF_HASYOFFSET   0x02\r
+#define TF_HASXOFFSET   0x01\r
+\r
+#define FF_WIDECODES    0x01\r
+#define FF_BOLD         0x02\r
+#define FF_ITALIC       0x04\r
+#define FF_ANSI         0x08\r
+#define FF_SHIFTJIS     0x10\r
+#define FF_UNICODE      0x20\r
+\r
+int FontEnumerate(LPSWF swf,void (*FontCallback) (U16,U8*))\r
+{ int n;\r
+  LPTAG t;\r
+  if (!swf) return -1;\r
+  t = swf->FirstTag;\r
+  n = 0;\r
+\r
+  while (t)\r
+  { if (GetTagID(t)==ST_DEFINEFONTINFO)\r
+    { n++;\r
+      if (FontCallback)\r
+      { U16 id;\r
+        int l;\r
+        U8 s[257];\r
+        SaveTagPos(t);\r
+        SetTagPos(t,0);\r
+\r
+        id  = GetU16(t);\r
+        l   = GetU8(t);\r
+        GetBlock(t,s,l);\r
+        s[l] = 0;\r
+\r
+        (FontCallback)(id,s); \r
+      \r
+        RestoreTagPos(t);\r
+      }\r
+    }\r
+    t = NextTag(t);\r
+  }\r
+  return n;\r
+}\r
+\r
+int FontExtract_DefineFont(int id,LPSWFFONT f,LPTAG t,LPSHAPE * shapes)\r
+{ U16 fid;\r
+  SaveTagPos(t);\r
+  SetTagPos(t,0);\r
+\r
+  fid = GetU16(t);\r
+  if ((!id)||(id==fid))\r
+  { U16 ofs[MAX_CHAR_PER_FONT];\r
+    int n,i;\r
+      \r
+    id = fid;\r
+    f->id = fid;\r
+\r
+    ofs[0] = GetU16(t);\r
+    n = ofs[0]/2;\r
+\r
+    for (i=1;i<n;i++) if (i<MAX_CHAR_PER_FONT) ofs[i] = GetU16(t); else GetU16(t);\r
+    for (i=0;i<n;i++) if (i<MAX_CHAR_PER_FONT) GetSimpleShape(t,&shapes[i]);\r
+    \r
+  }\r
+\r
+  RestoreTagPos(t);\r
+  return id;\r
+}\r
+\r
+int FontExtract_DefineFontInfo(int id,LPSWFFONT f,LPTAG t,LPSHAPE * shapes)\r
+{ U16 fid;\r
+  SaveTagPos(t);\r
+  SetTagPos(t,0);\r
+\r
+  fid = GetU16(t);\r
+  if (fid==id)\r
+  { U8 l = GetU8(t);\r
+    int i;\r
+    \r
+    if (l)\r
+    { if (f->name) free(f->name);\r
+      f->name = (U8*)malloc(l+1);\r
+      if (f->name)\r
+      { GetBlock(t,f->name,l);\r
+        f->name[l] = 0;\r
+      }\r
+      else\r
+      { RestoreTagPos(t);\r
+        return -1;\r
+      }\r
+    }\r
+    f->flags = GetU8(t);\r
+\r
+    i = 0;\r
+    while (shapes[i])\r
+    { U16 code = ((f->flags&FF_WIDECODES)?GetU16(t):GetU8(t))%MAX_CHAR_PER_FONT;\r
+        \r
+      f->glyph[code].shape = shapes[i];\r
+      f->glyph[code].gid   = i;\r
+      if (i<MAX_CHAR_PER_FONT) f->codes[i] = code;\r
+\r
+      i++;\r
+    }\r
+  }\r
+\r
+  RestoreTagPos(t);\r
+  return id;\r
+}\r
+\r
+#define FEDTJ_PRINT  0x01\r
+#define FEDTJ_MODIFY 0x02\r
+\r
+int FontExtract_DefineText(int id,LPSWFFONT f,LPTAG t,int jobs)\r
+{ U16    cid;\r
+  SRECT  r;\r
+  MATRIX m;\r
+  U8     gbits, abits, flags;\r
+  int    fid;\r
+\r
+  fid = 0;\r
+\r
+  SaveTagPos(t);\r
+  SetTagPos(t,0);\r
+\r
+  cid = GetU16(t);\r
+  GetRect(t,&r);\r
+  GetMatrix(t,&m);\r
+  gbits = GetU8(t);\r
+  abits = GetU8(t);\r
+\r
+  flags = GetU8(t);\r
+  \r
+  while(flags)\r
+  { if (flags&TF_TEXTCONTROL)\r
+    { if (flags&TF_HASFONT) fid = GetU16(t);\r
+      if (flags&TF_HASCOLOR)\r
+      { GetU8(t); // rgb\r
+        GetU8(t);\r
+        GetU8(t);\r
+        if (GetTagID(t)==ST_DEFINETEXT2) GetU8(t);\r
+      }\r
+      if (flags&TF_HASXOFFSET) GetS16(t);\r
+      if (flags&TF_HASYOFFSET) GetS16(t);\r
+      if (flags&TF_HASFONT) GetU16(t);\r
+    }\r
+    else\r
+    { int i;\r
+      for (i=0;i<flags;i++)\r
+      { int glyph;\r
+        int adv;\r
+        glyph = GetBits(t,gbits);\r
+        adv = GetBits(t,abits);\r
+        if (id==fid)                    // mitlesen ?\r
+        { int code = f->codes[glyph];\r
+          if (jobs&FEDTJ_PRINT) printf("%c",code);\r
+          if (jobs&FEDTJ_MODIFY)\r
+            /*if (f->glyph[code].advance)*/ f->glyph[code].advance = adv;\r
+        }\r
+      }\r
+      if ((id==fid)&&(jobs&FEDTJ_PRINT)) printf("\n");\r
+    }\r
+    flags = GetU8(t);\r
+  }\r
+  \r
+  RestoreTagPos(t);\r
+  return id;\r
+}  \r
+\r
+int FontExtract(LPSWF swf,int id,LPSWFFONT * font)\r
+{ LPTAG t;\r
+  LPSWFFONT f;\r
+  LPSHAPE shapes[MAX_CHAR_PER_FONT];\r
+    \r
+  if ((!swf)||(!font)) return -1;\r
+\r
+  f = (LPSWFFONT)malloc(sizeof(SWFFONT)); font[0] = f;\r
+  if (!f) return -1;\r
+  \r
+  memset(shapes,0x00,sizeof(shapes));\r
+  memset(f,0x00,sizeof(SWFFONT));\r
+\r
+  t = swf->FirstTag;\r
+\r
+  while (t)\r
+  { int nid = 0;\r
+    switch (GetTagID(t))\r
+    { case ST_DEFINEFONT:\r
+        nid = FontExtract_DefineFont(id,f,t,shapes);\r
+        break;\r
+        \r
+      case ST_DEFINEFONTINFO:\r
+        nid = FontExtract_DefineFontInfo(id,f,t,shapes);\r
+        break;\r
+        \r
+      case ST_DEFINETEXT:\r
+      case ST_DEFINETEXT2:\r
+        nid = FontExtract_DefineText(id,f,t,FEDTJ_MODIFY);\r
+        break;\r
+    }\r
+    if (nid>0) id = nid;\r
+    t = NextTag(t);\r
+  }\r
+  return 0;\r
+}\r
+\r
+int FontIsItalic(LPSWFFONT f) { return f->flags&FF_ITALIC; }\r
+int FontIsBold(LPSWFFONT f)   { return f->flags&FF_BOLD; }\r
+\r
+int FontSetID(LPSWFFONT f,U16 id) { if (!f) return -1; f->id = id; return 0; }\r
+\r
+int FontReduce(LPSWFFONT f,LPFONTUSAGE use)\r
+{ int i,j;\r
+  if ((!f)||(!use)) return -1;\r
+\r
+  memset(&f->codes,0x00,sizeof(f->codes));\r
+\r
+  j = 0;\r
+  for (i=0;i<MAX_CHAR_PER_FONT;i++)\r
+    if (f->glyph[i].shape)\r
+    { if (use->code[i])\r
+      { f->glyph[i].gid = j;\r
+        f->codes[j] = i;\r
+        j++;\r
+      }\r
+      else\r
+      { ShapeFree(f->glyph[i].shape);\r
+        f->glyph[i].shape   = 0;\r
+        f->glyph[i].gid     = 0;\r
+        f->glyph[i].advance = 0;\r
+      }\r
+    } else f->glyph[i].gid = 0;\r
+    \r
+  return j;\r
+}\r
+\r
+int FontInitUsage(LPFONTUSAGE use)\r
+{ if (!use) return -1;\r
+  memset(&use->code,0x00,sizeof(use->code));\r
+  return 0;\r
+}\r
+\r
+int FontUse(LPFONTUSAGE use,U8 * s)\r
+{ if ((!use)||(!s)) return -1;\r
+  while (s[0])\r
+  { use->code[s[0]] = 1;\r
+    s++;\r
+  }\r
+  return 0;  \r
+}\r
+\r
+int FontSetDefine(LPTAG t,LPSWFFONT f)\r
+{ U16 ofs[MAX_CHAR_PER_FONT];\r
+  int p,i,j;\r
+    \r
+  if ((!t)||(!f)) return -1;\r
+  ResetBitcount(t);\r
+  SetU16(t,f->id);\r
+\r
+  p = 0; j = 0;\r
+  for (i=0;i<MAX_CHAR_PER_FONT;i++)\r
+    if (f->glyph[i].shape)\r
+    { ofs[j++] = p;\r
+      p+=SetSimpleShape(NULL,f->glyph[i].shape);\r
+    }\r
+\r
+  for (i=0;i<j;i++) SetU16(t,ofs[i]+j*2);\r
+  \r
+  for (i=0;i<MAX_CHAR_PER_FONT;i++)\r
+    if (f->glyph[i].shape)\r
+      SetSimpleShape(t,f->glyph[i].shape);\r
+  \r
+  ResetBitcount(t);\r
+  return 0;\r
+}\r
+\r
+int FontSetInfo(LPTAG t,LPSWFFONT f)\r
+{ int l,i;\r
+  if ((!t)||(!f)) return -1;\r
+  ResetBitcount(t);\r
+  SetU16(t,f->id);\r
+  l = strlen(f->name); if (l>255) l = 255;\r
+  SetU8(t,l);\r
+  SetBlock(t,f->name,l);\r
+  SetU8(t,f->flags&0xfe); // no Wide-Codes\r
+\r
+  for (i=0;i<MAX_CHAR_PER_FONT;i++)\r
+    if (f->glyph[i].shape)\r
+      SetU8(t,i);\r
+  \r
+  return 0;\r
+}\r
+\r
+int FontExport(int handle,LPSWFFONT f)\r
+{ int l;\r
+  int i;\r
+  if (!f) return 0;\r
+\r
+  l = sizeof(SWFFONT);\r
+  if (handle>=0)\r
+    if (write(handle,f,sizeof(SWFFONT))!=sizeof(SWFFONT)) return -1;\r
+\r
+  if (f->name)\r
+  { U16 ln = strlen(f->name);\r
+    l+=2+ln;\r
+    if (handle>=0)\r
+    { if (write(handle,&ln,2)!=2) return -1;\r
+      if (write(handle,f->name,ln)!=ln) return -1;\r
+    }\r
+  }\r
+\r
+  if (f->layout)\r
+  { l+=sizeof(SWFLAYOUT);\r
+    if (handle>=0)\r
+      if (write(handle,f->layout,sizeof(SWFLAYOUT))!=sizeof(SWFLAYOUT)) return -1;\r
+    if (f->layout->kerning.data)\r
+    { l+=f->layout->kerning.count*4;\r
+      if (handle>=0)\r
+        if (write(handle,f->layout->kerning.data,f->layout->kerning.count*4)!=f->layout->kerning.count*4) return -1;\r
+    }\r
+  }\r
+\r
+  for (i=0;i<MAX_CHAR_PER_FONT;i++)\r
+  { if (f->glyph[i].shape)\r
+    { int ll = ShapeExport(handle,f->glyph[i].shape);\r
+      if (ll<0) return -1;\r
+      l+=ll;\r
+    }  \r
+  }\r
+\r
+  return l;\r
+}\r
+\r
+int FontImport(int handle,LPSWFFONT * font)\r
+{ LPSWFFONT f;\r
+  int layout;\r
+  int i = 0;\r
+\r
+  if ((!font)||(handle<0)) return -1;\r
+\r
+  f = (LPSWFFONT)malloc(sizeof(SWFFONT)); font[0] = f;\r
+  if (!f) return -1;\r
+\r
+  memset(f,0x00,sizeof(SWFFONT));\r
+  \r
+  if (read(handle,f,sizeof(SWFFONT))!=sizeof(SWFFONT)) goto fehler;\r
+\r
+  layout = (f->layout)?1:0;             // avoid illegal free()\r
+  f->layout = NULL;\r
+\r
+  if (f->name)\r
+  { U16 ln;\r
+    f->name = NULL;\r
+    if (read(handle,&ln,2)!=2) goto fehler;\r
+    f->name = (U8*)malloc(ln+1);\r
+    if (!f->name) goto fehler;\r
+    if (read(handle,f->name,ln)!=ln) goto fehler;\r
+    f->name[ln] = 0;\r
+  }\r
+\r
+  if (f->layout)\r
+  { f->layout = (LPSWFLAYOUT)malloc(sizeof(SWFLAYOUT));\r
+    if (!f->layout) goto fehler;\r
+    if (read(handle,f->layout,sizeof(SWFLAYOUT))!=sizeof(SWFLAYOUT)) goto fehler;\r
+    if (f->layout->kerning.data)\r
+    { int l = f->layout->kerning.count*4;\r
+      f->layout->kerning.data = (U8*)malloc(l);\r
+      if (!f->layout->kerning.data) goto fehler;\r
+      if (read(handle,f->layout->kerning.data,l)!=l) goto fehler;\r
+    }\r
+  }\r
+\r
+  for (i=0;i<MAX_CHAR_PER_FONT;i++)\r
+  { if (f->glyph[i].shape)\r
+    { if (ShapeImport(handle,&f->glyph[i].shape)<0) goto fehler;\r
+    }\r
+  }\r
+\r
+  f->id = 0;\r
+  \r
+  return 0;\r
+  \r
+fehler:\r
+  if (f) for (;i<MAX_CHAR_PER_FONT;i++) f->glyph[i].shape = NULL;\r
+  FontFree(f);\r
+  font[0] = NULL;\r
+  return -1;\r
+}\r
+\r
+int TextPrintDefineText(LPTAG t,LPSWFFONT f)\r
+{ int id = GetTagID(t);\r
+  if ((id==ST_DEFINETEXT)||(id==ST_DEFINETEXT2)) FontExtract_DefineText(f->id,f,t,FEDTJ_PRINT);\r
+    else return -1;\r
+  return 0;\r
+}\r
+\r
+void LayoutFree(LPSWFLAYOUT l)\r
+{ if (l)\r
+  { if (l->kerning.data) free(l->kerning.data);\r
+    l->kerning.data = NULL;\r
+  }\r
+  free(l);\r
+}\r
+\r
+void FontFree(LPSWFFONT f)\r
+{ if (f)\r
+  { int i;\r
+      \r
+    if (f->name) free(f->name);\r
+    if (f->layout) LayoutFree(f->layout);\r
+\r
+    f->name = NULL;\r
+    f->layout = NULL;\r
+\r
+    for (i=0;i<MAX_CHAR_PER_FONT;i++)\r
+      if (f->glyph[i].shape)\r
+      { ShapeFree(f->glyph[i].shape);\r
+        f->glyph[i].shape = NULL;\r
+      }\r
+  }\r
+  free(f);\r
+}\r
+\r
+int TextSetInfoRecord(LPTAG t,LPSWFFONT font,U16 size,LPRGBA color,S16 dx,S16 dy)\r
+{ U8 flags;\r
+  if (!t) return -1;\r
+\r
+  flags = TF_TEXTCONTROL|(font?TF_HASFONT:0)|(color?TF_HASCOLOR:0)|(dx?TF_HASXOFFSET:0)|(dy?TF_HASYOFFSET:0);\r
+\r
+  SetU8(t,flags);\r
+  if (font) SetU16(t,font->id);\r
+  if (color)\r
+  { if (GetTagID(t)==ST_DEFINETEXT2) SetRGBA(t,color);\r
+    else SetRGB(t,color);\r
+  }\r
+  if (dx) SetS16(t,dx);\r
+  if (dy) SetS16(t,dy);\r
+  if (font) SetU16(t,size);\r
+  \r
+  return 0;\r
+}\r
+\r
+int TextCountBits(LPSWFFONT font,U8 * s,int scale,U8 * gbits,U8 * abits)\r
+{ U16 g,a;\r
+  if ((!s)||(!font)||((!gbits)&&(!abits))) return -1;\r
+  g = a = 0;\r
+\r
+  while(s[0])\r
+  { g = CountBits(font->glyph[s[0]].gid,g);\r
+    a = CountBits((((U32)font->glyph[s[0]].advance)*scale)/100,a);\r
+    s++;\r
+  }\r
+\r
+  if (gbits) gbits[0] = (U8)g;\r
+  if (abits) abits[0] = (U8)a;\r
+\r
+  return 0;\r
+}\r
+\r
+int TextSetCharRecord(LPTAG t,LPSWFFONT font,U8 * s,int scale,U8 gbits,U8 abits)\r
+{ int l,i;\r
+    \r
+  if ((!t)||(!font)||(!s)) return -1;\r
+\r
+  l = strlen(s);\r
+  if (l>0x7f) l = 0x7f;\r
+  SetU8(t,l);\r
+\r
+  for (i=0;i<l;i++)\r
+  { SetBits(t,font->glyph[s[i]].gid,gbits);\r
+    SetBits(t,(((U32)font->glyph[s[i]].advance)*scale)/100,abits);\r
+  }\r
+\r
+  ResetBitcount(t);\r
+  return 0;\r
+}\r
+\r
+U32 TextGetWidth(LPSWFFONT font,U8 * s,int scale)\r
+{ U32 res = 0;\r
+\r
+  if (font&&s)\r
+  { while (s[0])\r
+    { res += font->glyph[s[0]].advance;\r
+      s++;\r
+    }\r
+    if (scale) res = (res*scale)/100;\r
+  }\r
+  \r
+  return res;\r
+}\r
diff --git a/lib/modules/swftools.c b/lib/modules/swftools.c
new file mode 100644 (file)
index 0000000..7f3865b
--- /dev/null
@@ -0,0 +1,260 @@
+/* swftools.c\r
+\r
+   Math and matrix functions, misc tools\r
+\r
+   Extension module for the rfxswf library.\r
+   Part of the swftools package.\r
+\r
+   Copyright (c) 2000, 2001 Rainer Böhme <rfxswf@reflex-studio.de>\r
\r
+   This file is distributed under the GPL, see file COPYING for details \r
+\r
+*/\r
+\r
+// Matrix & Math tools for SWF files\r
+\r
+#define S64 long long\r
+SFIXED SP(SFIXED a1,SFIXED a2,SFIXED b1,SFIXED b2)\r
+{ S64 a;\r
+  a = (S64)a1*(S64)b1+(S64)a2*(S64)b2;\r
+  return (SFIXED)(a>>16);\r
+}\r
+SFIXED QFIX(int zaehler,int nenner) // bildet Quotient von zwei INTs in SFIXED\r
+{ S64 z = zaehler<<16;\r
+  S64 a = z/(S64)nenner;\r
+  return (SFIXED)a;\r
+}\r
+#undef S64\r
+\r
+LPMATRIX MatrixJoin(LPMATRIX d,LPMATRIX s1,LPMATRIX s2)\r
+{        \r
+  if (!d) return NULL;\r
+  if (!s1) return (s2)?(LPMATRIX)memcpy(d,s2,sizeof(MATRIX)):NULL;\r
+  if (!s2) return (LPMATRIX)memcpy(d,s1,sizeof(MATRIX));\r
+  \r
+  d->tx = s1->tx + s2->tx;\r
+  d->ty = s1->ty + s2->ty;\r
+  \r
+  d->sx = SP(s1->sx,s1->r1,s2->sx,s2->r0);\r
+  d->sy = SP(s1->r0,s1->sy,s2->r1,s2->sy);\r
+  d->r0 = SP(s1->r0,s1->sy,s2->sx,s2->r0);\r
+  d->r1 = SP(s1->sx,s1->r1,s2->r1,s2->sy);\r
+\r
+  //DumpMatrix(NULL,d);\r
+  \r
+  return d;\r
+}\r
+\r
+LPMATRIX MatrixMapTriangle(LPMATRIX m,int dx,int dy,int x0,int y0,\r
+                               int x1,int y1,int x2,int y2)\r
+{ int dx1 = x1 - x0;\r
+  int dy1 = y1 - y0;\r
+  int dx2 = x2 - x0;\r
+  int dy2 = y2 - y0;\r
+  \r
+  if (!m) return NULL;\r
+  if ((!dx)||(!dy)) return NULL; // check DIV by zero\r
+\r
+  m->tx = x0;\r
+  m->ty = y0;\r
+  m->sx = QFIX(dx1,dx);\r
+  m->sy = QFIX(dy2,dy);\r
+  m->r0 = QFIX(dy1,dx);\r
+  m->r1 = QFIX(dx2,dy);\r
+  \r
+  return m;\r
+}\r
+\r
+U16 GetDefineID(LPTAG t)\r
+// up to SWF 4.0\r
+{ U32 oldTagPos;\r
+  U16 id = 0;\r
+\r
+  oldTagPos = GetTagPos(t);\r
+  SetTagPos(t,0);\r
+\r
+  switch (GetTagID(t))\r
+  { case ST_DEFINESHAPE:\r
+    case ST_DEFINESHAPE2:\r
+    case ST_DEFINESHAPE3:\r
+    case ST_DEFINEMORPHSHAPE:\r
+    case ST_DEFINEBITS:\r
+    case ST_DEFINEBITSJPEG2:\r
+    case ST_DEFINEBITSJPEG3:\r
+    case ST_DEFINEBITSLOSSLESS:\r
+    case ST_DEFINEBITSLOSSLESS2:\r
+    case ST_DEFINEBUTTON:\r
+    case ST_DEFINEBUTTON2:\r
+    case ST_DEFINEBUTTONCXFORM:\r
+    case ST_DEFINEBUTTONSOUND:\r
+    case ST_DEFINEFONT:\r
+    case ST_DEFINEFONT2:\r
+    case ST_DEFINEFONTINFO:\r
+    case ST_DEFINETEXT:\r
+    case ST_DEFINETEXT2:\r
+    case ST_DEFINESOUND:\r
+    case ST_DEFINESPRITE:\r
+      id = GetU16(t);\r
+      break;\r
+  }\r
+\r
+  SetTagPos(t,oldTagPos);\r
+\r
+  return id;\r
+}\r
+\r
+U16 GetPlaceID(LPTAG t)\r
+// up to SWF 4.0\r
+{ U32 oldTagPos;\r
+  U16 id = 0;\r
+\r
+  oldTagPos = GetTagPos(t);\r
+  SetTagPos(t,0);\r
+\r
+  switch (GetTagID(t))\r
+  { case ST_PLACEOBJECT:\r
+    case ST_REMOVEOBJECT:\r
+    case ST_STARTSOUND:\r
+      id = GetU16(t);\r
+      break;\r
+\r
+    case ST_PLACEOBJECT2:\r
+    { U8 flags = GetU8(t);\r
+      U16 d = GetU16(t);\r
+      id = (flags&PF_CHAR)?GetU16(t):id;\r
+    } break;\r
+\r
+  }\r
+\r
+  SetTagPos(t,oldTagPos);\r
+\r
+  return id;\r
+}\r
+\r
+int definingtagids[] =\r
+{ST_DEFINESHAPE,\r
+ ST_DEFINESHAPE2,\r
+ ST_DEFINESHAPE3,\r
+ ST_DEFINEMORPHSHAPE,\r
+ ST_DEFINEFONT,\r
+ ST_DEFINEFONT2,\r
+ ST_DEFINETEXT,\r
+ ST_DEFINETEXT2,\r
+ ST_DEFINEEDITTEXT,\r
+ ST_DEFINEBITS,\r
+ ST_DEFINEBITSJPEG2,\r
+ ST_DEFINEBITSJPEG3,\r
+ ST_DEFINEBITSLOSSLESS,\r
+ ST_DEFINEBITSLOSSLESS2,\r
+ ST_DEFINEMOVIE,\r
+ ST_DEFINESPRITE,\r
+ ST_DEFINEBUTTON,\r
+ ST_DEFINEBUTTON2,\r
+ ST_DEFINESOUND,\r
+ -1\r
+};\r
+\r
+// tags which may be used inside a sprite definition\r
+int spritetagids[] =\r
+{ST_SHOWFRAME,\r
+ ST_PLACEOBJECT,\r
+ ST_PLACEOBJECT2,\r
+ ST_REMOVEOBJECT,\r
+ ST_REMOVEOBJECT2, //?\r
+ ST_DOACTION,\r
+ ST_STARTSOUND,\r
+ ST_FRAMELABEL,\r
+ ST_SOUNDSTREAMHEAD,\r
+ ST_SOUNDSTREAMHEAD2,\r
+ ST_SOUNDSTREAMBLOCK,\r
+ ST_END,\r
+ -1\r
+};\r
+\r
+char isAllowedSpriteTag (TAG*tag)\r
+{\r
+    int id = tag->id;\r
+    int t=0;\r
+    while(spritetagids[t]>=0)\r
+    {\r
+       if(spritetagids[t] == id) \r
+           return 1;\r
+       t++;\r
+    }\r
+    return 0; \r
+}\r
+\r
+char isDefiningTag (TAG*tag)\r
+{\r
+    int id = tag->id;\r
+    int t=0;\r
+    while(definingtagids[t]>=0)\r
+    {\r
+       if(definingtagids[t] == id) \r
+           return 1;\r
+       t++;\r
+    }\r
+    return 0; \r
+}\r
+\r
+U16 GetDepth(LPTAG t)\r
+// up to SWF 4.0\r
+{ \r
+  U16 depth = 0;\r
+  U32 oldTagPos;\r
+  oldTagPos = GetTagPos(t);\r
+  SetTagPos(t,0);\r
+\r
+  switch (GetTagID(t))\r
+  { case ST_PLACEOBJECT:\r
+    case ST_REMOVEOBJECT:\r
+      GetU16(t); //id\r
+      depth = GetU16(t);\r
+      break;\r
+    case ST_REMOVEOBJECT2:\r
+      depth = GetU16(t);\r
+      break;\r
+    case ST_PLACEOBJECT2:\r
+    { U8 flags = GetU8(t);\r
+      depth = GetU16(t);\r
+    } break;\r
+  }\r
+  SetTagPos(t,oldTagPos);\r
+  return depth;\r
+}\r
+\r
+char* GetName(LPTAG t)\r
+{\r
+    char* name = 0;\r
+    U32 oldTagPos;\r
+    MATRIX m;\r
+    CXFORM c;\r
+    oldTagPos = GetTagPos(t);\r
+    SetTagPos(t,0);\r
+    switch(GetTagID(t))\r
+    {\r
+        case ST_FRAMELABEL:\r
+           name = GetTagPosPtr(t);\r
+        break;\r
+        case ST_PLACEOBJECT2: {   \r
+            U8 flags = GetU8(t);\r
+            GetU16(t); //depth;\r
+           if(flags&PF_CHAR) \r
+             GetU16(t); //id\r
+           if(flags&PF_MATRIX)\r
+             GetMatrix(t, &m);\r
+           if(flags&PF_CXFORM)\r
+             GetCXForm(t, &c, 1);\r
+           if(flags&PF_RATIO)\r
+             GetU16(t);\r
+           if(flags&PF_NAME) {\r
+             ResetBitmask(t);\r
+             name = GetTagPosPtr(t);\r
+           }\r
+        }\r
+        break;\r
+    }\r
+    SetTagPos(t,oldTagPos);\r
+    return name;\r
+}\r
+\r
diff --git a/lib/rfxswf.c b/lib/rfxswf.c
new file mode 100644 (file)
index 0000000..2912350
--- /dev/null
@@ -0,0 +1,809 @@
+/* rfxswf.c\r
+\r
+   Library for creating and reading SWF files or parts of it.\r
+   There's a module directory which provides some extended functionality.\r
+   Most modules are included at the bottom of this file.\r
+\r
+   Part of the swftools package.\r
+\r
+   Copyright (c) 2000, 2001 Rainer Böhme <rfxswf@reflex-studio.de>\r
\r
+   This file is distributed under the GPL, see file COPYING for details \r
+\r
+*/\r
+\r
+#include "rfxswf.h"\r
+\r
+#include <jpeglib.h>\r
+#define _JPEGLIB_INCLUDED_\r
+\r
+// Win32 support may be broken since it was only tested in an older version for Watcom C\r
+#ifdef __NT__\r
+#  include <io.h>\r
+#  include <malloc.h>\r
+#  include <string.h>\r
+#  ifdef DEBUG_RFXSWF\r
+#    include <stdio.h>\r
+#  endif\r
+#else\r
+#endif\r
+\r
+// internal constants\r
+\r
+#define MALLOC_SIZE     128\r
+#define INSERT_RFX_TAG\r
+\r
+#define MEMSIZE(l) (((l/MALLOC_SIZE)+1)*MALLOC_SIZE)\r
+\r
+// inline wrapper functions\r
+\r
+LPTAG NextTag(LPTAG t) { return t->next; }\r
+LPTAG PrevTag(LPTAG t) { return t->prev; }\r
+int   GetFrameNo(LPTAG t)  { return t->frame; }\r
+U16   GetTagID(LPTAG t)    { return t->id; }\r
+U32   GetDataSize(LPTAG t) { return t->len; }\r
+U32   GetTagPos(LPTAG t)   { return t->pos; }\r
+U8*   GetTagPosPtr(LPTAG t)   { return &t->data[t->pos]; }\r
+\r
+// Basic Data Access Functions\r
+\r
+#define ResetBitmask(tag)   if (tag->bitmask)  { tag->pos++; tag->bitmask = 0; }\r
+#define ResetBitcount(tag)  if (tag->bitcount) { tag->bitcount = 0; }\r
+\r
+// for future purpose: avoid high level lib functions to change tagpos/bitcount\r
+\r
+#define SaveTagPos(tag)\r
+#define RestoreTagPos(tag)\r
+\r
+void SetTagPos(LPTAG t,U32 pos)\r
+{ ResetBitmask(t);\r
+  if (pos<=t->len) t->pos = pos;\r
+  #ifdef DEBUG_RFXSWF\r
+  else fprintf(stderr,"SetTagPos() out of bounds: TagID = %i\n",t->id);\r
+  #endif\r
+}\r
+\r
+U8 GetU8(LPTAG t)\r
+{ ResetBitmask(t);\r
+  #ifdef DEBUG_RFXSWF\r
+    if (t->pos>=t->len) \r
+    { fprintf(stderr,"GetU8() out of bounds: TagID = %i\n",t->id);\r
+      return 0;\r
+    }\r
+  #endif\r
+  return t->data[t->pos++];\r
+}\r
+\r
+U16 GetU16(LPTAG t)\r
+{ U16 res;\r
+  ResetBitmask(t);\r
+  #ifdef DEBUG_RFXSWF\r
+    if (t->pos>(t->len-2)) \r
+    { fprintf(stderr,"GetU16() out of bounds: TagID = %i\n",t->id);\r
+      return 0;\r
+    }\r
+  #endif\r
+  res = t->data[t->pos] | (t->data[t->pos+1]<<8);\r
+  t->pos+=2;\r
+  return res;\r
+}\r
+\r
+U32 GetU32(LPTAG t)\r
+{ U32 res;\r
+  ResetBitmask(t);\r
+  #ifdef DEBUG_RFXSWF\r
+    if (t->pos>(t->len-4)) \r
+    { fprintf(stderr,"GetU32() out of bounds: TagID = %i\n",t->id);\r
+      return 0;\r
+    }\r
+  #endif\r
+  res = t->data[t->pos]        | (t->data[t->pos+1]<<8) | \r
+       (t->data[t->pos+2]<<16) | (t->data[t->pos+3]<<24);\r
+  t->pos+=4;\r
+  return res;\r
+}\r
+\r
+int GetBlock(LPTAG t,U8 * b,int l)\r
+// returns number of bytes written (<=l)\r
+// b = NULL -> skip data\r
+{ ResetBitmask(t);\r
+  if ((t->len-t->pos)<l) l=t->len-t->pos;\r
+  if (b && l) memcpy(b,&t->data[t->pos],l);\r
+  t->pos+=l;\r
+  return l;\r
+}\r
+\r
+int SetBlock(LPTAG t,U8 * b,int l)\r
+// Appends Block to the end of Tagdata, returns size\r
+{ U32 newlen = t->len + l;\r
+  ResetBitcount(t);\r
+  if (newlen>t->memsize)\r
+  { U32  newmem  = MEMSIZE(newlen);  \r
+    U8 * newdata = (U8*)((t->data)?realloc(t->data,newmem):malloc(newmem));\r
+    if (!newdata)\r
+    {\r
+      #ifdef DEBUG_RFXSWF\r
+        fprintf(stderr,"Fatal Error: malloc()/realloc() failed.\n");\r
+      #endif\r
+      return 0;\r
+    }\r
+    t->memsize = newmem;\r
+    t->data    = newdata;\r
+  }\r
+  if (b) memcpy(&t->data[t->len],b,l);\r
+  else memset(&t->data[t->len],0x00,l);\r
+  t->len+=l;\r
+  return l;\r
+}\r
+\r
+int SetU8(LPTAG t,U8 v)\r
+{ ResetBitcount(t);\r
+  if ((t->len+1)>t->memsize) return (SetBlock(t,&v,1)==1)?0:-1;\r
+  t->data[t->len++] = v;\r
+  return 0;\r
+}\r
+\r
+int SetU16(LPTAG t,U16 v)\r
+{ U8 a[2];\r
+  a[0] = v&0xff;\r
+  a[1] = v>>8;\r
+  \r
+  ResetBitcount(t);\r
+  if ((t->len+2)>t->memsize) return (SetBlock(t,a,2)==2)?0:-1;\r
+  t->data[t->len++] = a[0];\r
+  t->data[t->len++] = a[1];\r
+  return 0;\r
+}\r
+\r
+int SetU32(LPTAG t,U32 v)\r
+{ U8 a[4];\r
+  a[0] = v&0xff;        // to ensure correct handling of non-intel byteorder\r
+  a[1] = (v>>8)&0xff;\r
+  a[2] = (v>>16)&0xff;\r
+  a[3] = (v>>24)&0xff;\r
+  \r
+  ResetBitcount(t);\r
+  if ((t->len+4)>t->memsize) return (SetBlock(t,a,4)==4)?0:-1;\r
+  t->data[t->len++] = a[0];\r
+  t->data[t->len++] = a[1];\r
+  t->data[t->len++] = a[2];\r
+  t->data[t->len++] = a[3];\r
+  return 0;\r
+}\r
+\r
+U32 GetBits(LPTAG t,int nbits)\r
+{ U32 res = 0;\r
+  if (!nbits) return 0;\r
+  if (!t->bitmask) t->bitmask = 0x80;\r
+  while (nbits)\r
+  { res<<=1;\r
+    if (t->data[t->pos]&t->bitmask) res|=1;\r
+    t->bitmask>>=1;\r
+    nbits--;\r
+    if (!t->bitmask)\r
+    { if (nbits) t->bitmask = 0x80;\r
+      #ifdef DEBUG_RFXSWF\r
+      if (t->pos>=t->len) \r
+      { fprintf(stderr,"GetBits() out of bounds: TagID = %i\n",t->id);\r
+        return res;\r
+      }\r
+      #endif\r
+      t->pos++;\r
+    }\r
+  }\r
+  return res;\r
+}\r
+\r
+S32 GetSBits(LPTAG t,int nbits)\r
+{ U32 res = GetBits(t,nbits);\r
+  if (res&(1<<(nbits-1))) res|=(0xffffffff<<nbits);  \r
+  return (S32)res;\r
+}\r
+\r
+int SetBits(LPTAG t,U32 v,int nbits)\r
+{ U32 bm = 1<<(nbits-1);\r
+\r
+  while (nbits)\r
+  { if (!t->bitcount)\r
+    { if (FAILED(SetU8(t,0))) return -1;\r
+      t->bitcount = 0x80;\r
+    }\r
+    if (v&bm) t->data[t->len-1] |= t->bitcount;\r
+    bm>>=1;\r
+    t->bitcount>>=1;\r
+    nbits--;\r
+  }\r
+  return 0;\r
+}\r
+\r
+// Advanced Data Access Functions\r
+\r
+int SetRGB(LPTAG t,LPRGBA col)\r
+{ if (!t) return -1;\r
+  if (col)\r
+  { SetU8(t,col->r);\r
+    SetU8(t,col->g);\r
+    SetU8(t,col->b);\r
+  } else SetBlock(t,NULL,3);\r
+  return 0;\r
+}\r
+\r
+int SetRGBA(LPTAG t,LPRGBA col)\r
+{ if (!t) return -1;\r
+  if (col)\r
+  { SetU8(t,col->r);\r
+    SetU8(t,col->g);\r
+    SetU8(t,col->b);\r
+    SetU8(t,col->a);\r
+  } else SetBlock(t,NULL,4);\r
+  return 0;\r
+}\r
+\r
+int CountBits(U32 v,int nbits)\r
+{ int n = 33;\r
+  U32 m = 0x80000000;\r
+  if (!v) n = 0; else\r
+  if (v&m)\r
+  { while (v&m)\r
+    { n--;\r
+      m>>=1;\r
+      if (!m) break;\r
+    } \r
+  }\r
+  else\r
+  { while (!(v&m))\r
+    { n--;\r
+      m>>=1;\r
+      if (!m) break;\r
+    } \r
+  }\r
+  return (n>nbits)?n:nbits;\r
+}\r
+\r
+int GetRect(LPTAG t,LPSRECT r)\r
+{ int nbits;\r
+  SRECT dummy;\r
+  if (!r) r = &dummy;\r
+  nbits = (int) GetBits(t,5);\r
+  r->xmin = GetSBits(t,nbits);\r
+  r->xmax = GetSBits(t,nbits);\r
+  r->ymin = GetSBits(t,nbits);\r
+  r->ymax = GetSBits(t,nbits);\r
+  return 0;\r
+}\r
+\r
+int SetRect(LPTAG t,LPSRECT r)\r
+{ int nbits;\r
+    \r
+  nbits = CountBits(r->xmin,0);\r
+  nbits = CountBits(r->xmax,nbits);\r
+  nbits = CountBits(r->ymin,nbits);\r
+  nbits = CountBits(r->ymax,nbits);\r
+\r
+  SetBits(t,nbits,5);\r
+  SetBits(t,r->xmin,nbits);\r
+  SetBits(t,r->xmax,nbits);\r
+  SetBits(t,r->ymin,nbits);\r
+  SetBits(t,r->ymax,nbits);\r
+\r
+  return 0;\r
+}\r
+\r
+int GetMatrix(LPTAG t,LPMATRIX m)\r
+{ MATRIX dummy;\r
+  int nbits;\r
+    \r
+  if (!m) m = &dummy;\r
+  \r
+  if (!t)\r
+  { m->sx = m->sy = 0x10000;\r
+    m->r0 = m->r1 = 0;\r
+    m->tx = m->ty = 0;\r
+    return -1;\r
+  }\r
+\r
+  ResetBitmask(t);\r
+  \r
+  if (GetBits(t,1))\r
+  { nbits = GetBits(t,5);\r
+    m->sx = GetSBits(t,nbits);\r
+    m->sy = GetSBits(t,nbits);\r
+  }\r
+  else m->sx = m->sy = 0x10000;\r
+  \r
+  if (GetBits(t,1))\r
+  { nbits = GetBits(t,5);\r
+    m->r0 = GetSBits(t,nbits);\r
+    m->r1 = GetSBits(t,nbits);\r
+  }\r
+  else m->r0 = m->r1 = 0x0;\r
+\r
+  nbits = GetBits(t,5);\r
+  m->tx = GetSBits(t,nbits);\r
+  m->ty = GetSBits(t,nbits);\r
+  \r
+  return 0;\r
+}\r
+\r
+int SetMatrix(LPTAG t,LPMATRIX m)\r
+{ int nbits;\r
+  MATRIX ma;\r
+\r
+  if (!m)\r
+  { m = &ma;\r
+    ma.sx = ma.sy = 0x10000;\r
+    ma.r0 = ma.r1 = 0;\r
+    ma.tx = ma.ty = 0;\r
+  }\r
+\r
+  ResetBitcount(t);\r
+\r
+  if ((m->sx==0x10000)&&(m->sy==0x10000)) SetBits(t,0,1);\r
+  else\r
+  { SetBits(t,1,1);\r
+    nbits = CountBits(m->sx,0);\r
+    nbits = CountBits(m->sy,nbits);\r
+    SetBits(t,nbits,5);\r
+    SetBits(t,m->sx,nbits);\r
+    SetBits(t,m->sy,nbits);\r
+  }\r
+\r
+  if ((!m->r0)&&(!m->r1)) SetBits(t,0,1);\r
+  else\r
+  { SetBits(t,1,1);\r
+    nbits = CountBits(m->r0,0);\r
+    nbits = CountBits(m->r1,nbits);\r
+    SetBits(t,nbits,5);\r
+    SetBits(t,m->r0,nbits);\r
+    SetBits(t,m->r1,nbits);\r
+  }\r
+\r
+  nbits = CountBits(m->tx,0);\r
+  nbits = CountBits(m->ty,nbits);\r
+  SetBits(t,nbits,5);\r
+  SetBits(t,m->tx,nbits);\r
+  SetBits(t,m->ty,nbits);\r
+\r
+  return 0;\r
+}\r
+\r
+int GetCXForm(LPTAG t,LPCXFORM cx,U8 alpha) //FIXME: alpha should be type bool\r
+{ CXFORM cxf;\r
+  int hasadd;\r
+  int hasmul;\r
+  int nbits;\r
+    \r
+  if (!cx) cx = &cxf;\r
+  \r
+  cx->a0 = cx->r0 = cx->g0 = cx->b0 = 256;\r
+  cx->a1 = cx->r1 = cx->g1 = cx->b1 = 0;\r
+\r
+  if (!t) return 0;\r
+  \r
+  ResetBitmask(t);\r
+  hasadd = GetBits(t,1);\r
+  hasmul = GetBits(t,1);\r
+  nbits  = GetBits(t,4);\r
+\r
+  if (hasmul)\r
+  { cx->r0 = (S16)GetSBits(t,nbits);\r
+    cx->g0 = (S16)GetSBits(t,nbits);\r
+    cx->b0 = (S16)GetSBits(t,nbits);\r
+    if (alpha)\r
+      cx->a0 = (S16)GetSBits(t,nbits);\r
+  }\r
+\r
+  if (hasadd)\r
+  { cx->r1 = (S16)GetSBits(t,nbits);\r
+    cx->g1 = (S16)GetSBits(t,nbits);\r
+    cx->b1 = (S16)GetSBits(t,nbits);\r
+    if (alpha)\r
+      cx->a1 = (S16)GetSBits(t,nbits);\r
+  }\r
+  \r
+  return 0;\r
+}\r
+\r
+int SetCXForm(LPTAG t,LPCXFORM cx,U8 alpha)\r
+{ CXFORM cxf;\r
+  int hasadd;\r
+  int hasmul;\r
+  int nbits;\r
+    \r
+  if (!cx)\r
+  { cx = &cxf;\r
+    cx->a0 = cx->r0 = cx->g0 = cx->b0 = 256;\r
+    cx->a1 = cx->r1 = cx->g1 = cx->b1 = 0;\r
+  }\r
+\r
+  if (!alpha)\r
+  { cx->a0 = 256;\r
+    cx->a1 = 0;\r
+  }\r
+\r
+  nbits = 0;\r
+\r
+  hasmul = (cx->a0!=256)||(cx->r0!=256)||(cx->g0!=256)||(cx->b0!=256);\r
+  hasadd = cx->a1|cx->r1|cx->g1|cx->b1;\r
+\r
+  if (hasmul)\r
+  { if (alpha) nbits = CountBits((S32)cx->a0,nbits);\r
+    nbits = CountBits((S32)cx->r0,nbits);\r
+    nbits = CountBits((S32)cx->g0,nbits);\r
+    nbits = CountBits((S32)cx->b0,nbits);\r
+  }\r
+\r
+  if (hasadd)\r
+  { if (alpha) nbits = CountBits((S32)cx->a1,nbits);\r
+    nbits = CountBits((S32)cx->r1,nbits);\r
+    nbits = CountBits((S32)cx->g1,nbits);\r
+    nbits = CountBits((S32)cx->b1,nbits);\r
+  }\r
+  \r
+  ResetBitcount(t);\r
+  SetBits(t,hasadd?1:0,1);\r
+  SetBits(t,hasmul?1:0,1);\r
+  SetBits(t,nbits,4);\r
+\r
+  if (hasmul)\r
+  { SetBits(t,cx->r0,nbits);\r
+    SetBits(t,cx->g0,nbits);\r
+    SetBits(t,cx->b0,nbits);\r
+    if (alpha) SetBits(t,cx->a0,nbits);\r
+  }\r
+\r
+  if (hasadd)\r
+  { SetBits(t,cx->r1,nbits);\r
+    SetBits(t,cx->g1,nbits);\r
+    SetBits(t,cx->b1,nbits);\r
+    if (alpha) SetBits(t,cx->a1,nbits);\r
+  }\r
+  \r
+  return 0;\r
+}\r
+\r
+int GetPoint(LPTAG t,LPSPOINT p) { return 0; }\r
+int SetPoint(LPTAG t,LPSPOINT p) { return 0; }\r
+\r
+// Tag List Manipulating Functions\r
+\r
+int RFXSWF_UpdateFrame(LPTAG t,S8 delta)\r
+// returns number of frames\r
+{ int res = -1;\r
+  while (t)\r
+  { t->frame+=delta;\r
+    res = t->frame;\r
+    t = t->next;\r
+  }\r
+  return res;\r
+}\r
+\r
+#define UpdateFrame(a,b) RFXSWF_UpdateFrame(a,b)\r
+\r
+LPTAG InsertTag(LPTAG after,U16 id)     // updates frames, if nescessary\r
+{ LPTAG t;\r
+\r
+  t = (LPTAG)malloc(sizeof(TAG));\r
+  if (t)\r
+  { memset(t,0x00,sizeof(TAG));\r
+    t->id = id;\r
+    \r
+    if (after)\r
+    { t->frame = after->frame;\r
+      t->prev  = after;\r
+      t->next  = after->next;\r
+      after->next = t;\r
+      if (t->next) t->next->prev = t;\r
+      \r
+      if (id==ST_SHOWFRAME) UpdateFrame(t->next,+1);\r
+    }\r
+  }\r
+  return t;\r
+}\r
+\r
+int DeleteTag(LPTAG t)\r
+{ if (!t) return -1;\r
+\r
+  if (t->id==ST_SHOWFRAME) UpdateFrame(t->next,-1);\r
+    \r
+  if (t->prev) t->prev->next = t->next;\r
+  if (t->next) t->next->prev = t->prev;\r
+\r
+  if (t->data) free(t->data);\r
+  free(t);\r
+  return 0;\r
+}\r
+\r
+LPTAG RFXSWF_ReadTag(int handle,LPTAG prev)\r
+{ LPTAG t;\r
+  U16 raw;\r
+  U32 len;\r
+  int id;\r
+\r
+  if (read(handle,&raw,2)!=2) return NULL;\r
+\r
+  len = raw&0x3f;\r
+  id  = raw>>6;\r
+\r
+  if (len==0x3f)\r
+  { if (read(handle,&len,4)!=4) return NULL;\r
+  }\r
+\r
+  if (id==ST_DEFINESPRITE) len = 2*sizeof(U16);\r
+  // Sprite handling fix: Flaten sprite tree\r
+\r
+  t = (LPTAG)malloc(sizeof(TAG));\r
+  \r
+  if (!t)\r
+  {\r
+    #ifdef DEBUG_RFXSWF\r
+      fprintf(stderr,"Fatal Error: malloc()/realloc() failed.\n");\r
+    #endif\r
+    return NULL;\r
+  }\r
+\r
+  memset(t,0x00,sizeof(TAG));\r
+  \r
+  t->len = len;\r
+  t->id  = id;\r
+\r
+  if (t->len)\r
+  { t->data = (U8*)malloc(t->len);\r
+    if (!t->data)\r
+    {\r
+      #ifdef DEBUG_RFXSWF\r
+        fprintf(stderr,"Fatal Error: malloc()/realloc() failed.\n");\r
+      #endif\r
+      return NULL;\r
+    }\r
+    t->memsize = t->len;\r
+    if (read(handle,t->data,t->len)!=t->len) return NULL;\r
+  }\r
+\r
+  if (prev)\r
+  { t->frame = prev->frame+((prev->id==ST_SHOWFRAME)?1:0);\r
+    t->prev  = prev;\r
+    prev->next = t;\r
+  }\r
+\r
+  return t;\r
+}\r
+\r
+int DefineSprite_GetRealSize(LPTAG t);\r
+\r
+int RFXSWF_WriteTag(int handle,LPTAG t)\r
+// returns tag length in bytes (incl. Header), -1 = Error\r
+// handle = -1 -> no output\r
+{ U16 raw[3];\r
+  U32 len;\r
+  int short_tag;\r
+\r
+  if (!t) return -1;\r
+\r
+  len = (t->id==ST_DEFINESPRITE)?DefineSprite_GetRealSize(t):t->len;\r
+\r
+  short_tag = len<0x3f;\r
+\r
+  if (handle>=0)\r
+  { if (short_tag)\r
+    { raw[0] = len|((t->id&0x3ff)<<6);\r
+      if (write(handle,raw,2)!=2)\r
+      {\r
+        #ifdef DEBUG_RFXSWF\r
+          fprintf(stderr,"WriteTag() failed: Short Header.\n");\r
+        #endif\r
+        return -1;\r
+      }\r
+    }\r
+    else\r
+    { raw[0] = (t->id<<6)|0x3f;\r
+      raw[1] = (U16)(len&0xffff);\r
+      raw[2] = (U16)(len>>16);\r
+      if (write(handle,raw,6)!=6)\r
+      {\r
+        #ifdef DEBUG_RFXSWF\r
+          fprintf(stderr,"WriteTag() failed: Long Header.\n");\r
+        #endif\r
+        return -1;\r
+      }\r
+    }\r
+    \r
+    if (t->data)\r
+    { if (write(handle,t->data,t->len)!=t->len)\r
+      {\r
+        #ifdef DEBUG_RFXSWF\r
+          fprintf(stderr,"WriteTag() failed: Data.\n");\r
+        #endif\r
+        return -1;\r
+      }\r
+    }\r
+    #ifdef DEBUG_RFXSWF\r
+      else if (t->len) fprintf(stderr,"WriteTag(): Tag Data Error, id=%i\n",t->id);\r
+    #endif\r
+  }\r
+\r
+  return t->len+(short_tag?2:6);\r
+}\r
+\r
+int DefineSprite_GetRealSize(LPTAG t)\r
+// Sprite Handling: Helper function to pack DefineSprite-Tag\r
+{ U32 len = t->len;\r
+  do\r
+  { t = NextTag(t);\r
+    if (t->id!=ST_DEFINESPRITE) len += RFXSWF_WriteTag(-1,t);\r
+    else t = NULL;\r
+  } while (t&&(t->id!=ST_END));\r
+  return len;\r
+}\r
+\r
+#define ReadTag(a,b)  RFXSWF_ReadTag(a,b)\r
+#define WriteTag(a,b) RFXSWF_WriteTag(a,b)\r
+\r
+// Movie Functions\r
+\r
+int ReadSWF(int handle,LPSWF swf)       // Reads SWF to memory (malloc'ed), returns length or <0 if fails\r
+{     \r
+  if (!swf) return -1;\r
+  memset(swf,0x00,sizeof(SWF));\r
+\r
+  { char b[32];                         // Header lesen\r
+    TAG t1;\r
+    LPTAG t;\r
+    \r
+    memset(&t1,0x00,sizeof(TAG));\r
+    \r
+    if ((t1.len=read(handle,b,32))<21) return -1;\r
+    t1.data = (U8*)b;\r
+\r
+    if (GetU8(&t1)!=(U8)'F') return -1;\r
+    if (GetU8(&t1)!=(U8)'W') return -1;\r
+    if (GetU8(&t1)!=(U8)'S') return -1;\r
+\r
+    swf->FileVersion = GetU8(&t1);\r
+    swf->FileSize    = GetU32(&t1);\r
+    GetRect(&t1,&swf->MovieSize);\r
+    swf->FrameRate   = GetU16(&t1);\r
+    swf->FrameCount  = GetU16(&t1);\r
+\r
+    GetU8(&t1);\r
+    lseek(handle,GetTagPos(&t1)-1,SEEK_SET);\r
+  \r
+                                        // Tags lesen und verketten\r
+    t = &t1;\r
+    while (t) t = ReadTag(handle,t);\r
+    swf->FirstTag = t1.next;\r
+    t1.next->prev = NULL;\r
+  }\r
+  \r
+  return 0;\r
+}\r
+int  WriteSWF(int handle,LPSWF swf)     // Writes SWF to file, returns length or <0 if fails\r
+{ U32 len;\r
+  LPTAG t;\r
+    \r
+  if (!swf) return -1;\r
+\r
+  // Insert REFLEX Tag\r
+\r
+#ifdef INSERT_RFX_TAG\r
+\r
+  if (NextTag(swf->FirstTag))\r
+    if (GetTagID(NextTag(swf->FirstTag))!=ST_REFLEX)\r
+      SetBlock(InsertTag(swf->FirstTag,ST_REFLEX),"rfx",3);\r
+\r
+#endif // INSERT_RFX_TAG\r
+\r
+  // Count Frames + File Size\r
+\r
+  len = 0;\r
+  t = swf->FirstTag;\r
+  swf->FrameCount = 0;\r
+\r
+  while(t)\r
+  { len += WriteTag(-1,t);\r
+    if (t->id==ST_SHOWFRAME) swf->FrameCount++;\r
+    t = NextTag(t);\r
+  }\r
+  \r
+  { TAG t1;\r
+    char b[64];\r
+    U32 l;\r
+\r
+    memset(&t1,0x00,sizeof(TAG));\r
+    t1.data    = (U8*)b;\r
+    t1.memsize = 64;\r
+    \r
+    SetU8(&t1,'F');      \r
+    SetU8(&t1,'W');      \r
+    SetU8(&t1,'S');\r
+    SetU8(&t1,swf->FileVersion);\r
+    \r
+    SetU32(&t1,0);                      // Keep space for filesize\r
+    SetRect(&t1,&swf->MovieSize);\r
+    SetU16(&t1,swf->FrameRate);\r
+    SetU16(&t1,swf->FrameCount);\r
+\r
+    l = GetDataSize(&t1);\r
+    swf->FileSize = l+len;\r
+    t1.len = 4;                         // bad & ugly trick !\r
+    SetU32(&t1,swf->FileSize);\r
+\r
+    if (handle>=0)\r
+    { \r
+      int ret = write(handle,b,l);\r
+      if (ret!=l)\r
+      {\r
+        #ifdef DEBUG_RFXSWF\r
+         printf("ret:%d (fd:%d)\n",ret, handle);\r
+         perror("write:");\r
+          fprintf(stderr,"WriteSWF() failed: Header.\n");\r
+        #endif\r
+        return -1;\r
+      }\r
+\r
+      t = swf->FirstTag;\r
+      while (t)\r
+      { if (WriteTag(handle,t)<0) return -1;\r
+        t = NextTag(t);\r
+      }\r
+    }\r
+  }\r
+  return (int)swf->FileSize;\r
+}\r
+\r
+int WriteCGI(LPSWF swf)\r
+{ int len;\r
+  char s[1024];\r
+    \r
+  len = WriteSWF(-1,swf);\r
+\r
+  if (len<0) return -1;\r
+\r
+  sprintf(s,"Content-type: application/x-shockwave-flash\n"\\r
+            "Accept-Ranges: bytes\n"\\r
+            "Content-Length: %lu\n"\\r
+            "Expires: Thu, 13 Apr 2000 23:59:59 GMT\n"\\r
+            "\n",len);\r
+            \r
+  write(fileno(stdout),s,strlen(s));\r
+  return WriteSWF(fileno(stdout),swf);\r
+}\r
+\r
+void FreeTags(LPSWF swf)                 // Frees all malloc'ed memory for tags\r
+{ LPTAG t = swf->FirstTag;\r
+\r
+  while (t)\r
+  { LPTAG tnew = t->next;\r
+    if (t->data) free(t->data);\r
+    free(t);\r
+    t = tnew;\r
+  }\r
+}\r
+\r
+// include advanced functions\r
+\r
+#ifdef __NT__\r
+\r
+#include "modules\swfdump.c"\r
+#include "modules\swfshape.c"\r
+#include "modules\swftext.c"\r
+#include "modules\swfobject.c"\r
+#include "modules\swfbutton.c"\r
+#include "modules\swfbits.c"\r
+#include "modules\swftools.c"\r
+#include "modules\swfcgi.c"\r
+\r
+#else\r
+\r
+#include "modules/swfdump.c"\r
+#include "modules/swfshape.c"\r
+#include "modules/swftext.c"\r
+#include "modules/swfobject.c"\r
+#include "modules/swfbutton.c"\r
+#include "modules/swfbits.c"\r
+#include "modules/swftools.c"\r
+#include "modules/swfcgi.c"\r
+\r
+#endif\r
+\r
+\r
diff --git a/lib/rfxswf.h b/lib/rfxswf.h
new file mode 100644 (file)
index 0000000..ca6316a
--- /dev/null
@@ -0,0 +1,439 @@
+/* rfxswf.h\r
+\r
+   Headers for rfxswf.c and modules\r
+\r
+   Part of the swftools package.\r
+\r
+   Copyright (c) 2000, 2001 Rainer Böhme <rfxswf@reflex-studio.de>\r
\r
+   This file is distributed under the GPL, see file COPYING for details \r
+\r
+*/\r
+\r
+#ifndef __RFX_SWF_INCLUDED__\r
+#define __RFX_SWF_INCLUDED__\r
+\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <string.h>\r
+#include "../config.h"\r
+\r
+#define DEBUG_RFXSWF\r
+\r
+// SWF Types\r
+\r
+typedef         unsigned long   U32;\r
+typedef         signed long     S32;\r
+typedef         unsigned short  U16;\r
+typedef         signed short    S16;\r
+typedef         unsigned char   U8;\r
+typedef         signed char     S8;\r
+typedef         signed long     SFIXED;\r
+typedef         signed long     SCOORD;\r
+\r
+// Basic Structures\r
+\r
+typedef struct _SPOINT\r
+{ SCOORD        x;\r
+  SCOORD        y;\r
+} SPOINT, * LPSPOINT;\r
+\r
+typedef struct _RGBA\r
+{ U8    r;\r
+  U8    g;\r
+  U8    b;\r
+  U8    a;\r
+} RGBA, * LPRGBA;\r
+\r
+typedef struct _SRECT\r
+{ SCOORD        xmin;\r
+  SCOORD        ymin;\r
+  SCOORD        xmax;\r
+  SCOORD        ymax;\r
+} SRECT, * LPSRECT;\r
+\r
+typedef struct _MATRIX\r
+{ SFIXED        sx;     // factor x\r
+  SFIXED        sy;\r
+  SFIXED        r0;     // rotation\r
+  SFIXED        r1;\r
+  SCOORD        tx;     // delta x\r
+  SCOORD        ty;\r
+} MATRIX, * LPMATRIX;\r
+\r
+typedef struct _CXFORM\r
+{ S16           a0, a1;\r
+  S16           r0, r1;\r
+  S16           g0, g1;\r
+  S16           b0, b1;\r
+} CXFORM, * LPCXFORM;\r
+\r
+typedef struct _TAG             // NEVER access a Tag-Struct directly !\r
+{ U16           id;\r
+  U32           len;\r
+  U8 *          data;\r
+\r
+  int           frame;\r
+\r
+  struct _TAG * next;\r
+  struct _TAG * prev;\r
+\r
+  U32           memsize;        // to minimize realloc() calls\r
+  U32           pos;            // for Get/Set-Access\r
+  U8            bitmask;        // for Bit-Manipulating Functions [read]\r
+  U8            bitcount;       // [write]\r
+} TAG, * LPTAG;\r
+\r
+typedef struct _SWF\r
+{ U8            FileVersion;\r
+  U32           FileSize;       // valid after load and save\r
+  SRECT         MovieSize;\r
+  U16           FrameRate;\r
+  U16           FrameCount;     // valid after load and save\r
+  LPTAG         FirstTag;\r
+} SWF, * LPSWF;\r
+\r
+// Basic Functions\r
+\r
+int  ReadSWF(int handle,LPSWF swf);     // Reads SWF to memory (malloc'ed), returns length or <0 if fails\r
+int  WriteSWF(int handle,LPSWF swf);    // Writes SWF to file, returns length or <0 if fails\r
+int  WriteCGI(LPSWF swf);               // Outputs SWF with valid CGI header to stdout\r
+void FreeTags(LPSWF swf);               // Frees all malloc'ed memory for swf\r
+    \r
+LPTAG InsertTag(LPTAG after,U16 id);    // updates frames, if necessary\r
+int   DeleteTag(LPTAG t);\r
+\r
+void  SetTagPos(LPTAG t,U32 pos);       // resets Bitcount\r
+U32   GetTagPos(LPTAG t);\r
+U8*   GetTagPosPtr(LPTAG t);\r
+\r
+LPTAG NextTag(LPTAG t);\r
+LPTAG PrevTag(LPTAG t);\r
+\r
+int   GetFrameNo(LPTAG t);\r
+U16   GetTagID(LPTAG t);\r
+U32   GetDataSize(LPTAG t);\r
+\r
+U32   GetBits(LPTAG t,int nbits);\r
+S32   GetSBits(LPTAG t,int nbits);\r
+int   SetBits(LPTAG t,U32 v,int nbits);\r
+\r
+int   GetBlock(LPTAG t,U8 * b,int l);   // resets Bitcount\r
+int   SetBlock(LPTAG t,U8 * b,int l);\r
+\r
+U8    GetU8(LPTAG t);&nb