Index: /orxonox/branches/levelloader/AUTHORS
===================================================================
--- /orxonox/branches/levelloader/AUTHORS	(revision 3417)
+++ /orxonox/branches/levelloader/AUTHORS	(revision 3417)
@@ -0,0 +1,9 @@
+orxonox-crew: <orxonox-dev@mail.datacore.ch>
+
+Patrick Boenzli
+Benjamin Grauer
+Simon Hofmann
+David Gruetter
+Johannes Bader
+Adrian Buerli
+Christian Meyer
Index: /orxonox/branches/levelloader/CODING-STANDARDS
===================================================================
--- /orxonox/branches/levelloader/CODING-STANDARDS	(revision 3417)
+++ /orxonox/branches/levelloader/CODING-STANDARDS	(revision 3417)
@@ -0,0 +1,184 @@
+CODING-STANDARTS FOR ORXONOX
+-==============--==---+++++-
+In this file it is described how a orxonox-developer should structure his code.
+Every developer has to read it and follow the rules, and orxonox will grow.
+
+Contents:
+---------
+1.Coding Conventions
+2.How to format your Code
+3.Example
+
+1.Coding Conventions
+====================
+==> If you are beginning a new code-file: copy the proto_class.{cc,h}
+==> and work with these files.
+
+1.1.What has to be there:
+-------------------------
+  a) in every code file, there must be a GNU copyright header.
+
+  b) under the (c) header write your name as main-programmer, if
+     you are just bugfixing or extending write it under co-programmer.
+
+  c) Every element of the must be documented with doxygen-tags.
+
+1.2.Doxygen Tags:
+-----------------
+Doxygen tags in general are comments inside a file, that look just a bit different.
+most of the time they extend the /* or // with a second star or a !
+
+  a) h-files: 
+   1) every h-file you want to be documented you have to tag. (tag looks like /*! \file somefile */ )
+   2) every class has to be Documented. ( //! what it does)
+   3) special variables can be documented. ( //!< wow this member is cool because )
+
+  b) cc-files:
+   1) all the methods must be documented, and all their parameters and return value must be covered.
+
+  c) look out for this: Doxygen parses preprocessor arguments,
+     so if some comments is excluded by a #ifdef, #endif 
+     doxygen will not parse it. And ther will be nothing in the docu.
+
+
+2.How to format your Code
+=========================
+We use the GNU conding convention (which is also used in xemacs etc.):
+
+-- Put a space after every comma.
+-- Put a space before the parenthesis that begins a function call,
+   macro call, function declaration or definition, or control
+   statement (if, while, switch, for). (DO NOT do this for macro
+   definitions; this is invalid preprocessor syntax.)
+-- The brace that begins a control statement (if, while, for, switch,
+   do) or a function definition should go on a line by itself.
+-- In function definitions, put the return type and all other
+   qualifiers on a line before the function name.  Thus, the function
+   name is always at the beginning of a line.
+-- Indentation level is two spaces.  (However, the first and following
+   statements of a while/for/if/etc. block are indented four spaces
+   from the while/for/if keyword.  The opening and closing braces are
+   indented two spaces.)
+-- Variable and function names should be all lowercase, with underscores
+   separating words, except for a prefixing tag, which may be in
+   uppercase.  Do not use the mixed-case convention (e.g.
+   SetVariableToValue ()) and *especially* do not use Microsoft
+   Hungarian notation (char **rgszRedundantTag).
+-- preprocessor and enum constants should be all uppercase, and should
+   be prefixed with a tag that groups related constants together.
+
+
+
+
+3.Example
+=========
+3.1.Header
+----------
+A standard header has the same name as the Class it handles.
+
+someclass.h
+-----------
+/*!
+  \file someclass.h
+  \brief Some short description of the someclass
+  \todo maybe there remains something to do in this entire file
+
+  Here comes a longer description
+  this can also be longer than one line
+*/
+
+#ifndef _SOMECLASS_H
+#define _SOMECLASS_H
+
+#include <many_headers>
+#include "stdincl.h"
+
+//! short description of the class
+/**
+  \todo what remains to be done here
+
+   longer description
+*/
+class SomeClass
+{
+  private:
+   int usefull_variable;
+   int cool_variable; //!< this variable is cool, because...
+
+  protected:
+    char* someOtherMember;
+
+  public:
+   SomeClass (void);
+   ~SomeClass (void);
+   
+   int mightyFunction (char* name, int value);
+//....
+};
+
+#endif /* _SOMECLASS_H */
+
+
+
+3.2.CC-Files
+------------
+CC-files must be named the same as the .h-files they belong to.
+
+someclass.cc
+------------
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: The Name of Myself
+   co-programmer: ...
+*/
+
+#include "someclass.h"
+
+
+/**
+   \brief <a brief description>
+   \todo I think you get it.
+
+   <more description>
+*/
+SomeClass::SomeClass (void)
+{
+   //constructor-stuff
+}
+
+/**
+   \brief <a brief description>
+   \todo if something is not destructed it will be here
+
+   <more description>
+*/
+~SomeClass::~SomeClass (void)
+{
+  //destroy all te allocated space of the Class
+}
+
+/**
+   \brief <a brief description>
+   \param name <what is this parameter for>
+   \param valuse <what for...>
+   \returns <what it returns>
+
+   <more description>
+*/
+int SomeClass::mightyFuncion (char* name, int value)
+{
+  this->coolVariable = value;
+  // and so on.....
+}
+
+// ...
Index: /orxonox/branches/levelloader/COPYING
===================================================================
--- /orxonox/branches/levelloader/COPYING	(revision 3417)
+++ /orxonox/branches/levelloader/COPYING	(revision 3417)
@@ -0,0 +1,345 @@
+		    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.
+
+
+		    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.)
+
+
+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.
+
+
+  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.
+
+
+  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
+
+
+	    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.
Index: /orxonox/branches/levelloader/IDEAS
===================================================================
--- /orxonox/branches/levelloader/IDEAS	(revision 3417)
+++ /orxonox/branches/levelloader/IDEAS	(revision 3417)
@@ -0,0 +1,9 @@
+
+
+all: fill in your ideas here!
+
+- Spacecraft transformations
+- weather influences: fog, rain, sun, wind
+- team play: fight with team-mates
+- RPG style: intelligence, constitution, force/power
+
Index: /orxonox/branches/levelloader/INSTALL
===================================================================
--- /orxonox/branches/levelloader/INSTALL	(revision 3417)
+++ /orxonox/branches/levelloader/INSTALL	(revision 3417)
@@ -0,0 +1,229 @@
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software
+Foundation, Inc.
+
+   This file is free documentation; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+
+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, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+   It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring.  (Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.)
+
+   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 you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+   The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'.  You only need
+`configure.ac' 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.  Run `./configure --help'
+for details on some of the pertinent environment variables.
+
+   You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment.  Here
+is an example:
+
+     ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
+
+   *Note Defining Variables::, for more details.
+
+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 support 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' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on.  Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+`--build=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+     CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+     OS KERNEL-OS
+
+   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 machine type.
+
+   If you are _building_ compiler tools for cross-compiling, you should
+use the `--target=TYPE' option to select the type of system they will
+produce code for.
+
+   If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+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.
+
+Defining Variables
+==================
+
+   Variables not defined in a site shell script can be set in the
+environment passed to `configure'.  However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost.  In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'.  For example:
+
+     ./configure CC=/usr/local2/bin/gcc
+
+will cause the specified gcc to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+`configure' Invocation
+======================
+
+   `configure' recognizes the following options to control how it
+operates.
+
+`--help'
+`-h'
+     Print a summary of the options to `configure', and exit.
+
+`--version'
+`-V'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`--cache-file=FILE'
+     Enable the cache: use and save the results of the tests in FILE,
+     traditionally `config.cache'.  FILE defaults to `/dev/null' to
+     disable caching.
+
+`--config-cache'
+`-C'
+     Alias for `--cache-file=config.cache'.
+
+`--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.
+
+`configure' also accepts some other, not widely useful, options.  Run
+`configure --help' for more details.
+
Index: /orxonox/branches/levelloader/Makefile.am
===================================================================
--- /orxonox/branches/levelloader/Makefile.am	(revision 3417)
+++ /orxonox/branches/levelloader/Makefile.am	(revision 3417)
@@ -0,0 +1,29 @@
+AUTOMAKE_OPTIONS = foreign no-installman no-installinfo 
+
+SUBDIRS = src 
+
+EXTRA_DIST = CODING-STANDARDS \
+	     IDEAS \
+	     TASKS \
+	     doc/CREDITS \
+	     doc/doxyconf/build \
+	     doc/doxyconf/confopts \
+	     doc/doxyconf/input \
+	     doc/doxyconf/preprocessor \
+	     doc/doxyconf/progress \
+	     doc/doxyconf/project 
+
+## doxygen stuff
+if DOXYGEN
+DOXYGEN_INPUT = "src src/gui src/importer"
+
+## Exclude the application wizard templates, and some file templates
+DOXYGEN_EXCLUDE = 
+
+DOXYGEN_EXAMPLE_PATH = 
+
+## Use Search engine (Versions 1.3.4 and above only!)
+DOXYGEN_SEARCHENGINE = YES
+
+include doc/documentation.am
+endif
Index: /orxonox/branches/levelloader/Makefile.in
===================================================================
--- /orxonox/branches/levelloader/Makefile.in	(revision 3417)
+++ /orxonox/branches/levelloader/Makefile.in	(revision 3417)
@@ -0,0 +1,661 @@
+# Makefile.in generated by automake 1.8.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+@SET_MAKE@
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = .
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(srcdir)/config.h.in \
+	$(srcdir)/doc/documentation.am $(top_srcdir)/configure AUTHORS \
+	COPYING ChangeLog INSTALL NEWS config.guess config.sub depcomp \
+	install-sh missing mkinstalldirs
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno configure.status.lineno
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-exec-recursive install-info-recursive \
+	install-recursive installcheck-recursive installdirs-recursive \
+	pdf-recursive ps-recursive uninstall-info-recursive \
+	uninstall-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  { test ! -d $(distdir) \
+    || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+         && rm -fr $(distdir); }; }
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEBUG = @DEBUG@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOXYGEN = @DOXYGEN@
+DOXYGEN_FALSE = @DOXYGEN_FALSE@
+DOXYGEN_TRUE = @DOXYGEN_TRUE@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GTK2_CFLAGS = @GTK2_CFLAGS@
+GTK2_LIBS = @GTK2_LIBS@
+HAVE_GTK2_FALSE = @HAVE_GTK2_FALSE@
+HAVE_GTK2_TRUE = @HAVE_GTK2_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MSBITFIELDS = @MSBITFIELDS@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SUB_PROJECTS_FALSE = @SUB_PROJECTS_FALSE@
+SUB_PROJECTS_TRUE = @SUB_PROJECTS_TRUE@
+VERSION = @VERSION@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+AUTOMAKE_OPTIONS = foreign no-installman no-installinfo 
+SUBDIRS = src 
+EXTRA_DIST = CODING-STANDARDS \
+	     IDEAS \
+	     TASKS \
+	     doc/CREDITS \
+	     doc/doxyconf/build \
+	     doc/doxyconf/confopts \
+	     doc/doxyconf/input \
+	     doc/doxyconf/preprocessor \
+	     doc/doxyconf/progress \
+	     doc/doxyconf/project 
+
+@DOXYGEN_TRUE@DOXYGEN_INPUT = "src src/gui src/importer"
+@DOXYGEN_TRUE@DOXYGEN_EXCLUDE = 
+@DOXYGEN_TRUE@DOXYGEN_EXAMPLE_PATH = 
+@DOXYGEN_TRUE@DOXYGEN_SEARCHENGINE = YES
+@DOXYGEN_TRUE@DX_CONFIG_FILE = "$(top_srcdir)/orxodox"
+@DOXYGEN_TRUE@DX_CONF_DIR = "$(top_srcdir)/doc/doxyconf"
+all: config.h
+	$(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+am--refresh:
+	@:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(srcdir)/doc/documentation.am $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \
+	      cd $(srcdir) && $(AUTOMAKE) --foreign  \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign  Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    echo ' $(SHELL) ./config.status'; \
+	    $(SHELL) ./config.status;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	$(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+
+config.h: stamp-h1
+	@if test ! -f $@; then \
+	  rm -f stamp-h1; \
+	  $(MAKE) stamp-h1; \
+	else :; fi
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+	@rm -f stamp-h1
+	cd $(top_builddir) && $(SHELL) ./config.status config.h
+$(srcdir)/config.h.in:  $(am__configure_deps) 
+	cd $(top_srcdir) && $(AUTOHEADER)
+	rm -f stamp-h1
+	touch $@
+
+distclean-hdr:
+	-rm -f config.h stamp-h1
+uninstall-info-am:
+
+# 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.
+$(RECURSIVE_TARGETS):
+	@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; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	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
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	    $$tags $$unique; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	$(am__remove_distdir)
+	mkdir $(distdir)
+	$(mkdir_p) $(distdir)/doc $(distdir)/doc/doxyconf
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || mkdir "$(distdir)/$$subdir" \
+	    || exit 1; \
+	    (cd $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="../$(top_distdir)" \
+	        distdir="../$(distdir)/$$subdir" \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+	-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
+	|| chmod -R a+r $(distdir)
+dist-gzip: distdir
+	$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	$(am__remove_distdir)
+
+dist-bzip2: distdir
+	$(AMTAR) chof - $(distdir) | bzip2 -9 -c >$(distdir).tar.bz2
+	$(am__remove_distdir)
+
+dist-tarZ: distdir
+	$(AMTAR) chof - $(distdir) | compress -c >$(distdir).tar.Z
+	$(am__remove_distdir)
+
+dist-shar: distdir
+	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+	$(am__remove_distdir)
+
+dist-zip: distdir
+	-rm -f $(distdir).zip
+	zip -rq $(distdir).zip $(distdir)
+	$(am__remove_distdir)
+
+dist dist-all: distdir
+	$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	$(am__remove_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
+	case '$(DIST_ARCHIVES)' in \
+	*.tar.gz*) \
+	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf - ;;\
+	*.tar.bz2*) \
+	  bunzip2 -c $(distdir).tar.bz2 | $(AMTAR) xf - ;;\
+	*.tar.Z*) \
+	  uncompress -c $(distdir).tar.Z | $(AMTAR) xf - ;;\
+	*.shar.gz*) \
+	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
+	*.zip*) \
+	  unzip $(distdir).zip ;;\
+	esac
+	chmod -R a-w $(distdir); chmod a+w $(distdir)
+	mkdir $(distdir)/_build
+	mkdir $(distdir)/_inst
+	chmod a-w $(distdir)
+	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+	  && cd $(distdir)/_build \
+	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+	    $(DISTCHECK_CONFIGURE_FLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
+	  && $(MAKE) $(AM_MAKEFLAGS) check \
+	  && $(MAKE) $(AM_MAKEFLAGS) install \
+	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+	  && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+	  && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+	        distuninstallcheck \
+	  && chmod -R a-w "$$dc_install_base" \
+	  && ({ \
+	       (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
+	  && rm -rf "$$dc_destdir" \
+	  && $(MAKE) $(AM_MAKEFLAGS) dist \
+	  && rm -rf $(DIST_ARCHIVES) \
+	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
+	$(am__remove_distdir)
+	@(echo "$(distdir) archives ready for distribution: "; \
+	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+	  sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
+distuninstallcheck:
+	@cd $(distuninstallcheck_dir) \
+	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+	   || { echo "ERROR: files left after uninstall:" ; \
+	        if test -n "$(DESTDIR)"; then \
+	          echo "  (check DESTDIR support)"; \
+	        fi ; \
+	        $(distuninstallcheck_listfiles) ; \
+	        exit 1; } >&2
+distcleancheck: distclean
+	@if test '$(srcdir)' = . ; then \
+	  echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+	  exit 1 ; \
+	fi
+	@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+	  || { echo "ERROR: files left in build directory after distclean:" ; \
+	       $(distcleancheck_listfiles) ; \
+	       exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile config.h all-local
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-local mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-hdr distclean-local \
+	distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -rf $(top_srcdir)/autom4te.cache
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am all-local \
+	am--refresh check check-am clean clean-generic clean-local \
+	clean-recursive ctags ctags-recursive dist dist-all dist-bzip2 \
+	dist-gzip dist-shar dist-tarZ dist-zip distcheck distclean \
+	distclean-generic distclean-hdr distclean-local \
+	distclean-recursive distclean-tags distcleancheck distdir \
+	distuninstallcheck dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-exec \
+	install-exec-am install-info install-info-am install-man \
+	install-strip installcheck installcheck-am installdirs \
+	installdirs-am maintainer-clean maintainer-clean-generic \
+	maintainer-clean-recursive mostlyclean mostlyclean-generic \
+	mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am uninstall-info-am
+
+
+@DOXYGEN_TRUE@doc:
+@DOXYGEN_TRUE@	if test ! -e $(DX_CONFIG_FILE); then \
+@DOXYGEN_TRUE@	 make doc-config; \
+@DOXYGEN_TRUE@	fi
+@DOXYGEN_TRUE@	@echo "Generating doxygen Documentation"; \
+@DOXYGEN_TRUE@	$(DOXYGEN) $(DX_CONFIG_FILE)
+
+@DOXYGEN_TRUE@doc-config:
+@DOXYGEN_TRUE@	@echo "Generationg doxygen configuration File." ; \
+@DOXYGEN_TRUE@	if test -e  "$(top_srcdir)/orxodox"; then \
+@DOXYGEN_TRUE@	  echo "deleting existing Configuration File" ; \
+@DOXYGEN_TRUE@	  rm $(top_srcdir)/orxodox ; \
+@DOXYGEN_TRUE@	fi ; \
+@DOXYGEN_TRUE@	touch $(DX_CONFIG_FILE) ; \
+@DOXYGEN_TRUE@	$(DX_CONF_DIR)/project						>> $(DX_CONFIG_FILE); \
+@DOXYGEN_TRUE@	echo "PROJECT_NAME		= \"$(PACKAGE_NAME)\"" 		>> $(DX_CONFIG_FILE); \
+@DOXYGEN_TRUE@	echo "PROJECT_NUMBER	   	= \"$(PACKAGE_VERSION)\"" 	>> $(DX_CONFIG_FILE); \
+@DOXYGEN_TRUE@	echo "OUTPUT_DIRECTORY  	= \"$(top_srcdir)/doc/\"" 	>> $(DX_CONFIG_FILE); \
+@DOXYGEN_TRUE@	echo " " >> $(DX_CONFIG_FILE); \
+@DOXYGEN_TRUE@\
+@DOXYGEN_TRUE@	$(DX_CONF_DIR)/build						>> $(DX_CONFIG_FILE); \
+@DOXYGEN_TRUE@\
+@DOXYGEN_TRUE@	$(DX_CONF_DIR)/progress						>> $(DX_CONFIG_FILE); \
+@DOXYGEN_TRUE@	if test $(DEBUG) -ge 2 ; then \
+@DOXYGEN_TRUE@	 echo "QUIET			= \"NO\""			>> $(DX_CONFIG_FILE); \
+@DOXYGEN_TRUE@	else \
+@DOXYGEN_TRUE@	 echo "QUIET			= \"YES\""			>> $(DX_CONFIG_FILE); \
+@DOXYGEN_TRUE@	fi ;\
+@DOXYGEN_TRUE@\
+@DOXYGEN_TRUE@	$(DX_CONF_DIR)/input						>> $(DX_CONFIG_FILE); \
+@DOXYGEN_TRUE@	echo "INPUT                  	= $(DOXYGEN_INPUT)"  		>> $(DX_CONFIG_FILE); \
+@DOXYGEN_TRUE@\
+@DOXYGEN_TRUE@	$(DX_CONF_DIR)/preprocessor					>> $(DX_CONFIG_FILE); \
+@DOXYGEN_TRUE@	echo "INCLUDE_PATH           	= \"$(top_srcdir)\""		>> $(DX_CONFIG_FILE); \
+@DOXYGEN_TRUE@	echo "PREDEFINED             	= \"HAVE_CONFIG_H= \""		>> $(DX_CONFIG_FILE); \
+@DOXYGEN_TRUE@	\
+@DOXYGEN_TRUE@	$(DX_CONF_DIR)/confopts						>> $(DX_CONFIG_FILE) 
+
+@DOXYGEN_TRUE@doc-delete: 
+@DOXYGEN_TRUE@	@echo "Deleting doxygen Documentation" 
+@DOXYGEN_TRUE@	rm -rf $(top_srcdir)/doc/html 
+@DOXYGEN_TRUE@	rm -rf $(top_srcdir)/doc/latex 
+
+@DOXYGEN_TRUE@distclean-local: doc-delete
+@DOXYGEN_TRUE@	rm -f $(top_srcdir)/orxodox
+
+@DOXYGEN_TRUE@clean-local:  doc-delete
+
+@DOXYGEN_TRUE@all-local: doc
+
+@DOXYGEN_TRUE@.PHONY: doc doc-config doc-delete
+
+# Local Variables:
+# mode: makefile
+# End:
+# 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:
Index: /orxonox/branches/levelloader/NEWS
===================================================================
--- /orxonox/branches/levelloader/NEWS	(revision 3417)
+++ /orxonox/branches/levelloader/NEWS	(revision 3417)
@@ -0,0 +1,33 @@
+Date: December 20, 2004
+Topic: New Webpage under construction
+Body: I am proud to announce, that nico is currently developing our new webpage. It has a verry cool new style, and is much more easy to extend, than the old one. <a href="http://www.orxonox.ethz.ch/new">visit it</a>.
+
+Date: December 14, 2004
+Topic: Repository Moved
+Body: Today we moved the repository. The new location of the repository is <A href="http://svn.orxonox.ethz.ch/reporx">http://svn.orxonox.ethz.ch/reporx</A>.
+
+Date:	November 16, 2004
+Topic:	Importer
+Body:	There now exists a possibility to import .obj-files (alias wavefront format) into the Game. You can find some test models here: <A href="/files/models">models</a>. You can also test them with the included importer which is locates in trunk/importer. enjoy.
+
+
+Date:	June 22, 2004
+Topic: 	Develop on Win32 - bg
+Body:	Now the moment you have all been waiting for has arrived. Orxonox can finally be compiled on Windows machines. We know that it is no good idea to do this, but since there are some people interessted in working with Windows, we will give you a chance: read <A href = "/index.php?site=additional.sites/howto.dev.win/howto.dev.win.cc.php" >the manual </A>.
+
+Date:	June 04, 2004
+Topic:	Orxonox Convention - pb
+Body:	Here you can find all the information you need, to join us at the <A href="index.php?site=additional.sites/convention01/convention01.php"> Orxonox Convention </A>, that takes Place at Stuz June 9. 2004.
+
+Date:	June 04, 2004
+Topic:  Manual for Subversion@DataCore.ch
+Body:	A manual for <A href="/files/subversion/subversion.pdf"> Subversion at DataCore</A> is made. Now we need someone, to correct all the errors. Please someone Checkout the Source of this at http://orxonox.ethz.ch/repos/latex/subversion an do the repairs.
+
+Date:	June 02, 2004
+Topic:	New homepage released - pb
+Body:	New homepage released, thanks to the power of subversion. And thanks to the VSETH to give us webspace on their server
+
+Date:	May 26, 2004
+Topic:	New ship models - bg
+Body:	Some new space models are now ready for download. You'll find them in the download section or try it <A href="/files/orx_pictures.tar.bz2">here</A>
+
Index: /orxonox/branches/levelloader/README
===================================================================
--- /orxonox/branches/levelloader/README	(revision 3417)
+++ /orxonox/branches/levelloader/README	(revision 3417)
@@ -0,0 +1,138 @@
+
+This is the offical README file for the game project
+
+--------------------------------------------------------
+                       orxOnox
+--------------------------------------------------------
+
+
+
+
+1.Preface:
+----------
+Orxonox is a open-source vertical scroller game programed
+in c++ and OpenGL.
+If we manage to be sober enough, this game shall definitly 
+become _the_ open-source vertical scroller ever.
+
+2.Manifesto:
+------------
+1) Alien is a great film
+2) Guiness is the most delicious beer
+3) If you think there is anything missing specialy in terms of story: you can be shure it's an arcade game
+4) Wanna chill: ask Boozoo Bajou
+
+to be continoued...
+
+
+3.Overview:
+---------
+1.Preface
+2.Manifesto
+3.Overview
+3.Contributing To The Project
+4.Howto C++ Programming
+5.Howto SVN
+6.Coding conventions
+
+
+4.Contributing To The project:
+------------------------------
+People who want to help us working on orxonox are always
+welcome:) Feel free to chip in anything you like. Wine, beer, 
+coffee... If you like to help us programming orxonox, you:
+- join the developer community mailing lists
+- read this README file
+then you have multiple ways to get started. 
+a) Read the hole source code and choose a topic you like
+b) check the TODO file to get a knowledge of what we need
+c) ask us for more information
+To get more informations about programming and project specs
+read the programming sections below.
+
+To start programming on orxonox you first have to download the 
+newest svn tree of orxonox. You can do this by enterning following
+lines in the linux console (ensure svn to be installed with ssl
+support enabled):
+
+svn co https://open.datacore.ch/pw/orxonox orxonox
+
+If you haven't got ssl support in you svn tool, recompile it
+./configure --with-ssl
+make
+make install
+
+
+5.Howto C++ Programming:
+------------------------
+If you are new to c/c++ programming, this project is probably
+not the best starting place to learn it. For you and the rest who 
+need "refreshment" check out these guides:
+
+www.cplusplus.com/doc/tutorial
+www.4p8.com/eric.brasseur/cppcen.html
+
+
+6.Howto SVN:
+------------
+For a more complete guide about this topic read the documentation
+avaiable at subversion.tigris.org.
+
+SVN (=subversion) is a version control program similar to CVS but
+newer. This program enables us to work all at the same program at 
+the same time - tricky.
+
+subversion checkout https://open.datacore.ch/pw/orxonox orxonox
+same as: subversion co https://open.datacore....
+
+this makes a directory orxonox at your current place in and gets
+the hole brand new source code from the server.
+
+now you can work. Remember to use 'svn copy instead of 'cp', 
+'svn mv' instead of 'mv', 'svn rm' instead of 'rm'... - you got it
+I think.
+After you have made your changes to the files enter
+svn status
+or with more details: svn status -vv
+which will show you the changes you did locally on your computer.
+svn diff
+is similar but shows you all the changes in detail.
+
+svn diff > patchfile
+the patchfile you can use later in conjunction with the patch program.
+You could, for example, email this patchfile to another developer for
+review or testing prior to commit.
+
+To add a new file type
+svn add <filename>
+and to publish all your changes type
+svn commit --message "Corrected number of chees slices."
+svn commit will send all of your changs to the repository. When you 
+commit a change, you need to supply a log message, describing your 
+change. The message can also be read from a file:
+svn commit --file logmsg
+
+If you accidently make a change you like to revert, you just can do this
+by typing:
+svn revert <filename>
+
+To keep track about the work that is running on the project use the
+command: svn log. This will show you a bref summary of all changes.
+
+
+Most of the programmer will do their work on a branch. A Branch is
+a line of development that exists independently of another line, yet
+still shares a common history. A branch always begins life as a copy
+of something, and moves on trom there, generating its own history. Later
+the two versions will merge.
+
+If you are working on orxonox you will have your own branch in which you 
+will program, some sort of sand-box. If you finish your work on your 
+topic, it will be revised by us and merged with the trunk
+
+7.Coding Conventions
+--------------------
+Read the File CODING-STANDARDS
+
+
+#EOF
Index: /orxonox/branches/levelloader/TASKS
===================================================================
--- /orxonox/branches/levelloader/TASKS	(revision 3417)
+++ /orxonox/branches/levelloader/TASKS	(revision 3417)
@@ -0,0 +1,14 @@
+Name: 			Animation/movie Player
+Date:			02.11.04
+Type of Work: 		design, implementation/coding, graphics
+Prerequirements:	C++(50%), OpenGL(30%), Graphics(20%)
+Priority: 		3
+Workprogress:	 	0%
+Abstract:		A method to play animations like explosions/water/wapeons during the game on the game-screen. <br>Abspielen einer bilderfolge an einem beliebigen Ort im Bildschirm. It is also possible to show fullscreen cinematics.
+Eingabe-Ausgabe:	Type of Data: Class/Function<br>Eingang: what to play, where to play, dataformat z.B. explosion1.avi, new Location(100, 245, 543), avi<br>Ausgang: animation playing on screen.
+Anwendungszwecke: 	Racketen/Lasers die abgeschossen werden (waffen die sich bewegen, gluehen)<br>Explosionen im Fall von Kollisionen/Einschlaegen<br>Umgebung wie Wasser, Gras etc
+Ansprueche:		Eine Animation ist ein Teil einer WorldEntity<br>Eine WorldEntity kann meherere Animationen beinhalten und gleichzeitig abspielen<br>Die WE muss wissen was fuer Animationen in welcher Situation abgespielt werden muessen.<br>SpeicherFormat<br>frei, muss aber open-source "kompatibel" sein. (also nicht jpeg)<br>balance aus speicherschonend und billig zu dekodieren<br>Animation muss sich mit der WorldEntity mitbewegen<br>Animation kann sich in der groesse veraendern<br>Transparente effekte
+Implementierung:	Eine Animation gehert einer WorldEntity (einleuchtend, denn ein spieler entscheidet wann geschossen  werden muss und damit eine animation dargestellt werden muss). Somit beinhaltet eine WorldEntity eine Klasse Animation. Diese Klasse hat eine liste der momentan laufenden Animationen<br>Aehnlich wie die WorldEntity::draw() function wird eine Animation::draw() function aufgerufen, im gleichen Takt.
+Offene Fragen:		Hintergrund nicht verdecken mit der Animation (v.a. an den Ecken aufpassen)<br>Was fuer eine Art Datenformat muss verwendet werden um die animationen effizient darzustellen.
+	
+
Index: /orxonox/branches/levelloader/ToDo
===================================================================
--- /orxonox/branches/levelloader/ToDo	(revision 3417)
+++ /orxonox/branches/levelloader/ToDo	(revision 3417)
@@ -0,0 +1,16 @@
+
+
+
+orxonox:
+--------
+
+- perspective change: smooth glide back in zero mode (pb)
+- efficency in garbage collection ShootLaser
+- player speed, *speed setting smoother (now taking current fps rate): average
+
+
+./configure
+-----------
+- if dri is not supported glxinfo returns "Xlib:  extension "XFree86-DRI" missing on display ":0.0"." -> this message should not be shown on the console!
+
+
Index: /orxonox/branches/levelloader/aclocal.m4
===================================================================
--- /orxonox/branches/levelloader/aclocal.m4	(revision 3417)
+++ /orxonox/branches/levelloader/aclocal.m4	(revision 3417)
@@ -0,0 +1,908 @@
+# generated automatically by aclocal 1.8.5 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+# Free Software Foundation, Inc.
+# This file 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.
+
+#                                                        -*- Autoconf -*-
+# Copyright (C) 2002, 2003  Free Software Foundation, Inc.
+# Generated from amversion.in; do not edit by hand.
+
+# 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, 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
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.8"])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION so it can be traced.
+# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+	 [AM_AUTOMAKE_VERSION([1.8.5])])
+
+# AM_AUX_DIR_EXPAND
+
+# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
+
+# 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, 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.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory.  The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run.  This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+#    fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+#    fails if $ac_aux_dir is absolute,
+#    fails when called from a subdirectory in a VPATH build with
+#          a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir.  In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+#   MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH.  The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL                                              -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003 Free Software Foundation, Inc.
+
+# 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, 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.
+
+# serial 6
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+	[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])
+AC_SUBST([$1_FALSE])
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.])
+fi])])
+
+# serial 7						-*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
+# Free Software Foundation, Inc.
+
+# 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, 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.
+
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery.  Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
+       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
+       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                   [depcc="$$1"   am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+               [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_$1_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_$1_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])
+])
+
+# Generate code to set up dependency tracking.   -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+
+# 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, 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.
+
+#serial 2
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[for mf in $CONFIG_FILES; do
+  # Strip MF so we end up with the name of the file.
+  mf=`echo "$mf" | sed -e 's/:.*$//'`
+  # Check whether this is an Automake generated Makefile or not.
+  # We used to match only the files named `Makefile.in', but
+  # some people rename them; so instead we look at the file content.
+  # Grep'ing the first line is not enough: some people post-process
+  # each Makefile.in and add a new line on top of each file to say so.
+  # So let's grep whole file.
+  if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+    dirpart=`AS_DIRNAME("$mf")`
+  else
+    continue
+  fi
+  grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue
+  # Extract the definition of DEP_FILES from the Makefile without
+  # running `make'.
+  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+  test -z "$DEPDIR" && continue
+  # When using ansi2knr, U may be empty or an underscore; expand it
+  U=`sed -n 's/^U = //p' < "$mf"`
+  test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
+  # We invoke sed twice because it is the simplest approach to
+  # changing $(DEPDIR) to its actual value in the expansion.
+  for file in `sed -n '
+    /^DEP_FILES = .*\\\\$/ {
+      s/^DEP_FILES = //
+      :loop
+	s/\\\\$//
+	p
+	n
+	/\\\\$/ b loop
+      p
+    }
+    /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
+       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+    # Make sure the directory exists.
+    test -f "$dirpart/$file" && continue
+    fdir=`AS_DIRNAME(["$file"])`
+    AS_MKDIR_P([$dirpart/$fdir])
+    # echo "creating $dirpart/$file"
+    echo '# dummy' > "$dirpart/$file"
+  done
+done
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled.  FIXME.  This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake.                            -*- Autoconf -*-
+
+# 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.
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# Free Software Foundation, Inc.
+
+# 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, 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.
+
+# serial 11
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.58])dnl
+dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])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
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_MISSING_PROG(AMTAR, tar)
+AM_PROG_INSTALL_SH
+AM_PROG_INSTALL_STRIP
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+                  [_AM_DEPENDENCIES(CC)],
+                  [define([AC_PROG_CC],
+                          defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                  [_AM_DEPENDENCIES(CXX)],
+                  [define([AC_PROG_CXX],
+                          defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+])
+])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $1 | $1:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+
+# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
+
+# 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, 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.
+
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+#                                                          -*- Autoconf -*-
+# Copyright (C) 2003  Free Software Foundation, Inc.
+
+# 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, 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.
+
+# serial 1
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Check to see how 'make' treats includes.	-*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+
+# 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, 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.
+
+# serial 2
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+   am__include=include
+   am__quote=
+   _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+      am__include=.include
+      am__quote="\""
+      _am_result=BSD
+   fi
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+#  -*- Autoconf -*-
+
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
+
+# 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, 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.
+
+# serial 3
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
+
+# Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+
+# 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, 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.
+
+# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
+# created by `make install' are always world readable, even if the
+# installer happens to have an overly restrictive umask (e.g. 077).
+# This was a mistake.  There are at least two reasons why we must not
+# use `-m 0755':
+#   - it causes special bits like SGID to be ignored,
+#   - it may be too restrictive (some setups expect 775 directories).
+#
+# Do not use -m 0755 and let people choose whatever they expect by
+# setting umask.
+#
+# We cannot accept any implementation of `mkdir' that recognizes `-p'.
+# Some implementations (such as Solaris 8's) are not thread-safe: if a
+# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c'
+# concurrently, both version can detect that a/ is missing, but only
+# one can create it and the other will error out.  Consequently we
+# restrict ourselves to GNU make (using the --version option ensures
+# this.)
+AC_DEFUN([AM_PROG_MKDIR_P],
+[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+  # Keeping the `.' argument allows $(mkdir_p) to be used without
+  # argument.  Indeed, we sometimes output rules like
+  #   $(mkdir_p) $(somedir)
+  # where $(somedir) is conditionally defined.
+  # (`test -n '$(somedir)' && $(mkdir_p) $(somedir)' is a more
+  # expensive solution, as it forces Make to start a sub-shell.)
+  mkdir_p='mkdir -p -- .'
+else
+  # On NextStep and OpenStep, the `mkdir' command does not
+  # recognize any option.  It will interpret all options as
+  # directories to create, and then abort because `.' already
+  # exists.
+  for d in ./-p ./--version;
+  do
+    test -d $d && rmdir $d
+  done
+  # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+  if test -f "$ac_aux_dir/mkinstalldirs"; then
+    mkdir_p='$(mkinstalldirs)'
+  else
+    mkdir_p='$(install_sh) -d'
+  fi
+fi
+AC_SUBST([mkdir_p])])
+
+# Helper functions for option handling.                    -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003  Free Software Foundation, Inc.
+
+# 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, 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.
+
+# serial 2
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+#
+# Check to make sure that the build environment is sane.
+#
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003 Free Software Foundation, Inc.
+
+# 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, 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.
+
+# serial 3
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# 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 conftest.file 2> /dev/null`
+   if test "$[*]" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$[*]" != "X $srcdir/configure conftest.file" \
+      && test "$[*]" != "X conftest.file $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]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# AM_PROG_INSTALL_STRIP
+
+# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
+
+# 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, 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.
+
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
Index: /orxonox/branches/levelloader/config.guess
===================================================================
--- /orxonox/branches/levelloader/config.guess	(revision 3417)
+++ /orxonox/branches/levelloader/config.guess	(revision 3417)
@@ -0,0 +1,1473 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+
+timestamp='2004-03-12'
+
+# This file 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.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Per Bothner <per@bothner.com>.
+# Please send patches to <config-patches@gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit 0 ;;
+    --version | -v )
+       echo "$version" ; exit 0 ;;
+    --help | --h* | -h )
+       echo "$usage"; exit 0 ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int x;" > $dummy.c ;
+	for c in cc gcc c89 c99 ; do
+	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+	     CC_FOR_BUILD="$c"; break ;
+	  fi ;
+	done ;
+	if test x"$CC_FOR_BUILD" = x ; then
+	  CC_FOR_BUILD=no_compiler_found ;
+	fi
+	;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+	PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Detect uclibc systems.
+
+LIBC="gnu"
+if [ -f /usr/include/bits/uClibc_config.h ]
+then
+	LIBC=uclibc
+	if [[ -n `grep "#define __UCLIBC_CONFIG_VERSION__" /usr/include/bits/uClibc_config.h` ]]
+	then
+		UCLIBC_SUBVER=`sed -n "/#define __UCLIBC_CONFIG_VERSION__ /s///p" /usr/include/bits/uClibc_config.h`
+		LIBC=$LIBC$UCLIBC_SUBVER
+	fi
+fi
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+	# NetBSD (nbsd) targets should (where applicable) match one or
+	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+	# switched to ELF, *-*-netbsd* would select the old
+	# object file format.  This provides both forward
+	# compatibility and a consistent mechanism for selecting the
+	# object file format.
+	#
+	# Note: NetBSD doesn't particularly care about the vendor
+	# portion of the name.  We always set it to "unknown".
+	sysctl="sysctl -n hw.machine_arch"
+	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+	case "${UNAME_MACHINE_ARCH}" in
+	    armeb) machine=armeb-unknown ;;
+	    arm*) machine=arm-unknown ;;
+	    sh3el) machine=shl-unknown ;;
+	    sh3eb) machine=sh-unknown ;;
+	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+	esac
+	# The Operating System including object format, if it has switched
+	# to ELF recently, or will in the future.
+	case "${UNAME_MACHINE_ARCH}" in
+	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+		eval $set_cc_for_build
+		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+			| grep __ELF__ >/dev/null
+		then
+		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+		    # Return netbsd for either.  FIX?
+		    os=netbsd
+		else
+		    os=netbsdelf
+		fi
+		;;
+	    *)
+	        os=netbsd
+		;;
+	esac
+	# The OS release
+	# Debian GNU/NetBSD machines have a different userland, and
+	# thus, need a distinct triplet. However, they do not need
+	# kernel version information, so it can be replaced with a
+	# suitable tag, in the style of linux-gnu.
+	case "${UNAME_VERSION}" in
+	    Debian*)
+		release='-gnu'
+		;;
+	    *)
+		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+		;;
+	esac
+	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+	# contains redundant information, the shorter form:
+	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+	echo "${machine}-${os}${release}"
+	exit 0 ;;
+    amd64:OpenBSD:*:*)
+	echo x86_64-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    amiga:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    arc:OpenBSD:*:*)
+	echo mipsel-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    cats:OpenBSD:*:*)
+	echo arm-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    hp300:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mac68k:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    macppc:OpenBSD:*:*)
+	echo powerpc-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mvme68k:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mvme88k:OpenBSD:*:*)
+	echo m88k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mvmeppc:OpenBSD:*:*)
+	echo powerpc-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    pegasos:OpenBSD:*:*)
+	echo powerpc-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    pmax:OpenBSD:*:*)
+	echo mipsel-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    sgi:OpenBSD:*:*)
+	echo mipseb-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    sun3:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    wgrisc:OpenBSD:*:*)
+	echo mipsel-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    *:OpenBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    *:ekkoBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+	exit 0 ;;
+    macppc:MirBSD:*:*)
+	echo powerppc-unknown-mirbsd${UNAME_RELEASE}
+	exit 0 ;;
+    *:MirBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+	exit 0 ;;
+    alpha:OSF1:*:*)
+	case $UNAME_RELEASE in
+	*4.0)
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+		;;
+	*5.*)
+	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+		;;
+	esac
+	# According to Compaq, /usr/sbin/psrinfo has been available on
+	# OSF/1 and Tru64 systems produced since 1995.  I hope that
+	# covers most systems running today.  This code pipes the CPU
+	# types through head -n 1, so we only detect the type of CPU 0.
+	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+	case "$ALPHA_CPU_TYPE" in
+	    "EV4 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV4.5 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "LCA4 (21066/21068)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV5 (21164)")
+		UNAME_MACHINE="alphaev5" ;;
+	    "EV5.6 (21164A)")
+		UNAME_MACHINE="alphaev56" ;;
+	    "EV5.6 (21164PC)")
+		UNAME_MACHINE="alphapca56" ;;
+	    "EV5.7 (21164PC)")
+		UNAME_MACHINE="alphapca57" ;;
+	    "EV6 (21264)")
+		UNAME_MACHINE="alphaev6" ;;
+	    "EV6.7 (21264A)")
+		UNAME_MACHINE="alphaev67" ;;
+	    "EV6.8CB (21264C)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8AL (21264B)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8CX (21264D)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.9A (21264/EV69A)")
+		UNAME_MACHINE="alphaev69" ;;
+	    "EV7 (21364)")
+		UNAME_MACHINE="alphaev7" ;;
+	    "EV7.9 (21364A)")
+		UNAME_MACHINE="alphaev79" ;;
+	esac
+	# A Pn.n version is a patched version.
+	# A Vn.n version is a released version.
+	# A Tn.n version is a released field test version.
+	# A Xn.n version is an unreleased experimental baselevel.
+	# 1.2 uses "1.2" for uname -r.
+	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+	exit 0 ;;
+    Alpha*:OpenVMS:*:*)
+	echo alpha-hp-vms
+	exit 0 ;;
+    Alpha\ *:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# Should we change UNAME_MACHINE based on the output of uname instead
+	# of the specific Alpha model?
+	echo alpha-pc-interix
+	exit 0 ;;
+    21064:Windows_NT:50:3)
+	echo alpha-dec-winnt3.5
+	exit 0 ;;
+    Amiga*:UNIX_System_V:4.0:*)
+	echo m68k-unknown-sysv4
+	exit 0;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-amigaos
+	exit 0 ;;
+    *:[Mm]orph[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-morphos
+	exit 0 ;;
+    *:OS/390:*:*)
+	echo i370-ibm-openedition
+	exit 0 ;;
+    *:OS400:*:*)
+        echo powerpc-ibm-os400
+	exit 0 ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+	echo arm-acorn-riscix${UNAME_RELEASE}
+	exit 0;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+	echo hppa1.1-hitachi-hiuxmpp
+	exit 0;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+	if test "`(/bin/universe) 2>/dev/null`" = att ; then
+		echo pyramid-pyramid-sysv3
+	else
+		echo pyramid-pyramid-bsd
+	fi
+	exit 0 ;;
+    NILE*:*:*:dcosx)
+	echo pyramid-pyramid-svr4
+	exit 0 ;;
+    DRS?6000:unix:4.0:6*)
+	echo sparc-icl-nx6
+	exit 0 ;;
+    DRS?6000:UNIX_SV:4.2*:7*)
+	case `/usr/bin/uname -p` in
+	    sparc) echo sparc-icl-nx7 && exit 0 ;;
+	esac ;;
+    sun4H:SunOS:5.*:*)
+	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    i86pc:SunOS:5.*:*)
+	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    sun4*:SunOS:6*:*)
+	# According to config.sub, this is the proper way to canonicalize
+	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+	# it's likely to be more like Solaris than SunOS4.
+	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    sun4*:SunOS:*:*)
+	case "`/usr/bin/arch -k`" in
+	    Series*|S4*)
+		UNAME_RELEASE=`uname -v`
+		;;
+	esac
+	# Japanese Language versions have a version number like `4.1.3-JL'.
+	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+	exit 0 ;;
+    sun3*:SunOS:*:*)
+	echo m68k-sun-sunos${UNAME_RELEASE}
+	exit 0 ;;
+    sun*:*:4.2BSD:*)
+	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+	case "`/bin/arch`" in
+	    sun3)
+		echo m68k-sun-sunos${UNAME_RELEASE}
+		;;
+	    sun4)
+		echo sparc-sun-sunos${UNAME_RELEASE}
+		;;
+	esac
+	exit 0 ;;
+    aushp:SunOS:*:*)
+	echo sparc-auspex-sunos${UNAME_RELEASE}
+	exit 0 ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit 0 ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+	echo m68k-atari-mint${UNAME_RELEASE}
+        exit 0 ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit 0 ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit 0 ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit 0 ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit 0 ;;
+    m68k:machten:*:*)
+	echo m68k-apple-machten${UNAME_RELEASE}
+	exit 0 ;;
+    powerpc:machten:*:*)
+	echo powerpc-apple-machten${UNAME_RELEASE}
+	exit 0 ;;
+    RISC*:Mach:*:*)
+	echo mips-dec-mach_bsd4.3
+	exit 0 ;;
+    RISC*:ULTRIX:*:*)
+	echo mips-dec-ultrix${UNAME_RELEASE}
+	exit 0 ;;
+    VAX*:ULTRIX*:*:*)
+	echo vax-dec-ultrix${UNAME_RELEASE}
+	exit 0 ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+	echo clipper-intergraph-clix${UNAME_RELEASE}
+	exit 0 ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+	int main (int argc, char *argv[]) {
+#else
+	int main (argc, argv) int argc; char *argv[]; {
+#endif
+	#if defined (host_mips) && defined (MIPSEB)
+	#if defined (SYSTYPE_SYSV)
+	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_SVR4)
+	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+	#endif
+	#endif
+	  exit (-1);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c \
+	  && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
+	  && exit 0
+	echo mips-mips-riscos${UNAME_RELEASE}
+	exit 0 ;;
+    Motorola:PowerMAX_OS:*:*)
+	echo powerpc-motorola-powermax
+	exit 0 ;;
+    Motorola:*:4.3:PL8-*)
+	echo powerpc-harris-powermax
+	exit 0 ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+	echo powerpc-harris-powermax
+	exit 0 ;;
+    Night_Hawk:Power_UNIX:*:*)
+	echo powerpc-harris-powerunix
+	exit 0 ;;
+    m88k:CX/UX:7*:*)
+	echo m88k-harris-cxux7
+	exit 0 ;;
+    m88k:*:4*:R4*)
+	echo m88k-motorola-sysv4
+	exit 0 ;;
+    m88k:*:3*:R3*)
+	echo m88k-motorola-sysv3
+	exit 0 ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+	then
+	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+	       [ ${TARGET_BINARY_INTERFACE}x = x ]
+	    then
+		echo m88k-dg-dgux${UNAME_RELEASE}
+	    else
+		echo m88k-dg-dguxbcs${UNAME_RELEASE}
+	    fi
+	else
+	    echo i586-dg-dgux${UNAME_RELEASE}
+	fi
+ 	exit 0 ;;
+    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
+	echo m88k-dolphin-sysv3
+	exit 0 ;;
+    M88*:*:R3*:*)
+	# Delta 88k system running SVR3
+	echo m88k-motorola-sysv3
+	exit 0 ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+	echo m88k-tektronix-sysv3
+	exit 0 ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+	echo m68k-tektronix-bsd
+	exit 0 ;;
+    *:IRIX*:*:*)
+	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+	exit 0 ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+	echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
+	exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+	echo i386-ibm-aix
+	exit 0 ;;
+    ia64:AIX:*:*)
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+	exit 0 ;;
+    *:AIX:2:3)
+	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+		eval $set_cc_for_build
+		sed 's/^		//' << EOF >$dummy.c
+		#include <sys/systemcfg.h>
+
+		main()
+			{
+			if (!__power_pc())
+				exit(1);
+			puts("powerpc-ibm-aix3.2.5");
+			exit(0);
+			}
+EOF
+		$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
+		echo rs6000-ibm-aix3.2.5
+	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+		echo rs6000-ibm-aix3.2.4
+	else
+		echo rs6000-ibm-aix3.2
+	fi
+	exit 0 ;;
+    *:AIX:*:[45])
+	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+		IBM_ARCH=rs6000
+	else
+		IBM_ARCH=powerpc
+	fi
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+	exit 0 ;;
+    *:AIX:*:*)
+	echo rs6000-ibm-aix
+	exit 0 ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+	echo romp-ibm-bsd4.4
+	exit 0 ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+	exit 0 ;;                           # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+	echo rs6000-bull-bosx
+	exit 0 ;;
+    DPX/2?00:B.O.S.:*:*)
+	echo m68k-bull-sysv3
+	exit 0 ;;
+    9000/[34]??:4.3bsd:1.*:*)
+	echo m68k-hp-bsd
+	exit 0 ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+	echo m68k-hp-bsd4.4
+	exit 0 ;;
+    9000/[34678]??:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	case "${UNAME_MACHINE}" in
+	    9000/31? )            HP_ARCH=m68000 ;;
+	    9000/[34]?? )         HP_ARCH=m68k ;;
+	    9000/[678][0-9][0-9])
+		if [ -x /usr/bin/getconf ]; then
+		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                    case "${sc_cpu_version}" in
+                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                      532)                      # CPU_PA_RISC2_0
+                        case "${sc_kernel_bits}" in
+                          32) HP_ARCH="hppa2.0n" ;;
+                          64) HP_ARCH="hppa2.0w" ;;
+			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                        esac ;;
+                    esac
+		fi
+		if [ "${HP_ARCH}" = "" ]; then
+		    eval $set_cc_for_build
+		    sed 's/^              //' << EOF >$dummy.c
+
+              #define _HPUX_SOURCE
+              #include <stdlib.h>
+              #include <unistd.h>
+
+              int main ()
+              {
+              #if defined(_SC_KERNEL_BITS)
+                  long bits = sysconf(_SC_KERNEL_BITS);
+              #endif
+                  long cpu  = sysconf (_SC_CPU_VERSION);
+
+                  switch (cpu)
+              	{
+              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+              	case CPU_PA_RISC2_0:
+              #if defined(_SC_KERNEL_BITS)
+              	    switch (bits)
+              		{
+              		case 64: puts ("hppa2.0w"); break;
+              		case 32: puts ("hppa2.0n"); break;
+              		default: puts ("hppa2.0"); break;
+              		} break;
+              #else  /* !defined(_SC_KERNEL_BITS) */
+              	    puts ("hppa2.0"); break;
+              #endif
+              	default: puts ("hppa1.0"); break;
+              	}
+                  exit (0);
+              }
+EOF
+		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+		    test -z "$HP_ARCH" && HP_ARCH=hppa
+		fi ;;
+	esac
+	if [ ${HP_ARCH} = "hppa2.0w" ]
+	then
+	    # avoid double evaluation of $set_cc_for_build
+	    test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
+	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
+	    then
+		HP_ARCH="hppa2.0w"
+	    else
+		HP_ARCH="hppa64"
+	    fi
+	fi
+	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+	exit 0 ;;
+    ia64:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	echo ia64-hp-hpux${HPUX_REV}
+	exit 0 ;;
+    3050*:HI-UX:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <unistd.h>
+	int
+	main ()
+	{
+	  long cpu = sysconf (_SC_CPU_VERSION);
+	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+	     results, however.  */
+	  if (CPU_IS_PA_RISC (cpu))
+	    {
+	      switch (cpu)
+		{
+		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+		  default: puts ("hppa-hitachi-hiuxwe2"); break;
+		}
+	    }
+	  else if (CPU_IS_HP_MC68K (cpu))
+	    puts ("m68k-hitachi-hiuxwe2");
+	  else puts ("unknown-hitachi-hiuxwe2");
+	  exit (0);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
+	echo unknown-hitachi-hiuxwe2
+	exit 0 ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+	echo hppa1.1-hp-bsd
+	exit 0 ;;
+    9000/8??:4.3bsd:*:*)
+	echo hppa1.0-hp-bsd
+	exit 0 ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+	echo hppa1.0-hp-mpeix
+	exit 0 ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+	echo hppa1.1-hp-osf
+	exit 0 ;;
+    hp8??:OSF1:*:*)
+	echo hppa1.0-hp-osf
+	exit 0 ;;
+    i*86:OSF1:*:*)
+	if [ -x /usr/sbin/sysversion ] ; then
+	    echo ${UNAME_MACHINE}-unknown-osf1mk
+	else
+	    echo ${UNAME_MACHINE}-unknown-osf1
+	fi
+	exit 0 ;;
+    parisc*:Lites*:*:*)
+	echo hppa1.1-hp-lites
+	exit 0 ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+	echo c1-convex-bsd
+        exit 0 ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+        exit 0 ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+	echo c34-convex-bsd
+        exit 0 ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+	echo c38-convex-bsd
+        exit 0 ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+	echo c4-convex-bsd
+        exit 0 ;;
+    CRAY*Y-MP:*:*:*)
+	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY*[A-Z]90:*:*:*)
+	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+	      -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY*TS:*:*:*)
+	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY*T3E:*:*:*)
+	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY*SV1:*:*:*)
+	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    *:UNICOS/mp:*:*)
+	echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit 0 ;;
+    5000:UNIX_System_V:4.*:*)
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	exit 0 ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+	exit 0 ;;
+    sparc*:BSD/OS:*:*)
+	echo sparc-unknown-bsdi${UNAME_RELEASE}
+	exit 0 ;;
+    *:BSD/OS:*:*)
+	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+	exit 0 ;;
+    *:FreeBSD:*:*)
+	# Determine whether the default compiler uses glibc.
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <features.h>
+	#if __GLIBC__ >= 2
+	LIBC=gnu
+	#else
+	LIBC=
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+	# GNU/KFreeBSD systems have a "k" prefix to indicate we are using
+	# FreeBSD's kernel, but not the complete OS.
+	case ${LIBC} in gnu) kernel_only='k' ;; esac
+	echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
+	exit 0 ;;
+    i*:CYGWIN*:*)
+	echo ${UNAME_MACHINE}-pc-cygwin
+	exit 0 ;;
+    i*:MINGW*:*)
+	echo ${UNAME_MACHINE}-pc-mingw32
+	exit 0 ;;
+    i*:PW*:*)
+	echo ${UNAME_MACHINE}-pc-pw32
+	exit 0 ;;
+    x86:Interix*:[34]*)
+	echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
+	exit 0 ;;
+    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+	echo i${UNAME_MACHINE}-pc-mks
+	exit 0 ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+	# UNAME_MACHINE based on the output of uname instead of i386?
+	echo i586-pc-interix
+	exit 0 ;;
+    i*:UWIN*:*)
+	echo ${UNAME_MACHINE}-pc-uwin
+	exit 0 ;;
+    p*:CYGWIN*:*)
+	echo powerpcle-unknown-cygwin
+	exit 0 ;;
+    prep*:SunOS:5.*:*)
+	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    *:GNU:*:*)
+	# the GNU system
+	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+	exit 0 ;;
+    *:GNU/*:*:*)
+	# other systems with GNU libc and userland
+	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+	exit 0 ;;
+    i*86:Minix:*:*)
+	echo ${UNAME_MACHINE}-pc-minix
+	exit 0 ;;
+    arm*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit 0 ;;
+    cris:Linux:*:*)
+	echo cris-axis-linux-${LIBC}
+	exit 0 ;;
+    ia64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit 0 ;;
+    m32r*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit 0 ;;
+    m68*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit 0 ;;
+    mips:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef mips
+	#undef mipsel
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=mipsel
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=mips
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+	test x"${CPU}" != x && echo "${CPU}-unknown-linux-${LIBC}" && exit 0
+	;;
+    mips64:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef mips64
+	#undef mips64el
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=mips64el
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=mips64
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+	test x"${CPU}" != x && echo "${CPU}-unknown-linux-${LIBC}" && exit 0
+	;;
+    ppc:Linux:*:*)
+	echo powerpc-unknown-linux-${LIBC}
+	exit 0 ;;
+    ppc64:Linux:*:*)
+	echo powerpc64-unknown-linux-${LIBC}
+	exit 0 ;;
+    alpha:Linux:*:*)
+	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+	  EV5)   UNAME_MACHINE=alphaev5 ;;
+	  EV56)  UNAME_MACHINE=alphaev56 ;;
+	  PCA56) UNAME_MACHINE=alphapca56 ;;
+	  PCA57) UNAME_MACHINE=alphapca56 ;;
+	  EV6)   UNAME_MACHINE=alphaev6 ;;
+	  EV67)  UNAME_MACHINE=alphaev67 ;;
+	  EV68*) UNAME_MACHINE=alphaev68 ;;
+        esac
+	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+	if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit 0 ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+	# Look for CPU level
+	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+	  PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
+	  PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
+	  *)    echo hppa-unknown-linux-${LIBC} ;;
+	esac
+	exit 0 ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+	echo hppa64-unknown-linux-${LIBC}
+	exit 0 ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+	echo ${UNAME_MACHINE}-ibm-linux
+	exit 0 ;;
+    sh64*:Linux:*:*)
+    	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit 0 ;;
+    sh*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit 0 ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit 0 ;;
+    x86_64:Linux:*:*)
+	echo x86_64-unknown-linux-${LIBC}
+	exit 0 ;;
+    i*86:Linux:*:*)
+	# The BFD linker knows what the default object file format is, so
+	# first see if it will tell us. cd to the root directory to prevent
+	# problems with other programs or directories called `ld' in the path.
+	# Set LC_ALL=C to ensure ld outputs messages in English.
+	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+			 | sed -ne '/supported targets:/!d
+				    s/[ 	][ 	]*/ /g
+				    s/.*supported targets: *//
+				    s/ .*//
+				    p'`
+        case "$ld_supported_targets" in
+	  elf32-i386)
+		TENTATIVE="${UNAME_MACHINE}-pc-linux-${LIBC}"
+		;;
+	  a.out-i386-linux)
+		echo "${UNAME_MACHINE}-pc-linux-${LIBC}aout"
+		exit 0 ;;
+	  coff-i386)
+		echo "${UNAME_MACHINE}-pc-linux-${LIBC}coff"
+		exit 0 ;;
+	  "")
+		# Either a pre-BFD a.out linker (linux-gnuoldld) or
+		# one that does not give us useful --help.
+		echo "${UNAME_MACHINE}-pc-linux-${LIBC}oldld"
+		exit 0 ;;
+	esac
+	if [ $LIBC != "gnu" -o $LIBC != "gnulibc1" ];then echo "$TENTATIVE" && exit 0; fi
+	# Determine whether the default compiler is a.out or elf
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <features.h>
+	#ifdef __ELF__
+	# ifdef __GLIBC__
+	#  if __GLIBC__ >= 2
+	LIBC=gnu
+	#  else
+	LIBC=gnulibc1
+	#  endif
+	# else
+	LIBC=gnulibc1
+	# endif
+	#else
+	#ifdef __INTEL_COMPILER
+	LIBC=gnu
+	#else
+	LIBC=gnuaout
+	#endif
+	#endif
+	#ifdef __dietlibc__
+	LIBC=dietlibc
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+	test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
+	test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
+	;;
+    i*86:DYNIX/ptx:4*:*)
+	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+	# earlier versions are messed up and put the nodename in both
+	# sysname and nodename.
+	echo i386-sequent-sysv4
+	exit 0 ;;
+    i*86:UNIX_SV:4.2MP:2.*)
+        # Unixware is an offshoot of SVR4, but it has its own version
+        # number series starting with 2...
+        # I am not positive that other SVR4 systems won't match this,
+	# I just have to hope.  -- rms.
+        # Use sysv4.2uw... so that sysv4* matches it.
+	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+	exit 0 ;;
+    i*86:OS/2:*:*)
+	# If we were able to find `uname', then EMX Unix compatibility
+	# is probably installed.
+	echo ${UNAME_MACHINE}-pc-os2-emx
+	exit 0 ;;
+    i*86:XTS-300:*:STOP)
+	echo ${UNAME_MACHINE}-unknown-stop
+	exit 0 ;;
+    i*86:atheos:*:*)
+	echo ${UNAME_MACHINE}-unknown-atheos
+	exit 0 ;;
+	i*86:syllable:*:*)
+	echo ${UNAME_MACHINE}-pc-syllable
+	exit 0 ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+	echo i386-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    i*86:*DOS:*:*)
+	echo ${UNAME_MACHINE}-pc-msdosdjgpp
+	exit 0 ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+	else
+		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+	fi
+	exit 0 ;;
+    i*86:*:5:[78]*)
+	case `/bin/uname -X | grep "^Machine"` in
+	    *486*)	     UNAME_MACHINE=i486 ;;
+	    *Pentium)	     UNAME_MACHINE=i586 ;;
+	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+	esac
+	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+	exit 0 ;;
+    i*86:*:3.2:*)
+	if test -f /usr/options/cb.name; then
+		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+	elif /bin/uname -X 2>/dev/null >/dev/null ; then
+		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+			&& UNAME_MACHINE=i586
+		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+	else
+		echo ${UNAME_MACHINE}-pc-sysv32
+	fi
+	exit 0 ;;
+    pc:*:*:*)
+	# Left here for compatibility:
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i386.
+	echo i386-pc-msdosdjgpp
+        exit 0 ;;
+    Intel:Mach:3*:*)
+	echo i386-pc-mach3
+	exit 0 ;;
+    paragon:*:*:*)
+	echo i860-intel-osf1
+	exit 0 ;;
+    i860:*:4.*:*) # i860-SVR4
+	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+	else # Add other i860-SVR4 vendors below as they are discovered.
+	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+	fi
+	exit 0 ;;
+    mini*:CTIX:SYS*5:*)
+	# "miniframe"
+	echo m68010-convergent-sysv
+	exit 0 ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+	echo m68k-convergent-sysv
+	exit 0 ;;
+    M680?0:D-NIX:5.3:*)
+	echo m68k-diab-dnix
+	exit 0 ;;
+    M68*:*:R3V[567]*:*)
+	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0)
+	OS_REL=''
+	test -r /etc/.relid \
+	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	  && echo i486-ncr-sysv4.3${OS_REL} && exit 0
+	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+	  && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && echo i486-ncr-sysv4 && exit 0 ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+	echo m68k-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    mc68030:UNIX_System_V:4.*:*)
+	echo m68k-atari-sysv4
+	exit 0 ;;
+    TSUNAMI:LynxOS:2.*:*)
+	echo sparc-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    rs6000:LynxOS:2.*:*)
+	echo rs6000-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+	echo powerpc-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    SM[BE]S:UNIX_SV:*:*)
+	echo mips-dde-sysv${UNAME_RELEASE}
+	exit 0 ;;
+    RM*:ReliantUNIX-*:*:*)
+	echo mips-sni-sysv4
+	exit 0 ;;
+    RM*:SINIX-*:*:*)
+	echo mips-sni-sysv4
+	exit 0 ;;
+    *:SINIX-*:*:*)
+	if uname -p 2>/dev/null >/dev/null ; then
+		UNAME_MACHINE=`(uname -p) 2>/dev/null`
+		echo ${UNAME_MACHINE}-sni-sysv4
+	else
+		echo ns32k-sni-sysv
+	fi
+	exit 0 ;;
+    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                      # says <Richard.M.Bartel@ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit 0 ;;
+    *:UNIX_System_V:4*:FTX*)
+	# From Gerald Hewes <hewes@openmarket.com>.
+	# How about differentiating between stratus architectures? -djm
+	echo hppa1.1-stratus-sysv4
+	exit 0 ;;
+    *:*:*:FTX*)
+	# From seanf@swdc.stratus.com.
+	echo i860-stratus-sysv4
+	exit 0 ;;
+    *:VOS:*:*)
+	# From Paul.Green@stratus.com.
+	echo hppa1.1-stratus-vos
+	exit 0 ;;
+    mc68*:A/UX:*:*)
+	echo m68k-apple-aux${UNAME_RELEASE}
+	exit 0 ;;
+    news*:NEWS-OS:6*:*)
+	echo mips-sony-newsos6
+	exit 0 ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+	if [ -d /usr/nec ]; then
+	        echo mips-nec-sysv${UNAME_RELEASE}
+	else
+	        echo mips-unknown-sysv${UNAME_RELEASE}
+	fi
+        exit 0 ;;
+    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
+	echo powerpc-be-beos
+	exit 0 ;;
+    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
+	echo powerpc-apple-beos
+	exit 0 ;;
+    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
+	echo i586-pc-beos
+	exit 0 ;;
+    SX-4:SUPER-UX:*:*)
+	echo sx4-nec-superux${UNAME_RELEASE}
+	exit 0 ;;
+    SX-5:SUPER-UX:*:*)
+	echo sx5-nec-superux${UNAME_RELEASE}
+	exit 0 ;;
+    SX-6:SUPER-UX:*:*)
+	echo sx6-nec-superux${UNAME_RELEASE}
+	exit 0 ;;
+    Power*:Rhapsody:*:*)
+	echo powerpc-apple-rhapsody${UNAME_RELEASE}
+	exit 0 ;;
+    *:Rhapsody:*:*)
+	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+	exit 0 ;;
+    *:Darwin:*:*)
+	case `uname -p` in
+	    *86) UNAME_PROCESSOR=i686 ;;
+	    powerpc) UNAME_PROCESSOR=powerpc ;;
+	esac
+	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+	exit 0 ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+	UNAME_PROCESSOR=`uname -p`
+	if test "$UNAME_PROCESSOR" = "x86"; then
+		UNAME_PROCESSOR=i386
+		UNAME_MACHINE=pc
+	fi
+	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+	exit 0 ;;
+    *:QNX:*:4*)
+	echo i386-pc-qnx
+	exit 0 ;;
+    NSR-?:NONSTOP_KERNEL:*:*)
+	echo nsr-tandem-nsk${UNAME_RELEASE}
+	exit 0 ;;
+    *:NonStop-UX:*:*)
+	echo mips-compaq-nonstopux
+	exit 0 ;;
+    BS2000:POSIX*:*:*)
+	echo bs2000-siemens-sysv
+	exit 0 ;;
+    DS/*:UNIX_System_V:*:*)
+	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+	exit 0 ;;
+    *:Plan9:*:*)
+	# "uname -m" is not consistent, so use $cputype instead. 386
+	# is converted to i386 for consistency with other x86
+	# operating systems.
+	if test "$cputype" = "386"; then
+	    UNAME_MACHINE=i386
+	else
+	    UNAME_MACHINE="$cputype"
+	fi
+	echo ${UNAME_MACHINE}-unknown-plan9
+	exit 0 ;;
+    *:TOPS-10:*:*)
+	echo pdp10-unknown-tops10
+	exit 0 ;;
+    *:TENEX:*:*)
+	echo pdp10-unknown-tenex
+	exit 0 ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+	echo pdp10-dec-tops20
+	exit 0 ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+	echo pdp10-xkl-tops20
+	exit 0 ;;
+    *:TOPS-20:*:*)
+	echo pdp10-unknown-tops20
+	exit 0 ;;
+    *:ITS:*:*)
+	echo pdp10-unknown-its
+	exit 0 ;;
+    SEI:*:*:SEIUX)
+        echo mips-sei-seiux${UNAME_RELEASE}
+	exit 0 ;;
+    *:DragonFly:*:*)
+	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+	exit 0 ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+	  ""
+#endif
+         ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+	printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+	printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+	echo c1-convex-bsd
+	exit 0 ;;
+    c2*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+	exit 0 ;;
+    c34*)
+	echo c34-convex-bsd
+	exit 0 ;;
+    c38*)
+	echo c38-convex-bsd
+	exit 0 ;;
+    c4*)
+	echo c4-convex-bsd
+	exit 0 ;;
+    esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+    ftp://ftp.gnu.org/pub/gnu/config/
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
Index: /orxonox/branches/levelloader/config.h.in
===================================================================
--- /orxonox/branches/levelloader/config.h.in	(revision 3417)
+++ /orxonox/branches/levelloader/config.h.in	(revision 3417)
@@ -0,0 +1,104 @@
+/* config.h.in.  Generated from configure.ac by autoheader.  */
+
+/* in which debug mode we are */
+#undef DEBUG
+
+/* Define to 1 if you have the `bzero' function. */
+#undef HAVE_BZERO
+
+/* Define to 1 if you have the <GL/glu.h> header file. */
+#undef HAVE_GL_GLU_H
+
+/* Define to 1 if you have the <GL/gl.h> header file. */
+#undef HAVE_GL_GL_H
+
+/* if we have GTK2 */
+#undef HAVE_GTK2
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the <jpeglib.h> header file. */
+#undef HAVE_JPEGLIB_H
+
+/* Define to 1 if you have the `m' library (-lm). */
+#undef HAVE_LIBM
+
+/* Define to 1 if your system has a GNU libc compatible `malloc' function, and
+   to 0 otherwise. */
+#undef HAVE_MALLOC
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the <OpenGL/glu.h> header file. */
+#undef HAVE_OPENGL_GLU_H
+
+/* Define to 1 if you have the <OpenGL/gl.h> header file. */
+#undef HAVE_OPENGL_GL_H
+
+/* Define to 1 if you have the <png.h> header file. */
+#undef HAVE_PNG_H
+
+/* Define to 1 if you have the <SDL/SDL.h> header file. */
+#undef HAVE_SDL_SDL_H
+
+/* Define to 1 if you have the <SDL/SDL_image.h> header file. */
+#undef HAVE_SDL_SDL_IMAGE_H
+
+/* Define to 1 if you have the `sqrt' function. */
+#undef HAVE_SQRT
+
+/* Define to 1 if stdbool.h conforms to C99. */
+#undef HAVE_STDBOOL_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if the system has the type `_Bool'. */
+#undef HAVE__BOOL
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Version number of package */
+#undef VERSION
+
+/* Define to rpl_malloc if the replacement function should be used. */
+#undef malloc
Index: /orxonox/branches/levelloader/config.sub
===================================================================
--- /orxonox/branches/levelloader/config.sub	(revision 3417)
+++ /orxonox/branches/levelloader/config.sub	(revision 3417)
@@ -0,0 +1,1549 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+
+timestamp='2004-03-12'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file 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.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Please send patches to <config-patches@gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit 0 ;;
+    --version | -v )
+       echo "$version" ; exit 0 ;;
+    --help | --h* | -h )
+       echo "$usage"; exit 0 ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit 0;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
+  kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+	-sun*os*)
+		# Prevent following clause from handling this invalid input.
+		;;
+	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+	-apple | -axis)
+		os=
+		basic_machine=$1
+		;;
+	-sim | -cisco | -oki | -wec | -winbond)
+		os=
+		basic_machine=$1
+		;;
+	-scout)
+		;;
+	-wrs)
+		os=-vxworks
+		basic_machine=$1
+		;;
+	-chorusos*)
+		os=-chorusos
+		basic_machine=$1
+		;;
+ 	-chorusrdb)
+ 		os=-chorusrdb
+		basic_machine=$1
+ 		;;
+	-hiux*)
+		os=-hiuxwe2
+		;;
+	-sco5)
+		os=-sco3.2v5
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco4)
+		os=-sco3.2v4
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2.[4-9]*)
+		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2v[4-9]*)
+		# Don't forget version if it is 3.2v4 or newer.
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco*)
+		os=-sco3.2v2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-udk*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-isc)
+		os=-isc2.2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-clix*)
+		basic_machine=clipper-intergraph
+		;;
+	-isc*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-lynx*)
+		os=-lynxos
+		;;
+	-ptx*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+		;;
+	-windowsnt*)
+		os=`echo $os | sed -e 's/windowsnt/winnt/'`
+		;;
+	-psos*)
+		os=-psos
+		;;
+	-mint | -mint[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+	# Recognize the basic CPU types without company name.
+	# Some are omitted here because they have special meanings below.
+	1750a | 580 \
+	| a29k \
+	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+	| am33_2.0 \
+	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+	| c4x | clipper \
+	| d10v | d30v | dlx | dsp16xx \
+	| fr30 | frv \
+	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+	| i370 | i860 | i960 | ia64 \
+	| ip2k | iq2000 \
+	| m32r | m32rle | m68000 | m68k | m88k | mcore \
+	| mips | mipsbe | mipseb | mipsel | mipsle \
+	| mips16 \
+	| mips64 | mips64el \
+	| mips64vr | mips64vrel \
+	| mips64orion | mips64orionel \
+	| mips64vr4100 | mips64vr4100el \
+	| mips64vr4300 | mips64vr4300el \
+	| mips64vr5000 | mips64vr5000el \
+	| mipsisa32 | mipsisa32el \
+	| mipsisa32r2 | mipsisa32r2el \
+	| mipsisa64 | mipsisa64el \
+	| mipsisa64r2 | mipsisa64r2el \
+	| mipsisa64sb1 | mipsisa64sb1el \
+	| mipsisa64sr71k | mipsisa64sr71kel \
+	| mipstx39 | mipstx39el \
+	| mn10200 | mn10300 \
+	| msp430 \
+	| ns16k | ns32k \
+	| openrisc | or32 \
+	| pdp10 | pdp11 | pj | pjl \
+	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+	| pyramid \
+	| sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+	| sh64 | sh64le \
+	| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \
+	| strongarm \
+	| tahoe | thumb | tic4x | tic80 | tron \
+	| v850 | v850e \
+	| we32k \
+	| x86 | xscale | xstormy16 | xtensa \
+	| z8k)
+		basic_machine=$basic_machine-unknown
+		;;
+	m6811 | m68hc11 | m6812 | m68hc12)
+		# Motorola 68HC11/12.
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+		;;
+
+	# We use `pc' rather than `unknown'
+	# because (1) that's what they normally are, and
+	# (2) the word "unknown" tends to confuse beginning users.
+	i*86 | x86_64)
+	  basic_machine=$basic_machine-pc
+	  ;;
+	# Object if more than one company name word.
+	*-*-*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+	# Recognize the basic CPU types with company name.
+	580-* \
+	| a29k-* \
+	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+	| avr-* \
+	| bs2000-* \
+	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+	| clipper-* | cydra-* \
+	| d10v-* | d30v-* | dlx-* \
+	| elxsi-* \
+	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+	| h8300-* | h8500-* \
+	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+	| i*86-* | i860-* | i960-* | ia64-* \
+	| ip2k-* | iq2000-* \
+	| m32r-* | m32rle-* \
+	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+	| m88110-* | m88k-* | mcore-* \
+	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+	| mips16-* \
+	| mips64-* | mips64el-* \
+	| mips64vr-* | mips64vrel-* \
+	| mips64orion-* | mips64orionel-* \
+	| mips64vr4100-* | mips64vr4100el-* \
+	| mips64vr4300-* | mips64vr4300el-* \
+	| mips64vr5000-* | mips64vr5000el-* \
+	| mipsisa32-* | mipsisa32el-* \
+	| mipsisa32r2-* | mipsisa32r2el-* \
+	| mipsisa64-* | mipsisa64el-* \
+	| mipsisa64r2-* | mipsisa64r2el-* \
+	| mipsisa64sb1-* | mipsisa64sb1el-* \
+	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+	| mipstx39-* | mipstx39el-* \
+	| msp430-* \
+	| none-* | np1-* | nv1-* | ns16k-* | ns32k-* \
+	| orion-* \
+	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+	| pyramid-* \
+	| romp-* | rs6000-* \
+	| sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
+	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+	| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+	| tahoe-* | thumb-* \
+	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+	| tron-* \
+	| v850-* | v850e-* | vax-* \
+	| we32k-* \
+	| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
+	| xtensa-* \
+	| ymp-* \
+	| z8k-*)
+		;;
+	# Recognize the various machine names and aliases which stand
+	# for a CPU type and a company and sometimes even an OS.
+	386bsd)
+		basic_machine=i386-unknown
+		os=-bsd
+		;;
+	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+		basic_machine=m68000-att
+		;;
+	3b*)
+		basic_machine=we32k-att
+		;;
+	a29khif)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+    	abacus)
+		basic_machine=abacus-unknown
+		;;
+	adobe68k)
+		basic_machine=m68010-adobe
+		os=-scout
+		;;
+	alliant | fx80)
+		basic_machine=fx80-alliant
+		;;
+	altos | altos3068)
+		basic_machine=m68k-altos
+		;;
+	am29k)
+		basic_machine=a29k-none
+		os=-bsd
+		;;
+	amd64)
+		basic_machine=x86_64-pc
+		;;
+	amd64-*)
+		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	amdahl)
+		basic_machine=580-amdahl
+		os=-sysv
+		;;
+	amiga | amiga-*)
+		basic_machine=m68k-unknown
+		;;
+	amigaos | amigados)
+		basic_machine=m68k-unknown
+		os=-amigaos
+		;;
+	amigaunix | amix)
+		basic_machine=m68k-unknown
+		os=-sysv4
+		;;
+	apollo68)
+		basic_machine=m68k-apollo
+		os=-sysv
+		;;
+	apollo68bsd)
+		basic_machine=m68k-apollo
+		os=-bsd
+		;;
+	aux)
+		basic_machine=m68k-apple
+		os=-aux
+		;;
+	balance)
+		basic_machine=ns32k-sequent
+		os=-dynix
+		;;
+	c90)
+		basic_machine=c90-cray
+		os=-unicos
+		;;
+	convex-c1)
+		basic_machine=c1-convex
+		os=-bsd
+		;;
+	convex-c2)
+		basic_machine=c2-convex
+		os=-bsd
+		;;
+	convex-c32)
+		basic_machine=c32-convex
+		os=-bsd
+		;;
+	convex-c34)
+		basic_machine=c34-convex
+		os=-bsd
+		;;
+	convex-c38)
+		basic_machine=c38-convex
+		os=-bsd
+		;;
+	cray | j90)
+		basic_machine=j90-cray
+		os=-unicos
+		;;
+	cr16c)
+		basic_machine=cr16c-unknown
+		os=-elf
+		;;
+	crds | unos)
+		basic_machine=m68k-crds
+		;;
+	cris | cris-* | etrax*)
+		basic_machine=cris-axis
+		;;
+	crx)
+		basic_machine=crx-unknown
+		os=-elf
+		;;
+	da30 | da30-*)
+		basic_machine=m68k-da30
+		;;
+	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+		basic_machine=mips-dec
+		;;
+	decsystem10* | dec10*)
+		basic_machine=pdp10-dec
+		os=-tops10
+		;;
+	decsystem20* | dec20*)
+		basic_machine=pdp10-dec
+		os=-tops20
+		;;
+	delta | 3300 | motorola-3300 | motorola-delta \
+	      | 3300-motorola | delta-motorola)
+		basic_machine=m68k-motorola
+		;;
+	delta88)
+		basic_machine=m88k-motorola
+		os=-sysv3
+		;;
+	dpx20 | dpx20-*)
+		basic_machine=rs6000-bull
+		os=-bosx
+		;;
+	dpx2* | dpx2*-bull)
+		basic_machine=m68k-bull
+		os=-sysv3
+		;;
+	ebmon29k)
+		basic_machine=a29k-amd
+		os=-ebmon
+		;;
+	elxsi)
+		basic_machine=elxsi-elxsi
+		os=-bsd
+		;;
+	encore | umax | mmax)
+		basic_machine=ns32k-encore
+		;;
+	es1800 | OSE68k | ose68k | ose | OSE)
+		basic_machine=m68k-ericsson
+		os=-ose
+		;;
+	fx2800)
+		basic_machine=i860-alliant
+		;;
+	genix)
+		basic_machine=ns32k-ns
+		;;
+	gmicro)
+		basic_machine=tron-gmicro
+		os=-sysv
+		;;
+	go32)
+		basic_machine=i386-pc
+		os=-go32
+		;;
+	h3050r* | hiux*)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	h8300hms)
+		basic_machine=h8300-hitachi
+		os=-hms
+		;;
+	h8300xray)
+		basic_machine=h8300-hitachi
+		os=-xray
+		;;
+	h8500hms)
+		basic_machine=h8500-hitachi
+		os=-hms
+		;;
+	harris)
+		basic_machine=m88k-harris
+		os=-sysv3
+		;;
+	hp300-*)
+		basic_machine=m68k-hp
+		;;
+	hp300bsd)
+		basic_machine=m68k-hp
+		os=-bsd
+		;;
+	hp300hpux)
+		basic_machine=m68k-hp
+		os=-hpux
+		;;
+	hp3k9[0-9][0-9] | hp9[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k2[0-9][0-9] | hp9k31[0-9])
+		basic_machine=m68000-hp
+		;;
+	hp9k3[2-9][0-9])
+		basic_machine=m68k-hp
+		;;
+	hp9k6[0-9][0-9] | hp6[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k7[0-79][0-9] | hp7[0-79][0-9])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k78[0-9] | hp78[0-9])
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][13679] | hp8[0-9][13679])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][0-9] | hp8[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hppa-next)
+		os=-nextstep3
+		;;
+	hppaosf)
+		basic_machine=hppa1.1-hp
+		os=-osf
+		;;
+	hppro)
+		basic_machine=hppa1.1-hp
+		os=-proelf
+		;;
+	i370-ibm* | ibm*)
+		basic_machine=i370-ibm
+		;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+	i*86v32)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv32
+		;;
+	i*86v4*)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv4
+		;;
+	i*86v)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv
+		;;
+	i*86sol2)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-solaris2
+		;;
+	i386mach)
+		basic_machine=i386-mach
+		os=-mach
+		;;
+	i386-vsta | vsta)
+		basic_machine=i386-unknown
+		os=-vsta
+		;;
+	iris | iris4d)
+		basic_machine=mips-sgi
+		case $os in
+		    -irix*)
+			;;
+		    *)
+			os=-irix4
+			;;
+		esac
+		;;
+	isi68 | isi)
+		basic_machine=m68k-isi
+		os=-sysv
+		;;
+	m88k-omron*)
+		basic_machine=m88k-omron
+		;;
+	magnum | m3230)
+		basic_machine=mips-mips
+		os=-sysv
+		;;
+	merlin)
+		basic_machine=ns32k-utek
+		os=-sysv
+		;;
+	mingw32)
+		basic_machine=i386-pc
+		os=-mingw32
+		;;
+	miniframe)
+		basic_machine=m68000-convergent
+		;;
+	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+	mips3*-*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+		;;
+	mips3*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+		;;
+	mmix*)
+		basic_machine=mmix-knuth
+		os=-mmixware
+		;;
+	monitor)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	morphos)
+		basic_machine=powerpc-unknown
+		os=-morphos
+		;;
+	msdos)
+		basic_machine=i386-pc
+		os=-msdos
+		;;
+	mvs)
+		basic_machine=i370-ibm
+		os=-mvs
+		;;
+	ncr3000)
+		basic_machine=i486-ncr
+		os=-sysv4
+		;;
+	netbsd386)
+		basic_machine=i386-unknown
+		os=-netbsd
+		;;
+	netwinder)
+		basic_machine=armv4l-rebel
+		os=-linux
+		;;
+	news | news700 | news800 | news900)
+		basic_machine=m68k-sony
+		os=-newsos
+		;;
+	news1000)
+		basic_machine=m68030-sony
+		os=-newsos
+		;;
+	news-3600 | risc-news)
+		basic_machine=mips-sony
+		os=-newsos
+		;;
+	necv70)
+		basic_machine=v70-nec
+		os=-sysv
+		;;
+	next | m*-next )
+		basic_machine=m68k-next
+		case $os in
+		    -nextstep* )
+			;;
+		    -ns2*)
+		      os=-nextstep2
+			;;
+		    *)
+		      os=-nextstep3
+			;;
+		esac
+		;;
+	nh3000)
+		basic_machine=m68k-harris
+		os=-cxux
+		;;
+	nh[45]000)
+		basic_machine=m88k-harris
+		os=-cxux
+		;;
+	nindy960)
+		basic_machine=i960-intel
+		os=-nindy
+		;;
+	mon960)
+		basic_machine=i960-intel
+		os=-mon960
+		;;
+	nonstopux)
+		basic_machine=mips-compaq
+		os=-nonstopux
+		;;
+	np1)
+		basic_machine=np1-gould
+		;;
+	nv1)
+		basic_machine=nv1-cray
+		os=-unicosmp
+		;;
+	nsr-tandem)
+		basic_machine=nsr-tandem
+		;;
+	op50n-* | op60c-*)
+		basic_machine=hppa1.1-oki
+		os=-proelf
+		;;
+	or32 | or32-*)
+		basic_machine=or32-unknown
+		os=-coff
+		;;
+	os400)
+		basic_machine=powerpc-ibm
+		os=-os400
+		;;
+	OSE68000 | ose68000)
+		basic_machine=m68000-ericsson
+		os=-ose
+		;;
+	os68k)
+		basic_machine=m68k-none
+		os=-os68k
+		;;
+	pa-hitachi)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	paragon)
+		basic_machine=i860-intel
+		os=-osf
+		;;
+	pbd)
+		basic_machine=sparc-tti
+		;;
+	pbb)
+		basic_machine=m68k-tti
+		;;
+	pc532 | pc532-*)
+		basic_machine=ns32k-pc532
+		;;
+	pentium | p5 | k5 | k6 | nexgen | viac3)
+		basic_machine=i586-pc
+		;;
+	pentiumpro | p6 | 6x86 | athlon | athlon_*)
+		basic_machine=i686-pc
+		;;
+	pentiumii | pentium2 | pentiumiii | pentium3)
+		basic_machine=i686-pc
+		;;
+	pentium4)
+		basic_machine=i786-pc
+		;;
+	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumpro-* | p6-* | 6x86-* | athlon-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentium4-*)
+		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pn)
+		basic_machine=pn-gould
+		;;
+	power)	basic_machine=power-ibm
+		;;
+	ppc)	basic_machine=powerpc-unknown
+		;;
+	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppcle | powerpclittle | ppc-le | powerpc-little)
+		basic_machine=powerpcle-unknown
+		;;
+	ppcle-* | powerpclittle-*)
+		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64)	basic_machine=powerpc64-unknown
+		;;
+	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+		basic_machine=powerpc64le-unknown
+		;;
+	ppc64le-* | powerpc64little-*)
+		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ps2)
+		basic_machine=i386-ibm
+		;;
+	pw32)
+		basic_machine=i586-unknown
+		os=-pw32
+		;;
+	rom68k)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	rm[46]00)
+		basic_machine=mips-siemens
+		;;
+	rtpc | rtpc-*)
+		basic_machine=romp-ibm
+		;;
+	s390 | s390-*)
+		basic_machine=s390-ibm
+		;;
+	s390x | s390x-*)
+		basic_machine=s390x-ibm
+		;;
+	sa29200)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	sb1)
+		basic_machine=mipsisa64sb1-unknown
+		;;
+	sb1el)
+		basic_machine=mipsisa64sb1el-unknown
+		;;
+	sei)
+		basic_machine=mips-sei
+		os=-seiux
+		;;
+	sequent)
+		basic_machine=i386-sequent
+		;;
+	sh)
+		basic_machine=sh-hitachi
+		os=-hms
+		;;
+	sh64)
+		basic_machine=sh64-unknown
+		;;
+	sparclite-wrs | simso-wrs)
+		basic_machine=sparclite-wrs
+		os=-vxworks
+		;;
+	sps7)
+		basic_machine=m68k-bull
+		os=-sysv2
+		;;
+	spur)
+		basic_machine=spur-unknown
+		;;
+	st2000)
+		basic_machine=m68k-tandem
+		;;
+	stratus)
+		basic_machine=i860-stratus
+		os=-sysv4
+		;;
+	sun2)
+		basic_machine=m68000-sun
+		;;
+	sun2os3)
+		basic_machine=m68000-sun
+		os=-sunos3
+		;;
+	sun2os4)
+		basic_machine=m68000-sun
+		os=-sunos4
+		;;
+	sun3os3)
+		basic_machine=m68k-sun
+		os=-sunos3
+		;;
+	sun3os4)
+		basic_machine=m68k-sun
+		os=-sunos4
+		;;
+	sun4os3)
+		basic_machine=sparc-sun
+		os=-sunos3
+		;;
+	sun4os4)
+		basic_machine=sparc-sun
+		os=-sunos4
+		;;
+	sun4sol2)
+		basic_machine=sparc-sun
+		os=-solaris2
+		;;
+	sun3 | sun3-*)
+		basic_machine=m68k-sun
+		;;
+	sun4)
+		basic_machine=sparc-sun
+		;;
+	sun386 | sun386i | roadrunner)
+		basic_machine=i386-sun
+		;;
+	sv1)
+		basic_machine=sv1-cray
+		os=-unicos
+		;;
+	symmetry)
+		basic_machine=i386-sequent
+		os=-dynix
+		;;
+	t3e)
+		basic_machine=alphaev5-cray
+		os=-unicos
+		;;
+	t90)
+		basic_machine=t90-cray
+		os=-unicos
+		;;
+	tic54x | c54x*)
+		basic_machine=tic54x-unknown
+		os=-coff
+		;;
+	tic55x | c55x*)
+		basic_machine=tic55x-unknown
+		os=-coff
+		;;
+	tic6x | c6x*)
+		basic_machine=tic6x-unknown
+		os=-coff
+		;;
+	tx39)
+		basic_machine=mipstx39-unknown
+		;;
+	tx39el)
+		basic_machine=mipstx39el-unknown
+		;;
+	toad1)
+		basic_machine=pdp10-xkl
+		os=-tops20
+		;;
+	tower | tower-32)
+		basic_machine=m68k-ncr
+		;;
+	tpf)
+		basic_machine=s390x-ibm
+		os=-tpf
+		;;
+	udi29k)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	ultra3)
+		basic_machine=a29k-nyu
+		os=-sym1
+		;;
+	v810 | necv810)
+		basic_machine=v810-nec
+		os=-none
+		;;
+	vaxv)
+		basic_machine=vax-dec
+		os=-sysv
+		;;
+	vms)
+		basic_machine=vax-dec
+		os=-vms
+		;;
+	vpp*|vx|vx-*)
+		basic_machine=f301-fujitsu
+		;;
+	vxworks960)
+		basic_machine=i960-wrs
+		os=-vxworks
+		;;
+	vxworks68)
+		basic_machine=m68k-wrs
+		os=-vxworks
+		;;
+	vxworks29k)
+		basic_machine=a29k-wrs
+		os=-vxworks
+		;;
+	w65*)
+		basic_machine=w65-wdc
+		os=-none
+		;;
+	w89k-*)
+		basic_machine=hppa1.1-winbond
+		os=-proelf
+		;;
+	xps | xps100)
+		basic_machine=xps100-honeywell
+		;;
+	ymp)
+		basic_machine=ymp-cray
+		os=-unicos
+		;;
+	z8k-*-coff)
+		basic_machine=z8k-unknown
+		os=-sim
+		;;
+	none)
+		basic_machine=none-none
+		os=-none
+		;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+	w89k)
+		basic_machine=hppa1.1-winbond
+		;;
+	op50n)
+		basic_machine=hppa1.1-oki
+		;;
+	op60c)
+		basic_machine=hppa1.1-oki
+		;;
+	romp)
+		basic_machine=romp-ibm
+		;;
+	rs6000)
+		basic_machine=rs6000-ibm
+		;;
+	vax)
+		basic_machine=vax-dec
+		;;
+	pdp10)
+		# there are many clones, so DEC is not a safe bet
+		basic_machine=pdp10-unknown
+		;;
+	pdp11)
+		basic_machine=pdp11-dec
+		;;
+	we32k)
+		basic_machine=we32k-att
+		;;
+	sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
+		basic_machine=sh-unknown
+		;;
+	sh64)
+		basic_machine=sh64-unknown
+		;;
+	sparc | sparcv8 | sparcv9 | sparcv9b)
+		basic_machine=sparc-sun
+		;;
+	cydra)
+		basic_machine=cydra-cydrome
+		;;
+	orion)
+		basic_machine=orion-highlevel
+		;;
+	orion105)
+		basic_machine=clipper-highlevel
+		;;
+	mac | mpw | mac-mpw)
+		basic_machine=m68k-apple
+		;;
+	pmac | pmac-mpw)
+		basic_machine=powerpc-apple
+		;;
+	*-unknown)
+		# Make sure to match an already-canonicalized machine name.
+		;;
+	*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+	*-digital*)
+		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+		;;
+	*-commodore*)
+		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+		;;
+	*)
+		;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+	# -solaris* is a basic system type, with this one exception.
+	-solaris1 | -solaris1.*)
+		os=`echo $os | sed -e 's|solaris1|sunos4|'`
+		;;
+	-solaris)
+		os=-solaris2
+		;;
+	-svr4*)
+		os=-sysv4
+		;;
+	-unixware*)
+		os=-sysv4.2uw
+		;;
+	-gnu/linux*)
+		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+		;;
+	# First accept the basic system types.
+	# The portable systems comes first.
+	# Each alternative MUST END IN A *, to match a version number.
+	# -sysv* is not here because it comes later, after sysvr4.
+	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+	      | -aos* \
+	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
+	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+	      | -chorusos* | -chorusrdb* \
+	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
+	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*)
+	# Remember, each alternative MUST END IN *, to match a version number.
+		;;
+	-qnx*)
+		case $basic_machine in
+		    x86-* | i*86-*)
+			;;
+		    *)
+			os=-nto$os
+			;;
+		esac
+		;;
+	-nto-qnx*)
+		;;
+	-nto*)
+		os=`echo $os | sed -e 's|nto|nto-qnx|'`
+		;;
+	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
+	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+		;;
+	-mac*)
+		os=`echo $os | sed -e 's|mac|macos|'`
+		;;
+	-linux-dietlibc)
+		os=-linux-dietlibc
+		;;
+	-linux*)
+		os=`echo $os | sed -e 's|linux|linux-gnu|'`
+		;;
+	-sunos5*)
+		os=`echo $os | sed -e 's|sunos5|solaris2|'`
+		;;
+	-sunos6*)
+		os=`echo $os | sed -e 's|sunos6|solaris3|'`
+		;;
+	-opened*)
+		os=-openedition
+		;;
+        -os400*)
+		os=-os400
+		;;
+	-wince*)
+		os=-wince
+		;;
+	-osfrose*)
+		os=-osfrose
+		;;
+	-osf*)
+		os=-osf
+		;;
+	-utek*)
+		os=-bsd
+		;;
+	-dynix*)
+		os=-bsd
+		;;
+	-acis*)
+		os=-aos
+		;;
+	-atheos*)
+		os=-atheos
+		;;
+	-syllable*)
+		os=-syllable
+		;;
+	-386bsd)
+		os=-bsd
+		;;
+	-ctix* | -uts*)
+		os=-sysv
+		;;
+	-nova*)
+		os=-rtmk-nova
+		;;
+	-ns2 )
+		os=-nextstep2
+		;;
+	-nsk*)
+		os=-nsk
+		;;
+	# Preserve the version number of sinix5.
+	-sinix5.*)
+		os=`echo $os | sed -e 's|sinix|sysv|'`
+		;;
+	-sinix*)
+		os=-sysv4
+		;;
+        -tpf*)
+		os=-tpf
+		;;
+	-triton*)
+		os=-sysv3
+		;;
+	-oss*)
+		os=-sysv3
+		;;
+	-svr4)
+		os=-sysv4
+		;;
+	-svr3)
+		os=-sysv3
+		;;
+	-sysvr4)
+		os=-sysv4
+		;;
+	# This must come after -sysvr4.
+	-sysv*)
+		;;
+	-ose*)
+		os=-ose
+		;;
+	-es1800*)
+		os=-ose
+		;;
+	-xenix)
+		os=-xenix
+		;;
+	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+		os=-mint
+		;;
+	-aros*)
+		os=-aros
+		;;
+	-kaos*)
+		os=-kaos
+		;;
+	-none)
+		;;
+	*)
+		# Get rid of the `-' at the beginning of $os.
+		os=`echo $os | sed 's/[^-]*-//'`
+		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+		exit 1
+		;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+	*-acorn)
+		os=-riscix1.2
+		;;
+	arm*-rebel)
+		os=-linux
+		;;
+	arm*-semi)
+		os=-aout
+		;;
+    c4x-* | tic4x-*)
+        os=-coff
+        ;;
+	# This must come before the *-dec entry.
+	pdp10-*)
+		os=-tops20
+		;;
+	pdp11-*)
+		os=-none
+		;;
+	*-dec | vax-*)
+		os=-ultrix4.2
+		;;
+	m68*-apollo)
+		os=-domain
+		;;
+	i386-sun)
+		os=-sunos4.0.2
+		;;
+	m68000-sun)
+		os=-sunos3
+		# This also exists in the configure program, but was not the
+		# default.
+		# os=-sunos4
+		;;
+	m68*-cisco)
+		os=-aout
+		;;
+	mips*-cisco)
+		os=-elf
+		;;
+	mips*-*)
+		os=-elf
+		;;
+	or32-*)
+		os=-coff
+		;;
+	*-tti)	# must be before sparc entry or we get the wrong os.
+		os=-sysv3
+		;;
+	sparc-* | *-sun)
+		os=-sunos4.1.1
+		;;
+	*-be)
+		os=-beos
+		;;
+	*-ibm)
+		os=-aix
+		;;
+	*-wec)
+		os=-proelf
+		;;
+	*-winbond)
+		os=-proelf
+		;;
+	*-oki)
+		os=-proelf
+		;;
+	*-hp)
+		os=-hpux
+		;;
+	*-hitachi)
+		os=-hiux
+		;;
+	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+		os=-sysv
+		;;
+	*-cbm)
+		os=-amigaos
+		;;
+	*-dg)
+		os=-dgux
+		;;
+	*-dolphin)
+		os=-sysv3
+		;;
+	m68k-ccur)
+		os=-rtu
+		;;
+	m88k-omron*)
+		os=-luna
+		;;
+	*-next )
+		os=-nextstep
+		;;
+	*-sequent)
+		os=-ptx
+		;;
+	*-crds)
+		os=-unos
+		;;
+	*-ns)
+		os=-genix
+		;;
+	i370-*)
+		os=-mvs
+		;;
+	*-next)
+		os=-nextstep3
+		;;
+	*-gould)
+		os=-sysv
+		;;
+	*-highlevel)
+		os=-bsd
+		;;
+	*-encore)
+		os=-bsd
+		;;
+	*-sgi)
+		os=-irix
+		;;
+	*-siemens)
+		os=-sysv4
+		;;
+	*-masscomp)
+		os=-rtu
+		;;
+	f30[01]-fujitsu | f700-fujitsu)
+		os=-uxpv
+		;;
+	*-rom68k)
+		os=-coff
+		;;
+	*-*bug)
+		os=-coff
+		;;
+	*-apple)
+		os=-macos
+		;;
+	*-atari*)
+		os=-mint
+		;;
+	*)
+		os=-none
+		;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+	*-unknown)
+		case $os in
+			-riscix*)
+				vendor=acorn
+				;;
+			-sunos*)
+				vendor=sun
+				;;
+			-aix*)
+				vendor=ibm
+				;;
+			-beos*)
+				vendor=be
+				;;
+			-hpux*)
+				vendor=hp
+				;;
+			-mpeix*)
+				vendor=hp
+				;;
+			-hiux*)
+				vendor=hitachi
+				;;
+			-unos*)
+				vendor=crds
+				;;
+			-dgux*)
+				vendor=dg
+				;;
+			-luna*)
+				vendor=omron
+				;;
+			-genix*)
+				vendor=ns
+				;;
+			-mvs* | -opened*)
+				vendor=ibm
+				;;
+			-os400*)
+				vendor=ibm
+				;;
+			-ptx*)
+				vendor=sequent
+				;;
+			-tpf*)
+				vendor=ibm
+				;;
+			-vxsim* | -vxworks* | -windiss*)
+				vendor=wrs
+				;;
+			-aux*)
+				vendor=apple
+				;;
+			-hms*)
+				vendor=hitachi
+				;;
+			-mpw* | -macos*)
+				vendor=apple
+				;;
+			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+				vendor=atari
+				;;
+			-vos*)
+				vendor=stratus
+				;;
+		esac
+		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+		;;
+esac
+
+echo $basic_machine$os
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
Index: /orxonox/branches/levelloader/configure
===================================================================
--- /orxonox/branches/levelloader/configure	(revision 3417)
+++ /orxonox/branches/levelloader/configure	(revision 3417)
@@ -0,0 +1,9043 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.59 for orxonox 0.2.1-pre-alpha.
+#
+# Report bugs to <orxonox-dev at mail.datacore.ch>.
+#
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)$' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\/\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+  # Find who we are.  Look in the path if we contain no path at all
+  # relative or not.
+  case $0 in
+    *[\\/]* ) as_myself=$0 ;;
+    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+       ;;
+  esac
+  # We did not find ourselves, most probably we were run as `sh COMMAND'
+  # in which case we are not to be found in the path.
+  if test "x$as_myself" = x; then
+    as_myself=$0
+  fi
+  if test ! -f "$as_myself"; then
+    { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
+   { (exit 1); exit 1; }; }
+  fi
+  case $CONFIG_SHELL in
+  '')
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for as_base in sh bash ksh sh5; do
+	 case $as_dir in
+	 /*)
+	   if ("$as_dir/$as_base" -c '
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+	     CONFIG_SHELL=$as_dir/$as_base
+	     export CONFIG_SHELL
+	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+	   fi;;
+	 esac
+       done
+done
+;;
+  esac
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line before each line; the second 'sed' does the real
+  # work.  The second script uses 'N' to pair each line-number line
+  # with the numbered line, and appends trailing '-' during
+  # substitution so that $LINENO is not a special case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+  sed '=' <$as_myself |
+    sed '
+      N
+      s,$,-,
+      : loop
+      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      t loop
+      s,-$,,
+      s,^['$as_cr_digits']*\n,,
+    ' >$as_me.lineno &&
+  chmod +x $as_me.lineno ||
+    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensible to this).
+  . ./$as_me.lineno
+  # Exit status is that of the last command.
+  exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='	' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" 	$as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+exec 6>&1
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_config_libobj_dir=.
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete.  It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
+# Identity of this package.
+PACKAGE_NAME='orxonox'
+PACKAGE_TARNAME='orxonox'
+PACKAGE_VERSION='0.2.1-pre-alpha'
+PACKAGE_STRING='orxonox 0.2.1-pre-alpha'
+PACKAGE_BUGREPORT='orxonox-dev at mail.datacore.ch'
+
+ac_unique_file="."
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+#  include <stdint.h>
+# endif
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CC CFLAGS ac_ct_CC CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP EGREP DEBUG SUB_PROJECTS_TRUE SUB_PROJECTS_FALSE DOXYGEN DOXYGEN_TRUE DOXYGEN_FALSE MSBITFIELDS GTK2_LIBS GTK2_CFLAGS HAVE_GTK2_TRUE HAVE_GTK2_FALSE LIBOBJS LTLIBOBJS'
+ac_subst_files=''
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+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'
+
+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
+
+  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+
+  # 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_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$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 ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+  | --da=*)
+    datadir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    eval "enable_$ac_feature=no" ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    case $ac_option in
+      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+      *) 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 | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$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 | -n)
+    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_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    case $ac_option in
+      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "with_$ac_package='$ac_optarg'" ;;
+
+  -without-* | --without-*)
+    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    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 "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; }
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+   { (exit 1); exit 1; }; }
+    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+    eval "$ac_envvar='$ac_optarg'"
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  { echo "$as_me: error: missing argument to $ac_option" >&2
+   { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute paths.
+for ac_var in exec_prefix prefix
+do
+  eval ac_val=$`echo $ac_var`
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+	      localstatedir libdir includedir oldincludedir infodir mandir
+do
+  eval ac_val=$`echo $ac_var`
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* ) ;;
+    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used." >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+# 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_confdir=`(dirname "$0") 2>/dev/null ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$0" : 'X\(//\)[^/]' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$0" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  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 "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
+   { (exit 1); exit 1; }; }
+  else
+    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+   { (exit 1); exit 1; }; }
+  fi
+fi
+(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
+  { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
+   { (exit 1); exit 1; }; }
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+ac_env_CXX_set=${CXX+set}
+ac_env_CXX_value=$CXX
+ac_cv_env_CXX_set=${CXX+set}
+ac_cv_env_CXX_value=$CXX
+ac_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_env_CXXFLAGS_value=$CXXFLAGS
+ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_cv_env_CXXFLAGS_value=$CXXFLAGS
+ac_env_LDFLAGS_set=${LDFLAGS+set}
+ac_env_LDFLAGS_value=$LDFLAGS
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ac_cv_env_LDFLAGS_value=$LDFLAGS
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_env_CPPFLAGS_value=$CPPFLAGS
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ac_env_CC_set=${CC+set}
+ac_env_CC_value=$CC
+ac_cv_env_CC_set=${CC+set}
+ac_cv_env_CC_value=$CC
+ac_env_CFLAGS_set=${CFLAGS+set}
+ac_env_CFLAGS_value=$CFLAGS
+ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ac_cv_env_CFLAGS_value=$CFLAGS
+ac_env_CPP_set=${CPP+set}
+ac_env_CPP_value=$CPP
+ac_cv_env_CPP_set=${CPP+set}
+ac_cv_env_CPP_value=$CPP
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # 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 <<_ACEOF
+\`configure' configures orxonox 0.2.1-pre-alpha to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+_ACEOF
+
+  cat <<_ACEOF
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+			  [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+			  [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR           user executables [EPREFIX/bin]
+  --sbindir=DIR          system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR       program executables [EPREFIX/libexec]
+  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
+  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
+  --libdir=DIR           object code libraries [EPREFIX/lib]
+  --includedir=DIR       C header files [PREFIX/include]
+  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
+  --infodir=DIR          info documentation [PREFIX/info]
+  --mandir=DIR           man documentation [PREFIX/man]
+_ACEOF
+
+  cat <<\_ACEOF
+
+Program names:
+  --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
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+  --target=TARGET   configure for building compilers for TARGET [HOST]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of orxonox 0.2.1-pre-alpha:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors
+  --enable-debug          compiles in debug mode. Lots of debug info about the
+                          game.
+  --enable-sub-projects   also builds the subProjects by default
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --without-gtk           Prevents GTK from being loaded
+  --without-sdl-image     Prevents SDL_image from being loaded
+
+Some influential environment variables:
+  CXX         C++ compiler command
+  CXXFLAGS    C++ compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
+              headers in a nonstandard directory <include dir>
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  CPP         C preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <orxonox-dev at mail.datacore.ch>.
+_ACEOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  ac_popdir=`pwd`
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d $ac_dir || continue
+    ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+    cd $ac_dir
+    # Check for guested configure; otherwise get Cygnus style configure.
+    if test -f $ac_srcdir/configure.gnu; then
+      echo
+      $SHELL $ac_srcdir/configure.gnu  --help=recursive
+    elif test -f $ac_srcdir/configure; then
+      echo
+      $SHELL $ac_srcdir/configure  --help=recursive
+    elif test -f $ac_srcdir/configure.ac ||
+	   test -f $ac_srcdir/configure.in; then
+      echo
+      $ac_configure --help
+    else
+      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi
+    cd $ac_popdir
+  done
+fi
+
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+  cat <<\_ACEOF
+orxonox configure 0.2.1-pre-alpha
+generated by GNU Autoconf 2.59
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit 0
+fi
+exec 5>config.log
+cat >&5 <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by orxonox $as_me 0.2.1-pre-alpha, which was
+generated by GNU Autoconf 2.59.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  echo "PATH: $as_dir"
+done
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_sep=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    2)
+      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+	ac_must_keep_next=false # Got value, back to normal.
+      else
+	case $ac_arg in
+	  *=* | --config-cache | -C | -disable-* | --disable-* \
+	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+	  | -with-* | --with-* | -without-* | --without-* | --x)
+	    case "$ac_configure_args0 " in
+	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+	    esac
+	    ;;
+	  -* ) ac_must_keep_next=true ;;
+	esac
+      fi
+      ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+      # Get rid of the leading space.
+      ac_sep=" "
+      ;;
+    esac
+  done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Be sure not to use single quotes in there, as some shells,
+# such as our DU 5.0 friend, will then `close' the trap.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+{
+  (set) 2>&1 |
+    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      sed -n \
+	"s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+      ;;
+    *)
+      sed -n \
+	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+}
+    echo
+
+    cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=$`echo $ac_var`
+      echo "$ac_var='"'"'$ac_val'"'"'"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      cat <<\_ASBOX
+## ------------- ##
+## Output files. ##
+## ------------- ##
+_ASBOX
+      echo
+      for ac_var in $ac_subst_files
+      do
+	eval ac_val=$`echo $ac_var`
+	echo "$ac_var='"'"'$ac_val'"'"'"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+      echo
+      sed "/^$/d" confdefs.h | sort
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      echo "$as_me: caught signal $ac_signal"
+    echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core &&
+  rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+     ' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# 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
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# 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 "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special
+  # files actually), so we avoid doing that.
+  if test -f "$cache_file"; then
+    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . $cache_file;;
+      *)                      . ./$cache_file;;
+    esac
+  fi
+else
+  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in `(set) 2>&1 |
+	       sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+  eval ac_new_val="\$ac_env_${ac_var}_value"
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+	{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	{ echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
+echo "$as_me:   former value:  $ac_old_val" >&2;}
+	{ echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
+echo "$as_me:   current value: $ac_new_val" >&2;}
+	ac_cache_corrupted=:
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Detect the canonical host and target build environment.
+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
+  elif test -f $ac_dir/shtool; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
+echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
+
+# Make sure we can run config.sub.
+$ac_config_sub sun4 >/dev/null 2>&1 ||
+  { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
+echo "$as_me: error: cannot run $ac_config_sub" >&2;}
+   { (exit 1); exit 1; }; }
+
+echo "$as_me:$LINENO: checking build system type" >&5
+echo $ECHO_N "checking build system type... $ECHO_C" >&6
+if test "${ac_cv_build+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_build_alias=$build_alias
+test -z "$ac_cv_build_alias" &&
+  ac_cv_build_alias=`$ac_config_guess`
+test -z "$ac_cv_build_alias" &&
+  { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+   { (exit 1); exit 1; }; }
+ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
+  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+echo "${ECHO_T}$ac_cv_build" >&6
+build=$ac_cv_build
+build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+echo "$as_me:$LINENO: checking host system type" >&5
+echo $ECHO_N "checking host system type... $ECHO_C" >&6
+if test "${ac_cv_host+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_host_alias=$host_alias
+test -z "$ac_cv_host_alias" &&
+  ac_cv_host_alias=$ac_cv_build_alias
+ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
+  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6
+host=$ac_cv_host
+host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+echo "$as_me:$LINENO: checking target system type" >&5
+echo $ECHO_N "checking target system type... $ECHO_C" >&6
+if test "${ac_cv_target+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_target_alias=$target_alias
+test "x$ac_cv_target_alias" = "x" &&
+  ac_cv_target_alias=$ac_cv_host_alias
+ac_cv_target=`$ac_config_sub $ac_cv_target_alias` ||
+  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_target_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_target" >&5
+echo "${ECHO_T}$ac_cv_target" >&6
+target=$ac_cv_target
+target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+test -n "$target_alias" &&
+  test "$program_prefix$program_suffix$program_transform_name" = \
+    NONENONEs,x,x, &&
+  program_prefix=${target_alias}-
+
+
+am__api_version="1.8"
+# 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
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# 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"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+  ./ | .// | /cC/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+  /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
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	    break 3
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+done
+
+
+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 "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&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}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# 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 conftest.file 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$*" != "X $srcdir/configure conftest.file" \
+      && test "$*" != "X conftest.file $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 "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&5
+echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&2;}
+   { (exit 1); exit 1; }; }
+   fi
+
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+Check your system clock" >&5
+echo "$as_me: error: newly created file is older than distributed files!
+Check your system clock" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+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"
+# Double any \ or $.  echo might interpret backslashes.
+# By default was `s,x,x', remove it if useless.
+cat <<\_ACEOF >conftest.sed
+s/[\\$]/&&/g;s/;s,x,x,$//
+_ACEOF
+program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
+rm conftest.sed
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
+echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+  # Keeping the `.' argument allows $(mkdir_p) to be used without
+  # argument.  Indeed, we sometimes output rules like
+  #   $(mkdir_p) $(somedir)
+  # where $(somedir) is conditionally defined.
+  # (`test -n '$(somedir)' && $(mkdir_p) $(somedir)' is a more
+  # expensive solution, as it forces Make to start a sub-shell.)
+  mkdir_p='mkdir -p -- .'
+else
+  # On NextStep and OpenStep, the `mkdir' command does not
+  # recognize any option.  It will interpret all options as
+  # directories to create, and then abort because `.' already
+  # exists.
+  for d in ./-p ./--version;
+  do
+    test -d $d && rmdir $d
+  done
+  # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+  if test -f "$ac_aux_dir/mkinstalldirs"; then
+    mkdir_p='$(mkinstalldirs)'
+  else
+    mkdir_p='$(install_sh) -d'
+  fi
+fi
+
+for ac_prog in gawk mawk 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 "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AWK+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AWK="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  echo "$as_me:$LINENO: result: $AWK" >&5
+echo "${ECHO_T}$AWK" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$AWK" && break
+done
+
+echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.make <<\_ACEOF
+all:
+	@echo 'ac_maketemp="$(MAKE)"'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftest.make 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 conftest.make
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+  SET_MAKE=
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+# test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+   test -f $srcdir/config.status; then
+  { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='orxonox'
+ VERSION='0.2.1-pre-alpha'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  STRIP=$ac_ct_STRIP
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+
+
+
+
+
+          ac_config_headers="$ac_config_headers config.h"
+
+
+
+# Checks for programs.
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+  echo "$as_me:$LINENO: result: $CXX" >&5
+echo "${ECHO_T}$CXX" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+    test -n "$CXX" && break
+  done
+fi
+if test -z "$CXX"; then
+  ac_ct_CXX=$CXX
+  for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+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 "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CXX"; then
+  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CXX="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
+echo "${ECHO_T}$ac_ct_CXX" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$ac_ct_CXX" && break
+done
+test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
+
+  CXX=$ac_ct_CXX
+fi
+
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+     "checking for C++ compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+echo "$as_me:$LINENO: checking for C++ compiler default output file name" >&5
+echo $ECHO_N "checking for C++ compiler default output file name... $ECHO_C" >&6
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
+  (eval $ac_link_default) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Find the output, starting from the most likely.  This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+
+# Be careful to initialize this variable, since it used to be cached.
+# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+ac_cv_exeext=
+# b.out is created by i960 compilers.
+for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
+	;;
+    conftest.$ac_ext )
+	# This is the source file.
+	;;
+    [ab].out )
+	# We found the default executable, but exeext='' is most
+	# certainly right.
+	break;;
+    *.* )
+	ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	# FIXME: I believe we export ac_cv_exeext for Libtool,
+	# but it would be cool to find out if it's true.  Does anybody
+	# maintain Libtool? --akim.
+	export ac_cv_exeext
+	break;;
+    * )
+	break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: C++ compiler cannot create executables
+See \`config.log' for more details." >&5
+echo "$as_me: error: C++ compiler cannot create executables
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
+
+# Check the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether the C++ compiler works" >&5
+echo $ECHO_N "checking whether the C++ compiler works... $ECHO_C" >&6
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+  if { ac_try='./$ac_file'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { echo "$as_me:$LINENO: error: cannot run C++ compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run C++ compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+  fi
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	  export ac_cv_exeext
+	  break;;
+    * ) break;;
+  esac
+done
+else
+  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+if test "${ac_cv_objext+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
+GXX=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+CXXFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
+echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cxx_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cxx_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cxx_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cxx_g" >&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
+for ac_declaration in \
+   '' \
+   'extern "C" void std::exit (int) throw (); using std::exit;' \
+   'extern "C" void std::exit (int); using std::exit;' \
+   'extern "C" void exit (int) throw ();' \
+   'extern "C" void exit (int);' \
+   'void exit (int);'
+do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+  echo '#ifdef __cplusplus' >>confdefs.h
+  echo $ac_declaration      >>confdefs.h
+  echo '#endif'             >>confdefs.h
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+DEPDIR="${am__leading_dot}deps"
+
+          ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
+echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+   am__include=include
+   am__quote=
+   _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+      am__include=.include
+      am__quote="\""
+      _am_result=BSD
+   fi
+fi
+
+
+echo "$as_me:$LINENO: result: $_am_result" >&5
+echo "${ECHO_T}$_am_result" >&6
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then
+  enableval="$enable_dependency_tracking"
+
+fi;
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+
+
+if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
+else
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
+fi
+
+
+
+
+depcc="$CXX"  am_compiler_list=
+
+echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
+if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CXX_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CXX_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+
+
+if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+  am__fastdepCXX_TRUE=
+  am__fastdepCXX_FALSE='#'
+else
+  am__fastdepCXX_TRUE='#'
+  am__fastdepCXX_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+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 "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+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 $# != 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
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in 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 "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$ac_ct_CC" && break
+done
+
+  CC=$ac_ct_CC
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+     "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cc_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&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 "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_prog_cc_stdc=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std1 is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std1.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX			-qlanglvl=ansi
+# Ultrix and OSF/1	-std1
+# HP-UX 10.20 and later	-Ae
+# HP-UX older versions	-Aa -D_HPUX_SOURCE
+# SVR4			-Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+  x|xno)
+    echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+  *)
+    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+    CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+# Some people use a C++ compiler to compile C.  Since we use `exit',
+# in C++ we need to declare it.  In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+  choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  for ac_declaration in \
+   '' \
+   'extern "C" void std::exit (int) throw (); using std::exit;' \
+   'extern "C" void std::exit (int); using std::exit;' \
+   'extern "C" void exit (int) throw ();' \
+   'extern "C" void exit (int);' \
+   'void exit (int);'
+do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+  echo '#ifdef __cplusplus' >>confdefs.h
+  echo $ac_declaration      >>confdefs.h
+  echo '#endif'             >>confdefs.h
+fi
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CC"   am_compiler_list=
+
+echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+
+
+if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6
+if test "${ac_cv_prog_egrep+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+    then ac_cv_prog_egrep='grep -E'
+    else ac_cv_prog_egrep='egrep'
+    fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
+echo "${ECHO_T}$ac_cv_prog_egrep" >&6
+ EGREP=$ac_cv_prog_egrep
+
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_header_stdc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  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 <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  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 <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#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);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+
+### CHECKING  OPTIONAT ARGUMENTS
+## DEBUG-statement
+DEBUG=no
+echo "$as_me:$LINENO: checking if DEBUG-mode should be enabled" >&5
+echo $ECHO_N "checking if DEBUG-mode should be enabled... $ECHO_C" >&6
+# Check whether --enable-debug or --disable-debug was given.
+if test "${enable_debug+set}" = set; then
+  enableval="$enable_debug"
+  DEBUG=$enableval
+fi;
+
+if test "$DEBUG" = "no"; then
+	echo "no"
+	echo " -> Setting debuglevel to 1. Like this you can still see errors."
+	DEBUG=1
+elif test "$DEBUG" = yes; then
+	echo "yes"
+	echo " -> Setting debuglevel to 3. HARD DEBUG MODE!!."
+	DEBUG=3
+else
+	echo "yes set to $DEBUG"
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define DEBUG $DEBUG
+_ACEOF
+
+
+
+
+## GTK-disabled
+echo "$as_me:$LINENO: checking if gtk should be enabled" >&5
+echo $ECHO_N "checking if gtk should be enabled... $ECHO_C" >&6
+
+# Check whether --with-gtk or --without-gtk was given.
+if test "${with_gtk+set}" = set; then
+  withval="$with_gtk"
+  def_gtk=no
+else
+  def_gtk=yes
+fi;
+if test "$def_gtk" = yes; then
+  echo "yes"
+fi
+if test "$def_gtk" = no; then
+  echo "no"
+fi
+### SDL_image-disable
+def_sdl_image=yes
+echo "$as_me:$LINENO: checking if SDL_image should be enabled" >&5
+echo $ECHO_N "checking if SDL_image should be enabled... $ECHO_C" >&6
+
+# Check whether --with-sdl_image or --without-sdl_image was given.
+if test "${with_sdl_image+set}" = set; then
+  withval="$with_sdl_image"
+  def_sdl_image=no
+fi;
+if test "$def_sdl_image" = yes; then
+  echo "yes"
+fi
+if test "$def_sdl_image" = no; then
+  echo "no"
+fi
+
+
+### SubProject-enable
+def_sdl_image=yes
+echo "$as_me:$LINENO: checking if the SubProjects should be built" >&5
+echo $ECHO_N "checking if the SubProjects should be built... $ECHO_C" >&6
+# Check whether --enable-sub-projects or --disable-sub-projects was given.
+if test "${enable_sub_projects+set}" = set; then
+  enableval="$enable_sub_projects"
+  def_sub_projects=yes
+fi;
+if test "$def_sub_projects" = yes; then
+  echo "yes"
+fi
+if test "$def_sub_projects" = no; then
+  echo "no"
+fi
+
+
+if test x$def_sub_projects = xyes; then
+  SUB_PROJECTS_TRUE=
+  SUB_PROJECTS_FALSE='#'
+else
+  SUB_PROJECTS_TRUE='#'
+  SUB_PROJECTS_FALSE=
+fi
+
+
+## PROGRAMM CHECKING
+# checking for Doxygen
+# Extract the first word of "doxygen", so it can be a program name with args.
+set dummy doxygen; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_DOXYGEN+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $DOXYGEN in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_DOXYGEN="$DOXYGEN" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_DOXYGEN="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  ;;
+esac
+fi
+DOXYGEN=$ac_cv_path_DOXYGEN
+
+if test -n "$DOXYGEN"; then
+  echo "$as_me:$LINENO: result: $DOXYGEN" >&5
+echo "${ECHO_T}$DOXYGEN" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
+
+if test $DOXYGEN; then
+  DOXYGEN_TRUE=
+  DOXYGEN_FALSE='#'
+else
+  DOXYGEN_TRUE='#'
+  DOXYGEN_FALSE=
+fi
+
+
+### CHECKING FOR SYSTEM ###
+
+echo "$as_me:$LINENO: checking for System" >&5
+echo $ECHO_N "checking for System... $ECHO_C" >&6
+## checking for openGL-environment and other sys-specific parameters
+case "$target" in
+### WINDOWS ###
+  *-*-mingw32*)
+echo "mingw-WINDOWS detected"
+
+    mingw="yes"
+    MSBITFIELDS="-mms-bitfields"
+    MWINDOWS="-mwindows"
+
+# checking gl header
+	#done before loop
+
+# checking gl header
+   # On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+		  inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+for ac_header in GL/gl.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ---------------------------------------------- ##
+## Report this to orxonox-dev at mail.datacore.ch ##
+## ---------------------------------------------- ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  { { echo "$as_me:$LINENO: error: cannot find opengl headers" >&5
+echo "$as_me: error: cannot find opengl headers" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+done
+
+#   checking for Windows openGl library
+    echo "$as_me:$LINENO: checking for main in -lopengl32" >&5
+echo $ECHO_N "checking for main in -lopengl32... $ECHO_C" >&6
+if test "${ac_cv_lib_opengl32_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lopengl32  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_opengl32_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_opengl32_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_opengl32_main" >&5
+echo "${ECHO_T}$ac_cv_lib_opengl32_main" >&6
+if test $ac_cv_lib_opengl32_main = yes; then
+  FOUND_opengl32=yes
+else
+  "gl/gl.h"
+fi
+
+    if test "$FOUND_opengl32" = "yes" ; then
+	LIBS="$LIBS -lopengl32"
+    else
+	 echo "------------------"
+	 echo "opengl not found."
+	 echo "please install the opengl package which can be found at http://www.opengl.org"
+	 echo "------------------"
+	 exit -1
+    fi
+
+# cheking for GLU-header
+
+for ac_header in GL/glu.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ---------------------------------------------- ##
+## Report this to orxonox-dev at mail.datacore.ch ##
+## ---------------------------------------------- ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  { { echo "$as_me:$LINENO: error: cannot find opengl headers" >&5
+echo "$as_me: error: cannot find opengl headers" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+done
+
+
+# checking for libGLU
+    echo "$as_me:$LINENO: checking for main in -lglu32" >&5
+echo $ECHO_N "checking for main in -lglu32... $ECHO_C" >&6
+if test "${ac_cv_lib_glu32_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lglu32  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_glu32_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_glu32_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_glu32_main" >&5
+echo "${ECHO_T}$ac_cv_lib_glu32_main" >&6
+if test $ac_cv_lib_glu32_main = yes; then
+  FOUND_glu32=yes
+fi
+
+    if test "$FOUND_glu32" = "yes" ; then
+	LIBS="$LIBS -lGLU32"
+    else
+	 echo "------------------"
+	 echo "GLU library not found."
+	 echo "please install the GLU library, that should come with openGL, which can be found at http://www.opengl.org"
+	 echo "------------------"
+	 exit -1
+    fi
+
+# checking for mingw32
+    echo "$as_me:$LINENO: checking for main in -lmingw32" >&5
+echo $ECHO_N "checking for main in -lmingw32... $ECHO_C" >&6
+if test "${ac_cv_lib_mingw32_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmingw32  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_mingw32_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_mingw32_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_mingw32_main" >&5
+echo "${ECHO_T}$ac_cv_lib_mingw32_main" >&6
+if test $ac_cv_lib_mingw32_main = yes; then
+  FOUND_mingw32=yes
+fi
+
+    if test $FOUND_mingw32 = "yes"; then
+	LIBS="$LIBS -lmingw32"
+    fi
+# checking for SDL-headers
+
+for ac_header in SDL/SDL.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ---------------------------------------------- ##
+## Report this to orxonox-dev at mail.datacore.ch ##
+## ---------------------------------------------- ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  { { echo "$as_me:$LINENO: error: cannot find SDL headers" >&5
+echo "$as_me: error: cannot find SDL headers" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+done
+
+
+#checking for libSDL
+    echo "$as_me:$LINENO: checking for main in -lsdlmain" >&5
+echo $ECHO_N "checking for main in -lsdlmain... $ECHO_C" >&6
+if test "${ac_cv_lib_sdlmain_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsdlmain  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_sdlmain_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_sdlmain_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_sdlmain_main" >&5
+echo "${ECHO_T}$ac_cv_lib_sdlmain_main" >&6
+if test $ac_cv_lib_sdlmain_main = yes; then
+  FOUND_sdlmain=yes
+fi
+
+    if test "$FOUND_sdlmain" = "yes" ; then
+       LIBS="$LIBS -lsdlmain"
+    else
+        echo "------------------"
+        echo "SDL library not found."
+        echo "please install the SDL library, which can be found at http://www.libsdl.org"
+        echo "------------------"
+        exit 1
+    fi
+    echo "$as_me:$LINENO: checking for main in -lsdl" >&5
+echo $ECHO_N "checking for main in -lsdl... $ECHO_C" >&6
+if test "${ac_cv_lib_sdl_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsdl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_sdl_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_sdl_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_sdl_main" >&5
+echo "${ECHO_T}$ac_cv_lib_sdl_main" >&6
+if test $ac_cv_lib_sdl_main = yes; then
+  FOUND_sdl=yes
+fi
+
+    if test "$FOUND_sdl" = "yes" ; then
+       LIBS="$LIBS -lsdl"
+    else
+        echo "------------------"
+        echo "SDL library not found."
+        echo "please install the SDL library, which can be found at http://www.libsdl.org"
+        echo "------------------"
+        exit -1
+    fi
+
+    ;;
+
+### LINUX ###
+ *-*-linux*)
+echo "Linux detected"
+
+ Linux="yes"
+
+CPPFLAGS="-I/usr/X11R6/include"
+LDFLAGS="-L/usr/lib/opengl/xorg-x11/lib -L/usr/Mesa-6.0.1/lib -L/usr/X11R6/lib $LDFLAGS"
+# checking gl header
+
+for ac_header in GL/gl.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ---------------------------------------------- ##
+## Report this to orxonox-dev at mail.datacore.ch ##
+## ---------------------------------------------- ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  { { echo "$as_me:$LINENO: error: cannot find opengl headers" >&5
+echo "$as_me: error: cannot find opengl headers" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+done
+
+
+#  checking for Unix GL
+   echo "$as_me:$LINENO: checking for glLoadIdentity in -lGL" >&5
+echo $ECHO_N "checking for glLoadIdentity in -lGL... $ECHO_C" >&6
+if test "${ac_cv_lib_GL_glLoadIdentity+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lGL  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char glLoadIdentity ();
+int
+main ()
+{
+glLoadIdentity ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_GL_glLoadIdentity=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_GL_glLoadIdentity=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_GL_glLoadIdentity" >&5
+echo "${ECHO_T}$ac_cv_lib_GL_glLoadIdentity" >&6
+if test $ac_cv_lib_GL_glLoadIdentity = yes; then
+  FOUND_GL=yes
+fi
+
+   if test "$FOUND_GL" = "yes" ; then
+     LIBS="$LIBS -lGL"
+   else
+	 echo "------------------"
+	 echo "opengl not found."
+	 echo "please install the opengl package which can be found at http://www.opengl.org"
+	 echo "------------------"
+	 exit -1
+   fi
+
+# cheking for GLU-header
+
+for ac_header in GL/glu.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ---------------------------------------------- ##
+## Report this to orxonox-dev at mail.datacore.ch ##
+## ---------------------------------------------- ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  { { echo "$as_me:$LINENO: error: cannot find opengl headers" >&5
+echo "$as_me: error: cannot find opengl headers" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+done
+
+
+    echo "$as_me:$LINENO: checking for gluProject in -lGLU" >&5
+echo $ECHO_N "checking for gluProject in -lGLU... $ECHO_C" >&6
+if test "${ac_cv_lib_GLU_gluProject+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lGLU  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char gluProject ();
+int
+main ()
+{
+gluProject ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_GLU_gluProject=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_GLU_gluProject=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_GLU_gluProject" >&5
+echo "${ECHO_T}$ac_cv_lib_GLU_gluProject" >&6
+if test $ac_cv_lib_GLU_gluProject = yes; then
+  FOUND_GLU=yes
+fi
+
+    if test "$FOUND_GLU" = "yes" ; then
+      LIBS="$LIBS -lGLU"
+    else
+	 echo "------------------"
+	 echo "GLU library not found."
+	 echo "please install the GLU library, that should come with openGL, which can be found at http://www.opengl.org"
+	 echo "------------------"
+	 exit -1
+    fi
+
+# checking for SDL-headers
+
+for ac_header in SDL/SDL.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ---------------------------------------------- ##
+## Report this to orxonox-dev at mail.datacore.ch ##
+## ---------------------------------------------- ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  { { echo "$as_me:$LINENO: error: cannot find SDL headers" >&5
+echo "$as_me: error: cannot find SDL headers" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+done
+
+
+# checking for SDL-lib
+    echo "$as_me:$LINENO: checking for main in -lSDL" >&5
+echo $ECHO_N "checking for main in -lSDL... $ECHO_C" >&6
+if test "${ac_cv_lib_SDL_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lSDL  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_SDL_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_SDL_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_SDL_main" >&5
+echo "${ECHO_T}$ac_cv_lib_SDL_main" >&6
+if test $ac_cv_lib_SDL_main = yes; then
+  FOUND_SDL=yes
+fi
+
+     if test "$FOUND_SDL" = "yes" ; then
+       LIBS="$LIBS -lSDL"
+     else
+        echo "------------------"
+        echo "SDL library not found."
+	echo "please install the SDL library, which can be found at http://www.libsdl.org"
+        echo "------------------"
+        exit -1
+     fi
+
+
+## checking for SDL
+#    SDL_VERSION=1.2.7
+#    AM_PATH_SDL($SDL_VERSION,
+#      :,
+#      AC_MSG_ERROR([*** SDL version $SDL_VERSION not found!])
+#      )
+#    CXXFLAGS="$CXXFLAGS $SDL_CFLAGS"
+#    LIBS="$LIBS $SDL_LIBS"
+    ;;
+
+### OS X ###
+ *darwin*)
+echo "OS X detected"
+
+ osX="yes"
+
+ CPPFLAGS="-I/sw/include $CPPFLAGS"
+# checking gl header
+
+for ac_header in OpenGL/gl.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ---------------------------------------------- ##
+## Report this to orxonox-dev at mail.datacore.ch ##
+## ---------------------------------------------- ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  { { echo "$as_me:$LINENO: error: cannot find opengl headers" >&5
+echo "$as_me: error: cannot find opengl headers" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+done
+
+# cheking for GLU-header
+
+for ac_header in OpenGL/glu.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ---------------------------------------------- ##
+## Report this to orxonox-dev at mail.datacore.ch ##
+## ---------------------------------------------- ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  { { echo "$as_me:$LINENO: error: cannot find opengl headers" >&5
+echo "$as_me: error: cannot find opengl headers" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+done
+
+
+   LIBS="$LIBS -framework OpenGL"
+
+# checking for SDL-headers
+#    AC_CHECK_HEADERS(SDL/SDL.h ,,
+#      [AC_MSG_ERROR([cannot find SDL headers]) ])
+
+## checking for SDL
+#    SDL_VERSION=1.2.7
+#    AM_PATH_SDL($SDL_VERSION,
+#      :,
+#      AC_MSG_ERROR([*** SDL version $SDL_VERSION not found!])
+#      )
+
+       SDL_CFLAGS=`sdl-config --cflags`
+       SDL_LIBS=`sdl-config --libs`
+       CXXFLAGS="$CXXFLAGS $SDL_CFLAGS"
+       LIBS="$LIBS $SDL_LIBS"
+
+    ;;
+
+  *)
+    ;;
+esac
+
+
+
+## check for SDL_Image
+if test "$def_sdl_image" = "yes"; then
+# checking for SDL_image-headers
+
+for ac_header in SDL/SDL_image.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ---------------------------------------------- ##
+## Report this to orxonox-dev at mail.datacore.ch ##
+## ---------------------------------------------- ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  echo "sdl_image not found. falling back to other options"; def_sdl_image=no
+fi
+
+done
+
+fi
+if test "$def_sdl_image" = "yes"; then
+# checking for SDL_image-lib
+  echo "$as_me:$LINENO: checking for main in -lSDL_image" >&5
+echo $ECHO_N "checking for main in -lSDL_image... $ECHO_C" >&6
+if test "${ac_cv_lib_SDL_image_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lSDL_image  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_SDL_image_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_SDL_image_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_SDL_image_main" >&5
+echo "${ECHO_T}$ac_cv_lib_SDL_image_main" >&6
+if test $ac_cv_lib_SDL_image_main = yes; then
+  FOUND_SDL_image=yes
+fi
+
+     if test "$FOUND_SDL_image" = "yes" ; then
+       LIBS="$LIBS -lSDL_image"
+     else
+        echo "------------------"
+        echo "SDL_image library not found."
+	echo "please install the SDL_image library, which can be found at http://www.libsdl.org/projects/SDL_image/"
+        echo "------------------"
+        exit -1
+     fi
+fi
+
+
+if test "$def_sdl_image" = "no"; then
+ ## checking for libjpeg
+
+for ac_header in jpeglib.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ---------------------------------------------- ##
+## Report this to orxonox-dev at mail.datacore.ch ##
+## ---------------------------------------------- ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ jpegHeader="yes"
+else
+  jpegHeader="no"
+fi
+
+done
+
+ if test $jpegHeader = "no"; then
+	echo " not including jpeg."
+ else
+  echo "$as_me:$LINENO: checking for main in -ljpeg" >&5
+echo $ECHO_N "checking for main in -ljpeg... $ECHO_C" >&6
+if test "${ac_cv_lib_jpeg_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ljpeg  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_jpeg_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_jpeg_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_jpeg_main" >&5
+echo "${ECHO_T}$ac_cv_lib_jpeg_main" >&6
+if test $ac_cv_lib_jpeg_main = yes; then
+  FOUND_jpeg=yes
+fi
+
+    if test "$FOUND_jpeg" = "yes" ; then
+      LIBS="$LIBS -ljpeg"
+    else
+	 echo "------------------"
+	 echo "jpeg library not found."
+	 echo "please install the jpeg library from the Independent JPEG Group, which can be found at http://www.ijg.org"
+	 echo "------------------"
+	 exit -1
+    fi
+ fi
+
+ ## checking for libpng
+
+for ac_header in png.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ---------------------------------------------- ##
+## Report this to orxonox-dev at mail.datacore.ch ##
+## ---------------------------------------------- ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ pngHeader="yes"
+else
+  pngHeader="no"
+fi
+
+done
+
+ if test $pngHeader = "no"; then
+	echo " not including png."
+ else
+  echo "$as_me:$LINENO: checking for main in -lpng" >&5
+echo $ECHO_N "checking for main in -lpng... $ECHO_C" >&6
+if test "${ac_cv_lib_png_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpng  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_png_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_png_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_png_main" >&5
+echo "${ECHO_T}$ac_cv_lib_png_main" >&6
+if test $ac_cv_lib_png_main = yes; then
+  FOUND_png=yes
+fi
+
+    if test "$FOUND_png" = "yes" ; then
+      LIBS="$LIBS -lpng"
+    else
+	 echo "------------------"
+	 echo "png library not found."
+	 echo "please install the png library, which can be found at http://libpng.org/pub/png/libpng.html"
+	 echo "------------------"
+	 exit -1
+    fi
+ fi
+fi
+
+## checking for GTK
+if test "$def_gtk" = yes; then
+
+	#PKG_CHECK_MODULES(GTK2, gtk+-2.0 >= 2.0.3 gthread-2.0 >= 2.0.3, have_gtk2=yes, have_gtk2=no)
+	echo "$as_me:$LINENO: checking for gtk2.0" >&5
+echo $ECHO_N "checking for gtk2.0... $ECHO_C" >&6
+	if `pkg-config --exists gtk+-2.0`; then
+  		echo "yes"
+  		have_gtk2=yes
+		GTK2_LIBS=`pkg-config --libs gtk+-2.0`
+		GTK2_CFLAGS=`pkg-config --cflags gtk+-2.0`
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_GTK2 1
+_ACEOF
+
+	else
+		echo "no"
+	fi
+
+fi
+
+
+
+
+if test x$have_gtk2 = xyes; then
+  HAVE_GTK2_TRUE=
+  HAVE_GTK2_FALSE='#'
+else
+  HAVE_GTK2_TRUE='#'
+  HAVE_GTK2_FALSE=
+fi
+
+
+
+
+#checking for pthread libs
+# AC_CHECK_LIB([pthread], [main], FOUND_pthread=yes)
+# if test "$FOUND_pthread" = "yes" ; then
+#    LIBS="$LIBS -lpthread"
+# fi
+
+
+# FIXME: Replace `main' with a function in `-lm':
+
+echo "$as_me:$LINENO: checking for main in -lm" >&5
+echo $ECHO_N "checking for main in -lm... $ECHO_C" >&6
+if test "${ac_cv_lib_m_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lm  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_m_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_m_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_m_main" >&5
+echo "${ECHO_T}$ac_cv_lib_m_main" >&6
+if test $ac_cv_lib_m_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBM 1
+_ACEOF
+
+  LIBS="-lm $LIBS"
+
+fi
+
+
+
+# Checks for header files.
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_header_stdc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  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 <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  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 <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#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);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+
+
+for ac_header in stdlib.h string.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ---------------------------------------------- ##
+## Report this to orxonox-dev at mail.datacore.ch ##
+## ---------------------------------------------- ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+# Checks for typedefs, structures, and compiler characteristics.
+echo "$as_me:$LINENO: checking for stdbool.h that conforms to C99" >&5
+echo $ECHO_N "checking for stdbool.h that conforms to C99... $ECHO_C" >&6
+if test "${ac_cv_header_stdbool_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <stdbool.h>
+#ifndef bool
+# error bool is not defined
+#endif
+#ifndef false
+# error false is not defined
+#endif
+#if false
+# error false is not 0
+#endif
+#ifndef true
+# error true is not defined
+#endif
+#if true != 1
+# error true is not 1
+#endif
+#ifndef __bool_true_false_are_defined
+# error __bool_true_false_are_defined is not defined
+#endif
+
+	struct s { _Bool s: 1; _Bool t; } s;
+
+	char a[true == 1 ? 1 : -1];
+	char b[false == 0 ? 1 : -1];
+	char c[__bool_true_false_are_defined == 1 ? 1 : -1];
+	char d[(bool) -0.5 == true ? 1 : -1];
+	bool e = &s;
+	char f[(_Bool) -0.0 == false ? 1 : -1];
+	char g[true];
+	char h[sizeof (_Bool)];
+	char i[sizeof s.t];
+
+int
+main ()
+{
+ return !a + !b + !c + !d + !e + !f + !g + !h + !i;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_header_stdbool_h=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdbool_h=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdbool_h" >&5
+echo "${ECHO_T}$ac_cv_header_stdbool_h" >&6
+echo "$as_me:$LINENO: checking for _Bool" >&5
+echo $ECHO_N "checking for _Bool... $ECHO_C" >&6
+if test "${ac_cv_type__Bool+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((_Bool *) 0)
+  return 0;
+if (sizeof (_Bool))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type__Bool=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type__Bool=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type__Bool" >&5
+echo "${ECHO_T}$ac_cv_type__Bool" >&6
+if test $ac_cv_type__Bool = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE__BOOL 1
+_ACEOF
+
+
+fi
+
+if test $ac_cv_header_stdbool_h = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_STDBOOL_H 1
+_ACEOF
+
+fi
+
+
+# Checks for library functions.
+
+for ac_header in stdlib.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ---------------------------------------------- ##
+## Report this to orxonox-dev at mail.datacore.ch ##
+## ---------------------------------------------- ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+echo "$as_me:$LINENO: checking for GNU libc compatible malloc" >&5
+echo $ECHO_N "checking for GNU libc compatible malloc... $ECHO_C" >&6
+if test "${ac_cv_func_malloc_0_nonnull+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$cross_compiling" = yes; then
+  ac_cv_func_malloc_0_nonnull=no
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#if STDC_HEADERS || HAVE_STDLIB_H
+# include <stdlib.h>
+#else
+char *malloc ();
+#endif
+
+int
+main ()
+{
+exit (malloc (0) ? 0 : 1);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_malloc_0_nonnull=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_func_malloc_0_nonnull=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_malloc_0_nonnull" >&5
+echo "${ECHO_T}$ac_cv_func_malloc_0_nonnull" >&6
+if test $ac_cv_func_malloc_0_nonnull = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MALLOC 1
+_ACEOF
+
+else
+  cat >>confdefs.h <<\_ACEOF
+#define HAVE_MALLOC 0
+_ACEOF
+
+   case $LIBOBJS in
+    "malloc.$ac_objext"   | \
+  *" malloc.$ac_objext"   | \
+    "malloc.$ac_objext "* | \
+  *" malloc.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS malloc.$ac_objext" ;;
+esac
+
+
+cat >>confdefs.h <<\_ACEOF
+#define malloc rpl_malloc
+_ACEOF
+
+fi
+
+
+
+
+
+for ac_func in bzero sqrt
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* 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 ();
+/* 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
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+                                                  ac_config_files="$ac_config_files Makefile src/Makefile src/importer/Makefile src/console/Makefile src/gui/Makefile"
+
+
+cat >confcache <<\_ACEOF
+# 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, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# 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 \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;;
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n \
+	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+} |
+  sed '
+     t clear
+     : clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     : end' >>confcache
+if diff $cache_file confcache >/dev/null 2>&1; then :; else
+  if test -w $cache_file; then
+    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+    cat confcache >$cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[	 ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[	 ]*$//;
+}'
+fi
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_i=`echo "$ac_i" |
+	 sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+  # 2. Add them.
+  ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
+  ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${SUB_PROJECTS_TRUE}" && test -z "${SUB_PROJECTS_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"SUB_PROJECTS\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"SUB_PROJECTS\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${DOXYGEN_TRUE}" && test -z "${DOXYGEN_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"DOXYGEN\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"DOXYGEN\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_GTK2_TRUE}" && test -z "${HAVE_GTK2_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"HAVE_GTK2\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"HAVE_GTK2\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)$' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\/\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+  # Find who we are.  Look in the path if we contain no path at all
+  # relative or not.
+  case $0 in
+    *[\\/]* ) as_myself=$0 ;;
+    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+       ;;
+  esac
+  # We did not find ourselves, most probably we were run as `sh COMMAND'
+  # in which case we are not to be found in the path.
+  if test "x$as_myself" = x; then
+    as_myself=$0
+  fi
+  if test ! -f "$as_myself"; then
+    { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+  case $CONFIG_SHELL in
+  '')
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for as_base in sh bash ksh sh5; do
+	 case $as_dir in
+	 /*)
+	   if ("$as_dir/$as_base" -c '
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+	     CONFIG_SHELL=$as_dir/$as_base
+	     export CONFIG_SHELL
+	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+	   fi;;
+	 esac
+       done
+done
+;;
+  esac
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line before each line; the second 'sed' does the real
+  # work.  The second script uses 'N' to pair each line-number line
+  # with the numbered line, and appends trailing '-' during
+  # substitution so that $LINENO is not a special case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+  sed '=' <$as_myself |
+    sed '
+      N
+      s,$,-,
+      : loop
+      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      t loop
+      s,-$,,
+      s,^['$as_cr_digits']*\n,,
+    ' >$as_me.lineno &&
+  chmod +x $as_me.lineno ||
+    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensible to this).
+  . ./$as_me.lineno
+  # Exit status is that of the last command.
+  exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='	' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" 	$as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+exec 6>&1
+
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.  Logging --version etc. is OK.
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+cat >&5 <<_CSEOF
+
+This file was extended by orxonox $as_me 0.2.1-pre-alpha, which was
+generated by GNU Autoconf 2.59.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+_CSEOF
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+echo >&5
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_headers"; then
+  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_links"; then
+  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_commands"; then
+  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number, then exit
+  -q, --quiet      do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+  --file=FILE[:TEMPLATE]
+		   instantiate the configuration file FILE
+  --header=FILE[:TEMPLATE]
+		   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf@gnu.org>."
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+orxonox config.status 0.2.1-pre-alpha
+configured by $0, generated by GNU Autoconf 2.59,
+  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+INSTALL="$INSTALL"
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value.  By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "x$1" : 'x\([^=]*\)='`
+    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  -*)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  *) # This is not an option, so the user has probably given explicit
+     # arguments.
+     ac_option=$1
+     ac_need_defaults=false;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --vers* | -V )
+    echo "$ac_cs_version"; exit 0 ;;
+  --he | --h)
+    # Conflict between --help and --header
+    { { echo "$as_me:$LINENO: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; };;
+  --help | --hel | -h )
+    echo "$ac_cs_usage"; exit 0 ;;
+  --debug | --d* | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+    ac_need_defaults=false;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; } ;;
+
+  *) ac_config_targets="$ac_config_targets $1" ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+  echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+  exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+#
+# INIT-COMMANDS section.
+#
+
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+_ACEOF
+
+
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_config_target in $ac_config_targets
+do
+  case "$ac_config_target" in
+  # Handling of arguments.
+  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+  "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+  "src/importer/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/importer/Makefile" ;;
+  "src/console/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/console/Makefile" ;;
+  "src/gui/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/gui/Makefile" ;;
+  "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+  "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason to put it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+  trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./confstat$$-$RANDOM
+  (umask 077 && mkdir $tmp)
+} ||
+{
+   echo "$me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+  # Protect against being on the right side of a sed subst in config.status.
+  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s,@SHELL@,$SHELL,;t t
+s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s,@exec_prefix@,$exec_prefix,;t t
+s,@prefix@,$prefix,;t t
+s,@program_transform_name@,$program_transform_name,;t t
+s,@bindir@,$bindir,;t t
+s,@sbindir@,$sbindir,;t t
+s,@libexecdir@,$libexecdir,;t t
+s,@datadir@,$datadir,;t t
+s,@sysconfdir@,$sysconfdir,;t t
+s,@sharedstatedir@,$sharedstatedir,;t t
+s,@localstatedir@,$localstatedir,;t t
+s,@libdir@,$libdir,;t t
+s,@includedir@,$includedir,;t t
+s,@oldincludedir@,$oldincludedir,;t t
+s,@infodir@,$infodir,;t t
+s,@mandir@,$mandir,;t t
+s,@build_alias@,$build_alias,;t t
+s,@host_alias@,$host_alias,;t t
+s,@target_alias@,$target_alias,;t t
+s,@DEFS@,$DEFS,;t t
+s,@ECHO_C@,$ECHO_C,;t t
+s,@ECHO_N@,$ECHO_N,;t t
+s,@ECHO_T@,$ECHO_T,;t t
+s,@LIBS@,$LIBS,;t t
+s,@build@,$build,;t t
+s,@build_cpu@,$build_cpu,;t t
+s,@build_vendor@,$build_vendor,;t t
+s,@build_os@,$build_os,;t t
+s,@host@,$host,;t t
+s,@host_cpu@,$host_cpu,;t t
+s,@host_vendor@,$host_vendor,;t t
+s,@host_os@,$host_os,;t t
+s,@target@,$target,;t t
+s,@target_cpu@,$target_cpu,;t t
+s,@target_vendor@,$target_vendor,;t t
+s,@target_os@,$target_os,;t t
+s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+s,@INSTALL_DATA@,$INSTALL_DATA,;t t
+s,@CYGPATH_W@,$CYGPATH_W,;t t
+s,@PACKAGE@,$PACKAGE,;t t
+s,@VERSION@,$VERSION,;t t
+s,@ACLOCAL@,$ACLOCAL,;t t
+s,@AUTOCONF@,$AUTOCONF,;t t
+s,@AUTOMAKE@,$AUTOMAKE,;t t
+s,@AUTOHEADER@,$AUTOHEADER,;t t
+s,@MAKEINFO@,$MAKEINFO,;t t
+s,@AMTAR@,$AMTAR,;t t
+s,@install_sh@,$install_sh,;t t
+s,@STRIP@,$STRIP,;t t
+s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t
+s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
+s,@mkdir_p@,$mkdir_p,;t t
+s,@AWK@,$AWK,;t t
+s,@SET_MAKE@,$SET_MAKE,;t t
+s,@am__leading_dot@,$am__leading_dot,;t t
+s,@CXX@,$CXX,;t t
+s,@CXXFLAGS@,$CXXFLAGS,;t t
+s,@LDFLAGS@,$LDFLAGS,;t t
+s,@CPPFLAGS@,$CPPFLAGS,;t t
+s,@ac_ct_CXX@,$ac_ct_CXX,;t t
+s,@EXEEXT@,$EXEEXT,;t t
+s,@OBJEXT@,$OBJEXT,;t t
+s,@DEPDIR@,$DEPDIR,;t t
+s,@am__include@,$am__include,;t t
+s,@am__quote@,$am__quote,;t t
+s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t
+s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t
+s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t
+s,@CXXDEPMODE@,$CXXDEPMODE,;t t
+s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t
+s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t
+s,@CC@,$CC,;t t
+s,@CFLAGS@,$CFLAGS,;t t
+s,@ac_ct_CC@,$ac_ct_CC,;t t
+s,@CCDEPMODE@,$CCDEPMODE,;t t
+s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t
+s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t
+s,@CPP@,$CPP,;t t
+s,@EGREP@,$EGREP,;t t
+s,@DEBUG@,$DEBUG,;t t
+s,@SUB_PROJECTS_TRUE@,$SUB_PROJECTS_TRUE,;t t
+s,@SUB_PROJECTS_FALSE@,$SUB_PROJECTS_FALSE,;t t
+s,@DOXYGEN@,$DOXYGEN,;t t
+s,@DOXYGEN_TRUE@,$DOXYGEN_TRUE,;t t
+s,@DOXYGEN_FALSE@,$DOXYGEN_FALSE,;t t
+s,@MSBITFIELDS@,$MSBITFIELDS,;t t
+s,@GTK2_LIBS@,$GTK2_LIBS,;t t
+s,@GTK2_CFLAGS@,$GTK2_CFLAGS,;t t
+s,@HAVE_GTK2_TRUE@,$HAVE_GTK2_TRUE,;t t
+s,@HAVE_GTK2_FALSE@,$HAVE_GTK2_FALSE,;t t
+s,@LIBOBJS@,$LIBOBJS,;t t
+s,@LTLIBOBJS@,$LTLIBOBJS,;t t
+CEOF
+
+_ACEOF
+
+  cat >>$CONFIG_STATUS <<\_ACEOF
+  # 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_lines=48
+  ac_sed_frag=1 # Number of current file.
+  ac_beg=1 # First line for current file.
+  ac_end=$ac_max_sed_lines # 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" $tmp/subs.sed >$tmp/subs.frag
+    else
+      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    fi
+    if test ! -s $tmp/subs.frag; then
+      ac_more_lines=false
+    else
+      # The purpose of the label and of the branching condition is to
+      # speed up the sed processing (if there are no `@' at all, there
+      # is no need to browse any of the substitutions).
+      # These are the two extra sed commands mentioned above.
+      (echo ':t
+  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+      if test -z "$ac_sed_cmds"; then
+	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+      else
+	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+      fi
+      ac_sed_frag=`expr $ac_sed_frag + 1`
+      ac_beg=$ac_end
+      ac_end=`expr $ac_end + $ac_max_sed_lines`
+    fi
+  done
+  if test -z "$ac_sed_cmds"; then
+    ac_sed_cmds=cat
+  fi
+fi # test -n "$CONFIG_FILES"
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+	cat >$tmp/stdin
+	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+  ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+  esac
+
+  if test x"$ac_file" != x-; then
+    { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    rm -f "$ac_file"
+  fi
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated by config.status.  */
+  if test x"$ac_file" = x-; then
+    configure_input=
+  else
+    configure_input="$ac_file.  "
+  fi
+  configure_input=$configure_input"Generated from `echo $ac_file_in |
+				     sed 's,.*/,,'` by configure."
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+	 # Absolute (can't be DOS-style, as IFS=:)
+	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 echo "$f";;
+      *) # Relative
+	 if test -f "$f"; then
+	   # Build tree
+	   echo "$f"
+	 elif test -f "$srcdir/$f"; then
+	   # Source tree
+	   echo "$srcdir/$f"
+	 else
+	   # /dev/null tree
+	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+  sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s,@configure_input@,$configure_input,;t t
+s,@srcdir@,$ac_srcdir,;t t
+s,@abs_srcdir@,$ac_abs_srcdir,;t t
+s,@top_srcdir@,$ac_top_srcdir,;t t
+s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+s,@builddir@,$ac_builddir,;t t
+s,@abs_builddir@,$ac_abs_builddir,;t t
+s,@top_builddir@,$ac_top_builddir,;t t
+s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
+s,@INSTALL@,$ac_INSTALL,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+  rm -f $tmp/stdin
+  if test x"$ac_file" != x-; then
+    mv $tmp/out $ac_file
+  else
+    cat $tmp/out
+    rm -f $tmp/out
+  fi
+
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_HEADER section.
+#
+
+# 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=' '
+ac_dD=',;t'
+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_uA='s,^\([	 ]*\)#\([	 ]*\)undef\([	 ][	 ]*\)'
+ac_uB='$,\1#\2define\3'
+ac_uC=' '
+ac_uD=',;t'
+
+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+	cat >$tmp/stdin
+	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+	 # Absolute (can't be DOS-style, as IFS=:)
+	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 # Do quote $f, to prevent DOS paths from being IFS'd.
+	 echo "$f";;
+      *) # Relative
+	 if test -f "$f"; then
+	   # Build tree
+	   echo "$f"
+	 elif test -f "$srcdir/$f"; then
+	   # Source tree
+	   echo "$srcdir/$f"
+	 else
+	   # /dev/null tree
+	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+  # Remove the trailing spaces.
+  sed 's/[	 ]*$//' $ac_file_inputs >$tmp/in
+
+_ACEOF
+
+# Transform confdefs.h into two sed scripts, `conftest.defines' and
+# `conftest.undefs', that substitutes the proper values into
+# config.h.in to produce config.h.  The first handles `#define'
+# templates, and the second `#undef' templates.
+# 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.defines conftest.undefs
+# Using a here document instead of a string reduces the quoting nightmare.
+# Putting comments in sed scripts is not portable.
+#
+# `end' is used to avoid that the second main sed command (meant for
+# 0-ary CPP macros) applies to n-ary macro definitions.
+# See the Autoconf documentation for `clear'.
+cat >confdef2sed.sed <<\_ACEOF
+s/[\\&,]/\\&/g
+s,[\\$`],\\&,g
+t clear
+: clear
+s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*\)\(([^)]*)\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
+t end
+s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+: end
+_ACEOF
+# If some macros were called several times there might be several times
+# the same #defines, which is useless.  Nevertheless, we may not want to
+# sort them, since we want the *last* AC-DEFINE to be honored.
+uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
+sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
+rm -f confdef2sed.sed
+
+# 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.undefs <<\_ACEOF
+s,^[	 ]*#[	 ]*undef[	 ][	 ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+_ACEOF
+
+# Break up conftest.defines because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
+echo '  if grep "^[	 ]*#[	 ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
+echo '  :' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.defines >/dev/null
+do
+  # Write a limited-size here document to $tmp/defines.sed.
+  echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
+  # Speed up: don't consider the non `#define' lines.
+  echo '/^[	 ]*#[	 ]*define/!b' >>$CONFIG_STATUS
+  # Work around the forget-to-reset-the-flag bug.
+  echo 't clr' >>$CONFIG_STATUS
+  echo ': clr' >>$CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
+  echo 'CEOF
+  sed -f $tmp/defines.sed $tmp/in >$tmp/out
+  rm -f $tmp/in
+  mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
+  rm -f conftest.defines
+  mv conftest.tail conftest.defines
+done
+rm -f conftest.defines
+echo '  fi # grep' >>$CONFIG_STATUS
+echo >>$CONFIG_STATUS
+
+# Break up conftest.undefs because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.undefs >/dev/null
+do
+  # Write a limited-size here document to $tmp/undefs.sed.
+  echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
+  # Speed up: don't consider the non `#undef'
+  echo '/^[	 ]*#[	 ]*undef/!b' >>$CONFIG_STATUS
+  # Work around the forget-to-reset-the-flag bug.
+  echo 't clr' >>$CONFIG_STATUS
+  echo ': clr' >>$CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
+  echo 'CEOF
+  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
+  rm -f $tmp/in
+  mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
+  rm -f conftest.undefs
+  mv conftest.tail conftest.undefs
+done
+rm -f conftest.undefs
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated by config.status.  */
+  if test x"$ac_file" = x-; then
+    echo "/* Generated by configure.  */" >$tmp/config.h
+  else
+    echo "/* $ac_file.  Generated by configure.  */" >$tmp/config.h
+  fi
+  cat $tmp/in >>$tmp/config.h
+  rm -f $tmp/in
+  if test x"$ac_file" != x-; then
+    if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
+      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+      { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+      rm -f $ac_file
+      mv $tmp/config.h $ac_file
+    fi
+  else
+    cat $tmp/config.h
+    rm -f $tmp/config.h
+  fi
+# Compute $ac_file's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $ac_file | $ac_file:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null ||
+$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X$ac_file : 'X\(//\)[^/]' \| \
+	 X$ac_file : 'X\(//\)$' \| \
+	 X$ac_file : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X$ac_file |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`/stamp-h$_am_stamp_count
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_COMMANDS section.
+#
+for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
+  ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
+  ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
+  ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
+$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_dest" : 'X\(//\)[^/]' \| \
+	 X"$ac_dest" : 'X\(//\)$' \| \
+	 X"$ac_dest" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_dest" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+  ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+
+  { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
+echo "$as_me: executing $ac_dest commands" >&6;}
+  case $ac_dest in
+    depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
+  # Strip MF so we end up with the name of the file.
+  mf=`echo "$mf" | sed -e 's/:.*$//'`
+  # Check whether this is an Automake generated Makefile or not.
+  # We used to match only the files named `Makefile.in', but
+  # some people rename them; so instead we look at the file content.
+  # Grep'ing the first line is not enough: some people post-process
+  # each Makefile.in and add a new line on top of each file to say so.
+  # So let's grep whole file.
+  if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+    dirpart=`(dirname "$mf") 2>/dev/null ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$mf" : 'X\(//\)[^/]' \| \
+	 X"$mf" : 'X\(//\)$' \| \
+	 X"$mf" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  else
+    continue
+  fi
+  grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue
+  # Extract the definition of DEP_FILES from the Makefile without
+  # running `make'.
+  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+  test -z "$DEPDIR" && continue
+  # When using ansi2knr, U may be empty or an underscore; expand it
+  U=`sed -n 's/^U = //p' < "$mf"`
+  test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
+  # We invoke sed twice because it is the simplest approach to
+  # changing $(DEPDIR) to its actual value in the expansion.
+  for file in `sed -n '
+    /^DEP_FILES = .*\\\\$/ {
+      s/^DEP_FILES = //
+      :loop
+	s/\\\\$//
+	p
+	n
+	/\\\\$/ b loop
+      p
+    }
+    /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
+       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+    # Make sure the directory exists.
+    test -f "$dirpart/$file" && continue
+    fdir=`(dirname "$file") 2>/dev/null ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$file" : 'X\(//\)[^/]' \| \
+	 X"$file" : 'X\(//\)$' \| \
+	 X"$file" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    { if $as_mkdir_p; then
+    mkdir -p $dirpart/$fdir
+  else
+    as_dir=$dirpart/$fdir
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5
+echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+    # echo "creating $dirpart/$file"
+    echo '# dummy' > "$dirpart/$file"
+  done
+done
+ ;;
+  esac
+done
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || { (exit 1); exit 1; }
+fi
+
Index: /orxonox/branches/levelloader/configure.ac
===================================================================
--- /orxonox/branches/levelloader/configure.ac	(revision 3417)
+++ /orxonox/branches/levelloader/configure.ac	(revision 3417)
@@ -0,0 +1,385 @@
+#                                               -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+AC_PREREQ(2.56)
+AC_INIT(orxonox, 0.2.1-pre-alpha, [orxonox-dev at mail.datacore.ch])
+
+# Detect the canonical host and target build environment.
+AC_CANONICAL_BUILD
+AC_CANONICAL_HOST
+AC_CANONICAL_TARGET
+
+
+AM_INIT_AUTOMAKE
+
+AC_CONFIG_SRCDIR([.])
+AC_CONFIG_HEADER([config.h])
+
+
+# Checks for programs.
+AC_PROG_CXX
+AC_HEADER_STDC
+
+### CHECKING  OPTIONAT ARGUMENTS
+## DEBUG-statement
+DEBUG=no
+AC_MSG_CHECKING([if DEBUG-mode should be enabled])
+AC_ARG_ENABLE([debug], 
+	AC_HELP_STRING(	[--enable-debug], [compiles in debug mode. Lots of debug info about the game.]),
+	 DEBUG=$enableval)
+
+if test "$DEBUG" = "no"; then 
+	echo "no"
+	echo " -> Setting debuglevel to 1. Like this you can still see errors."
+	DEBUG=1
+elif test "$DEBUG" = yes; then
+	echo "yes"
+	echo " -> Setting debuglevel to 3. HARD DEBUG MODE!!."
+	DEBUG=3
+else       
+	echo "yes set to $DEBUG"
+fi
+	AC_DEFINE_UNQUOTED(DEBUG, $DEBUG, [in which debug mode we are])
+
+AC_SUBST(DEBUG)
+
+## GTK-disabled
+AC_MSG_CHECKING([if gtk should be enabled])
+AC_ARG_WITH([gtk], 
+	AC_HELP_STRING(	[--without-gtk], 
+	[Prevents GTK from being loaded]), [def_gtk=no], [def_gtk=yes]) 
+if test "$def_gtk" = yes; then 
+  echo "yes"
+fi 
+if test "$def_gtk" = no; then 
+  echo "no"
+fi
+### SDL_image-disable
+def_sdl_image=yes
+AC_MSG_CHECKING([if SDL_image should be enabled])
+AC_ARG_WITH([sdl_image], 
+	AC_HELP_STRING(	[--without-sdl-image], 
+	[Prevents SDL_image from being loaded]), [def_sdl_image=no]) 
+if test "$def_sdl_image" = yes; then 
+  echo "yes"
+fi 
+if test "$def_sdl_image" = no; then 
+  echo "no"
+fi
+
+
+### SubProject-enable
+def_sdl_image=yes
+AC_MSG_CHECKING([if the SubProjects should be built])
+AC_ARG_ENABLE([sub-projects], 
+	AC_HELP_STRING(	[--enable-sub-projects], 
+	[also builds the subProjects by default]), [def_sub_projects=yes]) 
+if test "$def_sub_projects" = yes; then 
+  echo "yes"
+fi 
+if test "$def_sub_projects" = no; then 
+  echo "no"
+fi
+AM_CONDITIONAL(SUB_PROJECTS, test x$def_sub_projects = xyes)
+
+## PROGRAMM CHECKING
+# checking for Doxygen
+AC_PATH_PROG(DOXYGEN, doxygen)
+AM_CONDITIONAL(DOXYGEN, test $DOXYGEN)
+
+### CHECKING FOR SYSTEM ###
+
+AC_MSG_CHECKING([for System])
+## checking for openGL-environment and other sys-specific parameters
+case "$target" in
+### WINDOWS ###
+  *-*-mingw32*)
+echo "mingw-WINDOWS detected"
+
+    mingw="yes"
+    MSBITFIELDS="-mms-bitfields"
+    MWINDOWS="-mwindows"
+
+# checking gl header
+	#done before loop
+
+# checking gl header
+   AC_CHECK_HEADERS(GL/gl.h ,,
+      [AC_MSG_ERROR([cannot find opengl headers]) ])
+#   checking for Windows openGl library
+    AC_CHECK_LIB([opengl32], [main], FOUND_opengl32=yes, "gl/gl.h")
+    if test "$FOUND_opengl32" = "yes" ; then
+	LIBS="$LIBS -lopengl32"
+    else
+	 echo "------------------"
+	 echo "opengl not found."
+	 echo "please install the opengl package which can be found at http://www.opengl.org"
+	 echo "------------------"
+	 exit -1
+    fi
+
+# cheking for GLU-header
+    AC_CHECK_HEADERS(GL/glu.h ,,
+      [AC_MSG_ERROR([cannot find opengl headers]) ])
+
+# checking for libGLU
+    AC_CHECK_LIB([glu32], [main], FOUND_glu32=yes)
+    if test "$FOUND_glu32" = "yes" ; then
+	LIBS="$LIBS -lGLU32"
+    else
+	 echo "------------------"
+	 echo "GLU library not found."
+	 echo "please install the GLU library, that should come with openGL, which can be found at http://www.opengl.org"
+	 echo "------------------"
+	 exit -1
+    fi
+
+# checking for mingw32
+    AC_CHECK_LIB([mingw32], [main], FOUND_mingw32=yes)
+    if test $FOUND_mingw32 = "yes"; then 
+	LIBS="$LIBS -lmingw32"
+    fi
+# checking for SDL-headers
+    AC_CHECK_HEADERS(SDL/SDL.h ,,
+      [AC_MSG_ERROR([cannot find SDL headers]) ])
+
+#checking for libSDL
+    AC_CHECK_LIB([sdlmain], [main], FOUND_sdlmain=yes)
+    if test "$FOUND_sdlmain" = "yes" ; then
+       LIBS="$LIBS -lsdlmain"
+    else
+        echo "------------------"
+        echo "SDL library not found."
+        echo "please install the SDL library, which can be found at http://www.libsdl.org"
+        echo "------------------"
+        exit 1
+    fi
+    AC_CHECK_LIB([sdl], [main], FOUND_sdl=yes)
+    if test "$FOUND_sdl" = "yes" ; then
+       LIBS="$LIBS -lsdl"
+    else
+        echo "------------------"
+        echo "SDL library not found."
+        echo "please install the SDL library, which can be found at http://www.libsdl.org"
+        echo "------------------"
+        exit -1
+    fi
+
+    ;;
+
+### LINUX ###
+ *-*-linux*)
+echo "Linux detected"
+
+ Linux="yes"
+
+CPPFLAGS="-I/usr/X11R6/include"
+LDFLAGS="-L/usr/lib/opengl/xorg-x11/lib -L/usr/Mesa-6.0.1/lib -L/usr/X11R6/lib $LDFLAGS"
+# checking gl header
+   AC_CHECK_HEADERS(GL/gl.h ,,
+      [AC_MSG_ERROR([cannot find opengl headers]) ])
+
+#  checking for Unix GL
+   AC_CHECK_LIB([GL], [glLoadIdentity], FOUND_GL=yes)
+   if test "$FOUND_GL" = "yes" ; then
+     LIBS="$LIBS -lGL"
+   else
+	 echo "------------------"
+	 echo "opengl not found."
+	 echo "please install the opengl package which can be found at http://www.opengl.org"
+	 echo "------------------"
+	 exit -1
+   fi
+
+# cheking for GLU-header
+    AC_CHECK_HEADERS(GL/glu.h ,,
+      [AC_MSG_ERROR([cannot find opengl headers]) ])
+
+    AC_CHECK_LIB([GLU], [gluProject], FOUND_GLU=yes)
+    if test "$FOUND_GLU" = "yes" ; then
+      LIBS="$LIBS -lGLU"
+    else
+	 echo "------------------"
+	 echo "GLU library not found."
+	 echo "please install the GLU library, that should come with openGL, which can be found at http://www.opengl.org"
+	 echo "------------------"
+	 exit -1
+    fi   
+
+# checking for SDL-headers
+    AC_CHECK_HEADERS(SDL/SDL.h ,,
+      [AC_MSG_ERROR([cannot find SDL headers]) ])
+
+# checking for SDL-lib
+    AC_CHECK_LIB([SDL], [main], FOUND_SDL=yes)
+     if test "$FOUND_SDL" = "yes" ; then
+       LIBS="$LIBS -lSDL"
+     else
+        echo "------------------"
+        echo "SDL library not found."
+	echo "please install the SDL library, which can be found at http://www.libsdl.org"
+        echo "------------------"
+        exit -1
+     fi   
+
+
+## checking for SDL
+#    SDL_VERSION=1.2.7
+#    AM_PATH_SDL($SDL_VERSION,
+#      :,
+#      AC_MSG_ERROR([*** SDL version $SDL_VERSION not found!])
+#      )
+#    CXXFLAGS="$CXXFLAGS $SDL_CFLAGS"
+#    LIBS="$LIBS $SDL_LIBS"
+    ;;
+
+### OS X ###
+ *darwin*)
+echo "OS X detected"
+
+ osX="yes"
+
+ CPPFLAGS="-I/sw/include $CPPFLAGS"
+# checking gl header
+   AC_CHECK_HEADERS(OpenGL/gl.h ,,
+      [AC_MSG_ERROR([cannot find opengl headers]) ])
+# cheking for GLU-header
+    AC_CHECK_HEADERS(OpenGL/glu.h ,,
+      [AC_MSG_ERROR([cannot find opengl headers]) ])
+
+   LIBS="$LIBS -framework OpenGL"
+
+# checking for SDL-headers
+#    AC_CHECK_HEADERS(SDL/SDL.h ,,
+#      [AC_MSG_ERROR([cannot find SDL headers]) ])
+
+## checking for SDL
+#    SDL_VERSION=1.2.7
+#    AM_PATH_SDL($SDL_VERSION,
+#      :,
+#      AC_MSG_ERROR([*** SDL version $SDL_VERSION not found!])
+#      )
+
+       SDL_CFLAGS=`sdl-config --cflags`
+       SDL_LIBS=`sdl-config --libs`
+       CXXFLAGS="$CXXFLAGS $SDL_CFLAGS"
+       LIBS="$LIBS $SDL_LIBS"
+
+    ;;
+
+  *)
+    ;;
+esac
+
+AC_SUBST(MSBITFIELDS)
+
+## check for SDL_Image
+if test "$def_sdl_image" = "yes"; then
+# checking for SDL_image-headers
+  AC_CHECK_HEADERS(SDL/SDL_image.h ,,
+      [echo "sdl_image not found. falling back to other options"; def_sdl_image=no ])
+fi
+if test "$def_sdl_image" = "yes"; then
+# checking for SDL_image-lib
+  AC_CHECK_LIB([SDL_image], [main], FOUND_SDL_image=yes)
+     if test "$FOUND_SDL_image" = "yes" ; then
+       LIBS="$LIBS -lSDL_image"
+     else
+        echo "------------------"
+        echo "SDL_image library not found."
+	echo "please install the SDL_image library, which can be found at http://www.libsdl.org/projects/SDL_image/"
+        echo "------------------"
+        exit -1
+     fi   
+fi
+
+
+if test "$def_sdl_image" = "no"; then
+ ## checking for libjpeg
+ AC_CHECK_HEADERS(jpeglib.h ,jpegHeader="yes",
+        jpegHeader="no")
+ if test $jpegHeader = "no"; then
+	echo " not including jpeg."
+ else
+  AC_CHECK_LIB([jpeg], [main], FOUND_jpeg=yes)
+    if test "$FOUND_jpeg" = "yes" ; then
+      LIBS="$LIBS -ljpeg"
+    else
+	 echo "------------------"
+	 echo "jpeg library not found."
+	 echo "please install the jpeg library from the Independent JPEG Group, which can be found at http://www.ijg.org"
+	 echo "------------------"
+	 exit -1
+    fi   
+ fi
+
+ ## checking for libpng
+ AC_CHECK_HEADERS(png.h ,pngHeader="yes",
+        pngHeader="no")
+ if test $pngHeader = "no"; then
+	echo " not including png."
+ else
+  AC_CHECK_LIB([png], [main], FOUND_png=yes)
+    if test "$FOUND_png" = "yes" ; then
+      LIBS="$LIBS -lpng"
+    else
+	 echo "------------------"
+	 echo "png library not found."
+	 echo "please install the png library, which can be found at http://libpng.org/pub/png/libpng.html"
+	 echo "------------------"
+	 exit -1
+    fi
+ fi   
+fi
+
+## checking for GTK
+if test "$def_gtk" = yes; then 
+
+	#PKG_CHECK_MODULES(GTK2, gtk+-2.0 >= 2.0.3 gthread-2.0 >= 2.0.3, have_gtk2=yes, have_gtk2=no)
+	AC_MSG_CHECKING([for gtk2.0])
+	if `pkg-config --exists gtk+-2.0`; then
+  		echo "yes"
+  		have_gtk2=yes
+		GTK2_LIBS=`pkg-config --libs gtk+-2.0`
+		GTK2_CFLAGS=`pkg-config --cflags gtk+-2.0`
+		AC_DEFINE_UNQUOTED(HAVE_GTK2, 1, [if we have GTK2])
+	else
+		echo "no"
+	fi
+
+fi
+AC_SUBST(GTK2_LIBS)
+AC_SUBST(GTK2_CFLAGS)
+AM_CONDITIONAL(HAVE_GTK2, test x$have_gtk2 = xyes)
+
+
+
+#checking for pthread libs
+# AC_CHECK_LIB([pthread], [main], FOUND_pthread=yes)
+# if test "$FOUND_pthread" = "yes" ; then
+#    LIBS="$LIBS -lpthread"
+# fi
+
+
+# FIXME: Replace `main' with a function in `-lm':
+ AC_CHECK_LIB([m], [main])
+
+ 
+# Checks for header files.
+AC_HEADER_STDC
+AC_CHECK_HEADERS([stdlib.h string.h])
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_HEADER_STDBOOL
+
+# Checks for library functions.
+AC_FUNC_MALLOC
+AC_CHECK_FUNCS([bzero sqrt])
+
+AC_CONFIG_FILES([Makefile
+                 src/Makefile
+		 src/importer/Makefile
+		 src/console/Makefile
+                 src/gui/Makefile])
+
+AC_OUTPUT
Index: /orxonox/branches/levelloader/depcomp
===================================================================
--- /orxonox/branches/levelloader/depcomp	(revision 3417)
+++ /orxonox/branches/levelloader/depcomp	(revision 3417)
@@ -0,0 +1,479 @@
+#! /bin/sh
+
+# depcomp - compile a program generating dependencies as side-effects
+# Copyright 1999, 2000, 2003 Free Software Foundation, Inc.
+
+# 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, 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.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+  echo "depcomp: Variables source, object and depmode must be set" 1>&2
+  exit 1
+fi
+# `libtool' can also be set to `yes' or `no'.
+
+if test -z "$depfile"; then
+   base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
+   dir=`echo "$object" | sed 's,/.*$,/,'`
+   if test "$dir" = "$object"; then
+      dir=
+   fi
+   # FIXME: should be _deps on DOS.
+   depfile="$dir.deps/$base"
+fi
+
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags.  We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write.  Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+  # HP compiler uses -M and no extra arg.
+  gccflag=-M
+  depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+   # This is just like dashmstdout with a different argument.
+   dashmflag=-xM
+   depmode=dashmstdout
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff.  Hmm.
+  "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  mv "$tmpdepfile" "$depfile"
+  ;;
+
+gcc)
+## There are various ways to get dependency output from gcc.  Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+##   up in a subdir.  Having to rename by hand is ugly.
+##   (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+##   -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+##   than renaming).
+  if test -z "$gccflag"; then
+    gccflag=-MD,
+  fi
+  "$@" -Wp,"$gccflag$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+  sed -e 's/^[^:]*: / /' \
+      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the `deleted header file' problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header).  We avoid this by adding
+## dummy dependencies for each header file.  Too bad gcc doesn't do
+## this for us directly.
+  tr ' ' '
+' < "$tmpdepfile" |
+## Some versions of gcc put a space before the `:'.  On the theory
+## that the space means something, we add a space to the output as
+## well.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+sgi)
+  if test "$libtool" = yes; then
+    "$@" "-Wp,-MDupdate,$tmpdepfile"
+  else
+    "$@" -MDupdate "$tmpdepfile"
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+
+  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
+    echo "$object : \\" > "$depfile"
+
+    # Clip off the initial element (the dependent).  Don't try to be
+    # clever and replace this with sed code, as IRIX sed won't handle
+    # lines with more than a fixed number of characters (4096 in
+    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
+    # the IRIX cc adds comments like `#:fec' to the end of the
+    # dependency line.
+    tr ' ' '
+' < "$tmpdepfile" \
+    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+    tr '
+' ' ' >> $depfile
+    echo >> $depfile
+
+    # The second pass generates a dummy entry for each header file.
+    tr ' ' '
+' < "$tmpdepfile" \
+   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+   >> $depfile
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+aix)
+  # The C for AIX Compiler uses -M and outputs the dependencies
+  # in a .u file.  In older versions, this file always lives in the
+  # current directory.  Also, the AIX compiler puts `$object:' at the
+  # start of each line; $object doesn't have directory information.
+  # Version 6 uses the directory in both cases.
+  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
+  tmpdepfile="$stripped.u"
+  if test "$libtool" = yes; then
+    "$@" -Wc,-M
+  else
+    "$@" -M
+  fi
+  stat=$?
+
+  if test -f "$tmpdepfile"; then :
+  else
+    stripped=`echo "$stripped" | sed 's,^.*/,,'`
+    tmpdepfile="$stripped.u"
+  fi
+
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+
+  if test -f "$tmpdepfile"; then
+    outname="$stripped.o"
+    # Each line is of the form `foo.o: dependent.h'.
+    # Do two passes, one to just change these to
+    # `$object: dependent.h' and one to simply `dependent.h:'.
+    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
+    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+icc)
+  # Intel's C compiler understands `-MD -MF file'.  However on
+  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+  # ICC 7.0 will fill foo.d with something like
+  #    foo.o: sub/foo.c
+  #    foo.o: sub/foo.h
+  # which is wrong.  We want:
+  #    sub/foo.o: sub/foo.c
+  #    sub/foo.o: sub/foo.h
+  #    sub/foo.c:
+  #    sub/foo.h:
+  # ICC 7.1 will output
+  #    foo.o: sub/foo.c sub/foo.h
+  # and will wrap long lines using \ :
+  #    foo.o: sub/foo.c ... \
+  #     sub/foo.h ... \
+  #     ...
+
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  # Each line is of the form `foo.o: dependent.h',
+  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+  # Do two passes, one to just change these to
+  # `$object: dependent.h' and one to simply `dependent.h:'.
+  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
+    sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+tru64)
+   # The Tru64 compiler uses -MD to generate dependencies as a side
+   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+   # dependencies in `foo.d' instead, so we check for that too.
+   # Subdirectories are respected.
+   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+   test "x$dir" = "x$object" && dir=
+   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+   if test "$libtool" = yes; then
+      tmpdepfile1="$dir.libs/$base.lo.d"
+      tmpdepfile2="$dir.libs/$base.d"
+      "$@" -Wc,-MD
+   else
+      tmpdepfile1="$dir$base.o.d"
+      tmpdepfile2="$dir$base.d"
+      "$@" -MD
+   fi
+
+   stat=$?
+   if test $stat -eq 0; then :
+   else
+      rm -f "$tmpdepfile1" "$tmpdepfile2"
+      exit $stat
+   fi
+
+   if test -f "$tmpdepfile1"; then
+      tmpdepfile="$tmpdepfile1"
+   else
+      tmpdepfile="$tmpdepfile2"
+   fi
+   if test -f "$tmpdepfile"; then
+      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+      # That's a tab and a space in the [].
+      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+   else
+      echo "#dummy" > "$depfile"
+   fi
+   rm -f "$tmpdepfile"
+   ;;
+
+#nosideeffect)
+  # This comment above is used by automake to tell side-effect
+  # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  test -z "$dashmflag" && dashmflag=-M
+  # Require at least two characters before searching for `:'
+  # in the target name.  This is to cope with DOS-style filenames:
+  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+  "$@" $dashmflag |
+    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  tr ' ' '
+' < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+dashXmstdout)
+  # This case only exists to satisfy depend.m4.  It is never actually
+  # run, as this mode is specially recognized in the preamble.
+  exit 1
+  ;;
+
+makedepend)
+  "$@" || exit $?
+  # Remove any Libtool call
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+  # X makedepend
+  shift
+  cleared=no
+  for arg in "$@"; do
+    case $cleared in
+    no)
+      set ""; shift
+      cleared=yes ;;
+    esac
+    case "$arg" in
+    -D*|-I*)
+      set fnord "$@" "$arg"; shift ;;
+    # Strip any option that makedepend may not understand.  Remove
+    # the object too, otherwise makedepend will parse it as a source file.
+    -*|$object)
+      ;;
+    *)
+      set fnord "$@" "$arg"; shift ;;
+    esac
+  done
+  obj_suffix="`echo $object | sed 's/^.*\././'`"
+  touch "$tmpdepfile"
+  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  sed '1,2d' "$tmpdepfile" | tr ' ' '
+' | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile" "$tmpdepfile".bak
+  ;;
+
+cpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  "$@" -E |
+    sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+    sed '$ s: \\$::' > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  cat < "$tmpdepfile" >> "$depfile"
+  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvisualcpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o,
+  # because we must use -o when running libtool.
+  "$@" || exit $?
+  IFS=" "
+  for arg
+  do
+    case "$arg" in
+    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+	set fnord "$@"
+	shift
+	shift
+	;;
+    *)
+	set fnord "$@" "$arg"
+	shift
+	shift
+	;;
+    esac
+  done
+  "$@" -E |
+  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
+  echo "	" >> "$depfile"
+  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+none)
+  exec "$@"
+  ;;
+
+*)
+  echo "Unknown depmode $depmode" 1>&2
+  exit 1
+  ;;
+esac
+
+exit 0
Index: /orxonox/branches/levelloader/doc/CREDITS
===================================================================
--- /orxonox/branches/levelloader/doc/CREDITS	(revision 3417)
+++ /orxonox/branches/levelloader/doc/CREDITS	(revision 3417)
@@ -0,0 +1,19 @@
+
+
+The Orxonox Team Thanks To 
+--------------------------
+
+Programmers:
+------------
+Patrick Boenzli
+Benjamin Grauer
+
+Infrastructure:
+---------------
+amir@datacore.ch	for giving us access to subversion and mailing lists
+
+The Great Orx Sound:
+--------------------
+Luke Grey		for making the orxonox sound
+
+
Index: /orxonox/branches/levelloader/doc/KNOWLEDGE_BASE
===================================================================
--- /orxonox/branches/levelloader/doc/KNOWLEDGE_BASE	(revision 3417)
+++ /orxonox/branches/levelloader/doc/KNOWLEDGE_BASE	(revision 3417)
@@ -0,0 +1,27 @@
+
+
+Matrixes Theory
+===============
+Very important to express any rotation for OpenGL.
+
+A very simple and though not too deep introduction, contains also a good Quaternion introduction:
+http://skal.planet-d.net/demo/matrixfaq.html
+
+Specialy Matrix Rotations:
+http://mathworld.wolfram.com/RotaionMatrix.html
+
+OpenGL Transformation/Rotation Matrixes:
+http://nehe.gamdev.net/data/articles/article.asp?article=02
+
+
+Quaternion Mathematics
+======================
+Orientations can be represented as Quaternions. They make it simpler and, in tearm of CPU-Time, cheaper to calculate rotations.
+
+A good and understandable introduction can be found here:
+http://pw1.netcom.com/~hjsmith/Quatdoc/Qindex.html
+
+
+www.gamedev.net/reference/articles/article1095.asp
+
+
Index: /orxonox/branches/levelloader/doc/documentation.am
===================================================================
--- /orxonox/branches/levelloader/doc/documentation.am	(revision 3417)
+++ /orxonox/branches/levelloader/doc/documentation.am	(revision 3417)
@@ -0,0 +1,58 @@
+DX_CONFIG_FILE = "$(top_srcdir)/orxodox"
+DX_CONF_DIR = "$(top_srcdir)/doc/doxyconf"
+
+doc:
+	if test ! -e $(DX_CONFIG_FILE); then \
+	 make doc-config; \
+	fi
+	@echo "Generating doxygen Documentation"; \
+	$(DOXYGEN) $(DX_CONFIG_FILE)
+
+doc-config:
+	@echo "Generationg doxygen configuration File." ; \
+	if test -e  "$(top_srcdir)/orxodox"; then \
+	  echo "deleting existing Configuration File" ; \
+	  rm $(top_srcdir)/orxodox ; \
+	fi ; \
+	touch $(DX_CONFIG_FILE) ; \
+	$(DX_CONF_DIR)/project						>> $(DX_CONFIG_FILE); \
+	echo "PROJECT_NAME		= \"$(PACKAGE_NAME)\"" 		>> $(DX_CONFIG_FILE); \
+	echo "PROJECT_NUMBER	   	= \"$(PACKAGE_VERSION)\"" 	>> $(DX_CONFIG_FILE); \
+	echo "OUTPUT_DIRECTORY  	= \"$(top_srcdir)/doc/\"" 	>> $(DX_CONFIG_FILE); \
+	echo " " >> $(DX_CONFIG_FILE); \
+\
+	$(DX_CONF_DIR)/build						>> $(DX_CONFIG_FILE); \
+\
+	$(DX_CONF_DIR)/progress						>> $(DX_CONFIG_FILE); \
+	if test $(DEBUG) -ge 2 ; then \
+	 echo "QUIET			= \"NO\""			>> $(DX_CONFIG_FILE); \
+	else \
+	 echo "QUIET			= \"YES\""			>> $(DX_CONFIG_FILE); \
+	fi ;\
+\
+	$(DX_CONF_DIR)/input						>> $(DX_CONFIG_FILE); \
+	echo "INPUT                  	= $(DOXYGEN_INPUT)"  		>> $(DX_CONFIG_FILE); \
+\
+	$(DX_CONF_DIR)/preprocessor					>> $(DX_CONFIG_FILE); \
+	echo "INCLUDE_PATH           	= \"$(top_srcdir)\""		>> $(DX_CONFIG_FILE); \
+	echo "PREDEFINED             	= \"HAVE_CONFIG_H= \""		>> $(DX_CONFIG_FILE); \
+	\
+	$(DX_CONF_DIR)/confopts						>> $(DX_CONFIG_FILE) 
+
+doc-delete: 
+	@echo "Deleting doxygen Documentation" 
+	rm -rf $(top_srcdir)/doc/html 
+	rm -rf $(top_srcdir)/doc/latex 
+
+distclean-local: doc-delete
+	rm -f $(top_srcdir)/orxodox
+
+clean-local:  doc-delete
+
+all-local: doc
+
+.PHONY: doc doc-config doc-delete
+
+# Local Variables:
+# mode: makefile
+# End:
Index: /orxonox/branches/levelloader/doc/doxyconf/build
===================================================================
--- /orxonox/branches/levelloader/doc/doxyconf/build	(revision 3417)
+++ /orxonox/branches/levelloader/doc/doxyconf/build	(revision 3417)
@@ -0,0 +1,28 @@
+echo "
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL            = NO
+EXTRACT_PRIVATE        = YES
+EXTRACT_STATIC         = YES
+EXTRACT_LOCAL_CLASSES  = YES
+EXTRACT_LOCAL_METHODS  = NO
+HIDE_UNDOC_MEMBERS     = NO
+HIDE_UNDOC_CLASSES     = NO
+HIDE_FRIEND_COMPOUNDS  = NO
+HIDE_IN_BODY_DOCS      = NO
+INTERNAL_DOCS          = NO
+CASE_SENSE_NAMES       = YES
+HIDE_SCOPE_NAMES       = NO
+SHOW_INCLUDE_FILES     = YES
+INLINE_INFO            = YES
+SORT_MEMBER_DOCS       = YES
+SORT_BRIEF_DOCS        = NO
+SORT_BY_SCOPE_NAME     = NO
+GENERATE_TODOLIST      = YES
+GENERATE_TESTLIST      = YES
+GENERATE_BUGLIST       = YES
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS       = 
+MAX_INITIALIZER_LINES  = 30
+SHOW_USED_FILES        = YES"
Index: /orxonox/branches/levelloader/doc/doxyconf/confopts
===================================================================
--- /orxonox/branches/levelloader/doc/doxyconf/confopts	(revision 3417)
+++ /orxonox/branches/levelloader/doc/doxyconf/confopts	(revision 3417)
@@ -0,0 +1,121 @@
+echo "
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER         = NO
+INLINE_SOURCES         = NO
+STRIP_CODE_COMMENTS    = YES
+REFERENCED_BY_RELATION = YES
+REFERENCES_RELATION    = YES
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX     = NO
+COLS_IN_ALPHA_INDEX    = 5
+IGNORE_PREFIX          = 
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML          = YES
+HTML_OUTPUT            = html
+HTML_FILE_EXTENSION    = .html
+HTML_HEADER            = 
+HTML_FOOTER            = 
+HTML_STYLESHEET        = 
+HTML_ALIGN_MEMBERS     = YES
+GENERATE_HTMLHELP      = NO
+CHM_FILE               = 
+HHC_LOCATION           = 
+GENERATE_CHI           = NO
+BINARY_TOC             = NO
+TOC_EXPAND             = NO
+DISABLE_INDEX          = NO
+ENUM_VALUES_PER_LINE   = 4
+GENERATE_TREEVIEW      = NO
+TREEVIEW_WIDTH         = 250
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX         = YES
+LATEX_OUTPUT           = latex
+LATEX_CMD_NAME         = latex
+MAKEINDEX_CMD_NAME     = makeindex
+COMPACT_LATEX          = NO
+PAPER_TYPE             = a4wide
+EXTRA_PACKAGES         = 
+LATEX_HEADER           = 
+PDF_HYPERLINKS         = NO
+USE_PDFLATEX           = NO
+LATEX_BATCHMODE        = NO
+LATEX_HIDE_INDICES     = NO
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF           = NO
+RTF_OUTPUT             = rtf
+COMPACT_RTF            = NO
+RTF_HYPERLINKS         = NO
+RTF_STYLESHEET_FILE    = 
+RTF_EXTENSIONS_FILE    = 
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN           = NO
+MAN_OUTPUT             = man
+MAN_EXTENSION          = .3
+MAN_LINKS              = NO
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML           = NO
+XML_OUTPUT             = xml
+XML_SCHEMA             = 
+XML_DTD                = 
+XML_PROGRAMLISTING     = YES
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF   = NO
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD       = NO
+PERLMOD_LATEX          = NO
+PERLMOD_PRETTY         = YES
+PERLMOD_MAKEVAR_PREFIX = 
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+TAGFILES               = 
+GENERATE_TAGFILE       = 
+ALLEXTERNALS           = NO
+EXTERNAL_GROUPS        = YES
+PERL_PATH              = /usr/bin/perl
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS         = YES
+HIDE_UNDOC_RELATIONS   = YES
+HAVE_DOT               = NO
+CLASS_GRAPH            = YES
+COLLABORATION_GRAPH    = YES
+UML_LOOK               = NO
+TEMPLATE_RELATIONS     = NO
+INCLUDE_GRAPH          = YES
+INCLUDED_BY_GRAPH      = YES
+CALL_GRAPH             = NO
+GRAPHICAL_HIERARCHY    = YES
+DOT_IMAGE_FORMAT       = png
+DOT_PATH               = 
+DOTFILE_DIRS           = 
+MAX_DOT_GRAPH_WIDTH    = 1024
+MAX_DOT_GRAPH_HEIGHT   = 1024
+MAX_DOT_GRAPH_DEPTH    = 0
+GENERATE_LEGEND        = YES
+DOT_CLEANUP            = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+SEARCHENGINE           = NO"
Index: /orxonox/branches/levelloader/doc/doxyconf/input
===================================================================
--- /orxonox/branches/levelloader/doc/doxyconf/input	(revision 3417)
+++ /orxonox/branches/levelloader/doc/doxyconf/input	(revision 3417)
@@ -0,0 +1,15 @@
+echo "
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+FILE_PATTERNS          = 
+RECURSIVE              = NO
+EXCLUDE                = 
+EXCLUDE_SYMLINKS       = NO
+EXCLUDE_PATTERNS       = 
+EXAMPLE_PATH           = 
+EXAMPLE_PATTERNS       = 
+EXAMPLE_RECURSIVE      = NO
+IMAGE_PATH             = 
+INPUT_FILTER           = 
+FILTER_SOURCE_FILES    = NO"
Index: /orxonox/branches/levelloader/doc/doxyconf/preprocessor
===================================================================
--- /orxonox/branches/levelloader/doc/doxyconf/preprocessor	(revision 3417)
+++ /orxonox/branches/levelloader/doc/doxyconf/preprocessor	(revision 3417)
@@ -0,0 +1,11 @@
+echo "
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING   = YES
+MACRO_EXPANSION        = NO
+EXPAND_ONLY_PREDEF     = NO
+SEARCH_INCLUDES        = YES
+INCLUDE_FILE_PATTERNS  = 
+EXPAND_AS_DEFINED      = 
+SKIP_FUNCTION_MACROS   = YES"
Index: /orxonox/branches/levelloader/doc/doxyconf/progress
===================================================================
--- /orxonox/branches/levelloader/doc/doxyconf/progress	(revision 3417)
+++ /orxonox/branches/levelloader/doc/doxyconf/progress	(revision 3417)
@@ -0,0 +1,9 @@
+echo "
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+WARNINGS               = YES
+WARN_IF_UNDOCUMENTED   = YES
+WARN_IF_DOC_ERROR      = YES
+WARN_FORMAT            = \"\$file:\$line: \$text\"
+WARN_LOGFILE           = "
Index: /orxonox/branches/levelloader/doc/doxyconf/project
===================================================================
--- /orxonox/branches/levelloader/doc/doxyconf/project	(revision 3417)
+++ /orxonox/branches/levelloader/doc/doxyconf/project	(revision 3417)
@@ -0,0 +1,26 @@
+echo "
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+CREATE_SUBDIRS         = YES
+OUTPUT_LANGUAGE        = English
+USE_WINDOWS_ENCODING   = YES
+BRIEF_MEMBER_DESC      = YES
+REPEAT_BRIEF           = YES
+ABBREVIATE_BRIEF       = 
+ALWAYS_DETAILED_SEC    = NO
+INLINE_INHERITED_MEMB  = NO
+FULL_PATH_NAMES        = NO
+STRIP_FROM_PATH        = 
+STRIP_FROM_INC_PATH    = 
+SHORT_NAMES            = NO
+JAVADOC_AUTOBRIEF      = NO
+MULTILINE_CPP_IS_BRIEF = NO
+DETAILS_AT_TOP         = NO
+INHERIT_DOCS           = YES
+DISTRIBUTE_GROUP_DOC   = NO
+TAB_SIZE               = 8
+ALIASES                = 
+OPTIMIZE_OUTPUT_FOR_C  = NO
+OPTIMIZE_OUTPUT_JAVA   = NO
+SUBGROUPING            = YES"
Index: /orxonox/branches/levelloader/doc/orxodox.src
===================================================================
--- /orxonox/branches/levelloader/doc/orxodox.src	(revision 3417)
+++ /orxonox/branches/levelloader/doc/orxodox.src	(revision 3417)
@@ -0,0 +1,213 @@
+# Doxyfile 1.3.7
+## SAMPLE FILE (to be executed from orxonox/trunk/)
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+PROJECT_NAME           = Orxonox
+PROJECT_NUMBER         = 1
+OUTPUT_DIRECTORY       = doxygen/
+CREATE_SUBDIRS         = YES
+OUTPUT_LANGUAGE        = English
+USE_WINDOWS_ENCODING   = YES
+BRIEF_MEMBER_DESC      = YES
+REPEAT_BRIEF           = YES
+ABBREVIATE_BRIEF       = 
+ALWAYS_DETAILED_SEC    = NO
+INLINE_INHERITED_MEMB  = NO
+FULL_PATH_NAMES        = NO
+STRIP_FROM_PATH        = 
+STRIP_FROM_INC_PATH    = 
+SHORT_NAMES            = NO
+JAVADOC_AUTOBRIEF      = NO
+MULTILINE_CPP_IS_BRIEF = NO
+DETAILS_AT_TOP         = NO
+INHERIT_DOCS           = YES
+DISTRIBUTE_GROUP_DOC   = NO
+TAB_SIZE               = 8
+ALIASES                = 
+OPTIMIZE_OUTPUT_FOR_C  = NO
+OPTIMIZE_OUTPUT_JAVA   = NO
+SUBGROUPING            = YES
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL            = NO
+EXTRACT_PRIVATE        = YES
+EXTRACT_STATIC         = YES
+EXTRACT_LOCAL_CLASSES  = YES
+EXTRACT_LOCAL_METHODS  = NO
+HIDE_UNDOC_MEMBERS     = NO
+HIDE_UNDOC_CLASSES     = NO
+HIDE_FRIEND_COMPOUNDS  = NO
+HIDE_IN_BODY_DOCS      = NO
+INTERNAL_DOCS          = NO
+CASE_SENSE_NAMES       = YES
+HIDE_SCOPE_NAMES       = NO
+SHOW_INCLUDE_FILES     = YES
+INLINE_INFO            = YES
+SORT_MEMBER_DOCS       = YES
+SORT_BRIEF_DOCS        = NO
+SORT_BY_SCOPE_NAME     = NO
+GENERATE_TODOLIST      = YES
+GENERATE_TESTLIST      = YES
+GENERATE_BUGLIST       = YES
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS       = 
+MAX_INITIALIZER_LINES  = 30
+SHOW_USED_FILES        = YES
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET                  = NO
+WARNINGS               = YES
+WARN_IF_UNDOCUMENTED   = YES
+WARN_IF_DOC_ERROR      = YES
+WARN_FORMAT            = "$file:$line: $text"
+WARN_LOGFILE           = 
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT                  = .
+FILE_PATTERNS          = 
+RECURSIVE              = NO
+EXCLUDE                = 
+EXCLUDE_SYMLINKS       = NO
+EXCLUDE_PATTERNS       = 
+EXAMPLE_PATH           = 
+EXAMPLE_PATTERNS       = 
+EXAMPLE_RECURSIVE      = NO
+IMAGE_PATH             = 
+INPUT_FILTER           = 
+FILTER_SOURCE_FILES    = NO
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER         = NO
+INLINE_SOURCES         = NO
+STRIP_CODE_COMMENTS    = YES
+REFERENCED_BY_RELATION = YES
+REFERENCES_RELATION    = YES
+VERBATIM_HEADERS       = YES
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX     = NO
+COLS_IN_ALPHA_INDEX    = 5
+IGNORE_PREFIX          = 
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML          = YES
+HTML_OUTPUT            = html
+HTML_FILE_EXTENSION    = .html
+HTML_HEADER            = 
+HTML_FOOTER            = 
+HTML_STYLESHEET        = 
+HTML_ALIGN_MEMBERS     = YES
+GENERATE_HTMLHELP      = NO
+CHM_FILE               = 
+HHC_LOCATION           = 
+GENERATE_CHI           = NO
+BINARY_TOC             = NO
+TOC_EXPAND             = NO
+DISABLE_INDEX          = NO
+ENUM_VALUES_PER_LINE   = 4
+GENERATE_TREEVIEW      = NO
+TREEVIEW_WIDTH         = 250
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX         = YES
+LATEX_OUTPUT           = latex
+LATEX_CMD_NAME         = latex
+MAKEINDEX_CMD_NAME     = makeindex
+COMPACT_LATEX          = NO
+PAPER_TYPE             = a4wide
+EXTRA_PACKAGES         = 
+LATEX_HEADER           = 
+PDF_HYPERLINKS         = NO
+USE_PDFLATEX           = NO
+LATEX_BATCHMODE        = NO
+LATEX_HIDE_INDICES     = NO
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF           = NO
+RTF_OUTPUT             = rtf
+COMPACT_RTF            = NO
+RTF_HYPERLINKS         = NO
+RTF_STYLESHEET_FILE    = 
+RTF_EXTENSIONS_FILE    = 
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN           = NO
+MAN_OUTPUT             = man
+MAN_EXTENSION          = .3
+MAN_LINKS              = NO
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML           = NO
+XML_OUTPUT             = xml
+XML_SCHEMA             = 
+XML_DTD                = 
+XML_PROGRAMLISTING     = YES
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF   = NO
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD       = NO
+PERLMOD_LATEX          = NO
+PERLMOD_PRETTY         = YES
+PERLMOD_MAKEVAR_PREFIX = 
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING   = YES
+MACRO_EXPANSION        = NO
+EXPAND_ONLY_PREDEF     = NO
+SEARCH_INCLUDES        = YES
+INCLUDE_PATH           = 
+INCLUDE_FILE_PATTERNS  = 
+PREDEFINED             = 
+EXPAND_AS_DEFINED      = 
+SKIP_FUNCTION_MACROS   = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+TAGFILES               = 
+GENERATE_TAGFILE       = 
+ALLEXTERNALS           = NO
+EXTERNAL_GROUPS        = YES
+PERL_PATH              = /usr/bin/perl
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS         = YES
+HIDE_UNDOC_RELATIONS   = YES
+HAVE_DOT               = NO
+CLASS_GRAPH            = YES
+COLLABORATION_GRAPH    = YES
+UML_LOOK               = NO
+TEMPLATE_RELATIONS     = NO
+INCLUDE_GRAPH          = YES
+INCLUDED_BY_GRAPH      = YES
+CALL_GRAPH             = NO
+GRAPHICAL_HIERARCHY    = YES
+DOT_IMAGE_FORMAT       = png
+DOT_PATH               = 
+DOTFILE_DIRS           = 
+MAX_DOT_GRAPH_WIDTH    = 1024
+MAX_DOT_GRAPH_HEIGHT   = 1024
+MAX_DOT_GRAPH_DEPTH    = 0
+GENERATE_LEGEND        = YES
+DOT_CLEANUP            = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+SEARCHENGINE           = NO
Index: /orxonox/branches/levelloader/doc/orxonox.1
===================================================================
--- /orxonox/branches/levelloader/doc/orxonox.1	(revision 3417)
+++ /orxonox/branches/levelloader/doc/orxonox.1	(revision 3417)
@@ -0,0 +1,63 @@
+.\"                              hey, Emacs:   -*- nroff -*-
+.\" orxonox 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; see the file COPYING.  If not, write to
+.\" the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+.\"
+.TH ORXONOX 1 "March 2, 2004"
+.\" Please update the above date whenever this man page is modified.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh        disable hyphenation
+.\" .hy        enable hyphenation
+.\" .ad l      left justify
+.\" .ad b      justify to both left and right margins (default)
+.\" .nf        disable filling
+.\" .fi        enable filling
+.\" .br        insert line break
+.\" .sp <n>    insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME
+orxonox \-  High-End Vertical Scroller
+.SH SYNOPSIS
+.B orxonox
+.RI [ options ]
+.SH DESCRIPTION
+\fBorxonox\fP is an open-source vertical scroller game programmed in C++,OpenGL and SDL. It's designed to run on all important platforms like Linux, MacOS X, Windows.
+.PP
+It washes your windows, mends your fences, mows your lawn...
+.SH OPTIONS
+\fBorxonox\fP accepts the following options:
+.TP
+.B \-h, \-\-help
+Show summary of options.
+.TP
+.B \-v=<i>, \-\-verbose=\<i\>
+Prints out: 0: nothing, 1: error, 2: warnings, 3: information, 4+: debug
+.TP
+.B \-g, \-\-gui 
+displays the gui prior to starting orxonox. (this is also the case, if the configuration-files do not exist in your home).
+.TP
+.B \-q, \-\-windowed
+starts orxonox in windowed mode. (not fullscreen)
+.TP
+.B \-\-no\-sound 
+Disables audio completely
+.TP
+.B \-w, \-\-wireframe 
+Renders everything in Wireframe mode.
+.TP
+.\" .SH "SEE ALSO"
+.\" .BR foo (1), 
+.\" .BR bar (1).
+.SH AUTHOR
+orx-crew <orxonox@orxonox.ethz.ch>.
Index: /orxonox/branches/levelloader/doc/program_examples/c++/README
===================================================================
--- /orxonox/branches/levelloader/doc/program_examples/c++/README	(revision 3417)
+++ /orxonox/branches/levelloader/doc/program_examples/c++/README	(revision 3417)
@@ -0,0 +1,12 @@
+
+c++ compile guide
+
+to compile the source orxonox:
+
+linux:
+you simply enter following line:
+g++ orxonox.cc -o orxonox
+this will compile orxonox source into a binary called orxonox
+
+
+
Index: /orxonox/branches/levelloader/doc/program_examples/c++/orxonox.cc
===================================================================
--- /orxonox/branches/levelloader/doc/program_examples/c++/orxonox.cc	(revision 3417)
+++ /orxonox/branches/levelloader/doc/program_examples/c++/orxonox.cc	(revision 3417)
@@ -0,0 +1,27 @@
+#include "orxonox.h"
+
+#include <iostream>
+#include <cstdio>
+
+using namespace std;
+
+
+Orxonox::Orxonox() { int x = 1; }
+Orxonox::~Orxonox() { int x = 1; }
+
+
+int Orxonox::getInfo() {  }
+int Orxonox::setInfo() { int z = 1; }
+
+
+
+int main( int argc, char** argv ) {
+  
+  Orxonox orx;
+  orx.getInfo();
+
+  cout << "test" << endl;
+
+  
+  return 0;
+}
Index: /orxonox/branches/levelloader/doc/program_examples/c++/orxonox.h
===================================================================
--- /orxonox/branches/levelloader/doc/program_examples/c++/orxonox.h	(revision 3417)
+++ /orxonox/branches/levelloader/doc/program_examples/c++/orxonox.h	(revision 3417)
@@ -0,0 +1,15 @@
+#ifndef ORXONOX_H
+#define ORXONOX_H
+
+class Orxonox {
+
+ public:
+  Orxonox();
+  ~Orxonox();
+
+  int getInfo();
+  int setInfo();
+
+};
+
+#endif
Index: /orxonox/branches/levelloader/doc/program_examples/openGL/Makefile
===================================================================
--- /orxonox/branches/levelloader/doc/program_examples/openGL/Makefile	(revision 3417)
+++ /orxonox/branches/levelloader/doc/program_examples/openGL/Makefile	(revision 3417)
@@ -0,0 +1,48 @@
+
+CPLUSPLUS = g++
+APP_LIB_DEPS = -lglut -lGLU -lGL -lm -L/usr/X11R6/lib -lXt -lX11
+GL_LIB = libGL.so
+GLU_LIB = libGLU.so
+GLUT_LIB = libglut.so
+GLW_LIB = libGLw.so
+OSMESA_LIB = libOSMesa.so
+
+CFLAGS = -O3 -ansi -pedantic -fPIC -ffast-math -I/usr/X11R6/include
+CXXFLAGS = -fPIC -O3
+GLUT_CFLAGS = -fexceptions
+
+TOP = ../..
+INCDIR = /usr/Mesa-6.0.1/include
+LIBDIR = /usr/Mesa-6.0.1/lib
+
+LIBS = -L$(LIBDIR) $(APP_LIB_DEPS)
+
+OSMESA_LIBS = -L$(LIBDIR) -lglut -lOSMesa -lGLU -lGL $(APP_LIB_DEPS)
+
+LIB_DEP = $(LIBDIR)/$(GL_LIB) $(LIBDIR)/$(GLU_LIB) $(LIBDIR)/$(GLUT_LIB)
+
+PROGS = \
+	cube \
+	gl_test \
+	double
+
+.SUFFIXES:
+.SUFFIXES: .c
+
+.c: $(LIB_DEP)
+	$(CPLUSPLUS) -I$(INCDIR) $(CFLAGS) $< $(LIBS) -o $@
+
+default: $(PROGS)
+
+help:
+	@echo "Cleaning targets:"
+	@echo "  clean		- remove most generated files"
+	@echo ""
+	@echo "Generic targets:"
+	@echo "  all		- Build all targets"
+	@echo ""
+	@echo "For further info see the README file"
+	
+clean:
+	rm -rf *.o *~ $(PROGS)
+
Index: /orxonox/branches/levelloader/doc/program_examples/openGL/compile
===================================================================
--- /orxonox/branches/levelloader/doc/program_examples/openGL/compile	(revision 3417)
+++ /orxonox/branches/levelloader/doc/program_examples/openGL/compile	(revision 3417)
@@ -0,0 +1,12 @@
+
+#gcc -I/usr/local/include -I/GL -I/usr/include -c $argv[1].c
+#echo 'compile finished - linking'
+#gcc -o $argv[1] -o32 gl_test.o \
+#-L/usr/local/lib -L/usr/lib -lglut -L/lib -lm
+
+gcc cube.c -lglut -ffast-math -lMesaGLU -lMesaGL -lm -L/usr/X11/lib \
+-L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lSM -lICE -o cube
+
+
+##end
+
Index: /orxonox/branches/levelloader/doc/program_examples/openGL/cube.c
===================================================================
--- /orxonox/branches/levelloader/doc/program_examples/openGL/cube.c	(revision 3417)
+++ /orxonox/branches/levelloader/doc/program_examples/openGL/cube.c	(revision 3417)
@@ -0,0 +1,87 @@
+
+
+#include <GL/glut.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+static float alpha = 0;
+
+void init(void) {
+
+  glClearColor(0.0, 0.0, 0.0, 0.0);
+  glShadeModel(GL_FLAT);
+}
+
+
+void display(void) {
+
+  glClear(GL_COLOR_BUFFER_BIT);
+  glColor3f(1.0, 1.0, 1.0);
+  glLoadIdentity();
+  
+  gluLookAt(5*cos(alpha), 5*sin(alpha), 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
+  glScalef(1.0, 2.0, 1.0);
+  glutWireCube(1.0);
+  glFlush();
+}
+
+
+void reshape(int w, int h) {
+
+  glViewport(0, 0, (GLsizei) w, (GLsizei)h);
+  glMatrixMode(GL_PROJECTION);
+  glLoadIdentity();
+  glFrustum(-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);
+  glMatrixMode(GL_MODELVIEW);
+}
+
+
+void spinDisplay( void ) {
+
+  alpha = alpha + 0.01;
+  if (alpha > 360)
+    alpha = 0;
+  glutPostRedisplay();
+}
+
+
+void mouse( int button, int state, int x, int y ) {
+
+  switch( button ) {
+  case GLUT_LEFT_BUTTON:
+    if (state == GLUT_DOWN) {
+      glutIdleFunc(spinDisplay);
+    }
+    break;
+  case GLUT_RIGHT_BUTTON:
+    if (state == GLUT_DOWN) {
+      glutIdleFunc(NULL);
+    }
+    break;
+  default:
+    break;
+  }
+}
+
+
+
+int main(int argc, char** argv) {
+
+  glutInit(&argc, argv);
+  glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
+  glutInitWindowSize(500, 500);
+  glutInitWindowPosition(100, 100);
+  glutCreateWindow(argv[0]);
+  init();
+  glutDisplayFunc(display);
+  glutReshapeFunc(reshape);
+  glutMouseFunc(mouse);
+  glutMainLoop();
+
+  return 0;
+}
+
+
+//EOF
Index: /orxonox/branches/levelloader/doc/program_examples/openGL/double.c
===================================================================
--- /orxonox/branches/levelloader/doc/program_examples/openGL/double.c	(revision 3417)
+++ /orxonox/branches/levelloader/doc/program_examples/openGL/double.c	(revision 3417)
@@ -0,0 +1,95 @@
+
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <GL/glut.h>
+
+
+static GLfloat spin = 0.0;
+
+void init( void ) {
+
+  glClearColor( 0.0, 1.0, 0.0, 0.0 );
+  glShadeModel( GL_FLAT );
+}
+
+
+void display( void ) {
+
+  glClear( GL_COLOR_BUFFER_BIT );
+  glPushMatrix();
+  glRotatef( spin, 0.0, 0.0, 1.0 );
+  glColor3f( 1.0, 1.0, 1.0 );
+  glRectf( -25.0, -25.0, 25.0, 25.0 );
+  glColor3f(1.0, 0.0, 0.0);
+  glRectf(-5.0, -5.0, 5.0, 5.0);
+
+  glPointSize(4.0);
+  glColor3f(0.0, 0.0, 1.0);
+  glBegin(GL_POINTS);
+  glVertex2f(6.0, 2.0);
+  glVertex2f(15.0, 14.0);
+  glVertex2f(12.0, 20.0);
+  glVertex2f(-3.0, 17.0);
+  glEnd();
+  
+
+  glPopMatrix();
+  glutSwapBuffers();
+}  
+
+
+void spinDisplay( void ) {
+
+  spin = spin + 2.0;
+  if( spin > 360.0 )
+    spin = spin - 360.0;
+  glutPostRedisplay();
+}
+
+
+void reshape(int w, int h) {
+
+  glViewport( 0, 0, (GLsizei) w, (GLsizei) h);
+  glMatrixMode(GL_PROJECTION);
+  glLoadIdentity();
+  glOrtho(-50.0, 50.0, -50.0, 50.0, -1.0, 1.0 );
+  glMatrixMode(GL_MODELVIEW);
+  glLoadIdentity();
+}
+
+
+void mouse( int button, int state, int x, int y ) {
+
+  switch( button ) {
+  case GLUT_LEFT_BUTTON:
+    if (state == GLUT_DOWN)
+      glutIdleFunc(spinDisplay);
+    break;
+  case GLUT_RIGHT_BUTTON:
+    if (state == GLUT_DOWN)
+      glutIdleFunc(NULL);
+    break;
+  default:
+    break;
+  }
+}
+
+
+
+int main( int argc, char** argv ) {
+
+  glutInit(&argc, argv);
+  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
+  glutInitWindowSize(250, 250);
+  glutInitWindowPosition(100, 100);
+  glutCreateWindow("rock-it");
+  init();
+  glutDisplayFunc(display);
+  glutReshapeFunc(reshape);
+  glutMouseFunc(mouse);
+  glutMainLoop();
+
+  return 0;
+}
Index: /orxonox/branches/levelloader/doc/program_examples/openGL/gl_test.c
===================================================================
--- /orxonox/branches/levelloader/doc/program_examples/openGL/gl_test.c	(revision 3417)
+++ /orxonox/branches/levelloader/doc/program_examples/openGL/gl_test.c	(revision 3417)
@@ -0,0 +1,51 @@
+
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <GL/glut.h>
+
+
+
+
+void display( void ) {
+
+  glClear( GL_COLOR_BUFFER_BIT );
+  glColor3f( 1.0, 1.0, 1.0 );
+  glBegin( GL_POLYGON );
+  glVertex3f( 0.25, 0.25, 0.0 );
+  glVertex3f( 0.75, 0.25, 0.0 );
+  glVertex3f( 0.75, 0.75, 0.0 );
+  glVertex3f( 0.25, 0.75, 0.0 );
+  glEnd();
+
+  glFlush();
+}
+
+
+
+void init( void ) {
+
+  glClearColor( 0.0, 0.0, 0.0, 0.0 );
+  glMatrixMode( GL_PROJECTION );
+  glLoadIdentity();
+  glOrtho( 0.0, 1.0, 0.0, 1.0, -1.0, 1.0 );
+  
+}
+
+
+
+
+int main( int argc, char** argv ) {
+  
+  glutInit( &argc, argv );
+  glutInitDisplayMode( GLUT_SINGLE | GLUT_RGB );
+  glutInitWindowSize( 250, 250 );
+  glutInitWindowPosition( 100, 100);
+  glutCreateWindow( "hello" );
+  init();
+  glutDisplayFunc( display );
+  glutMainLoop();
+
+  return 0;
+}
Index: /orxonox/branches/levelloader/install-sh
===================================================================
--- /orxonox/branches/levelloader/install-sh	(revision 3417)
+++ /orxonox/branches/levelloader/install-sh	(revision 3417)
@@ -0,0 +1,294 @@
+#!/bin/sh
+#
+# install - install a program, script, or datafile
+#
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# 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 "$0: no input file specified" >&2
+	exit 1
+else
+	:
+fi
+
+if [ x"$dir_arg" != x ]; then
+	dst=$src
+	src=""
+
+	if [ -d "$dst" ]; then
+		instcmd=:
+		chmodcmd=""
+	else
+		instcmd=$mkdirprog
+	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" ] || [ -d "$src" ]
+	then
+		:
+	else
+		echo "$0: $src does not exist" >&2
+		exit 1
+	fi
+
+	if [ x"$dst" = x ]
+	then
+		echo "$0: no destination specified" >&2
+		exit 1
+	else
+		:
+	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
+		:
+	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
+		:
+	fi
+
+	pathcomp=$pathcomp/
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+	$doit $instcmd "$dst" &&
+
+	if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi &&
+	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi &&
+	if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi &&
+	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; 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
+		:
+	fi
+
+# Make a couple of temp file names in the proper directory.
+
+	dsttmp=$dstdir/_inst.$$_
+	rmtmp=$dstdir/_rm.$$_
+
+# Trap to clean up temp files at exit.
+
+	trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
+	trap '(exit $?); exit' 1 2 13 15
+
+# Move or copy the file name to the temp name
+
+	$doit $instcmd "$src" "$dsttmp" &&
+
+# 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 :;fi &&
+	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi &&
+	if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi &&
+	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi &&
+
+# Now remove or move aside any old file at destination location.  We try this
+# two ways since rm can't unlink itself on some systems and the destination
+# file might be busy for other reasons.  In this case, the final cleanup
+# might fail but the new file should still install successfully.
+
+{
+	if [ -f "$dstdir/$dstfile" ]
+	then
+		$doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null ||
+		$doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null ||
+		{
+		  echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
+		  (exit 1); exit
+		}
+	else
+		:
+	fi
+} &&
+
+# Now rename the file to the real destination.
+
+	$doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
+
+fi &&
+
+# The final little trick to "correctly" pass the exit status to the exit trap.
+
+{
+	(exit 0); exit
+}
Index: /orxonox/branches/levelloader/missing
===================================================================
--- /orxonox/branches/levelloader/missing	(revision 3417)
+++ /orxonox/branches/levelloader/missing	(revision 3417)
@@ -0,0 +1,336 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# 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, 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.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+  echo 1>&2 "Try \`$0 --help' for more information"
+  exit 1
+fi
+
+run=:
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+  configure_ac=configure.ac
+else
+  configure_ac=configure.in
+fi
+
+case "$1" in
+--run)
+  # Try to run requested program, and just exit if it succeeds.
+  run=
+  shift
+  "$@" && exit 0
+  ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case "$1" in
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+  --run           try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+  aclocal      touch file \`aclocal.m4'
+  autoconf     touch file \`configure'
+  autoheader   touch file \`config.h.in'
+  automake     touch all \`Makefile.in' files
+  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
+  flex         create \`lex.yy.c', if possible, from existing .c
+  help2man     touch the output file
+  lex          create \`lex.yy.c', if possible, from existing .c
+  makeinfo     touch the output file
+  tar          try tar, gnutar, gtar, then tar without non-portable flags
+  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]"
+    ;;
+
+  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+    echo "missing 0.4 - GNU automake"
+    ;;
+
+  -*)
+    echo 1>&2 "$0: Unknown \`$1' option"
+    echo 1>&2 "Try \`$0 --help' for more information"
+    exit 1
+    ;;
+
+  aclocal*)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
+         to install the \`Automake' and \`Perl' packages.  Grab them from
+         any GNU archive site."
+    touch aclocal.m4
+    ;;
+
+  autoconf)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified \`${configure_ac}'.  You might want to install the
+         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
+         archive site."
+    touch configure
+    ;;
+
+  autoheader)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
+         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
+         from any GNU archive site."
+    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+    test -z "$files" && files="config.h"
+    touch_files=
+    for f in $files; do
+      case "$f" in
+      *:*) touch_files="$touch_files "`echo "$f" |
+				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+      *) touch_files="$touch_files $f.in";;
+      esac
+    done
+    touch $touch_files
+    ;;
+
+  automake*)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+         You might want to install the \`Automake' and \`Perl' packages.
+         Grab them from any GNU archive site."
+    find . -type f -name Makefile.am -print |
+	   sed 's/\.am$/.in/' |
+	   while read f; do touch "$f"; done
+    ;;
+
+  autom4te)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
+    echo 1>&2 "\
+WARNING: \`$1' is needed, and you do not seem to have it handy on your
+         system.  You might have modified some files without having the
+         proper tools for further handling them.
+         You can get \`$1' as part of \`Autoconf' from any GNU
+         archive site."
+
+    file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
+    test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
+    if test -f "$file"; then
+	touch $file
+    else
+	test -z "$file" || exec >$file
+	echo "#! /bin/sh"
+	echo "# Created by GNU Automake missing as a replacement of"
+	echo "#  $ $@"
+	echo "exit 0"
+	chmod +x $file
+	exit 1
+    fi
+    ;;
+
+  bison|yacc)
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified a \`.y' file.  You may need the \`Bison' package
+         in order for those modifications to take effect.  You can get
+         \`Bison' from any GNU archive site."
+    rm -f y.tab.c y.tab.h
+    if [ $# -ne 1 ]; then
+        eval LASTARG="\${$#}"
+	case "$LASTARG" in
+	*.y)
+	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+	    if [ -f "$SRCFILE" ]; then
+	         cp "$SRCFILE" y.tab.c
+	    fi
+	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+	    if [ -f "$SRCFILE" ]; then
+	         cp "$SRCFILE" y.tab.h
+	    fi
+	  ;;
+	esac
+    fi
+    if [ ! -f y.tab.h ]; then
+	echo >y.tab.h
+    fi
+    if [ ! -f y.tab.c ]; then
+	echo 'main() { return 0; }' >y.tab.c
+    fi
+    ;;
+
+  lex|flex)
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified a \`.l' file.  You may need the \`Flex' package
+         in order for those modifications to take effect.  You can get
+         \`Flex' from any GNU archive site."
+    rm -f lex.yy.c
+    if [ $# -ne 1 ]; then
+        eval LASTARG="\${$#}"
+	case "$LASTARG" in
+	*.l)
+	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+	    if [ -f "$SRCFILE" ]; then
+	         cp "$SRCFILE" lex.yy.c
+	    fi
+	  ;;
+	esac
+    fi
+    if [ ! -f lex.yy.c ]; then
+	echo 'main() { return 0; }' >lex.yy.c
+    fi
+    ;;
+
+  help2man)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+	 you modified a dependency of a manual page.  You may need the
+	 \`Help2man' package in order for those modifications to take
+	 effect.  You can get \`Help2man' from any GNU archive site."
+
+    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+    if test -z "$file"; then
+	file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
+    fi
+    if [ -f "$file" ]; then
+	touch $file
+    else
+	test -z "$file" || exec >$file
+	echo ".ab help2man is required to generate this page"
+	exit 1
+    fi
+    ;;
+
+  makeinfo)
+    if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then
+       # We have makeinfo, but it failed.
+       exit 1
+    fi
+
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified a \`.texi' or \`.texinfo' file, or any other file
+         indirectly affecting the aspect of the manual.  The spurious
+         call might also be the consequence of using a buggy \`make' (AIX,
+         DU, IRIX).  You might want to install the \`Texinfo' package or
+         the \`GNU make' package.  Grab either from any GNU archive site."
+    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+    if test -z "$file"; then
+      file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+      file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
+    fi
+    touch $file
+    ;;
+
+  tar)
+    shift
+    if test -n "$run"; then
+      echo 1>&2 "ERROR: \`tar' requires --run"
+      exit 1
+    fi
+
+    # We have already tried tar in the generic part.
+    # Look for gnutar/gtar before invocation to avoid ugly error
+    # messages.
+    if (gnutar --version > /dev/null 2>&1); then
+       gnutar "$@" && exit 0
+    fi
+    if (gtar --version > /dev/null 2>&1); then
+       gtar "$@" && exit 0
+    fi
+    firstarg="$1"
+    if shift; then
+	case "$firstarg" in
+	*o*)
+	    firstarg=`echo "$firstarg" | sed s/o//`
+	    tar "$firstarg" "$@" && exit 0
+	    ;;
+	esac
+	case "$firstarg" in
+	*h*)
+	    firstarg=`echo "$firstarg" | sed s/h//`
+	    tar "$firstarg" "$@" && exit 0
+	    ;;
+	esac
+    fi
+
+    echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+         You may want to install GNU tar or Free paxutils, or check the
+         command line arguments."
+    exit 1
+    ;;
+
+  *)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, and you do not seem to have it handy on your
+         system.  You might have modified some files without having the
+         proper tools for further handling them.  Check the \`README' file,
+         it often tells you about the needed prerequisites for installing
+         this package.  You may also peek at any GNU archive site, in case
+         some other package would contain this missing \`$1' program."
+    exit 1
+    ;;
+esac
+
+exit 0
Index: /orxonox/branches/levelloader/mkinstalldirs
===================================================================
--- /orxonox/branches/levelloader/mkinstalldirs	(revision 3417)
+++ /orxonox/branches/levelloader/mkinstalldirs	(revision 3417)
@@ -0,0 +1,111 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain
+
+errstatus=0
+dirmode=""
+
+usage="\
+Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
+
+# process command line arguments
+while test $# -gt 0 ; do
+  case $1 in
+    -h | --help | --h*)         # -h for help
+      echo "$usage" 1>&2
+      exit 0
+      ;;
+    -m)                         # -m PERM arg
+      shift
+      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
+      dirmode=$1
+      shift
+      ;;
+    --)                         # stop option processing
+      shift
+      break
+      ;;
+    -*)                         # unknown option
+      echo "$usage" 1>&2
+      exit 1
+      ;;
+    *)                          # first non-opt arg
+      break
+      ;;
+  esac
+done
+
+for file
+do
+  if test -d "$file"; then
+    shift
+  else
+    break
+  fi
+done
+
+case $# in
+  0) exit 0 ;;
+esac
+
+case $dirmode in
+  '')
+    if mkdir -p -- . 2>/dev/null; then
+      echo "mkdir -p -- $*"
+      exec mkdir -p -- "$@"
+    fi
+    ;;
+  *)
+    if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
+      echo "mkdir -m $dirmode -p -- $*"
+      exec mkdir -m "$dirmode" -p -- "$@"
+    fi
+    ;;
+esac
+
+for file
+do
+  set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+  shift
+
+  pathcomp=
+  for d
+  do
+    pathcomp="$pathcomp$d"
+    case $pathcomp in
+      -*) pathcomp=./$pathcomp ;;
+    esac
+
+    if test ! -d "$pathcomp"; then
+      echo "mkdir $pathcomp"
+
+      mkdir "$pathcomp" || lasterr=$?
+
+      if test ! -d "$pathcomp"; then
+  	errstatus=$lasterr
+      else
+  	if test ! -z "$dirmode"; then
+	  echo "chmod $dirmode $pathcomp"
+    	  lasterr=""
+  	  chmod "$dirmode" "$pathcomp" || lasterr=$?
+
+  	  if test ! -z "$lasterr"; then
+  	    errstatus=$lasterr
+  	  fi
+  	fi
+      fi
+    fi
+
+    pathcomp="$pathcomp/"
+  done
+done
+
+exit $errstatus
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# End:
+# mkinstalldirs ends here
Index: /orxonox/branches/levelloader/src/INSTALL
===================================================================
--- /orxonox/branches/levelloader/src/INSTALL	(revision 3417)
+++ /orxonox/branches/levelloader/src/INSTALL	(revision 3417)
@@ -0,0 +1,19 @@
+
+INSTALLATION INSTRUCTIONS FOR ORXONOX
+=====================================
+
+Installing an using orx is very simple: Just type:
+
+cd ../orxonox/trunk
+./configure
+make
+./bin/orxonox
+
+
+BUGS
+====
+Send bug reports to orxonox-dev@mail.datacore.ch
+
+
+
+#EOF
Index: /orxonox/branches/levelloader/src/Makefile.am
===================================================================
--- /orxonox/branches/levelloader/src/Makefile.am	(revision 3417)
+++ /orxonox/branches/levelloader/src/Makefile.am	(revision 3417)
@@ -0,0 +1,118 @@
+#AM_CXXFLAGS=""
+AM_LDFLAGS= $(MWINDOWS)
+
+#"-O3 -pedantic -fPIC -ffast-math -I/usr/X11R6/include"
+
+
+bin_PROGRAMS=orxonox
+
+orxonox_SOURCES= orxonox.cc \
+		 world.cc \
+		 player.cc \
+		 collision.cc \
+		 data_tank.cc \
+		 world_entity.cc \
+		 vector.cc \
+		 camera.cc \
+		 command_node.cc \
+		 ini_parser.cc \
+		 keynames.cc \
+		 track.cc \
+		 base_entity.cc \
+		 game_loader.cc \
+		 campaign.cc \
+		 story_entity.cc \
+		 environment.cc \
+		 importer/model.cc \
+		 importer/objModel.cc \
+		 importer/array.cc \
+		 importer/material.cc \
+		 importer/texture.cc \
+		 list.cc \
+		 p_node.cc \
+		 null_parent.cc \
+		 base_object.cc \
+		 helper_parent.cc \
+		 track_manager.cc \
+		 matrix.cc \
+		 curve.cc \
+		 glmenu_imagescreen.cc
+
+
+noinst_HEADERS = ability.h \
+		 data_tank.h \
+		 collision.h \
+		 npc.h \
+		 stdincl.h \
+		 ai.h \
+		 environment.h \
+		 orxonox.h \
+		 synchronisable.h \
+		 base_entity.h \
+		 error.h \
+		 player.h \
+		 track.h \
+		 camera.h \
+		 ini_parser.h \
+		 power_up.h \
+		 vector.h \
+		 keynames.h \
+		 proto_class.h \
+		 world.h \
+		 command_node.h \
+		 list.h \
+		 shoot_laser.h \
+		 world_entity.h \
+		 message_structures.h \
+		 shoot_rocket.h \
+		 list_template.h \
+		 story_entity.h \
+		 story_def.h \
+		 game_loader.h \
+		 campaign.h \
+		 p_node.h \
+		 null_parent.h \
+		 base_object.h \
+		 helper_parent.h \
+		 track_manager.h \
+		 matrix.h \
+		 curve.h \
+		 glmenu_imagescreen.h \
+		 debug.h
+
+
+## orxonox.conf will be used from home-dir instead.
+EXTRA_DIST = orxonox.conf
+
+### GTK_RELATED
+if HAVE_GTK2
+  GTK_PROGS =console
+else
+  GTK_PROGS =
+endif
+if SUB_PROJECTS
+  SUB_PROGS = importer \
+	      gui \
+	      $(GTK_PROGS)
+else
+  SUB_PROGS = 
+endif
+
+SUBDIRS = . \
+	  $(SUB_PROGS)
+
+#  uncomment the following if orxonox requires the math library
+#orxonox_LDADD=-lm
+
+#EXTRA_DIST=orxonox.lsm.in orxonox.spec.in orxonox.texinfo
+
+#  if you write a self-test script named `chk', uncomment the
+#  following and add `chk' to the EXTRA_DIST list
+#TESTS=chk
+
+#  build and install the .info pages
+#info_TEXINFOS = orxonox.texinfo
+#orxonox_TEXINFOS = gpl.texinfo
+
+#  install the man pages
+#man_MANS=orxonox.1
Index: /orxonox/branches/levelloader/src/Makefile.in
===================================================================
--- /orxonox/branches/levelloader/src/Makefile.in	(revision 3417)
+++ /orxonox/branches/levelloader/src/Makefile.in	(revision 3417)
@@ -0,0 +1,766 @@
+# Makefile.in generated by automake 1.8.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+@SET_MAKE@
+
+
+SOURCES = $(orxonox_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+bin_PROGRAMS = orxonox$(EXEEXT)
+subdir = src
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in INSTALL
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS)
+am_orxonox_OBJECTS = orxonox.$(OBJEXT) world.$(OBJEXT) \
+	player.$(OBJEXT) collision.$(OBJEXT) data_tank.$(OBJEXT) \
+	world_entity.$(OBJEXT) vector.$(OBJEXT) camera.$(OBJEXT) \
+	command_node.$(OBJEXT) ini_parser.$(OBJEXT) keynames.$(OBJEXT) \
+	track.$(OBJEXT) base_entity.$(OBJEXT) game_loader.$(OBJEXT) \
+	campaign.$(OBJEXT) story_entity.$(OBJEXT) \
+	environment.$(OBJEXT) model.$(OBJEXT) objModel.$(OBJEXT) \
+	array.$(OBJEXT) material.$(OBJEXT) texture.$(OBJEXT) \
+	list.$(OBJEXT) p_node.$(OBJEXT) null_parent.$(OBJEXT) \
+	base_object.$(OBJEXT) helper_parent.$(OBJEXT) \
+	track_manager.$(OBJEXT) matrix.$(OBJEXT) curve.$(OBJEXT) \
+	glmenu_imagescreen.$(OBJEXT)
+orxonox_OBJECTS = $(am_orxonox_OBJECTS)
+orxonox_LDADD = $(LDADD)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/array.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/base_entity.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/base_object.Po ./$(DEPDIR)/camera.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/campaign.Po ./$(DEPDIR)/collision.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/command_node.Po ./$(DEPDIR)/curve.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/data_tank.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/environment.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/game_loader.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/glmenu_imagescreen.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/helper_parent.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/ini_parser.Po ./$(DEPDIR)/keynames.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/list.Po ./$(DEPDIR)/material.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/matrix.Po ./$(DEPDIR)/model.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/null_parent.Po ./$(DEPDIR)/objModel.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/orxonox.Po ./$(DEPDIR)/p_node.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/player.Po ./$(DEPDIR)/story_entity.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/texture.Po ./$(DEPDIR)/track.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/track_manager.Po ./$(DEPDIR)/vector.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/world.Po ./$(DEPDIR)/world_entity.Po
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+SOURCES = $(orxonox_SOURCES)
+DIST_SOURCES = $(orxonox_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-exec-recursive install-info-recursive \
+	install-recursive installcheck-recursive installdirs-recursive \
+	pdf-recursive ps-recursive uninstall-info-recursive \
+	uninstall-recursive
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = . importer gui console
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEBUG = @DEBUG@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOXYGEN = @DOXYGEN@
+DOXYGEN_FALSE = @DOXYGEN_FALSE@
+DOXYGEN_TRUE = @DOXYGEN_TRUE@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GTK2_CFLAGS = @GTK2_CFLAGS@
+GTK2_LIBS = @GTK2_LIBS@
+HAVE_GTK2_FALSE = @HAVE_GTK2_FALSE@
+HAVE_GTK2_TRUE = @HAVE_GTK2_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MSBITFIELDS = @MSBITFIELDS@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SUB_PROJECTS_FALSE = @SUB_PROJECTS_FALSE@
+SUB_PROJECTS_TRUE = @SUB_PROJECTS_TRUE@
+VERSION = @VERSION@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+
+#AM_CXXFLAGS=""
+AM_LDFLAGS = $(MWINDOWS)
+orxonox_SOURCES = orxonox.cc \
+		 world.cc \
+		 player.cc \
+		 collision.cc \
+		 data_tank.cc \
+		 world_entity.cc \
+		 vector.cc \
+		 camera.cc \
+		 command_node.cc \
+		 ini_parser.cc \
+		 keynames.cc \
+		 track.cc \
+		 base_entity.cc \
+		 game_loader.cc \
+		 campaign.cc \
+		 story_entity.cc \
+		 environment.cc \
+		 importer/model.cc \
+		 importer/objModel.cc \
+		 importer/array.cc \
+		 importer/material.cc \
+		 importer/texture.cc \
+		 list.cc \
+		 p_node.cc \
+		 null_parent.cc \
+		 base_object.cc \
+		 helper_parent.cc \
+		 track_manager.cc \
+		 matrix.cc \
+		 curve.cc \
+		 glmenu_imagescreen.cc
+
+noinst_HEADERS = ability.h \
+		 data_tank.h \
+		 collision.h \
+		 npc.h \
+		 stdincl.h \
+		 ai.h \
+		 environment.h \
+		 orxonox.h \
+		 synchronisable.h \
+		 base_entity.h \
+		 error.h \
+		 player.h \
+		 track.h \
+		 camera.h \
+		 ini_parser.h \
+		 power_up.h \
+		 vector.h \
+		 keynames.h \
+		 proto_class.h \
+		 world.h \
+		 command_node.h \
+		 list.h \
+		 shoot_laser.h \
+		 world_entity.h \
+		 message_structures.h \
+		 shoot_rocket.h \
+		 list_template.h \
+		 story_entity.h \
+		 story_def.h \
+		 game_loader.h \
+		 campaign.h \
+		 p_node.h \
+		 null_parent.h \
+		 base_object.h \
+		 helper_parent.h \
+		 track_manager.h \
+		 matrix.h \
+		 curve.h \
+		 glmenu_imagescreen.h \
+		 debug.h
+
+EXTRA_DIST = orxonox.conf
+@HAVE_GTK2_FALSE@GTK_PROGS = 
+
+### GTK_RELATED
+@HAVE_GTK2_TRUE@GTK_PROGS = console
+@SUB_PROJECTS_FALSE@SUB_PROGS = 
+@SUB_PROJECTS_TRUE@SUB_PROGS = importer \
+@SUB_PROJECTS_TRUE@	      gui \
+@SUB_PROJECTS_TRUE@	      $(GTK_PROGS)
+
+SUBDIRS = . \
+	  $(SUB_PROGS)
+
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .cc .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  src/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign  src/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  if test -f $$p \
+	  ; then \
+	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+	   echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+	   $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+	  else :; fi; \
+	done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+	  echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(bindir)/$$f"; \
+	done
+
+clean-binPROGRAMS:
+	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+orxonox$(EXEEXT): $(orxonox_OBJECTS) $(orxonox_DEPENDENCIES) 
+	@rm -f orxonox$(EXEEXT)
+	$(CXXLINK) $(orxonox_LDFLAGS) $(orxonox_OBJECTS) $(orxonox_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/array.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base_entity.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base_object.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/camera.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/campaign.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/collision.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/command_node.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curve.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/data_tank.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/environment.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/game_loader.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glmenu_imagescreen.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/helper_parent.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ini_parser.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keynames.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/material.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matrix.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/model.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/null_parent.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/objModel.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orxonox.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/p_node.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/player.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/story_entity.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/texture.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/track.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/track_manager.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vector.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/world.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/world_entity.Po@am__quote@
+
+.cc.o:
+@am__fastdepCXX_TRUE@	if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cc.obj:
+@am__fastdepCXX_TRUE@	if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+model.o: importer/model.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT model.o -MD -MP -MF "$(DEPDIR)/model.Tpo" -c -o model.o `test -f 'importer/model.cc' || echo '$(srcdir)/'`importer/model.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/model.Tpo" "$(DEPDIR)/model.Po"; else rm -f "$(DEPDIR)/model.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='importer/model.cc' object='model.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/model.Po' tmpdepfile='$(DEPDIR)/model.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o model.o `test -f 'importer/model.cc' || echo '$(srcdir)/'`importer/model.cc
+
+model.obj: importer/model.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT model.obj -MD -MP -MF "$(DEPDIR)/model.Tpo" -c -o model.obj `if test -f 'importer/model.cc'; then $(CYGPATH_W) 'importer/model.cc'; else $(CYGPATH_W) '$(srcdir)/importer/model.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/model.Tpo" "$(DEPDIR)/model.Po"; else rm -f "$(DEPDIR)/model.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='importer/model.cc' object='model.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/model.Po' tmpdepfile='$(DEPDIR)/model.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o model.obj `if test -f 'importer/model.cc'; then $(CYGPATH_W) 'importer/model.cc'; else $(CYGPATH_W) '$(srcdir)/importer/model.cc'; fi`
+
+objModel.o: importer/objModel.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT objModel.o -MD -MP -MF "$(DEPDIR)/objModel.Tpo" -c -o objModel.o `test -f 'importer/objModel.cc' || echo '$(srcdir)/'`importer/objModel.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/objModel.Tpo" "$(DEPDIR)/objModel.Po"; else rm -f "$(DEPDIR)/objModel.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='importer/objModel.cc' object='objModel.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/objModel.Po' tmpdepfile='$(DEPDIR)/objModel.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o objModel.o `test -f 'importer/objModel.cc' || echo '$(srcdir)/'`importer/objModel.cc
+
+objModel.obj: importer/objModel.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT objModel.obj -MD -MP -MF "$(DEPDIR)/objModel.Tpo" -c -o objModel.obj `if test -f 'importer/objModel.cc'; then $(CYGPATH_W) 'importer/objModel.cc'; else $(CYGPATH_W) '$(srcdir)/importer/objModel.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/objModel.Tpo" "$(DEPDIR)/objModel.Po"; else rm -f "$(DEPDIR)/objModel.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='importer/objModel.cc' object='objModel.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/objModel.Po' tmpdepfile='$(DEPDIR)/objModel.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o objModel.obj `if test -f 'importer/objModel.cc'; then $(CYGPATH_W) 'importer/objModel.cc'; else $(CYGPATH_W) '$(srcdir)/importer/objModel.cc'; fi`
+
+array.o: importer/array.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT array.o -MD -MP -MF "$(DEPDIR)/array.Tpo" -c -o array.o `test -f 'importer/array.cc' || echo '$(srcdir)/'`importer/array.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/array.Tpo" "$(DEPDIR)/array.Po"; else rm -f "$(DEPDIR)/array.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='importer/array.cc' object='array.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/array.Po' tmpdepfile='$(DEPDIR)/array.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o array.o `test -f 'importer/array.cc' || echo '$(srcdir)/'`importer/array.cc
+
+array.obj: importer/array.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT array.obj -MD -MP -MF "$(DEPDIR)/array.Tpo" -c -o array.obj `if test -f 'importer/array.cc'; then $(CYGPATH_W) 'importer/array.cc'; else $(CYGPATH_W) '$(srcdir)/importer/array.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/array.Tpo" "$(DEPDIR)/array.Po"; else rm -f "$(DEPDIR)/array.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='importer/array.cc' object='array.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/array.Po' tmpdepfile='$(DEPDIR)/array.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o array.obj `if test -f 'importer/array.cc'; then $(CYGPATH_W) 'importer/array.cc'; else $(CYGPATH_W) '$(srcdir)/importer/array.cc'; fi`
+
+material.o: importer/material.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT material.o -MD -MP -MF "$(DEPDIR)/material.Tpo" -c -o material.o `test -f 'importer/material.cc' || echo '$(srcdir)/'`importer/material.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/material.Tpo" "$(DEPDIR)/material.Po"; else rm -f "$(DEPDIR)/material.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='importer/material.cc' object='material.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/material.Po' tmpdepfile='$(DEPDIR)/material.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o material.o `test -f 'importer/material.cc' || echo '$(srcdir)/'`importer/material.cc
+
+material.obj: importer/material.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT material.obj -MD -MP -MF "$(DEPDIR)/material.Tpo" -c -o material.obj `if test -f 'importer/material.cc'; then $(CYGPATH_W) 'importer/material.cc'; else $(CYGPATH_W) '$(srcdir)/importer/material.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/material.Tpo" "$(DEPDIR)/material.Po"; else rm -f "$(DEPDIR)/material.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='importer/material.cc' object='material.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/material.Po' tmpdepfile='$(DEPDIR)/material.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o material.obj `if test -f 'importer/material.cc'; then $(CYGPATH_W) 'importer/material.cc'; else $(CYGPATH_W) '$(srcdir)/importer/material.cc'; fi`
+
+texture.o: importer/texture.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT texture.o -MD -MP -MF "$(DEPDIR)/texture.Tpo" -c -o texture.o `test -f 'importer/texture.cc' || echo '$(srcdir)/'`importer/texture.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/texture.Tpo" "$(DEPDIR)/texture.Po"; else rm -f "$(DEPDIR)/texture.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='importer/texture.cc' object='texture.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/texture.Po' tmpdepfile='$(DEPDIR)/texture.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o texture.o `test -f 'importer/texture.cc' || echo '$(srcdir)/'`importer/texture.cc
+
+texture.obj: importer/texture.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT texture.obj -MD -MP -MF "$(DEPDIR)/texture.Tpo" -c -o texture.obj `if test -f 'importer/texture.cc'; then $(CYGPATH_W) 'importer/texture.cc'; else $(CYGPATH_W) '$(srcdir)/importer/texture.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/texture.Tpo" "$(DEPDIR)/texture.Po"; else rm -f "$(DEPDIR)/texture.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='importer/texture.cc' object='texture.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/texture.Po' tmpdepfile='$(DEPDIR)/texture.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o texture.obj `if test -f 'importer/texture.cc'; then $(CYGPATH_W) 'importer/texture.cc'; else $(CYGPATH_W) '$(srcdir)/importer/texture.cc'; fi`
+uninstall-info-am:
+
+# 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.
+$(RECURSIVE_TARGETS):
+	@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; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	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
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	    $$tags $$unique; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+	list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || mkdir "$(distdir)/$$subdir" \
+	    || exit 1; \
+	    (cd $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="../$(top_distdir)" \
+	        distdir="../$(distdir)/$$subdir" \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(PROGRAMS) $(HEADERS)
+installdirs: installdirs-recursive
+installdirs-am:
+	for dir in "$(DESTDIR)$(bindir)"; do \
+	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
+	done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-info-am
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
+	clean clean-binPROGRAMS clean-generic clean-recursive ctags \
+	ctags-recursive distclean distclean-compile distclean-generic \
+	distclean-recursive distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-binPROGRAMS \
+	install-data install-data-am install-exec install-exec-am \
+	install-info install-info-am install-man install-strip \
+	installcheck installcheck-am installdirs installdirs-am \
+	maintainer-clean maintainer-clean-generic \
+	maintainer-clean-recursive mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-recursive pdf pdf-am ps ps-am \
+	tags tags-recursive uninstall uninstall-am \
+	uninstall-binPROGRAMS uninstall-info-am
+
+
+#  uncomment the following if orxonox requires the math library
+#orxonox_LDADD=-lm
+
+#EXTRA_DIST=orxonox.lsm.in orxonox.spec.in orxonox.texinfo
+
+#  if you write a self-test script named `chk', uncomment the
+#  following and add `chk' to the EXTRA_DIST list
+#TESTS=chk
+
+#  build and install the .info pages
+#info_TEXINFOS = orxonox.texinfo
+#orxonox_TEXINFOS = gpl.texinfo
+
+#  install the man pages
+#man_MANS=orxonox.1
+# 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:
Index: /orxonox/branches/levelloader/src/ability.cc
===================================================================
--- /orxonox/branches/levelloader/src/ability.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/ability.cc	(revision 3417)
@@ -0,0 +1,32 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Patrick Boenzli
+   co-programmer: ...
+*/
+
+
+#include "ability.h"
+
+
+using namespace std;
+
+
+
+Ability::Ability () {}
+
+
+
+Ability::~Ability () {}
+
+
Index: /orxonox/branches/levelloader/src/ability.h
===================================================================
--- /orxonox/branches/levelloader/src/ability.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/ability.h	(revision 3417)
@@ -0,0 +1,16 @@
+
+#ifndef _ABILITY_H
+#define _ABILITY_H
+
+#include "data_tank.h"
+
+
+class Ability {
+
+ public:
+  Ability ();
+  ~Ability ();
+
+};
+
+#endif /* _ABILITY_H */
Index: /orxonox/branches/levelloader/src/ai.cc
===================================================================
--- /orxonox/branches/levelloader/src/ai.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/ai.cc	(revision 3417)
@@ -0,0 +1,32 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Patrick Boenzli
+   co-programmer: ...
+*/
+
+
+#include "ai.h"
+
+
+using namespace std;
+
+
+
+AI::AI () {}
+
+
+
+AI::~AI () {}
+
+
Index: /orxonox/branches/levelloader/src/ai.h
===================================================================
--- /orxonox/branches/levelloader/src/ai.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/ai.h	(revision 3417)
@@ -0,0 +1,15 @@
+
+#ifndef _AI_H
+#define _AI_H
+
+#include "data_tank.h"
+
+class AI {
+
+ public:
+  AI ();
+  ~AI ();
+
+};
+
+#endif /* _AI_H */
Index: /orxonox/branches/levelloader/src/base_entity.cc
===================================================================
--- /orxonox/branches/levelloader/src/base_entity.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/base_entity.cc	(revision 3417)
@@ -0,0 +1,32 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Patrick Boenzli
+   co-programmer: ...
+*/
+
+
+#include "base_entity.h"
+
+
+using namespace std;
+
+
+
+BaseEntity::BaseEntity () {}
+
+
+
+BaseEntity::~BaseEntity () {}
+
+
Index: /orxonox/branches/levelloader/src/base_entity.h
===================================================================
--- /orxonox/branches/levelloader/src/base_entity.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/base_entity.h	(revision 3417)
@@ -0,0 +1,16 @@
+
+#ifndef _BASE_ENTITY_H
+#define _BASE_ENTITY_H
+
+#include "stdincl.h"
+
+
+class BaseEntity {
+
+ public:
+  BaseEntity ();
+  ~BaseEntity ();
+
+};
+
+#endif /* _BASE_ENTITY_H */
Index: /orxonox/branches/levelloader/src/base_object.cc
===================================================================
--- /orxonox/branches/levelloader/src/base_object.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/base_object.cc	(revision 3417)
@@ -0,0 +1,48 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Patrick Boenzli
+   co-programmer: ...
+*/
+
+
+#include "base_object.h"
+
+
+using namespace std;
+
+
+/**
+   \brief standard constructor
+*/
+BaseObject::BaseObject () {}
+
+
+/**
+   \brief standard deconstructor
+*/
+BaseObject::~BaseObject () {}
+
+
+void BaseObject::setClassName (char* className)
+{
+  this->className = className;
+}
+
+
+bool BaseObject::isA (char* className)
+{
+  if( this->className == className)
+    return false;
+  return true;
+}
Index: /orxonox/branches/levelloader/src/base_object.h
===================================================================
--- /orxonox/branches/levelloader/src/base_object.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/base_object.h	(revision 3417)
@@ -0,0 +1,27 @@
+/*! 
+    \file proto_class.h
+    \brief Definition of the proto class template, used quickly start work
+*/
+
+
+#ifndef _BASE_OBJECT_H
+#define _BASE_OBJECT_H
+
+#include "stdincl.h"
+
+
+class BaseObject {
+
+ public:
+  BaseObject ();
+  ~BaseObject ();
+
+  void setClassName (char* className);
+  bool isA (char* className);
+
+ private:
+  char* className;
+
+};
+
+#endif /* _BASE_OBJECT_H */
Index: /orxonox/branches/levelloader/src/camera.cc
===================================================================
--- /orxonox/branches/levelloader/src/camera.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/camera.cc	(revision 3417)
@@ -0,0 +1,286 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Christian Meyer
+   co-programmer: ...
+*/
+
+#include "camera.h"
+#include "world.h"
+#include "world_entity.h"
+
+using namespace std;
+
+/**
+   \brief creates a Camera
+   
+   This standard constructor sets all parameters to zero
+*/
+Camera::Camera (World* world)
+{
+  this->world = world;
+  this->bound = NULL;
+  /* give it some physical live */
+  this->m = 10;
+  this->a = new Vector(0.0, 0.0, 0.0);
+  this->v = new Vector(0.0, 0.0, 0.0);
+  this->fs = new Vector(0.0, 0.0, 0.0);
+  this->cameraMode = NORMAL;
+  this->deltaTime = 3000.0;
+  this->cameraOffset = 1.0;
+  this->cameraOffsetZ = 10.0;
+  this->t = 0.0;
+
+
+  this->setDrawable (false);
+}
+
+/**
+   \brief default destructor
+*/
+Camera::~Camera ()
+{
+}
+
+/**
+   \brief time based actualisation of camera parameters
+   \param deltaT: The amount of time that has passed in milliseconds
+   
+   This is called by the World in every time_slice, use it to do fancy time dependant effects (such 
+   as smooth camera movement or swaying).
+*/
+void Camera::timeSlice (Uint32 deltaT)
+{
+  if( this->t <= deltaTime)
+    {this->t += deltaT;}
+  //printf("time is: t=%f\n", t );
+  updateDesiredPlace();
+  //jump(NULL);
+}
+
+/**
+   \brief this calculates the location where the track wants the camera to be
+   
+   This refreshes the placement the camera should have according to the 
+   bound entity's position on the track.
+*/
+void Camera::updateDesiredPlace ()
+{
+  switch(cameraMode)
+    {
+      
+    case ELLIPTICAL:
+      {
+	/*
+	//r = actual_place.r 
+	Orxonox *orx = Orxonox::getInstance();
+	Location lookat;  
+	Placement plFocus;
+	if( bound != NULL)
+	  {
+	    bound->getLookat (&lookat);
+	    orx->getWorld()->calcCameraPos (&lookat, &plFocus);
+	    Quaternion *fr;
+	    if(t < 20.0)
+	      {
+		Vector *start = new Vector(0.0, 1.0, 0.0);
+		r = *(new Vector(0.0, 5.0, 0.0));
+
+		Vector up(0.0, 0.0, 1.0);
+		
+		Vector op(1.0, 0.0, 0.0);
+		float angle = angleDeg(op, *start);
+		printf("angle is: %f\n", angle);
+
+		//if in one plane
+		from = new Quaternion(angle, up);
+
+		//from = new Quaternion(*start, *up);
+		//&from = &plFocus.w;
+		//fr = &plFocus.w; real quaternion use
+		
+
+
+		Vector vDirection(1.0, 0.0, 0.0);
+		//vDirection = plFocus.w.apply(vDirection);
+		to = new Quaternion(vDirection, *start);
+		res = new Quaternion();
+	      }
+	    //printf("vector r = %f, %f, %f\n",r.x, r.y, r.z );
+	    rAbs = r.len();
+	    if(t < 30)
+	      {
+		ka = rAbs / deltaTime*deltaTime;
+	      }
+
+	    res->quatSlerp(to, from, t/deltaTime, res);
+
+	    Vector ursp(0.0, 0.0, 0.0);
+	    desiredPlace.r =  ursp - res->apply(r); 
+
+	    printf("desired place is: %f, %f, %f\n", desiredPlace.r.x, desiredPlace.r.y, desiredPlace.r.z);
+	    //plLastBPlace = *bound->get_placement();
+	    
+	  } 
+      */
+      }
+      break;
+    case SMOTH_FOLLOW:
+      {
+	/*
+	Placement *plBound = bound->getPlacement();
+	Location lcBound;
+	if(bound != null)
+	  {
+	    bound->getLookat(&lcBound);
+	    Vector vDirection(0.0, 0.0, 1.0);
+	    vDirection = plBound->w.apply(vDirection);
+	    desiredPlace.r = (vDirection * ((lcBound.dist-10.0))) + Vector(0,0,5.0);
+	  }
+	*/
+	break;
+      }
+      /* this is a camera mode that tries just to follow the entity. */
+    case STICKY:
+      {
+	/*
+	if(bound != null)
+	  {
+	    Placement *plBound = bound->getPlacement();
+	    Vector vDirection(0.0, 0.0, 1.0);
+	    Vector eclipticOffset(0.0, 0.0, 5.0);
+	    vDirection = plBound->w.apply(vDirection);
+	    desiredPlace.r = plBound->r - vDirection*10 + eclipticOffset;
+	  }
+	*/
+	break;
+      }
+      /* the camera is handled like an entity and rolls on the track */
+    case NORMAL:
+      if( bound != NULL && world != NULL )
+	{
+	  //FIXME: camera should be made via relative coordinates
+	  Vector* cameraOffset = new Vector (-10, 5, 0);
+	  this->setRelCoor (cameraOffset);
+	} 
+      else
+	{
+	  /*
+	  desiredPlace.r = Vector (0,0,0);
+	  desiredPlace.w = Quaternion (); 
+	  */
+	}
+      break;
+    }
+}
+
+/**
+   \brief initialize rendering perspective according to this camera
+   
+   This is called immediately before the rendering cycle starts, it sets all global
+   rendering options as well as the GL_PROJECTION matrix according to the camera.
+*/
+void Camera::apply ()
+{
+  glMatrixMode (GL_PROJECTION);
+  glLoadIdentity ();
+  // view
+  // TO DO: implement options for frustum generation
+  //glFrustum(-1.0, 1.0, -1.0, 1.0, 1.5, 250.0);
+  gluPerspective(60, 1.2f, 0.1, 250);
+  
+  //Vector up(0,0,1);
+  //Vector dir(1,0,0);
+  //Quaternion q(dir,up);
+  //float matrix[4][4];
+  //q.conjugate().matrix (matrix);
+  //glMultMatrixf ((float*)matrix);
+  //glTranslatef (10,0,-5);
+  //
+  //dir = Vector(-1,-1,0);
+  //q = Quaternion( dir, up);
+  //glMatrixMode (GL_MODELVIEW);
+  //glLoadIdentity ();
+  //q.matrix (matrix);
+  //glMultMatrixf ((float*)matrix);
+  //glTranslatef (2,2,0);
+  //
+  //glBegin(GL_TRIANGLES);
+  //glColor3f(1,0,0);
+  //glVertex3f(0,0,0.5);
+  //glColor3f(0,1,0);
+  //glVertex3f(-0.5,0,-1);
+  //glColor3f(0,0,1);
+  //glVertex3f(0.5,0,-1);
+  //glEnd();	
+
+  // ===== first camera control calculation option
+  // rotation
+  float matrix[4][4];
+  //this->absDirection.conjugate().matrix (matrix);
+  /* orientation and */
+  //glMultMatrixf ((float*)matrix);
+
+  /*  translation */
+  //glTranslatef (this->absCoordinate.x, this->absCoordinate.y, this->absCoordinate.z );
+
+
+  // ===== second camera control calculation option
+  
+  gluLookAt(this->absCoordinate.x, this->absCoordinate.y, this->absCoordinate.z, 
+	    this->parent->getAbsCoor ().x, this->parent->getAbsCoor ().y, this->parent->getAbsCoor ().z,
+	    0.0, 1.0, 0.0);
+  
+
+  glMatrixMode (GL_MODELVIEW);
+  glLoadIdentity ();
+}
+
+
+
+/**
+  \brief bind the camera to an entity
+  \param entity: The enitity to bind the camera to
+	
+  This sets the focus of the camera to the given entity. This means that it will use the given WorldEntity's
+  Location and get_lookat() to determine the viewpoint the camera will render from.
+  Note that you cannot bind a camera to a free entity.
+*/
+void Camera::bind (WorldEntity* entity)
+{
+  if( entity != NULL)
+    {
+      if( entity->isFree()) printf("Cannot bind camera to free entity");
+      else 
+	{
+	  this->bound = entity;
+	}
+    } 
+}
+
+
+void Camera::setWorld(World* world)
+{
+  this->world = world;
+}
+
+
+/**
+   \brief destroy, reset the camera so that it doesn't perform anything anymore
+
+*/
+void Camera::destroy()
+{
+  this->bound = NULL;
+  this->world = NULL;
+}
Index: /orxonox/branches/levelloader/src/camera.h
===================================================================
--- /orxonox/branches/levelloader/src/camera.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/camera.h	(revision 3417)
@@ -0,0 +1,69 @@
+/*! 
+    \file camera.h
+    \brief Viewpoint controlling class definitions
+*/ 
+
+#ifndef _CAMERA_H
+#define _CAMERA_H
+
+#include "stdincl.h"
+#include "world_entity.h"
+
+
+class World;
+
+//! Camera
+/**
+   This class controls the viewpoint from which the World is rendered. To use the 
+   Camera it has to be bound to a WorldEntity which serves as the reference focus 
+   point. The Camera itself calls the WorldEntity::get_lookat() and 
+   World::calc_camera_pos() functions to calculate the position it currently should
+   be in.
+*/
+
+enum CAMERA_MODE {NORMAL, SMOTH_FOLLOW, STICKY, ELLIPTICAL};
+
+class Camera : public WorldEntity {
+ private:
+  WorldEntity* bound;		//!< the WorldEntity the Camera is bound to
+  World* world;
+  
+  /* physical system - not needed yet */
+  float m; //!< mass
+  Vector *fs; //!< seil-kraft
+  Vector *a;  //!< acceleration
+  Vector *v;  //!< velocity
+  
+  /* elliptical camera mode variables */
+  float cameraOffset;
+  float cameraOffsetZ;
+  float deltaTime;
+  float t;
+  Vector r;
+  float rAbs;
+  float ka;
+  float a0;
+
+  Quaternion *from;
+  Quaternion *to;
+  Quaternion *res;
+  
+  
+  CAMERA_MODE cameraMode; //!< saves the camera mode: how the camera follows the entity
+  
+  void updateDesiredPlace ();
+  
+ public:
+  Camera (World* world);
+  ~Camera ();
+  
+  void timeSlice (Uint32 deltaT);
+  void apply ();
+  void bind (WorldEntity* entity);
+  void destroy();
+
+  void setWorld(World* world);  
+
+};
+
+#endif /* _CAMERA_H */
Index: /orxonox/branches/levelloader/src/campaign.cc
===================================================================
--- /orxonox/branches/levelloader/src/campaign.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/campaign.cc	(revision 3417)
@@ -0,0 +1,197 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Patrick Boenzli
+   co-programmer: 
+*/
+
+
+#include "campaign.h"
+#include "world.h"
+#include "camera.h"
+#include "story_entity.h"
+
+using namespace std;
+
+
+Campaign::Campaign () 
+{
+  this->entities = new ListTemplate<StoryEntity>();
+  this->isInit = false;
+}
+
+Campaign::~Campaign () {}
+
+
+ErrorMessage Campaign::init()
+{
+  this->isInit = true;
+}
+
+/** 
+    \brief adds an game stroy entity to the campaign
+
+    \param se: The entity
+    \param storyID: The number that identifies the entity in the campaign. Each ID only used once in a Campaign
+
+    An entity can be a world (playable), a cinematic, a shop, sounds, whatever you
+    want to queue up in the campaign.
+*/
+void Campaign::addEntity(StoryEntity* se, int storyID)
+{
+  se->setStoryID(storyID);
+  this->addEntity(se);
+}
+
+void Campaign::addEntity(StoryEntity* se)
+{
+  this->entities->add(se);
+}
+
+
+void Campaign::removeEntity(int storyID)
+{
+  this->removeEntity(this->getStoryEntity(storyID));
+  
+}
+
+
+void Campaign::removeEntity(StoryEntity* se)
+{
+  this->entities->remove(se);
+}
+
+
+ErrorMessage Campaign::start()
+{
+  this->start(0);
+}
+
+ErrorMessage Campaign::start(int storyID = 0)
+{
+  printf("World::start() - starting new StoryEntity Nr:%i\n", storyID);
+  ErrorMessage errorCode;
+  if( !this->isInit) return errorCode; 
+  if( storyID == WORLD_ID_GAMEEND) return errorCode;
+  this->running = true;
+  StoryEntity* se = this->getStoryEntity(storyID);
+  this->currentEntity = se;
+  while( se != NULL && this->running)
+    {
+      se->displayLoadScreen();
+      se->load();
+      se->init();
+      se->releaseLoadScreen();
+      se->start();
+      se->destroy();
+     
+      delete se;
+
+      int nextWorldID = se->getNextStoryID();
+      //printf("Campaing::start() - got nextWorldID = %i\n", nextWorldID);
+      se = this->getStoryEntity(nextWorldID);
+      this->currentEntity = se;
+      if( ( nextWorldID == WORLD_ID_GAMEEND) ||( se == NULL) ) 
+	{
+	  printf("Campaign::start() - quitting campaing story loop\n");
+	  if(se != NULL)
+	    delete se;
+	  return errorCode;
+	}
+      
+    }
+}
+
+ErrorMessage Campaign::stop()
+{
+  this->running = false;
+  if(this->currentEntity != NULL) 
+    {
+      this->currentEntity->stop();
+      //delete this->currentEntity;
+      //this->currentEntity = NULL;
+    }
+}
+
+ErrorMessage Campaign::pause()
+{
+  if(this->currentEntity != NULL)
+    this->isPaused = true;
+}
+
+
+ErrorMessage Campaign::resume()
+{
+  if(this->currentEntity != NULL)
+    this->isPaused = false;
+}
+
+
+void Campaign::destroy()
+{
+  if(this->currentEntity != NULL)
+    {
+      this->currentEntity->destroy();
+      delete this->currentEntity;
+      this->currentEntity = NULL;
+    }
+}
+
+/*
+  \brief this changes to the next level
+*/
+void Campaign::nextLevel()
+{
+  printf("Campaign:nextLevel()\n");
+  //int nextID = this->currentEntity->getNextStoryID();
+  //this->stop();
+  //this->start(nextID);
+  this->currentEntity->stop();
+}
+
+/*
+  \brief change to the previous level - not implemented
+
+  this propably useless
+*/
+void Campaign::previousLevel()
+{}
+
+
+/*
+  \brief lookup a entity with a given id
+  \param story id to be lookuped
+  \returns the entity found or NULL if search ended without match
+*/
+StoryEntity* Campaign::getStoryEntity(int storyID)
+{
+  //printf("Campaing::getStoryEntity(%i) - getting next Entity\n", storyID);
+  if( storyID == WORLD_ID_GAMEEND)
+    return NULL;
+  ListTemplate<StoryEntity>* l;
+  StoryEntity* entity = NULL;
+  l = this->entities->getNext();  
+  while( l != NULL) 
+    { 
+      entity = l->getObject();
+      l = l->getNext();
+      int id = entity->getStoryID();
+      //printf("Campaing::getStoryEntity() - now looping, found entity nr=%i\n", id);
+      if(id == storyID)
+	{
+	  //printf("Campaing::getStoryEntity() - yea, this is what we where looking for: %id\n");
+	  return entity;
+	}
+    }
+  return NULL;
+}
Index: /orxonox/branches/levelloader/src/campaign.h
===================================================================
--- /orxonox/branches/levelloader/src/campaign.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/campaign.h	(revision 3417)
@@ -0,0 +1,43 @@
+
+#ifndef _CAMPAIGN_H
+#define _CAMPAIGN_H
+
+#include "stdincl.h"
+#include "story_entity.h"
+
+
+class World;
+
+class Campaign : public StoryEntity {
+
+ public:
+  Campaign ();
+  ~Campaign ();
+
+  StoryEntity* currentEntity;
+
+  virtual ErrorMessage init();
+  virtual ErrorMessage start();
+  virtual ErrorMessage start(int storyID);
+  virtual ErrorMessage stop();
+  virtual ErrorMessage pause();
+  virtual ErrorMessage resume();
+
+  virtual void destroy();
+
+  void addEntity(StoryEntity* se, int storyID);
+  void addEntity(StoryEntity* se);
+  void removeEntity(int storyID);
+  void removeEntity(StoryEntity* se);
+  
+  void nextLevel();
+  void previousLevel();
+
+ private:
+  ListTemplate<StoryEntity>* entities;
+  bool running;
+
+  StoryEntity* getStoryEntity(int storyID);
+};
+
+#endif /* _CAMPAIGN_H */
Index: /orxonox/branches/levelloader/src/collision.cc
===================================================================
--- /orxonox/branches/levelloader/src/collision.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/collision.cc	(revision 3417)
@@ -0,0 +1,381 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Christian Meyer
+   co-programmer: ...
+*/
+
+
+#include "collision.h"
+
+using namespace std;
+
+/**
+   \brief simple CollisionCluster constructor
+   \param rad: the radius of the base sphere
+   \param mid: the middle point of the sphere
+*/
+CollisionCluster::CollisionCluster (float rad = 1.0, Vector mid = Vector(0,0,0))
+{
+  root = (CCTree*) malloc( sizeof( CCTree));
+  root->n = 0;
+  root->data.ID = 0;
+  root->r = rad;
+  root->m = mid;
+}
+
+/**
+   \brief loads a CollisionCluster from a data file
+   \param filename: self-explanatory
+*/
+CollisionCluster::CollisionCluster (char* filename)
+{
+  FILE* stream;
+  char hbuffer[3];
+  stream = fopen (filename, "rb");
+  if( stream == NULL)
+  {
+    root = NULL;
+    return;
+  }
+  if( fread (hbuffer, sizeof( char), 2, stream) != 2)
+  {
+    root = NULL;
+    return;
+  }
+  
+  hbuffer[2] = 0;
+  if( strcmp (hbuffer, "CC"))
+  {
+    root = NULL;
+    return;
+  }
+  
+  root = loadCCTree (stream);
+  fclose (stream);
+}
+
+/**
+   \brief Simple destructor that cleans up all the mess
+*/
+CollisionCluster::~CollisionCluster ()
+{
+  freeCCTree(root);
+}
+
+/**
+   \brief stores the CollisionCluster into a file
+   \param filename: self-explanatory
+   \return zero on success, -1 on error
+*/
+int CollisionCluster::store (char* filename)
+{
+  int r;
+  FILE* stream;
+  stream = fopen( filename, "wb");
+  if( stream == NULL) return -1;
+  r = saveCCTree(root, stream);
+  fclose (stream);
+  return r;
+}
+
+/**
+   \brief performs a collision check between a CollisionCluster and a Line
+   \param pa: pointer to the Placement of the CollisionCluster
+   \param a: pointer to the CollisionCluster
+   \param ahitflags: pointer to an unsigned long to store hitlocation data
+   \param trace: pointer to the Line
+   \param impactpoint: pointer to a Vector where the point of intersection is stored in
+   \return true on collision, false otherwise. If true is returned, the flag in ahitflags that symbolises the hit subsphere is set, and impactpoint is set to the Location where the intersection occured
+*/
+bool checkTrace (const Placement* pa, const CollisionCluster* a, unsigned long* ahitflags, const Line* trace, Vector* impactpoint)
+{
+	CCTree* t;
+	if( (t = a->root) == NULL) return false;
+	
+  return ccTreeTrace( pa, t, ahitflags, trace, impactpoint);
+}
+
+/**
+   \brief performs a collision check between two CollisionClusters
+   \param pa: pointer to the Placement of the first CollisionCluster
+   \param a: pointer to the first CollisionCluster 
+   \param ahitflags: pointer to an unsigned long to store hitlocation data on the first CollisionCluster
+   \param pb: pointer to the Placement of the second CollisionCluster
+   \param b: pointer to the second CollisionCluster
+   \param bhitflags: pointer to an unsigned long to store hitlocation data on the second CollisionCluster
+   \return true on collision, false otherwise
+   If true is returned, all flags in ahitflags and bhitflags that symbolize intersecting subspheres in the respective CollisionCluster are set
+*/
+bool checkCollision (const Placement* pa, const CollisionCluster* a, unsigned long* ahitflags, const Placement* pb, const CollisionCluster* b, unsigned long* bhitflags)
+{
+  CCTree* ta, *tb;
+  if( (ta = a->root) == NULL) return false;
+  if( (tb = b->root) == NULL) return false;
+  
+  return ccTreeIterate(pa, ta, ahitflags, pb, tb, bhitflags);
+}
+
+/**
+   \brief performs an intersection check between two spheres
+   \param m1: center point of first sphere
+   \param r1: radius of first sphere
+   \param m2: center point of second sphere
+   \param r2: radius of second sphere
+   \return true on intersection, false otherwise
+*/
+bool sphereSphereCollision( Vector m1, float r1, Vector m2, float r2)
+{
+  if ((m1-m2).len() < r1+r2) return true;
+  return false;
+}
+
+/**
+   \brief performs an intersection check between a Line and a sphere
+   \param m: center point of the sphere
+   \param r: radius of the sphere
+   \param l: pointer to the Line
+   \param impactpoint: pointer to a buffer to store the point of intersection
+   \return true on intersection, false otherwise. If true is returned, impactpoint is set to the loaction where the intersection occured
+*/
+bool traceSphereCollision( Vector m, float r, const Line* l, Vector* impactpoint)
+{
+  float A, B, C, D, t[2];
+  Vector d = l->r - m;
+  int i;
+  
+  A = l->a * l->a;
+  B = 2 * (l->a * d);
+  C = (d*d) - r*r;
+  D = B*B - 4*A*C;
+  
+  if (D < 0) return false;
+  
+  t[0] = (-B+sqrt(D))/(2*A);
+  t[1] = (-B-sqrt(D))/(2*A);
+  
+  if( (t[0] > 1 || t[0] < 0) && (t[1] < 0 || t[1] > 1)) return false;
+  if( t[0] > t[1]) i = 0;
+  else i = 1;
+
+  impactpoint->x = (l->r + (l->a * t[i])).x;
+  impactpoint->y = (l->r + (l->a * t[i])).y;
+  impactpoint->z = (l->r + (l->a * t[i])).z;
+  
+  return true;
+}
+
+bool ccTreeIterate(const Placement* pa, CCTree* ta, unsigned long* ahitflags, const Placement* pb, CCTree* tb, unsigned long* bhitflags)
+{
+  bool r = false;
+  int ia, ib;
+  Vector mra = pa->r + pa->w.apply(ta->m);
+  Vector mrb = pb->r + pb->w.apply(tb->m);
+  CCTree* useA, *useB;
+  
+  if( useA == NULL || useB == NULL) return false;
+  
+  if( sphereSphereCollision( mra, ta->r, mrb, tb->r))
+  {
+    if( ta->n == 0 && tb->n == 0)
+    {
+      setflag( ahitflags, ta->data.ID);
+      setflag( bhitflags, tb->data.ID);
+      return true;
+    }
+    for( ia = 0; ia < ta->n || ta->n == 0; ia++)
+    {
+      if( ta->n == 0) useA = ta;
+      else useA = ta->data.b[ia];
+      for( ib = 0; ib < tb->n || ta->n == 0; ib++)
+      {
+        if( ta->n == 0) useB = ta;
+        else useB = ta->data.b[ib];
+        
+        r = r || ccTreeIterate( pa, useA, ahitflags, pb, useB, bhitflags);
+        
+        if( tb->n == 0) break;
+      }
+      if( ta->n == 0) break;
+    }
+    return r;
+  }
+  
+  return false;
+}
+
+/**
+   \brief sets the <ID>th flag in flags
+   \param flags: pointer to the long used for flagging
+   \param ID: number of the flag to be set
+*/
+void setflag( unsigned long* flags, unsigned long ID)
+{
+  unsigned long f;
+  f = 1;
+  for( int i = 0; i < ID; i++)
+  {
+    f *= 2;
+  }
+  *flags = *flags | f;
+  return;
+}
+
+/**
+   \brief frees the memory allocated in a CCTree
+*/
+void freeCCTree( CCTree* tree)
+{
+  if (tree == NULL) return;
+  for (int i = 0; i < tree->n; i++)
+  {
+    freeCCTree(tree->data.b[i]);
+  }
+  free( tree);
+}
+
+/**
+   \brief loads a CCTree from a stream
+*/
+CCTree* loadCCTree (FILE* stream)
+{
+  CCTree* tree = NULL;
+  CCTree** branches = NULL;
+  float buf[4];
+  unsigned long n;
+  unsigned long ID;
+  
+  // first load vector and radius
+  if (fread( buf, sizeof (float), 4, stream) != 4) return NULL;
+  // then the amount of subbranches
+  if (fread( &n, sizeof(unsigned long), 1, stream) != 1) return NULL;
+  // then ID or the subbranches
+  if ( n == 0)
+  {
+    if (fread( &ID, sizeof(unsigned long), 1, stream) != 1) return NULL;
+  }
+  else
+  {
+    branches = (CCTree**)malloc( sizeof(CCTree*) * n);
+    for( int i = 0; i < n; i++)
+    {
+      if ((branches[i] = loadCCTree (stream)) == NULL)
+      {
+        for( int j = 0; j < i; j++)
+        {
+          freeCCTree (branches[j]);
+          free(branches);
+          return NULL;
+        }
+      }
+    }
+  }
+  
+  // assemble
+  tree = (CCTree*) malloc (sizeof(CCTree));
+  tree->m.x = buf[0];
+  tree->m.y = buf[1];
+  tree->m.z = buf[2];
+  tree->r = buf[3];
+  tree->n = n;
+  if( n == 0) tree->data.ID = ID;
+  else tree->data.b = branches;
+  
+  // then return
+  return tree;
+}
+
+/**
+   \brief saves a CCTree to a stream
+*/
+int saveCCTree (CCTree* tree, FILE* stream)
+{
+  float buf[4];
+  
+  buf[0] = tree->m.x;
+  buf[1] = tree->m.y;
+  buf[2] = tree->m.z;
+  buf[3] = tree->r;
+  
+  // first save vector and radius
+  if (fwrite( buf, sizeof (float), 4, stream) != 4) return -1;
+  // then the amount of subbranches
+  if (fwrite( &(tree->n), sizeof(unsigned long), 1, stream) != 1) return -1;
+  // then ID or the subbranches
+  if ( tree->n == 0)
+  {
+    if (fwrite( &(tree->data.ID), sizeof(unsigned long), 1, stream) != 1) return -1;
+  }
+  else
+  {
+    for( int i = 0; i < tree->n; i++)
+    {
+      if ( saveCCTree (tree->data.b[i], stream) == -1) return -1;
+    }
+  }
+    
+  // then return
+  return 0;
+}
+
+bool ccTreeTrace( const Placement* p, CCTree* t, unsigned long* hitflags, const Line* trace, Vector* impactpoint)
+{
+  bool r = false;
+  int i;
+  Vector mr = p->r + p->w.apply (t->m);
+  CCTree* useT;
+  Vector* ips;
+  unsigned long* hfs;
+  
+  if( traceSphereCollision (mr, t->r, trace, impactpoint))
+  {
+  	if( t->n == 0)
+  	{
+  		setflag (hitflags, t->data.ID);
+  		return true;
+  	}
+  	else
+  	{
+  		ips = new Vector[t->n];
+  		hfs = new unsigned long[t->n];
+  		for (i = 0; i < t->n; i++) hfs[i] = 0;
+  		for (i = 0; i < t->n; i++)
+  		{
+  			r = r || ccTreeTrace (p, t->data.b[i], &(hfs[i]), trace, &(ips[i]));
+  		}
+  		if( r)
+  		{
+  			float kl = 0.0;
+  			float l = 0.0;
+  			int k = 0;
+  			for (i = 0; i < t->n; i++)
+  			{
+  				if( (kl = (trace->r - ips[i]).len()) > l)
+  				{
+  					l = kl;
+  					k = i;
+  				}
+  			}
+  			impactpoint->x = ips[k].x;
+  			impactpoint->y = ips[k].y;
+  			impactpoint->z = ips[k].z;
+  			*hitflags = hfs[k];
+  		}
+  		delete ips;
+  		delete hfs;
+  	}
+  	return r;
+  }
+  
+  return false;
+}
Index: /orxonox/branches/levelloader/src/collision.h
===================================================================
--- /orxonox/branches/levelloader/src/collision.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/collision.h	(revision 3417)
@@ -0,0 +1,69 @@
+/*! 
+    \file collision.h
+    \brief Basic collision detection
+*/ 
+
+#ifndef _COLLISION_H
+#define _COLLISION_H
+
+#include "vector.h"
+#include "coordinates.h"
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+//! Tree structure used by the CollisionCluster
+typedef struct CCTree
+{
+  unsigned long n;
+  union
+  {
+  struct CCTree** b;
+  unsigned long ID;
+  } data;
+  float r;
+  Vector m;
+} CCTree;
+
+//! Basic collision detection class
+/**
+  This class implements a more or less efficient collision system based on nested hitzones.
+  Instead of using a brute force approach (try if any hitzone intersects with any other hitzone)
+  this features a tree of spheric hitzones. Only some of them are actually the solid groundstones
+  the collision model bases on, the others serve to group them into sets of spheres that are only
+  checked for collision when the assigned top level sphere has registered a collision, preventing
+  unnessessary checks (like between every sphere of two collision clusters at the other end of the world)
+  from being performed.
+  The CollisionCluster features collision detection between multiple CollisionClusters as well as
+  traceing a collision between a line of defined length and a cluster. In both cases the base spheres
+  that have intersected are marked with a flag in an unsigned long for hitlocation queries. In the case
+  of a trace, the exact point of interception is returned as well.
+*/
+class CollisionCluster {
+  
+  CCTree* root;
+  
+  
+ public:
+  CollisionCluster (float r, Vector m); // simple cluster
+  CollisionCluster (char* filename); // get cluster from file
+  ~CollisionCluster ();
+  
+  int store (char* filename);
+  
+  friend bool ccTreeTrace( const Placement* p, CCTree* t, unsigned long* hitflags, const Line* trace, Vector* impactpoint);
+  friend bool ccTreeIterate(const Placement* pa, CCTree* ta, unsigned long* ahitflags, const Placement* pb, CCTree* tb, unsigned long* bhitflags);
+  friend bool checkTrace (const Placement* pa, const CollisionCluster* a, unsigned long* ahitflags, const Line* trace, Vector* impactpoint);
+  friend bool checkCollision (const Placement* pa, const CollisionCluster* a, unsigned long* ahitflags, const Placement* pb, const CollisionCluster* b, unsigned long* bhitflags);
+};
+
+bool sphereSphereCollision( Vector m1, float r1, Vector m2, float r2);
+bool traceSphereCollision( Vector m, float r, const Line* l, Vector* impactpoint);
+
+void setflag( unsigned long* flags, unsigned long ID);
+
+void freeCCTree( CCTree* tree);
+CCTree* loadCCTree (FILE* stream);
+int saveCCTree (CCTree* tree, FILE* stream);
+
+#endif /* _COLLISION_H */
Index: /orxonox/branches/levelloader/src/command_node.cc
===================================================================
--- /orxonox/branches/levelloader/src/command_node.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/command_node.cc	(revision 3417)
@@ -0,0 +1,300 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Christian Meyer
+   co-programmer: Patrick Boenzli
+*/
+
+
+#include "command_node.h"
+#include "keynames.h"
+#include "ini_parser.h"
+#include "world_entity.h"
+#include "game_loader.h"
+#include "world.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+using namespace std;
+
+/**
+   \brief constructs a CommandNode to handle remote input
+   \param ID: unique denumerator to identify the node in the network
+*/
+CommandNode::CommandNode (int ID)
+{
+  this->bound = new tList<WorldEntity>();
+  this->aliases = NULL;
+  this->netID = ID;
+  this->bLocalInput = false;
+  this->bEnabled = true;
+  this->world = NULL;
+}
+
+/**
+   \brief constructs a CommandNode to handle local input
+   \param filename: The path and name of the file to load the key bindings from
+*/
+CommandNode::CommandNode (char* filename = DEFAULT_KEYBIND_FILE)
+{
+  this->aliases = NULL;
+  this->bLocalInput = true;
+  this->netID = 0;
+  this->bound = new tList<WorldEntity>();
+  this->bEnabled = true;
+  this->world = NULL;
+  this->loadBindings (filename);
+}
+
+/**
+   \brief removes the CommandNode from memory
+*/
+CommandNode::~CommandNode ()
+{
+  if( aliases != NULL) free (aliases);
+  if( bound != NULL) delete bound; /* \todo should this delete bound? dangerous FIX */
+}
+
+
+/**
+  \brief this resets the command node
+
+   deleting all data contained in the command node to fill it up again
+
+  \todo coppling to different game-entities
+  \todo reset/destroy has to be redesigned
+*/
+
+void CommandNode::reset()
+{
+  this->bound->destroy();
+  //this->bound = NULL; /* \todo this produces a NULLpointer error.. FIX */
+  this->bEnabled = false;
+  this->world = NULL;
+}
+
+void CommandNode::enable(bool bEnabled)
+{
+  this->bEnabled = bEnabled;
+}
+
+
+/**
+  \brief adds Node to a GameWorld
+
+   this is usefull, if you want to catch events in a world class. usualy
+   this is done automaticaly via GameLoader. Reset it via 
+   CommandNode::reset()
+
+*/
+void CommandNode::addToWorld(World* world)
+{
+  this->world = world;
+}
+
+
+/**
+   \brief loads new key bindings from a file
+   \param filename: The path and name of the file to load the bindings from
+*/
+void CommandNode::loadBindings (char* filename)
+{
+  FILE* stream;
+  
+  printf("Loading key bindings from %s\n", filename);
+  
+  if( filename == NULL) filename = DEFAULT_KEYBIND_FILE;
+  
+  // remove old bindings if present
+  if( aliases != NULL)
+    {
+      free (aliases);
+      aliases = NULL;
+    }
+  
+  // create parser
+  IniParser parser (filename);
+  if( parser.getSection ("Bindings") == -1)
+    {
+      printf("Could not find key bindings in %s\n", filename);
+      return;
+    }
+  // allocate empty lookup table
+  aliases = (KeyBindings*) calloc (1, sizeof (KeyBindings));
+  
+  char namebuf[256];
+  char valuebuf[256];
+  memset (namebuf, 0, 256);
+  memset (valuebuf, 0, 256);
+  int* index;
+  
+  while( parser.nextVar (namebuf, valuebuf) != -1)
+    {
+      index = nameToIndex (namebuf);
+      switch( index[0])
+	{
+	case 0:
+	  printf("Key binding %d(%s) set to %s\n", index[1], SDLKToKeyname( index[1]), valuebuf);
+	  strcpy (aliases->keys[index[1]], valuebuf);
+	  break;
+	case 1:
+	  printf("Button binding %d(%s) set to %s\n", index[1], SDLBToButtonname( index[1]), valuebuf);
+	  strcpy (aliases->buttons[index[1]], valuebuf);
+	  break;
+	default:
+	  break;
+	}
+      memset (namebuf, 0, 256);
+      memset (valuebuf, 0, 256);
+    }
+}
+
+/**
+   \brief binds a WorldEntity to the CommandNode
+   \param entity: Pointer to the entity to bind
+*/
+void CommandNode::bind (WorldEntity* entity)
+{
+  bound->add (entity);
+}
+
+/**
+   \brief removes an entity from the list of the CommandNode
+   \param entity: Pointer to the entity to relese
+*/
+void CommandNode::unbind (WorldEntity* entity)
+{
+  bound->remove (entity);
+}
+
+int* CommandNode::nameToIndex (char* name)
+{
+  coord[0] = -1;
+  coord[1] = -1;
+  int c;
+  if( (c = keynameToSDLK (name)) != -1)
+    {
+      coord[1] = c;
+      coord[0] = 0;
+    }
+  if( (c = buttonnameToSDLB (name)) != -1)
+    {
+      coord[1] = c;
+      coord[0] = 1;
+    }
+  return coord;
+}
+
+/**
+   \brief tells the CommandNode to run through all pending events and relay them accordingly
+*/
+void CommandNode::process ()
+{
+  if( this->bEnabled) 
+    {
+      if( bLocalInput) processLocal ();
+      else processNetwork ();
+    }
+}
+
+void CommandNode::processLocal ()
+{
+  SDL_Event event;
+  Command cmd;
+  while( SDL_PollEvent (&event))
+    {
+      memset (cmd.cmd, 0, CMD_LENGHT); 
+      switch( event.type)
+	{
+	case SDL_KEYDOWN:
+	  strcpy (cmd.cmd, aliases->keys[event.key.keysym.sym]);
+	  cmd.bUp = false;
+	  if( strlen (cmd.cmd) > 0) relay(&cmd);
+	  break;
+	case SDL_KEYUP:
+	  strcpy( cmd.cmd, aliases->keys[event.key.keysym.sym]);
+	  cmd.bUp = true;
+	  if( strlen (cmd.cmd) > 0) relay(&cmd);
+	  break;
+	case SDL_MOUSEMOTION:
+	  strcpy( cmd.cmd, "cursor");
+	  cmd.x = event.motion.x;
+	  cmd.y = event.motion.y;
+	  cmd.xrel = event.motion.xrel;
+	  cmd.yrel = event.motion.yrel;
+	  break;
+	case SDL_MOUSEBUTTONUP:
+	  strcpy( cmd.cmd, aliases->buttons[event.button.button]);
+	  cmd.bUp = true;
+	  if( strlen (cmd.cmd) > 0) relay(&cmd);
+	  break;
+	case SDL_MOUSEBUTTONDOWN:
+	  strcpy( cmd.cmd, aliases->buttons[event.button.button]);
+	  cmd.bUp = false;
+	  if( strlen (cmd.cmd) > 0) relay(&cmd);
+	  break;
+	case SDL_JOYAXISMOTION:
+	case SDL_JOYBALLMOTION:
+	case SDL_JOYHATMOTION:
+	case SDL_JOYBUTTONDOWN:
+	case SDL_JOYBUTTONUP:
+	  break;
+	default:
+	  Orxonox *orx = Orxonox::getInstance();
+	  orx->eventHandler(&event);
+	  break;
+	}
+    }
+}
+
+
+void CommandNode::processNetwork ()
+{
+
+}
+
+
+void CommandNode::relay (Command* cmd)
+{
+
+  Orxonox *orx = Orxonox::getInstance();
+  if( orx->systemCommand (cmd)) return;
+
+  GameLoader* gl = GameLoader::getInstance();
+  if( gl->worldCommand(cmd)) return;
+
+  if( bLocalInput) sendOverNetwork (cmd);
+  
+  if( this->world->command(cmd)) return;
+
+  WorldEntity* entity = bound->enumerate();
+  while( entity != NULL)
+    {
+      entity->command (cmd);
+      entity = bound->nextElement();
+    }
+}
+
+
+/**
+   \brief sets the network identifier of the CommandNode
+   \param ID: the new ID to use
+*/
+void CommandNode::setNetID (int ID)
+{
+  netID = ID;
+}
+
+void CommandNode::sendOverNetwork (Command* cmd)
+{
+}
Index: /orxonox/branches/levelloader/src/command_node.h
===================================================================
--- /orxonox/branches/levelloader/src/command_node.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/command_node.h	(revision 3417)
@@ -0,0 +1,72 @@
+/*!
+    \file command_node.h
+    \brief Parses keyboard, mouse and remote input
+    
+    Contains methods to parse remote and local input and handles sending of input to remote CommandNodes
+*/
+
+#ifndef _COMMAND_NODE_H
+#define _COMMAND_NODE_H
+
+#include "stdincl.h"
+
+class WorldEntity;
+class World;
+
+#define N_STD_KEYS SDLK_LAST
+#define N_BUTTONS 6
+#define DEFAULT_KEYBIND_FILE "default.ini"
+
+//! Key aliasing structure
+/**
+   This structure contains the key aliasing information, e.g. the command strings that
+   have been bound to the keys.
+*/
+typedef struct
+{
+  char keys[N_STD_KEYS][CMD_LENGHT];
+  char buttons[N_BUTTONS][CMD_LENGHT];
+} KeyBindings;
+
+//! Command Node
+/**
+   This class gathers all incoming SDL_Events and processes them. Keyboard, mouse and joystick input is
+   captured and translated into command messages which are passed down to the bound WorldEntities (via WorldEntity::command()).
+   Other SDL_Events are passed to Orxonox::event_handler() to deal with them. If the CommandNode has been created
+   with bLocalInput set to false, it will query the network class for incoming commands that match his netID and pass
+   them on to it's WorldEntities.
+*/
+class CommandNode {
+ private:
+  bool bLocalInput;	//!< Identifies the CommandNode that processes local input
+  bool bEnabled;
+  int netID;	//!< Unique identifier that is used to determine between remote CommandNodes
+  KeyBindings* aliases;
+  tList<WorldEntity>* bound;	//!< List of WorldEntites that recieve commands from this CommandNode
+  Sint32 coord[2];
+  World* world;
+  
+
+  void relay (Command* cmd);
+  int* nameToIndex (char* name);
+  void processLocal ();
+  void processNetwork ();
+  void sendOverNetwork (Command* cmd);
+  
+ public:
+  CommandNode (int ID);
+  CommandNode (char* filename);
+  ~CommandNode ();
+
+  void reset ();
+  void enable (bool bEnabled);
+  void loadBindings (char* filename);
+  void bind (WorldEntity* entity);
+  void unbind (WorldEntity* entity);
+  void addToWorld (World* world);
+  void process ();
+  
+  void setNetID (int ID);
+};
+
+#endif /* _COMMAND_NODE_H */
Index: /orxonox/branches/levelloader/src/console/Makefile.am
===================================================================
--- /orxonox/branches/levelloader/src/console/Makefile.am	(revision 3417)
+++ /orxonox/branches/levelloader/src/console/Makefile.am	(revision 3417)
@@ -0,0 +1,28 @@
+AM_CXXFLAGS=$(GTK2_CFLAGS) $(MSBITFIELDS)
+#AM_LDFLAGS=$(GTK2_LIBS)
+LIBS=$(GTK2_LIBS)
+
+bin_PROGRAMS=console
+console_SOURCES= orxonox_console.cc \
+	  	 orxonox_console_entry.cc \
+	  	 orxonox_console_log.cc
+
+noinst_HEADERS= orxonox_console.h \
+	        orxonox_console_entry.h \
+	   	orxonox_console_log.h
+
+#  uncomment the following if orxonox requires the math library
+#gui_LDADD=-lm
+
+#EXTRA_DIST=orxonox.lsm.in orxonox.spec.in orxonox.texinfo
+
+#  if you write a self-test script named `chk', uncomment the
+#  following and add `chk' to the EXTRA_DIST list
+#TESTS=chk
+
+#  build and install the .info pages
+#info_TEXINFOS = orxonox.texinfo
+#orxonox_TEXINFOS = gpl.texinfo
+
+#  install the man pages
+#man_MANS=orxonox.1
Index: /orxonox/branches/levelloader/src/console/Makefile.in
===================================================================
--- /orxonox/branches/levelloader/src/console/Makefile.in	(revision 3417)
+++ /orxonox/branches/levelloader/src/console/Makefile.in	(revision 3417)
@@ -0,0 +1,455 @@
+# Makefile.in generated by automake 1.8.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+@SET_MAKE@
+
+
+SOURCES = $(console_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+bin_PROGRAMS = console$(EXEEXT)
+subdir = src/console
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS)
+am_console_OBJECTS = orxonox_console.$(OBJEXT) \
+	orxonox_console_entry.$(OBJEXT) orxonox_console_log.$(OBJEXT)
+console_OBJECTS = $(am_console_OBJECTS)
+console_LDADD = $(LDADD)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/orxonox_console.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/orxonox_console_entry.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/orxonox_console_log.Po
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+SOURCES = $(console_SOURCES)
+DIST_SOURCES = $(console_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEBUG = @DEBUG@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOXYGEN = @DOXYGEN@
+DOXYGEN_FALSE = @DOXYGEN_FALSE@
+DOXYGEN_TRUE = @DOXYGEN_TRUE@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GTK2_CFLAGS = @GTK2_CFLAGS@
+GTK2_LIBS = @GTK2_LIBS@
+HAVE_GTK2_FALSE = @HAVE_GTK2_FALSE@
+HAVE_GTK2_TRUE = @HAVE_GTK2_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+#AM_LDFLAGS=$(GTK2_LIBS)
+LIBS = $(GTK2_LIBS)
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MSBITFIELDS = @MSBITFIELDS@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SUB_PROJECTS_FALSE = @SUB_PROJECTS_FALSE@
+SUB_PROJECTS_TRUE = @SUB_PROJECTS_TRUE@
+VERSION = @VERSION@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+AM_CXXFLAGS = $(GTK2_CFLAGS) $(MSBITFIELDS)
+console_SOURCES = orxonox_console.cc \
+	  	 orxonox_console_entry.cc \
+	  	 orxonox_console_log.cc
+
+noinst_HEADERS = orxonox_console.h \
+	        orxonox_console_entry.h \
+	   	orxonox_console_log.h
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cc .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  src/console/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign  src/console/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  if test -f $$p \
+	  ; then \
+	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+	   echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+	   $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+	  else :; fi; \
+	done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+	  echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(bindir)/$$f"; \
+	done
+
+clean-binPROGRAMS:
+	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+console$(EXEEXT): $(console_OBJECTS) $(console_DEPENDENCIES) 
+	@rm -f console$(EXEEXT)
+	$(CXXLINK) $(console_LDFLAGS) $(console_OBJECTS) $(console_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orxonox_console.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orxonox_console_entry.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orxonox_console_log.Po@am__quote@
+
+.cc.o:
+@am__fastdepCXX_TRUE@	if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cc.obj:
+@am__fastdepCXX_TRUE@	if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	    $$tags $$unique; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(bindir)"; do \
+	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+	clean-generic ctags distclean distclean-compile \
+	distclean-generic distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-binPROGRAMS \
+	install-data install-data-am install-exec install-exec-am \
+	install-info install-info-am install-man install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+	uninstall-am uninstall-binPROGRAMS uninstall-info-am
+
+
+#  uncomment the following if orxonox requires the math library
+#gui_LDADD=-lm
+
+#EXTRA_DIST=orxonox.lsm.in orxonox.spec.in orxonox.texinfo
+
+#  if you write a self-test script named `chk', uncomment the
+#  following and add `chk' to the EXTRA_DIST list
+#TESTS=chk
+
+#  build and install the .info pages
+#info_TEXINFOS = orxonox.texinfo
+#orxonox_TEXINFOS = gpl.texinfo
+
+#  install the man pages
+#man_MANS=orxonox.1
+# 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:
Index: /orxonox/branches/levelloader/src/console/orxonox_console.cc
===================================================================
--- /orxonox/branches/levelloader/src/console/orxonox_console.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/console/orxonox_console.cc	(revision 3417)
@@ -0,0 +1,68 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, 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.  
+
+
+   ### File Specific:
+   main-programmer: Benjamin Grauer
+   co-programmer:
+*/
+
+
+#include "orxonox_console.h"
+
+using namespace std;
+
+void OrxonoxConsole::createWindow ()
+{
+  
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, FALSE);
+  gtk_window_set_title ( GTK_WINDOW (window), "orxonox console");
+  g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK (gtk_main_quit), NULL);
+  g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL);
+  gtk_container_set_border_width (GTK_CONTAINER (window), 5);
+
+  vbox_main = gtk_vbox_new(FALSE, 5);
+    {
+      gtk_box_pack_start(GTK_BOX(vbox_main), entry.createEntry(), FALSE, FALSE, 0);
+      gtk_box_pack_start(GTK_BOX(vbox_main), log.createLog(), TRUE, TRUE, 0);
+      entry.setLog(&log);
+    }
+  gtk_container_add(GTK_CONTAINER(window), vbox_main);
+  
+  gtk_widget_show_all(window);
+
+}
+
+
+
+
+int main( int argc, char *argv[] )
+{  
+  verbose = 0;
+
+  OrxonoxConsole console;
+  
+  gtk_init (&argc, &argv);
+
+  console.createWindow();
+
+  gtk_main ();
+  return (0);
+}
Index: /orxonox/branches/levelloader/src/console/orxonox_console.h
===================================================================
--- /orxonox/branches/levelloader/src/console/orxonox_console.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/console/orxonox_console.h	(revision 3417)
@@ -0,0 +1,33 @@
+#ifndef ORXONOX_CONSOLE_H
+#define ORXONOX_CONSOLE_H
+
+/* standard headers */
+#include <stdio.h>
+
+/* GTK headers */
+#include <gtk/gtk.h> 
+
+/* other headers */
+#include "orxonox_console_entry.h"
+#include "orxonox_console_log.h"
+
+int verbose;
+  
+class OrxonoxConsole {
+  
+ private:
+  GtkWidget *window;
+  GtkWidget *vbox_main;
+  OrxonoxConsoleLog log;
+  OrxonoxConsoleEntry entry;
+
+
+ public:
+  void createWindow(void);
+
+    
+
+};
+
+#endif
+
Index: /orxonox/branches/levelloader/src/console/orxonox_console_entry.cc
===================================================================
--- /orxonox/branches/levelloader/src/console/orxonox_console_entry.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/console/orxonox_console_entry.cc	(revision 3417)
@@ -0,0 +1,82 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, 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.  
+
+
+   ### File Specific:
+   main-programmer: Benjamin Grauer
+   co-programmer:
+*/
+
+
+#include "orxonox_console_entry.h"
+
+
+
+OrxonoxConsoleEntry::OrxonoxConsoleEntry(void)
+{}
+
+OrxonoxConsoleEntry::OrxonoxConsoleEntry(OrxonoxConsoleLog* log)
+{
+  consoleLog = log; 
+}
+
+
+GtkWidget* OrxonoxConsoleEntry::createEntry()
+{
+  frame = gtk_frame_new ("Console Entry:");
+
+
+  gtk_container_set_border_width (GTK_CONTAINER(frame), 5);
+  {
+    entrybox = gtk_hbox_new (FALSE, 5);
+    {
+      entry = gtk_entry_new();
+      g_signal_connect(GTK_ENTRY(entry), "activate", G_CALLBACK(submit), this);
+      gtk_box_pack_start(GTK_BOX(entrybox), entry, TRUE, TRUE, 5);
+      
+      
+      button = gtk_button_new_with_label("Submit");
+      g_signal_connect(GTK_BUTTON(button), "clicked", G_CALLBACK(submit), this);
+      gtk_box_pack_start(GTK_BOX(entrybox), button, FALSE, FALSE, 5);
+    }
+    gtk_container_add(GTK_CONTAINER(frame), entrybox);
+  }
+  return (frame);
+}
+
+void OrxonoxConsoleEntry::setLog(OrxonoxConsoleLog* log)
+{
+  consoleLog = log;
+}
+
+
+void OrxonoxConsoleEntry::submit(GtkWidget *widget,  OrxonoxConsoleEntry* entry)
+{
+  char* entryText = (char*)gtk_entry_get_text(GTK_ENTRY(entry->entry));
+  entry->sendtoLog(entryText);
+  gtk_entry_set_text(GTK_ENTRY(entry->entry),"");
+  return;
+}
+
+
+void OrxonoxConsoleEntry::sendtoLog(char* submitText)
+{
+  consoleLog->appendText(submitText);
+  return;
+}
Index: /orxonox/branches/levelloader/src/console/orxonox_console_entry.h
===================================================================
--- /orxonox/branches/levelloader/src/console/orxonox_console_entry.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/console/orxonox_console_entry.h	(revision 3417)
@@ -0,0 +1,39 @@
+#ifndef ORXONOX_CONSOLE_ENTRY_H
+#define ORXONOX_CONSOLE_ENTRY_H
+
+/* standard headers */
+#include <stdio.h>
+
+/* GTK headers */
+#include <gtk/gtk.h> 
+
+#include "orxonox_console_log.h"
+
+extern int verbose;
+
+class OrxonoxConsoleEntry {
+  
+ private:
+  GtkWidget *frame;
+  GtkWidget *entrybox;
+  GtkWidget *label;
+  GtkWidget *button;
+  GtkWidget *entry;
+  OrxonoxConsoleLog* consoleLog;
+
+
+
+ public:
+  OrxonoxConsoleEntry(void);
+  OrxonoxConsoleEntry(OrxonoxConsoleLog* log);
+  
+  GtkWidget* createEntry(void);
+  void setLog(OrxonoxConsoleLog* log);
+  static void submit(GtkWidget *widget,  OrxonoxConsoleEntry* entry);
+  void sendtoLog(char* submitText);
+
+};
+  
+
+#endif
+
Index: /orxonox/branches/levelloader/src/console/orxonox_console_log.cc
===================================================================
--- /orxonox/branches/levelloader/src/console/orxonox_console_log.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/console/orxonox_console_log.cc	(revision 3417)
@@ -0,0 +1,71 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, 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.  
+
+
+   ### File Specific:
+   main-programmer: Benjamin Grauer
+   co-programmer:
+*/
+
+
+#include "orxonox_console_log.h"
+
+GtkWidget* OrxonoxConsoleLog::createLog()
+{
+  frame = gtk_frame_new ("Console Log:");
+  {
+    scrollframe = gtk_scrolled_window_new (NULL, NULL);
+    logtext = new char;
+    
+    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrollframe),
+				    GTK_POLICY_AUTOMATIC,
+				    GTK_POLICY_AUTOMATIC);
+    
+    gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollframe),
+					 GTK_SHADOW_IN);
+    gtk_container_set_border_width (GTK_CONTAINER(scrollframe), 5);
+    
+    logView = gtk_text_view_new();
+    gtk_text_view_set_editable(GTK_TEXT_VIEW(logView), FALSE);
+    log = gtk_text_view_get_buffer (GTK_TEXT_VIEW (logView));
+    gtk_container_add(GTK_CONTAINER(scrollframe), logView);
+    gtk_container_add(GTK_CONTAINER(frame),scrollframe);
+    gtk_text_buffer_set_text (log, "Orxonox Console started.\n", -1);
+
+  }
+  return (frame);
+}
+
+void OrxonoxConsoleLog::appendText(char* append)
+{
+  GtkTextIter iter;
+  if (verbose>=1)
+    printf ("appending: %s\n", append);
+  strcat (append,"\n");
+  gtk_text_buffer_get_start_iter (log, &iter);
+  gtk_text_buffer_place_cursor (log, &iter);
+  gtk_text_buffer_insert_at_cursor (log, append, -1);
+  return;
+}
+
+void OrxonoxConsoleLog::clear()
+{
+  sprintf(logtext, "");
+  return;
+}
Index: /orxonox/branches/levelloader/src/console/orxonox_console_log.h
===================================================================
--- /orxonox/branches/levelloader/src/console/orxonox_console_log.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/console/orxonox_console_log.h	(revision 3417)
@@ -0,0 +1,38 @@
+#ifndef ORXONOX_CONSOLE_LOG_H
+#define ORXONOX_CONSOLE_LOG_H
+
+/* standard headers */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* GTK headers */
+#include <gtk/gtk.h>
+
+extern int verbose;
+
+class OrxonoxConsoleLog {
+  
+ private:
+  GtkWidget *frame;
+  GtkWidget *scrollframe;
+  GtkWidget *logbox;
+  GtkWidget *logView;
+  GtkTextBuffer *log;
+  GtkWidget *label;
+
+  char *logtext;
+  
+  
+
+
+ public:
+  
+  GtkWidget* createLog(void);
+
+  void OrxonoxConsoleLog::appendText(char* append);  
+  void OrxonoxConsoleLog::clear();
+};
+
+#endif
+
Index: /orxonox/branches/levelloader/src/coordinates.h
===================================================================
--- /orxonox/branches/levelloader/src/coordinates.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/coordinates.h	(revision 3417)
@@ -0,0 +1,36 @@
+/*! 
+    \file coordinates.h
+    \brief Basic coordinate system definitions
+*/ 
+
+#ifndef _COORDINATES_H
+#define _COORDINATES_H
+
+#include "vector.h"
+
+class Track;
+
+//! Coordinates relative to track
+/**
+  This identifies the position of an object on the track system
+*/
+typedef struct
+{
+  unsigned long part;   //!< ID of the track part the object is on
+  Track* track;         //!< This is the current Track to which the Entity belongs to
+  float dist;           //!< The distance that has already been traveled on the track
+  Vector pos;           //!< The position relative to the offset marked by the distance already covered - this is mostly for user interaction/control
+  Quaternion rot;       //!< The direction the object is heading (relative to track direction)
+} Location;
+
+//! Absolute coordinates
+/**
+  This is used to store the position of a object in the rendered coordinate system
+*/
+typedef struct
+{
+  Vector r;              //!< Absolute x/y/z coordinates
+  Quaternion w;          //!< Absolute orientation
+} Placement;
+
+#endif /* _COORDINATS_H */
Index: /orxonox/branches/levelloader/src/curve.cc
===================================================================
--- /orxonox/branches/levelloader/src/curve.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/curve.cc	(revision 3417)
@@ -0,0 +1,394 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Benjamin Grauer
+   co-programmer: Patrick Boenzli
+
+   ADD: Patrick Boenzli           B-Spline 
+
+
+   TODO: 
+     local-Time implementation
+     NURBS
+     
+*/
+
+#include "curve.h"
+#include "matrix.h"
+#include "debug.h"
+
+#include <math.h>
+#include <stdio.h>
+
+/**
+   \brief adds a new Node to the bezier Curve
+   \param newNode a Vector to the position of the new node
+*/
+void Curve::addNode(const Vector& newNode)
+{
+  if (nodeCount != 0 )
+    {
+      currentNode = currentNode->next = new PathNode;
+    }
+  currentNode->position = newNode;
+  currentNode->next = 0; // not sure if this really points to NULL!!
+  currentNode->number = (++nodeCount);
+  this->rebuild();
+  return;
+}
+
+/**
+   \brief Finds a Node by its Number, and returns its Position
+   \param nodeToFind the n'th node in the List of nodes
+   \returns A Vector to the Position of the Node.
+*/
+Vector Curve::getNode(unsigned int nodeToFind)
+{
+  if (nodeToFind > this->nodeCount)
+    return Vector(0,0,0);
+  PathNode* tmpNode = this->firstNode;
+  for (int i = 1; i < nodeToFind; i++)
+    tmpNode = tmpNode->next;
+  return tmpNode->position;
+}
+
+///////////////////////////////////
+/// Bezier Curve //////////////////
+///////////////////////////////////
+
+/**
+   \brief Creates a new BezierCurve
+*/
+BezierCurve::BezierCurve (void)
+{
+  this->derivation = 0;
+  dirCurve = new BezierCurve(1);
+  this->init();
+}
+
+/**
+   \brief Creates a new BezierCurve-Derivation-Curve
+*/
+BezierCurve::BezierCurve (int derivation)
+{
+  this->derivation = derivation;
+  dirCurve=NULL;
+  this->init();
+}
+
+/**
+   \brief Deletes a BezierCurve.
+
+   It does this by freeing all the space taken over from the nodes
+*/
+BezierCurve::~BezierCurve(void)
+{
+  PathNode* tmpNode;
+  currentNode = firstNode;
+  while (tmpNode != 0)
+    {
+      tmpNode = currentNode;
+      currentNode = currentNode->next;
+      delete tmpNode;
+    }
+  if (dirCurve)
+    delete dirCurve;
+}
+
+/**
+   \brief Initializes a BezierCurve
+*/
+void BezierCurve::init(void)
+{
+  nodeCount = 0;
+  firstNode = new PathNode;
+  currentNode = firstNode;
+
+  firstNode->position = Vector (.0, .0, .0);
+  firstNode->number = 0;
+  firstNode->next = 0; // not sure if this really points to NULL!!
+
+  return;
+}
+
+/**
+   \brief Rebuilds a Curve
+*/
+void BezierCurve::rebuild(void)
+{
+  PathNode* tmpNode = firstNode;
+
+  // rebuilding the Curve itself
+  float k=0;
+  float n = nodeCount -1;
+  float binCoef = 1;
+  while(tmpNode)
+    {
+      tmpNode->factor = binCoef;
+      if (tmpNode =tmpNode->next)
+	{
+	  binCoef *=(n-k)/(k+1);
+	  ++k;
+	}
+    }
+
+  // rebuilding the Derivation curve
+  if(this->derivation == 0)
+    {
+      tmpNode = firstNode;
+      delete dirCurve;
+      dirCurve = new BezierCurve(1);
+      while(tmpNode->next)
+	{
+	  Vector tmpVector = (tmpNode->next->position)- (tmpNode->position);
+	  tmpVector.x*=(float)nodeCount;
+	  tmpVector.y*=(float)nodeCount;
+	  tmpVector.z*=(float)nodeCount;
+	  tmpVector.normalize();
+	  this->dirCurve->addNode(tmpVector);
+	  tmpNode = tmpNode->next;
+	}
+    }
+}
+
+/**
+   \brief calculates the Position on the curve
+   \param t The position on the Curve (0<=t<=1)
+   \return the Position on the Path
+*/
+Vector BezierCurve::calcPos(float t) 
+{
+  Vector ret = Vector(0.0,0.0,0.0);
+  if (this->nodeCount >= 3)
+    {
+      PathNode* tmpNode = this->firstNode;
+      double factor = pow(1.0-t,nodeCount-1);
+      while(tmpNode)
+	{
+	  ret.x += tmpNode->factor * factor * tmpNode->position.x;
+	  ret.y += tmpNode->factor * factor * tmpNode->position.y;
+	  ret.z += tmpNode->factor * factor * tmpNode->position.z;
+	  factor *= t/(1.0-t); // same as pow but much faster.
+	  
+	  tmpNode = tmpNode->next;
+	}
+    }
+  else if (nodeCount == 2)
+    {
+      ret = this->firstNode->position *(1.0-t);
+      ret = ret + this->firstNode->next->position * t;
+    }
+  else if (nodeCount == 1)
+    ret = this->firstNode->position;
+  return ret;
+}
+
+/**
+   \brief Calulates the direction of the Curve at time t.
+   \param The time at which to evaluate the curve.
+   \returns The vvaluated Vector.
+*/
+Vector BezierCurve::calcDir (float t)
+{
+  return dirCurve->calcPos(t);
+}
+
+/**
+   \brief Calculates the Quaternion needed for our rotations
+   \param t The time at which to evaluate the cuve.
+   \returns The evaluated Quaternion.
+*/
+Quaternion BezierCurve::calcQuat (float t)
+{
+  return Quaternion (calcDir(t), Vector(0,0,1));
+}
+
+
+/**
+  \brief returns the Position of the point calculated on the Curve
+  \return a Vector to the calculated position
+*/
+Vector BezierCurve::getPos(void) const
+{
+  return curvePoint;
+}
+
+
+
+///////////////////////////////////
+//// Uniform Point curve  /////////
+///////////////////////////////////
+/**
+   \brief Creates a new UPointCurve
+*/
+UPointCurve::UPointCurve (void)
+{
+  this->derivation = 0;
+  this->init();
+}
+
+/**
+   \brief Creates a new UPointCurve-Derivation-Curve of deriavation'th degree
+*/
+UPointCurve::UPointCurve (int derivation)
+{
+  this->derivation = derivation;
+  dirCurve=NULL;
+  this->init();
+}
+
+/**
+   \brief Deletes a UPointCurve.
+
+   It does this by freeing all the space taken over from the nodes
+*/
+UPointCurve::~UPointCurve(void)
+{
+  PathNode* tmpNode;
+  currentNode = firstNode;
+  while (tmpNode != 0)
+    {
+      tmpNode = currentNode;
+      currentNode = currentNode->next;
+      delete tmpNode;
+    }
+  if (dirCurve)
+    delete dirCurve;
+}
+
+/**
+   \brief Initializes a UPointCurve
+*/
+void UPointCurve::init(void)
+{
+  nodeCount = 0;
+  firstNode = new PathNode;
+  currentNode = firstNode;
+
+  firstNode->position = Vector (.0, .0, .0);
+  firstNode->number = 0;
+  firstNode->next = 0; // not sure if this really points to NULL!!
+
+  return;
+}
+
+/**
+   \brief Rebuilds a UPointCurve
+   
+   \todo very bad algorithm
+*/
+void UPointCurve::rebuild(void)
+{
+  // rebuilding the Curve itself
+  PathNode* tmpNode = this->firstNode;
+  int i=0;
+  Matrix xTmpMat = Matrix(this->nodeCount, this->nodeCount);
+  Matrix yTmpMat = Matrix(this->nodeCount, this->nodeCount);
+  Matrix zTmpMat = Matrix(this->nodeCount, this->nodeCount);
+  Matrix xValMat = Matrix(this->nodeCount, 3);
+  Matrix yValMat = Matrix(this->nodeCount, 3);
+  Matrix zValMat = Matrix(this->nodeCount, 3);
+  while(tmpNode)
+    {
+      Vector fac = Vector(1,1,1);
+      for (int j = 0; j < this->nodeCount; j++)
+	{
+	  xTmpMat(i,j) = fac.x; fac.x *= (float)i/(float)this->nodeCount;//tmpNode->position.x;
+	  yTmpMat(i,j) = fac.y; fac.y *= (float)i/(float)this->nodeCount;//tmpNode->position.y;
+	  zTmpMat(i,j) = fac.z; fac.z *= (float)i/(float)this->nodeCount;//tmpNode->position.z;
+	}
+      xValMat(i,0) = tmpNode->position.x;
+      yValMat(i,0) = tmpNode->position.y;
+      zValMat(i,0) = tmpNode->position.z;
+      ++i;
+      tmpNode = tmpNode->next;
+    }
+  tmpNode = this->firstNode;
+  xValMat = xTmpMat.Inv() *= xValMat;
+  yValMat = yTmpMat.Inv() *= yValMat;
+  zValMat = zTmpMat.Inv() *= zValMat;
+  i = 0;
+  while(tmpNode)
+    {
+      tmpNode->vFactor.x = xValMat(i,0);
+      tmpNode->vFactor.y = yValMat(i,0);
+      tmpNode->vFactor.z = zValMat(i,0);
+
+      i++;
+      tmpNode = tmpNode->next;
+    }
+}
+
+/**
+   \brief calculates the Position on the curve
+   \param t The position on the Curve (0<=t<=1)
+   \return the Position on the Path
+*/
+Vector UPointCurve::calcPos(float t) 
+{
+  PathNode* tmpNode = firstNode;
+  Vector ret = Vector(0.0,0.0,0.0);
+  float factor = 1.0;
+  while(tmpNode)
+    {
+      ret.x += tmpNode->vFactor.x * factor;
+      ret.y += tmpNode->vFactor.y * factor;
+      ret.z += tmpNode->vFactor.z * factor;
+      factor *= t;
+
+      tmpNode = tmpNode->next;
+    }
+  return ret;
+}
+
+/**
+   \brief Calulates the direction of the Curve at time t.
+   \param The time at which to evaluate the curve.
+   \returns The vvaluated Vector.
+*/
+Vector UPointCurve::calcDir (float t)
+{
+  PathNode* tmpNode = firstNode;
+  Vector ret = Vector(0.0,0.0,0.0);
+  float factor = 1.0/t;
+  int k=0;
+  while(tmpNode)
+    {
+      ret.x += tmpNode->vFactor.x * factor *k;
+      ret.y += tmpNode->vFactor.y * factor *k;
+      ret.z += tmpNode->vFactor.z * factor *k;
+      factor *= t;
+      k++;
+      tmpNode = tmpNode->next;
+    }
+  ret.normalize();
+  return ret;
+}
+
+/**
+   \brief Calculates the Quaternion needed for our rotations
+   \param t The time at which to evaluate the cuve.
+   \returns The evaluated Quaternion.
+*/
+Quaternion UPointCurve::calcQuat (float t)
+{
+  return Quaternion (calcDir(t), Vector(0,0,1));
+}
+
+
+/**
+  \brief returns the Position of the point calculated on the Curve
+  \return a Vector to the calculated position
+*/
+Vector UPointCurve::getPos(void) const
+{
+  return curvePoint;
+}
Index: /orxonox/branches/levelloader/src/curve.h
===================================================================
--- /orxonox/branches/levelloader/src/curve.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/curve.h	(revision 3417)
@@ -0,0 +1,112 @@
+
+/*! 
+    \file curve.h
+    \brief A basic 3D curve framework
+    
+    Contains classes to handle curves
+*/ 
+
+#ifndef _CURVE_H
+#define _CURVE_H
+
+#include "vector.h"
+
+//! An Enumerator that defines what sort of Curves are availible
+enum CurveType {BEZIERCURVE, UPOINTCURVE};
+
+
+//! An abstract class to handle curves. Needed for the Tracking system in orxonox.
+class Curve
+{
+ protected:
+  int nodeCount;         //!< The count of nodes the Curve has.
+  Vector curvePoint;     //!< The point on the Cureve at a local Time.
+  float localTime;       //!< If the time of one point is asked more than once the programm will not calculate it again.
+  Curve* dirCurve;       //!< The derivation-curve of this Curve.
+  int derivation;        //!< Which derivation of a Curve is this.
+
+  //! Handles the curve-points (dynamic List)
+  struct PathNode
+  {
+    int number;          //!< The N-th node of this curve.
+    float factor;        //!< Curve specific multiplier factor.
+    Vector vFactor;      //!< A Vector-factor for multipliing.
+    Vector position;     //!< Vector Pointung to this curve-point.
+    PathNode* next;      //!< Pointer to the next Node.
+  };
+
+  PathNode* firstNode;   //!< First node of the curve.
+  PathNode* currentNode; //!< The node we are working with (the Last node).
+
+ private:
+  virtual void rebuild(void) = 0;
+ public:
+  void addNode(const Vector& newNode);
+  Vector getNode(unsigned int nodeToFind);
+  inline int getNodeCount(void) { return this->nodeCount;}
+
+  virtual Vector calcPos(float t) = 0;
+  virtual Vector calcDir(float t) = 0;
+  virtual Quaternion calcQuat(float t) = 0;
+ 
+};
+
+//!    Class to handle bezier curves in 3-dimesnsional space
+/**
+   This Curve is good, for Fast Interaction. If you want to change it during the game, go on.
+   !!be aware!! BezierCurves only flow through their first and last Node. Their Tangents at those Points a directed to the second and second-last Point.
+*/
+class BezierCurve : public Curve
+{
+ private:
+  void rebuild(void);
+ public:
+  BezierCurve(void);
+  BezierCurve(int derivation);
+  ~BezierCurve(void);
+  void init(void);
+
+  Vector calcPos(float t);
+  Vector calcDir(float t);
+  Quaternion calcQuat(float t);
+  
+  
+  Vector getPos(void) const;
+};
+
+
+//! B-Spline
+/**
+   class to handle b-spline in 3d space
+*/
+class BSplieCurve : public Curve
+{
+
+
+};
+
+//! Uniform Point Curve-class
+/**
+   A UPoint Curve is a A Curve, that flows through all the nodes given it.
+   The Algorithm to buid the curve is rather slow, but Painting and tracing along the curve has high speed, so do not change this curve during the Game.
+
+   This Curve is very erattic, so i do not recommend to use it.
+*/
+class UPointCurve : public Curve
+{
+ private:
+  void rebuild(void);
+ public:
+  UPointCurve(void);
+  UPointCurve(int derivation);
+  ~UPointCurve(void);
+  void init(void);
+
+  Vector calcPos(float t);
+  Vector calcDir(float t);
+  Quaternion calcQuat(float t);
+  
+  Vector getPos(void) const;
+};
+
+#endif /* _CURVE_H */
Index: /orxonox/branches/levelloader/src/data_tank.cc
===================================================================
--- /orxonox/branches/levelloader/src/data_tank.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/data_tank.cc	(revision 3417)
@@ -0,0 +1,26 @@
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   Copyright by: Patrick Boenzli
+   Fixes by:
+*/
+
+
+#include "data_tank.h"
+
+using namespace std;
+
+long DataTank::timeStamp = 0;
+
+DataTank::DataTank () {}
+DataTank::~DataTank () {}
+
+
Index: /orxonox/branches/levelloader/src/data_tank.h
===================================================================
--- /orxonox/branches/levelloader/src/data_tank.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/data_tank.h	(revision 3417)
@@ -0,0 +1,16 @@
+
+#ifndef _DATA_TANK_H
+#define _DATA_TANK_H
+
+
+class DataTank {
+
+ public:
+  DataTank ();
+  ~DataTank ();
+
+  static long timeStamp;
+
+};
+
+#endif /* _DATA_TANK_H */
Index: /orxonox/branches/levelloader/src/debug.h
===================================================================
--- /orxonox/branches/levelloader/src/debug.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/debug.h	(revision 3417)
@@ -0,0 +1,180 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Benjamin Grauer
+   co-programmer: ...
+*/
+
+/*! 
+    \file debug.h
+    \brief Handles output to console for different Verbose-Modes.
+*/ 
+
+#ifndef _DEBUG_H
+#define _DEBUG_H
+
+#define NO              0
+#define ERROR           1
+#define WARNING         2
+#define INFORMATION     3
+#define DEBUGING        4
+
+#include <stdio.h>
+
+///////////////////////////////////////////////////
+/// PRINTF: prints with filename and linenumber ///
+///////////////////////////////////////////////////
+
+#ifdef  DEBUG
+extern int verbose;
+#define PRINTF(x) \
+           PRINTF ## x
+
+#if DEBUG >= ERROR
+#define PRINTF1 \
+    if (verbose >= ERROR) \
+      printf("%s:%d::", __FILE__, __LINE__) && printf
+#else 
+#define PRINTF1 if (NO)
+#endif
+     
+#if DEBUG >= WARNING
+#define PRINTF2 \
+     if (verbose >= WARNING) \
+       printf("%s:%d::", __FILE__, __LINE__) && printf
+         
+#else 
+#define PRINTF2 if (NO)
+#endif
+     
+#if DEBUG >= INFORMATION
+#define PRINTF3 \
+     if (verbose >= INFORMATION) \
+       printf("%s:%d::", __FILE__, __LINE__) && printf
+#else 
+#define PRINTF3 if (NO)
+#endif
+     
+#if DEBUG >= DEBUGING
+#define PRINTF4 \
+     if (verbose >= DEBUGING) \
+       printf("%s:%d::", __FILE__, __LINE__) && printf
+#else 
+#define PRINTF4 if (NO)
+#endif
+     
+     
+#else  
+#define PRINTF(x) if (NO)
+#endif
+
+#define PRINTF0 \
+    printf("%s:%d::", __FILE__, __LINE__) && printf
+
+
+///////////////////////////////////////////////////
+///  PRINT: just prints output as is            ///
+///////////////////////////////////////////////////
+#ifdef  DEBUG
+extern int verbose;
+#define PRINT(x) \
+  PRINT ## x
+
+#if DEBUG >= ERROR
+#define PRINT1	\
+  if (verbose >= ERROR)	\
+    printf
+#else 
+#define PRINT1 if (NO)
+#endif
+
+#if DEBUG >= WARNING
+#define PRINT2 \
+  if (verbose >= WARNING) \
+    printf
+
+#else 
+#define PRINT2 if (NO)
+#endif
+
+#if DEBUG >= INFORMATION
+#define PRINT3 \
+  if (verbose >= INFORMATION) \
+    printf
+#else 
+#define PRINT3 if (NO)
+#endif
+
+#if DEBUG >= DEBUGING
+#define PRINT4 \
+  if (verbose >= DEBUGING) \
+    printf
+#else 
+#define PRINT4 if (NO)
+#endif
+
+
+#else  
+#define PRINT(x) if (NO)
+#endif
+
+#define PRINT0 \
+  printf
+
+///////////////////////////////////////////////////
+/// COUT: simple cout print with verbose-check  ///
+///////////////////////////////////////////////////
+#ifdef  DEBUG
+#define COUT(x) \
+           COUT ## x
+
+#if DEBUG >= 1
+#define COUT1 \
+    if (verbose >= 1 ) \
+      cout
+#else 
+#define COUT1 if (NO) cout
+#endif
+     
+#if DEBUG >= 2
+#define COUT2 \
+     if (verbose >= 2 ) \
+       cout
+
+#else 
+#define COUT2 if (NO) cout
+#endif
+     
+#if DEBUG >= 3
+#define COUT3 \
+     if (verbose >= 3 ) \
+       cout
+#else
+#define COUT3 if (NO) cout
+#endif
+     
+#if DEBUG >= 4
+#define COUT4 \
+     if (verbose >= 4 ) \
+       cout
+#else 
+#define COUT4 if (NO) cout
+#endif
+     
+     
+#else  
+#define COUT(x) if (NO) cout
+#endif
+
+#define COUT0 \
+           cout
+
+#endif /* _DEBUG_H */
Index: /orxonox/branches/levelloader/src/environment.cc
===================================================================
--- /orxonox/branches/levelloader/src/environment.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/environment.cc	(revision 3417)
@@ -0,0 +1,63 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific
+   main-programmer: Patrick Boenzli
+   co-programmer: 
+*/
+
+
+#include "environment.h"
+#include "stdincl.h"
+#include "world_entity.h"
+#include "vector.h"
+#include "importer/objModel.h"
+
+using namespace std;
+
+
+
+Environment::Environment () : WorldEntity()
+{
+  this->model = new OBJModel("../data/models/fighter.obj");
+}
+
+
+
+Environment::~Environment () 
+{
+  delete this->model;
+}
+
+void Environment::tick (float time) {}
+
+void Environment::hit (WorldEntity* weapon, Vector loc) {}
+
+void Environment::destroy () {}
+
+void Environment::collide (WorldEntity* other,  Uint32 ownhitflags, Uint32 otherhitflags) {}
+
+void Environment::draw () 
+{
+  glMatrixMode(GL_MODELVIEW);
+  glLoadIdentity();
+  float matrix[4][4];
+  
+  glTranslatef (this->getAbsCoor ().x, this->getAbsCoor ().y, this->getAbsCoor ().z);
+  //rotate
+  this->getAbsDir ().matrix (matrix);
+  glMultMatrixf((float*)matrix);
+  
+  glMatrixMode(GL_MODELVIEW);
+  this->model->draw();
+}
+
Index: /orxonox/branches/levelloader/src/environment.h
===================================================================
--- /orxonox/branches/levelloader/src/environment.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/environment.h	(revision 3417)
@@ -0,0 +1,31 @@
+#ifndef _ENVIRONEMENT_H
+#define _ENVIRONEMENT_H
+
+#include "world_entity.h"
+
+
+class Environment : public WorldEntity 
+{
+  friend class World;
+
+ private:
+  float xCor;
+  float yCor;
+  float zCor;
+
+  float mountainTest[10][10];
+
+ public:
+  Environment ();
+  ~Environment ();
+
+  
+  virtual void tick (float time);
+  virtual void hit (WorldEntity* weapon, Vector loc);
+  virtual void destroy ();
+  virtual void collide (WorldEntity* other,  Uint32 ownhitflags, Uint32 otherhitflags);
+  virtual void draw ();
+
+};
+
+#endif /* _ENVIRONEMENT_H */
Index: /orxonox/branches/levelloader/src/error.h
===================================================================
--- /orxonox/branches/levelloader/src/error.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/error.h	(revision 3417)
@@ -0,0 +1,63 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Patrick Boenzli
+   co-programmer: Christian Meyer
+*/
+
+
+/*! 
+    \file error.h
+    \brief A compendium of Error codes used in the program
+*/ 
+
+
+#ifndef _ERROR_H
+#define _ERROR_H
+
+// these are the two undefined error nr. Don't use them ...
+#define oERROR -1
+
+#define oNOERROR 0
+
+/*!
+    \brief Error Definitions:
+
+    Error Classes:
+    0xx application framework codes
+    1xx graphics codes
+    2xx file/FS codes
+    3xx network codes
+    4xx general codes
+
+    Error Specifier 1:
+    x0x action finsished as desired
+    x1x initialisation error
+    x2x execution error
+    x3x uninitialisation error
+
+    Error Specifier 2:
+    xx0 no further informations
+    xx1 only a warning - feel free to ignore, the program will proceed
+    xx2 this could lead unexpected behaviour
+    xx3 this is a fatal error - you are invited to quit the program - panic!
+*/
+
+typedef struct 
+{
+  int code;
+  char* message;
+  char* location;
+} ErrorMessage;
+
+#endif /* _ERROR_H */
Index: /orxonox/branches/levelloader/src/game_loader.cc
===================================================================
--- /orxonox/branches/levelloader/src/game_loader.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/game_loader.cc	(revision 3417)
@@ -0,0 +1,223 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Patrick Boenzli
+   co-programmer: ...
+*/
+
+
+#include "game_loader.h"
+#include "campaign.h"
+#include "world.h"
+#include "player.h"
+#include "orxonox.h"
+#include "camera.h"
+#include "command_node.h"
+#include "vector.h"
+#include "track.h"
+
+#include <string.h>
+
+
+using namespace std;
+
+
+GameLoader* GameLoader::singletonRef = 0;
+
+
+GameLoader::GameLoader () {}
+
+
+GameLoader::~GameLoader () {}
+
+
+/**
+   \brief this class is a singleton class
+   \returns an instance of itself
+
+   if you are unsure about singleton classes, check the theory out on the internet :)
+*/
+GameLoader* GameLoader::getInstance()
+{
+  if(singletonRef == NULL)
+    singletonRef = new GameLoader();
+  return singletonRef;
+}
+
+
+ErrorMessage GameLoader::init()
+{
+  if(this->currentCampaign != NULL)
+    this->currentCampaign->init();
+}
+
+
+/**
+   \brief reads a campaign definition file into a campaign class
+   \param filename to be loaded
+   \returns the loaded campaign
+
+   this will interprete the map/campaign files and recursivly load a tree of worlds/campaigns
+*/
+ErrorMessage GameLoader::loadCampaign(char* name)
+{
+  ErrorMessage errorCode;
+  
+  this->currentCampaign = this->fileToCampaign(name);
+}
+
+
+/**
+   \brief loads a debug campaign for test purposes only.
+   \param the identifier of the campaign.
+   \returns error message if not able to do so.
+*/
+ErrorMessage GameLoader::loadDebugCampaign(Uint32 campaignID)
+{
+  switch(campaignID)
+    {
+      // Debug Level 0: Debug level used to test the base frame work.
+    case DEBUG_CAMPAIGN_0:
+      {
+	Campaign* debugCampaign = new Campaign();
+
+	World* world0 = new World(DEBUG_WORLD_0);
+	world0->setNextStoryID(WORLD_ID_1);
+	debugCampaign->addEntity(world0, WORLD_ID_0);
+
+	World* world1 = new World(DEBUG_WORLD_1);
+	world1->setNextStoryID(WORLD_ID_GAMEEND);
+	debugCampaign->addEntity(world1, WORLD_ID_1);
+
+	this->currentCampaign = debugCampaign;
+	break;
+      }
+    }
+}
+
+ErrorMessage GameLoader::start()
+{
+  if(this->currentCampaign != NULL)
+    this->currentCampaign->start();
+}
+
+
+ErrorMessage GameLoader::stop()
+{
+  if(this->currentCampaign != NULL)
+    this->currentCampaign->stop();
+  this->currentCampaign = NULL;
+}
+
+
+ErrorMessage GameLoader::pause()
+{
+  this->isPaused = true;
+  if(this->currentCampaign != NULL)
+    this->currentCampaign->pause();
+}
+
+
+ErrorMessage GameLoader::resume()
+{
+  this->isPaused = false;
+  if(this->currentCampaign != NULL)
+    this->currentCampaign->resume();
+}
+
+/**
+   \brief release the mem
+ */
+ErrorMessage GameLoader::destroy()
+{}
+
+
+/**
+   \brief reads a campaign definition file into a campaign class
+   \param filename to be loaded
+   \returns the loaded campaign
+
+   this will interprete the map/campaign files and recursivly load a tree of worlds/campaigns
+*/
+Campaign* GameLoader::fileToCampaign(char *name)
+{
+  /* do not entirely load the campaign. just the current world
+     before start of each world, it has to be initialized so it
+     can load everything it needs into memory then.
+  */
+}
+
+
+/**
+   \brief handle keyboard commands 
+   \param cmd: the command to handle
+   \returns true if the command was handled by the system
+*/
+bool GameLoader::worldCommand (Command* cmd)
+{
+  if( !strcmp( cmd->cmd, "up_world"))
+    {
+      if( !cmd->bUp) 
+	{
+	  this->nextLevel();
+	}
+      return true;
+    }
+  else if( !strcmp( cmd->cmd, "down_world"))
+    {
+      if( !cmd->bUp)
+	{
+	  this->previousLevel();
+	}
+      return true;
+    }
+  else if( !strcmp( cmd->cmd, "pause"))
+    {
+      if( !cmd->bUp)
+	{
+	  if(this->isPaused)
+	    this->resume();
+	  else
+	    this->pause();
+	}
+      return true;
+    }
+  else if( !strcmp( cmd->cmd, "quit"))
+    {
+      if( !cmd->bUp) this->stop();
+      return true;
+    }
+  return false;
+}
+
+
+/*
+  \brief this changes to the next level
+*/
+void GameLoader::nextLevel()
+{
+  if(this->currentCampaign != NULL)
+    this->currentCampaign->nextLevel();
+}
+
+
+/*
+  \brief change to the previous level - not implemented
+
+  this propably useless
+*/
+void GameLoader::previousLevel()
+{
+  if(this->currentCampaign != NULL)
+    this->currentCampaign->previousLevel();
+}
Index: /orxonox/branches/levelloader/src/game_loader.h
===================================================================
--- /orxonox/branches/levelloader/src/game_loader.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/game_loader.h	(revision 3417)
@@ -0,0 +1,49 @@
+#ifndef _GAME_LOADER_H
+#define _GAME_LOADER_H
+
+#include "stdincl.h"
+#include "story_def.h"
+
+//-----------------------------------------------------------------------------
+// Forward declarations
+//-----------------------------------------------------------------------------
+class Campaign;
+class World;
+class Camera;
+class CammandNode;
+
+
+class GameLoader 
+{
+
+ public:
+  static GameLoader* getInstance();
+
+  ErrorMessage init();
+  ErrorMessage loadCampaign(char* name);
+  ErrorMessage start();
+  ErrorMessage stop();
+  ErrorMessage pause();
+  ErrorMessage resume();
+  ErrorMessage destroy();
+
+  void nextLevel();
+  void previousLevel();
+
+  bool worldCommand(Command* cmd);
+  ErrorMessage loadDebugCampaign(Uint32 campaignID);
+  
+ private:
+  GameLoader ();
+  ~GameLoader ();
+  Uint32 startTime; //!> start time of the campaign
+  static GameLoader* singletonRef;
+  bool isPaused;
+
+  Campaign* currentCampaign; //!> the current campaign playing
+  
+  Campaign* fileToCampaign(char* name);
+
+};
+
+#endif /* _GAME_LOADER_H */
Index: /orxonox/branches/levelloader/src/glmenu_imagescreen.cc
===================================================================
--- /orxonox/branches/levelloader/src/glmenu_imagescreen.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/glmenu_imagescreen.cc	(revision 3417)
@@ -0,0 +1,305 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Patrick Boenzli
+   co-programmer: 
+*/
+
+
+#include "glmenu_imagescreen.h"
+#include "importer/texture.h"
+#include "importer/material.h"
+
+using namespace std;
+
+GLMenuImageScreen* GLMenuImageScreen::singletonRef = 0;
+
+GLMenuImageScreen* GLMenuImageScreen::getInstance()
+{
+  if( singletonRef == NULL)
+    singletonRef = new GLMenuImageScreen ();
+  return singletonRef;
+}
+
+/**
+   \brief standard constructor
+
+   \todo this constructor is not jet implemented - do it
+*/
+GLMenuImageScreen::GLMenuImageScreen () 
+{
+   this->setClassName ("GLMenuImageScreen");
+}
+
+
+/**
+   \brief standard deconstructor
+
+   \todo this deconstructor is not jet implemented - do it
+*/
+GLMenuImageScreen::~GLMenuImageScreen() 
+{
+  if (backMat)
+    delete backMat;
+}
+
+
+/**
+   \brief function to init the screen
+*/
+void GLMenuImageScreen::init ()
+{
+  /*
+  int w = 680;
+  int h = 480;
+
+  glViewport(0,0,w,h);
+  
+  glMatrixMode(GL_PROJECTION);
+  glLoadIdentity(); 
+  gluPerspective(45.0f,(GLfloat)w/(GLfloat)h, .5f ,150.0f);
+  glMatrixMode(GL_MODELVIEW); 
+
+  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+  glLoadIdentity();
+  gluLookAt(0, 0, 6,     0, 0, 0,     0, 1, 0);
+
+  // Bind the texture stored at the zero index of g_Texture[]
+  //glBindTexture(GL_TEXTURE_2D, g_Texture[0]);
+  */
+
+  
+  // Select Our VU Meter Background Texture
+  this->backMat = new Material("load_screen");
+  this->backMat->setDiffuseMap("../data/pictures/load_screen.jpg");
+  this->maxValue = 10;
+  this->currentValue = 0;
+
+  // End of Background image code.
+}
+
+
+/**
+   \brief function to innit screen with all attributes set
+   \param name of the background-image file
+   \param height of the ImageScreen
+   \param width of the Image Screen
+   \param x offset from (0, 0)
+   \param y offset from (0, 0)
+
+   GLMenu uses its own coordinating system: upper left corner is (0, 0). x-axis is down=height, 
+   right axis is right direction (=width)
+*/
+void GLMenuImageScreen::init (char* backImageName, float height, float width, 
+			      float offsetX, float offsetY)
+{}
+
+
+/**
+   \brief draws the ImageScreen to the screenbuffer
+*/
+void GLMenuImageScreen::draw ()
+{
+  /*
+  // Display a quad texture to the screen
+  glEnable(GL_TEXTURE_2D);
+  glBegin(GL_QUADS);
+  
+  // Display the top left vertice
+  glTexCoord2f(0.0f, 1.0f);
+  glVertex3f(-2.5, 2.5, 0);
+  
+  // Display the bottom left vertice
+  glTexCoord2f(0.0f, 0.0f);
+  glVertex3f(-2.5, -2.5, 0);
+  
+  // Display the bottom right vertice
+  glTexCoord2f(1.0f, 0.0f);
+  glVertex3f(2.5, -2.5, 0);
+  
+  // Display the top right vertice
+  glTexCoord2f(1.0f, 1.0f);
+  glVertex3f(2.5, 2.5, 0);
+
+  glEnd();
+  glEnable(GL_TEXTURE_2D);  
+  */
+
+  glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
+
+  /* screen size */
+  int screenWidth = 640;
+  int screenHeight = 480;
+  
+  /* set image size */
+  int imageWidth = 640;
+  int imageHeight = 480;
+  
+  /* start pos of image */
+  int offsetX = (screenWidth - imageWidth)/2;
+  int offsetY = (screenHeight - imageHeight)/2;
+  
+  /* loadbar pos */
+  int barX = 390;
+  int barY = 50;
+  int barWidth = 230;
+  int barHeight = 30;
+
+  int val = ((float)this->currentValue/(float)this->maxValue) * barWidth;
+
+  glMatrixMode(GL_PROJECTION);
+  glPushMatrix();
+  glLoadIdentity();
+  /* set up an ortho screen */
+  glOrtho(0, screenWidth, 0, screenHeight, -1, 1); 
+  glMatrixMode(GL_MODELVIEW);
+  glLoadIdentity();
+  glPushMatrix();
+
+  glEnable(GL_BLEND);
+  glPushAttrib(GL_LIGHTING_BIT | GL_TRANSFORM_BIT);
+  glDisable(GL_LIGHTING);
+
+  backMat->select();
+  glBegin(GL_QUADS);
+  glColor3f(0.96, 0.84, 0.34);
+  glVertex2i(barX, barY);
+  glVertex2i(barX + val, barY);
+  glVertex2i(barX + val, barY + barHeight);
+  glVertex2i(barX, barY + barHeight);
+  glColor3f(1.0, 1.0, 1.0);
+  glEnd();
+
+  glBegin(GL_QUADS);
+  glColor3f(0.0, 0.0, 0.0);
+  glVertex2i(barX, barY);
+  glVertex2i(barX + barWidth, barY);
+  glVertex2i(barX + barWidth, barY + barHeight);
+  glVertex2i(barX, barY + barHeight);
+  glColor3f(1.0, 1.0, 1.0);
+  glEnd();
+
+  /* draw black border */
+  glBegin(GL_QUADS);
+  glColor3f(0.0, 0.0, 0.0);
+  glVertex2i(barX-1, barY-1);
+  glVertex2i(barX + barWidth +1, barY-1);
+  glVertex2i(barX + barWidth+1, barY + barHeight+1);
+  glVertex2i(barX - 1, barY + barHeight +1);
+  glColor3f(1.0, 1.0, 1.0);
+  glEnd();
+
+  /* draw white border */
+  glBegin(GL_QUADS);
+  glColor3f(1.0, 1.0, 1.0);
+  glVertex2i(barX-2, barY-2);
+  glVertex2i(barX + barWidth +2, barY-2);
+  glVertex2i(barX + barWidth+2, barY + barHeight+2);
+  glVertex2i(barX - 2, barY + barHeight +2);
+  glColor3f(1.0, 1.0, 1.0);
+  glEnd();
+
+  glEnable(GL_TEXTURE_2D);
+  glBegin(GL_QUADS);
+  glTexCoord2i(0, 0); glVertex2i(offsetX, offsetY);
+  glTexCoord2i(1, 0); glVertex2i(offsetX + imageWidth, offsetY);
+  glTexCoord2i(1, 1); glVertex2i(offsetX + imageWidth, offsetY + imageHeight);
+  glTexCoord2i(0, 1); glVertex2i(offsetX, offsetY + imageHeight);
+  glEnd();
+  glDisable(GL_TEXTURE_2D);
+
+  glDisable(GL_BLEND);
+  glPopMatrix();
+  glMatrixMode(GL_PROJECTION);
+  glPopMatrix();
+  glPopAttrib();
+
+  SDL_GL_SwapBuffers();                    
+}
+ 
+
+/** 
+    \brief sets the background image name
+    \param file name of the backgroun-image
+ */
+void GLMenuImageScreen::setBackImageName (char* backImageName)
+{}
+
+
+/**
+   \brief sets position of the ImageScreen
+   \param x offset from (0, 0)
+   \param y offset from (0, 0)
+*/
+void GLMenuImageScreen::setPosition(float offsetX, float offsetY)
+{}
+
+
+/*
+  \brief sets size of the ImageScreen
+  \param height of the ImageScreen
+  \param width of the Image Screen
+*/
+void GLMenuImageScreen::setSize(float height, float width)
+{}
+
+
+/**
+   \brief set the maximum of countable steps
+   \param maximum of steps
+*/
+void GLMenuImageScreen::setMaximum(int maxValue)
+{
+  this->maxValue = maxValue;
+}
+
+
+/**
+   \brief gets the maximum of countable steps
+*/
+int GLMenuImageScreen::getMaximum()
+{
+  return this->maxValue;
+}
+
+
+/**
+   \brief set current value
+   \param current value
+*/
+void GLMenuImageScreen::setValue(int currentValue)
+{
+  this->currentValue = currentValue;
+  this->draw();
+}
+
+
+/**
+   \brief get the current value
+ */
+int GLMenuImageScreen::getValue()
+{
+  return this->currentValue;
+}
+
+
+/** 
+    \brief call this to trigger a progress event
+    
+    this has to redraw the progress bar and the whole image
+ */
+void GLMenuImageScreen::step ()
+{
+  this->currentValue++;
+  this->draw();
+}
Index: /orxonox/branches/levelloader/src/glmenu_imagescreen.h
===================================================================
--- /orxonox/branches/levelloader/src/glmenu_imagescreen.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/glmenu_imagescreen.h	(revision 3417)
@@ -0,0 +1,51 @@
+/*! 
+    \file glmenu_imagescreen
+    \brief class to display a image
+*/
+
+
+#ifndef _GLMENU_IMAGESCREEN_H
+#define _GLMENU_IMAGESCREEN_H
+
+#include "stdincl.h"
+
+class Texture;
+class Material;
+
+class GLMenuImageScreen : public BaseObject {
+
+ public:
+  GLMenuImageScreen ();
+  ~GLMenuImageScreen ();
+
+  static GLMenuImageScreen* getInstance();
+
+  static GLMenuImageScreen* singletonRef;
+
+  void init ();
+  void init (char* backImageName, float height, float width, 
+	     float offsetX, float offsetY);
+
+  void draw ();
+  
+  void setBackImageName (char* backImageName);
+  void setPosition (float offsetX, float offsetY);
+  void setSize (float height, float width);
+  
+  void setMaximum (int maxValue);
+  int getMaximum ();
+  void setValue (int currentValue);
+  int getValue ();
+  void step ();
+
+ private:
+  char* backImageName;       //!< the name of the file of the background image
+  float height, width;       //!< hight and width of the image
+  float offsetX, offsetY;    //!< offset of the image from left and up
+  Material* backMat;         //!< Background Material.
+  int currentValue;          //!< the current count of step() calls fired yet
+  int maxValue;              //!< total count of steps
+
+};
+
+#endif /* _GLMENU_IMAGESCREEN_H */
Index: /orxonox/branches/levelloader/src/gui/Makefile.am
===================================================================
--- /orxonox/branches/levelloader/src/gui/Makefile.am	(revision 3417)
+++ /orxonox/branches/levelloader/src/gui/Makefile.am	(revision 3417)
@@ -0,0 +1,39 @@
+AM_CXXFLAGS=$(GTK2_CFLAGS) $(MSBITFIELDS)
+#AM_LDFLAGS=$(GTK2_LIBS)
+LIBS=$(GTK2_LIBS)
+
+bin_PROGRAMS=gui
+gui_SOURCES=orxonox_gui.cc \
+	    orxonox_gui_gtk.cc \
+	    orxonox_gui_video.cc \
+	    orxonox_gui_audio.cc \
+	    orxonox_gui_exec.cc \
+	    orxonox_gui_flags.cc \
+	    orxonox_gui_banner.cc \
+	    orxonox_gui_keys.cc
+
+noinst_HEADERS=orxonox_gui.h \
+	    orxonox_gui_gtk.h \
+	    orxonox_gui_video.h \
+	    orxonox_gui_audio.h \
+	    orxonox_gui_exec.h \
+	    orxonox_gui_flags.h \
+	    orxonox_gui_banner.h \
+	    orxonox_gui_keys.h
+
+#  uncomment the following if orxonox requires the mathlibrary
+#gui_LDADD=-lm
+
+#EXTRA_DIST=orxonox.lsm.in orxonox.spec.in orxonox.texinfo
+
+#  if you write a self-test script named `chk', uncomment the
+#  following and add `chk' to the EXTRA_DIST list
+#TESTS=chk
+EXTRA_DIST = rc banner.xpm
+
+#  build and install the .info pages
+#info_TEXINFOS = orxonox.texinfo
+#orxonox_TEXINFOS = gpl.texinfo
+
+#  install the man pages
+#man_MANS=orxonox.1
Index: /orxonox/branches/levelloader/src/gui/Makefile.in
===================================================================
--- /orxonox/branches/levelloader/src/gui/Makefile.in	(revision 3417)
+++ /orxonox/branches/levelloader/src/gui/Makefile.in	(revision 3417)
@@ -0,0 +1,478 @@
+# Makefile.in generated by automake 1.8.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+@SET_MAKE@
+
+
+SOURCES = $(gui_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+bin_PROGRAMS = gui$(EXEEXT)
+subdir = src/gui
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS)
+am_gui_OBJECTS = orxonox_gui.$(OBJEXT) orxonox_gui_gtk.$(OBJEXT) \
+	orxonox_gui_video.$(OBJEXT) orxonox_gui_audio.$(OBJEXT) \
+	orxonox_gui_exec.$(OBJEXT) orxonox_gui_flags.$(OBJEXT) \
+	orxonox_gui_banner.$(OBJEXT) orxonox_gui_keys.$(OBJEXT)
+gui_OBJECTS = $(am_gui_OBJECTS)
+gui_LDADD = $(LDADD)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/orxonox_gui.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/orxonox_gui_audio.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/orxonox_gui_banner.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/orxonox_gui_exec.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/orxonox_gui_flags.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/orxonox_gui_gtk.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/orxonox_gui_keys.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/orxonox_gui_video.Po
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+SOURCES = $(gui_SOURCES)
+DIST_SOURCES = $(gui_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEBUG = @DEBUG@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOXYGEN = @DOXYGEN@
+DOXYGEN_FALSE = @DOXYGEN_FALSE@
+DOXYGEN_TRUE = @DOXYGEN_TRUE@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GTK2_CFLAGS = @GTK2_CFLAGS@
+GTK2_LIBS = @GTK2_LIBS@
+HAVE_GTK2_FALSE = @HAVE_GTK2_FALSE@
+HAVE_GTK2_TRUE = @HAVE_GTK2_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+#AM_LDFLAGS=$(GTK2_LIBS)
+LIBS = $(GTK2_LIBS)
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MSBITFIELDS = @MSBITFIELDS@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SUB_PROJECTS_FALSE = @SUB_PROJECTS_FALSE@
+SUB_PROJECTS_TRUE = @SUB_PROJECTS_TRUE@
+VERSION = @VERSION@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+AM_CXXFLAGS = $(GTK2_CFLAGS) $(MSBITFIELDS)
+gui_SOURCES = orxonox_gui.cc \
+	    orxonox_gui_gtk.cc \
+	    orxonox_gui_video.cc \
+	    orxonox_gui_audio.cc \
+	    orxonox_gui_exec.cc \
+	    orxonox_gui_flags.cc \
+	    orxonox_gui_banner.cc \
+	    orxonox_gui_keys.cc
+
+noinst_HEADERS = orxonox_gui.h \
+	    orxonox_gui_gtk.h \
+	    orxonox_gui_video.h \
+	    orxonox_gui_audio.h \
+	    orxonox_gui_exec.h \
+	    orxonox_gui_flags.h \
+	    orxonox_gui_banner.h \
+	    orxonox_gui_keys.h
+
+
+#  uncomment the following if orxonox requires the mathlibrary
+#gui_LDADD=-lm
+
+#EXTRA_DIST=orxonox.lsm.in orxonox.spec.in orxonox.texinfo
+
+#  if you write a self-test script named `chk', uncomment the
+#  following and add `chk' to the EXTRA_DIST list
+#TESTS=chk
+EXTRA_DIST = rc banner.xpm
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cc .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  src/gui/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign  src/gui/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  if test -f $$p \
+	  ; then \
+	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+	   echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+	   $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+	  else :; fi; \
+	done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+	  echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(bindir)/$$f"; \
+	done
+
+clean-binPROGRAMS:
+	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+gui$(EXEEXT): $(gui_OBJECTS) $(gui_DEPENDENCIES) 
+	@rm -f gui$(EXEEXT)
+	$(CXXLINK) $(gui_LDFLAGS) $(gui_OBJECTS) $(gui_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orxonox_gui.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orxonox_gui_audio.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orxonox_gui_banner.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orxonox_gui_exec.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orxonox_gui_flags.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orxonox_gui_gtk.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orxonox_gui_keys.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orxonox_gui_video.Po@am__quote@
+
+.cc.o:
+@am__fastdepCXX_TRUE@	if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cc.obj:
+@am__fastdepCXX_TRUE@	if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	    $$tags $$unique; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(bindir)"; do \
+	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+	clean-generic ctags distclean distclean-compile \
+	distclean-generic distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-binPROGRAMS \
+	install-data install-data-am install-exec install-exec-am \
+	install-info install-info-am install-man install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+	uninstall-am uninstall-binPROGRAMS uninstall-info-am
+
+
+#  build and install the .info pages
+#info_TEXINFOS = orxonox.texinfo
+#orxonox_TEXINFOS = gpl.texinfo
+
+#  install the man pages
+#man_MANS=orxonox.1
+# 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:
Index: /orxonox/branches/levelloader/src/gui/banner.xpm
===================================================================
--- /orxonox/branches/levelloader/src/gui/banner.xpm	(revision 3417)
+++ /orxonox/branches/levelloader/src/gui/banner.xpm	(revision 3417)
@@ -0,0 +1,526 @@
+/* XPM */
+static char * banner_xpm[] = {
+"127 382 141 2",
+"  	c None",
+". 	c #183016",
+"+ 	c #183316",
+"@ 	c #183416",
+"# 	c #193816",
+"$ 	c #193916",
+"% 	c #193B16",
+"& 	c #1A3E17",
+"* 	c #1B3F17",
+"= 	c #1B4318",
+"- 	c #1B4418",
+"; 	c #1B4818",
+"> 	c #1C4F18",
+", 	c #1A3D17",
+"' 	c #172D15",
+") 	c #162A15",
+"! 	c #1C4B18",
+"~ 	c #193716",
+"{ 	c #36AC2D",
+"] 	c #42B837",
+"^ 	c #4DC042",
+"/ 	c #53C447",
+"( 	c #60CC53",
+"_ 	c #69D05D",
+": 	c #6ED261",
+"< 	c #74D669",
+"[ 	c #7BD86E",
+"} 	c #80D972",
+"| 	c #54C549",
+"1 	c #58C84D",
+"2 	c #45BC3C",
+"3 	c #1F641B",
+"4 	c #2FA326",
+"5 	c #32A829",
+"6 	c #25921E",
+"7 	c #2B9D23",
+"8 	c #24871D",
+"9 	c #2A9C21",
+"0 	c #31A628",
+"a 	c #183116",
+"b 	c #162314",
+"c 	c #162915",
+"d 	c #216F1B",
+"e 	c #141F14",
+"f 	c #206A1B",
+"g 	c #23791C",
+"h 	c #1D5018",
+"i 	c #1E5719",
+"j 	c #258F1E",
+"k 	c #1E5B1A",
+"l 	c #27991F",
+"m 	c #162514",
+"n 	c #23801D",
+"o 	c #22741B",
+"p 	c #2EA225",
+"q 	c #9CE391",
+"r 	c #89DC7B",
+"s 	c #BDEDB5",
+"t 	c #F8FDF7",
+"u 	c #9DE494",
+"v 	c #183216",
+"w 	c #1D5119",
+"x 	c #182F16",
+"y 	c #172A15",
+"z 	c #1B4217",
+"A 	c #30A527",
+"B 	c #85DB79",
+"C 	c #44BA39",
+"D 	c #1D5419",
+"E 	c #20691B",
+"F 	c #248E1E",
+"G 	c #26971E",
+"H 	c #216E1B",
+"I 	c #20661B",
+"J 	c #162614",
+"K 	c #182E16",
+"L 	c #EEFBEB",
+"M 	c #72D566",
+"N 	c #1A3C17",
+"O 	c #39B030",
+"P 	c #23851D",
+"Q 	c #152114",
+"R 	c #237D1C",
+"S 	c #61CD55",
+"T 	c #B5EBAD",
+"U 	c #D7F5D2",
+"V 	c #183516",
+"W 	c #1C4C18",
+"X 	c #48BD3D",
+"Y 	c #4FC244",
+"Z 	c #8EDF82",
+"` 	c #3DB433",
+" .	c #1E601A",
+"..	c #22771C",
+"+.	c #248A1E",
+"@.	c #1E5A19",
+"#.	c #C3EFBD",
+"$.	c #1F611A",
+"%.	c #E3F8DF",
+"&.	c #94E087",
+"*.	c #2C9F23",
+"=.	c #3FB735",
+"-.	c #21721B",
+";.	c #FCFEFC",
+">.	c #2DA024",
+",.	c #152314",
+"'.	c #ADE8A5",
+").	c #F3FCF2",
+"!.	c #D9F5D4",
+"~.	c #289A20",
+"{.	c #162414",
+"].	c #1B4518",
+"^.	c #DEF6D9",
+"/.	c #FEFFFE",
+"(.	c #172C15",
+"_.	c #162814",
+":.	c #26961E",
+"<.	c #FFFFFF",
+"[.	c #162714",
+"}.	c #D0F3CB",
+"|.	c #152214",
+"1.	c #38AF2F",
+"2.	c #6AD15E",
+"3.	c #1E5519",
+"4.	c #33A92A",
+"5.	c #1E5E1A",
+"6.	c #35AB2C",
+"7.	c #152014",
+"8.	c #37AD2E",
+"9.	c #3EB534",
+"0.	c #23821D",
+"a.	c #F6FDF5",
+"b.	c #A6E69C",
+"c.	c #BAECB3",
+"d.	c #FCFEFB",
+"e.	c #91DF85",
+"f.	c #F1FCEF",
+"g.	c #3CB332",
+"h.	c #43B938",
+"i.	c #172B15",
+"j.	c #C0EFBA",
+". . . . . + + + @ @ @ # # $ $ $ % % & * * * * * = = = - ; ; > > > > > , = = + . ' ' ' ' . . . ' ' ' . ' ' ' ) . ! > > ! , @ . . ~ ! { ] ] ^ / ( _ : < [ } [ < < _ | 1 ( 2 > 3 4 5 6 7 3 8 9 . > 0 a b } [ c d e f g ! h i j f k j l l m ) 9 n o p q : r s t u ",
+". . . + v . + + @ @ @ @ $ # % % % % % & & = & & = = - = ; > ; ; ! w ! & & * . v ' ' ) ' . . ' ' v x v x ' # v ) . . ' ) y z o p A p 1 / ^ ^ ^ ( : : [ } B [ < : ( | ( ( C D E F G H 6 6 F * I o J @ K L M $ N e z O d h h d 8 j d P n Q m p G R C S r _ u T U ",
+"K . . . . . . . @ @ @ @ V # # # % % & * & * N * = = = - - ; > > > > ! & = = . . ' ' ' ' ' . x ' + ' ' x ' ' . ' J @ W o 7 { C X Y X 1 S ( | ^ ( : [ B Z B [ : _ ( ( : _ `  .o ..H G 6 +.3 @.a i j c e #.[ Q z Q R ! ! f $.j f j p { j ) @ { p G Y [ B [ u %.&.",
+". . . . @ @ @ + @ @ V V $ $ $ $ % % % & * * & * = = - = ; > ; > ! > ; , = = v v ' ' ) ' . . ' ' ' ) ' + ' J ' - *.A O ] =.=.` O 2 ] A 2 _ : ( : [ [ } B B < : ( ( S < : 2 @.H R *.-.6 P F D l k @ $ K ;.O a @ e > X i i f $.j { >.n k ,.' d I o / '.[ } ).!.t ",
+"' ' . . . + + + @ + # @ V $ $ # % % & & & * % * = = = = ; > ; > > w - $ & * . . ' ' y ' ' . ' ' ' ' ' @ . ) > A =.=.` ` ` ` =.X 1 / l { ( _ ( : < [ } } } < : _ : ( S < ^ ; @.6 G 7 6 ~. .. ,.i j J {.T M e N e n R i $.].N y ) b Q Q e ) @ e Q h S k s ^./.T ",
+". . . . . . + + + @ @ V # # $ $ % % % * * = * & = = - - - - > ; > > > , = = v . ' ' ' ' . . x ' v x (.. _.. n ^ ` ` ` { O ` X / ^ | j { ( ( ( ( } } [ } [ < : : [ S _ : X ; D :.P 7 P F H ' j g @ @ @ <.=.b c Q k f Q e e c c e e e e e J y e Q 7 8 N 1 t r %.",
+". . . . . . . @ + + # # V # $ # % % % & & & N N = = = = ; ; > ; > > > , & * v . ' ) ' ' ' . ' ' ' ' . v [.$ 7 2 ` ` =.` =.Y / | Y S P p ( S : [ } [ [ < < < < < _ : _ | ` ; D +.7 -.+.P H * y k j Q e }.C e z b j c e e e a J e e e Q |.@ a e e ! C K T %.}.M ",
+". . . + @ @ + + @ @ @ V $ $ $ $ % % & * * = & & = = = - ; ; ; > > ! > * & = @ . ' ' ' x v . . ' x ' ' ) ) + { =.=.` ` =.2 Y | / / 1 l A _ _ : < B Z [ < [ } [ B < : 1 1 1.;  .F 6 +.o P H J 0 $.$ @ z L S b e e d k Q e b K c e e b e e c y e e { R $ M ).2.%.",
+"' . . . . + . a @ @ @ @ # # $ # % % & & * * * N = = = = ; > ; > > ; ; & N * a . x ' ' ' . v v x . ' . ' ' @ { ] =.=.2 Y Y Y / / Y 1 l 0 1 1 _ _ : } Z } < : : B : _ / 1 1.- @.F ..6 6 P :.j J h l e e ^.0 b e K { J e e e K Q e Q e e e v c e e i C y !.%.T | ",
+". . . . . . @ @ @ V V V # $ $ $ % % % * & = & & = = = ; - ; > ; > ; > = & = V ' ' ' ' . . . x x x x ' x x $ { O ` 2 2 Y / / / Y 1 1 7 A _ ( _ _ : B Z Z B < _ : : S | 1 1.; D 8 6 $.n F n y R N z y h }.{ e e Q 8 ! Q e e e e e e e e e e c e Q 0 f N M t Z !.",
+"K K . . . @ + + + @ # V # # $ # # % % * & * * N = = = ; - ; > > > ; ; & N * @ . ' ' ' . . . . x ' . ' ' ' + { =.=.Y ^ / | Y / Y | / *.A _ : < : : [ [ [ Z Z < : _ / / _ ` = D P n H 7 +.*. .v 8 8 e b ;.j Q e @ 0 c e e e Q e a ].N ].e z $.i N h R ; s #.!.1 ",
+". . . + + . + + @ @ @ # V $ % $ % % & & * * & & = = = = ; ; ; ; w ; > = & * @ ' ' ' ' ' . . x x (.' . ' ) + { 2 Y Y / / Y / / 1 1 1 *.7 ] 2 ( : } B < < Z Z : / S | | _ ` ; 3.+.G +.+.A j @.>.K $.b 0 '.b e e J j $ e a z $.l 1 S _ j J y O 0 O 2.C O 2.M 1 [ ",
+". . . . . . . + @ @ @ # # # % % $ % % & & * * & = = = = ; > ; ; w ; ; & * = @ . ' ' ' . v . . x ' x . ' ) + ` ^ / / / ^ Y / | 1 / | :.I 3 H F 4.| : [ } q Z : / S 1 1 _ 1.- 5.+.6 6 *.6.P = ' 0 k Q e %.k Q e e ! 0 ! d >.R j l j 0 0 e v 8 >.0 { X 1 }.).L 1 ",
+". . . . v @ + + @ V V # V $ % $ % % & * * * & * = = ; ; ; ; > > > ; > * & * @ . ' ' ' ' . v x x x ' x ' . , =.| ^ Y Y / / / 1 | _ _ { o 3 i o F +.6.C ^ : [ } [ S | S | 9 = 3 6 >.6 ~.A 5 * Y y n b { %.b e e e 0 d f f i o $.$.g 0 j 7.; Y >.>.| R 0 u %.t ).",
+"K K . . . + . a @ @ @ # V # # # # * % & & * % & = = = ; ; ; ; ; > ; > & & = . . ' ' ' ' . v . x + . x x ~ ; Y | / ^ X Y / 1 | | ^ ^ 4.P R o o R :.*.9 F >.1.C | S S | / F % H ~.>.0 8.6.F * $ 0 f e J U $ e Q b ! 8 d i i j j R f { { Q f 2.O 0 X | 1 !.M %.T ",
+". . . . . . @ + @ @ V V # $ % % N % % * * * * * = = = = ; ; > > > ; ; & % * @ . ) ' . . . ' x ' x ' ) ~ W = 2 1 ^ Y ^ / 1 | | / 1 : p 3 3 F +.n 9 *.~.A A G 8 P :.:.j H > - H A 0 8.0 4.3 V P K f b 0 S c a ].Q { d i o o $.o o o 0 d e f Z >.O j O Z !.#.L s ",
+". . . . . @ @ + @ @ @ # # $ $ $ % & % & & & * * = = = = ; ; ; > > ; ; & % & . . x (.) ' x x x . ) + , = ; = 2 ^ ^ / / ^ Y / | 1 1 _ A o  .E o P 9 ~.:.9 A G F 8 o 3 @.> ; > -.>.8.6 8.^ :.v > n d e c ;.a N c c $.k ; h o j j l 0 { o 7.N C >.O | | M s u #.Z ",
+". . . + + . + + V @ V V # # # % # % & % % * & * = = ; ; ; ; > ; w > ; & % * @ . ' ) ) ' + ' x x (.$ = - , ; 2 ^ ^ / | 1 ^ ^ S : _ | j R 3 w D 3 3 3 o G 9 A G :.8 o  .3.> 3.P 0 8.8.>.*.H & j ' n Q *.| k {.h e 0 $.i o o R l 0 j O d 7.h Y j >.| [ [ [ !.t &.",
+"K . . . . . . . @ @ @ V # % # & # & % & & * & * = = = - ; ; > ; > ; ; & % * . . ' ' ' . + ' (.x & , , @ $ W ^ 2 | 1 1 _ 1 1 1 _ S 2 7 =.1 1.9 8 o 3 3 H 3 o P 8 o o o H w > n 6.8.>.4.4.*.% > 0 $.e z ;.c k y {.R *.$.; f j *.X Y p f J f 1 >.>.C [ Z [ T ).%.",
+". . . . + @ @ @ V @ V # $ V % V * % & * & & * * = = = = ; ; ; > > > ; , & & @ . ) ) ' v x (.v @ ; , , , = W 2 | ^ | ( _ < _ ( Y | p j ^ [ < < : ^ 1.G E = = @.E  .E R H D > o >.8.*.9.6.A P I J l e d }.O Q z J =.R f n $.k j O { C o 7.>.Z j 0 1 T 1 T Z %.&.",
+"' ' . . . + + . @ @ @ @ % # % V # & % * * * * * = = ; ; ; ; ; > > ; ; & % * . . ) ' ) ' ' . , ; , $ , , - - ` _ ( 1 | 1 1 ^ { p P n O _ } : : : q q < C G o @.@.@.3.3. . .3 P >.>.8.*.6.*._.k O z e $ <.Q h c e f o i h o o j X _ 7 > 7.W { { 0 Y Z #.T U T }.",
+". . . . . . + + V @ # # # % V % * % % & % & * * = = = = ; > > ; > > ; % & & @ . ' ' ' ) ' ~ = = v @ $ $ , @ 9 ] | 2 ` { 4.9 n  .n P _ [ : : : B [ B Z } : / =.4.F o  .@.@.@.R A 4.*.O 4 4 G I K 0 e X %.j e {.v | $.; d o o ` r O z 7.7.y K R >.1 u T %.Y U r ",
+". . . . . . @ a @ @ V V # % # # # & & & & & & * = = = - ; ; > > > ; > % % * @ x ' x ' (.@ * , v @ @ @ @ - x D i :.0.o H o ..n o ; k _ : _ < < } B B : | _ : : [ < ( ` 8 D = 5.:.*.4.*.9.:.' I 0 $ e k t y @ y J v e y R *.k $ z $ Q e Q 7.a '.[ l C Z j ; ).<.",
+"' ' . . . . . v # @ @ @ # @ & # * # # * * * * & = = * 3., ! ! > > 3.; $ & = x (.K b _., - , $ + $ x @ = @ , - $ D D D ..3 5.H o I  ./ _ < < < [ } } : _ S [ B } < [ Z 1 @.# D P 6 *.0 *.- = g @ >.e Y t f e a a 1 b e n j v e Q |.e @ T N N }.a.} X O b e }.0 ",
+". ' . . . @ . x @ @ # @ # # # # * N & # & & & & * > & , > 3.* ; = > > * & = v ' _.v , = , @ v . v & @ $ W * @ = $ = i o D D k o 3 3 | ( : < } [ Z } : : : [ } [ [ [ } S n % W P ~.*.G 0 :.) f 7 N e l ).z ; b b j z y ! o @ e e e c { ;.}.e t t 1 2.j 7.f ).h ",
+"' x . x x . @ @ V # @ # # # # # & # & * & & = = * , ; ; * & * > 3.> ; # # $ x ' J , - , $ v + + v @ $ , = = , = , 5.0. .= k 5.$.i d _ _ ( < } B Z < S [ B } [ } Z : : _ p - W ..6 -.*.0 * + % $ 0 e e a k l ! Q z {.e $.j a e e Q e e ;.Z N 2.L 2.M { 7.b !.*.",
+"' ' . . x . . . @ # # # @ # # V N # * N * & & & ; & > & = 3.3.; > ; = & * , v ' - - @ a @ a v + # @ - - $ $ $ $ 5.R 0.i ; 3 5.- D d : : ( _ < B Z B [ } Z B [ } } : _ _ ` ! = -.$.+.7 ~.*.[.j l $ J e K j *.J e e e c j n Q e Q e Q b ; >.b >.0 C } >.b i ;.).",
+". x x . . x @ @ @ @ @ @ # # N # # & & & & * * = * , * > 3.& $ > > 3.> = & + a $ - , a * , ' . v v $ = @ $ $ $ D R H ; , - - D W i  ._ < : : < B B Z q Z Z Z Z } : : : _ =.W ; 3 G -.n O 4.@.N z { j b $ $.O z b e Q e k >.N e e b $ }./.T /.s S r Z { J Q r %.",
+"' ' . . . . . @ @ @ # # # # # # * V * & % & * = * > = ; @ ; @.& > > - D 3 D ; - a y y , ' v I n 3 ~ $ # v = 5.o W @ ; 7 0 D $ ; > > ^ ( < < < < B q b.Z Z B Z } _ : : : =.- W H ..-.6 +.8 _.{ N K 8 z y C l |.e e e Q ! k J e Q e $ Y Z M Z &.r 2.| f J Q e e ",
+". x x . . . @ . @ # @ # V # # & # & % & & * * * * _ [ } [ c.[ @.:.S c.c.| 3 , = a y ' a @ 5 L d.e.- x = @ w o D = ; _ f.a.^ * ; $ # O / _ [ } } Z e.q q Z B [ [ : _ < _ =.- > o ..6 P 5 g.j T s Q e y $ j >.N Q J y K J b b J z ; f 1 u 0 } C N ; h ; @ @ b b ",
+"' ' . . . @ . @ @ # @ # # # # # # & & % & * * * * S > * 3.* E }.S ~.* , i D , ' ' a @ ' (.^ /.d.d.o J @ W -.3 = W i '.d.a.| x % ) @ 1.2 | _ B B q Z Z q q } : : [ ( : : 2 = D o +.+.~.A  .y )./.; e e a | S c e e e Q e Q e $ %.T $ >.%.!.Z !.R f c j T S N c ",
+"x . @ . . ' @ @ @ @ @ # @ # # # * V & % % & N N * G > = = * D S 3.; = D R @ $ ' ' ' ' a ' : d.t t H [.W o W $ ; W , b.a.d.M |.b J . =.X | [ [ } B e.e.Z } < : : : : _ _ ] - > P F ~.:.A 8 # { T z e e e b N J e e e e e e e i %.!.; K >.R J { >.; c v u <.<.O ",
+"' ' x ' . . @ @ @ @ @ @ # # # @ # & & % & * & * > S / / S : / _ S : S : ^ W ' y ' y ' $ @ : a.d.d.I ' w D w w ; - , T d.a.: Q b b . ` X / < } B B Z B } < < : : : _ ( S h.; D F *.A 5 6.3.7.Q Q e b Q e e Q @ O b Q e e $ v z L t v ; #.).&.Y >.R e e @ i ! l ",
+"' ' ' . . @ . @ @ @ # @ @ # # # % # & % % & * * % 3.= = > ; - > = n H = V @ a a y a @ & + _ d.d.t o ' @ $ W i W , , c.d.t 1 e ,.b . ` X / M [ e.Z } [ < : : : : ( ( ( _ 2 ; 3.:.7 :.~.*.> # @ Q J $ $ e y e $.r d y l k K $ h T '.i i B L @.j 8 c R C e P {.h ",
+"@ . ' . @ @ @ . @ @ @ # # # # V * # & & % & * N * & = = ; ; > ; H 3 * $ x $ y a y , - $ ) _ d.d.t j ) ) v * - 3., $ c.;.t 1 e b b a ] X Y _ [ Z B [ : : : : : : ( _ ( _ ^ W 5.~.4.A 6.O n 6.1.A @ $ c e Q e $ { Q e l l >.i $ s ^.- = 1.%.b.E z $ 0 _ i 7.e i ",
+"# @ @ ' ' . @ @ @ @ @ # @ # # # # & # & % & & & = $ ; = & = > 3.o w V $ V $ ' ' ~ = , a b _ d.d.d.n J . $ $ $ W ; % '.;.;.2.e b J . =.X ^ 1 _ } [ < : _ : : _ _ 1 ( : _ ^ > 3 A 0 >.4.8.8 >.A g.0 e e c | z y N c e y h o d [ s '.4 @.8.^.A _ ! 0 Z 2 D - e 0 ",
+"% @ @ . @ ' @ @ @ @ @ @ # # # # # & # & % & & & & > & > * = o n > = ~ K * a a ' ! $ (.x ) _ a.;.d.d ) = = , , & D % u d.;.2.e Q J . ] X X / S < : : < : : : _ _ 1 S : : / w 3 4 6.8.4.0 F G 9 =.% e e c M }.M =.e e *.f k l 1 s c.5 F S a.b.o @.j t >.A 1 - n ",
+". @ @ . @ . @ @ @ @ @ @ # @ # # & # * N & & & & ; ^ 3., = -.S ~.* @ , W =.$ a = , ' _.a x : d.;./.H ) , & = = $ D , '.t ;.2.e b J . =.Y / 1 S [ < [ [ < < : _ : _ : < < | D H >.>.*.0 >.*.+.8.4.> e b e i ! C Z z b z f R h | < c.q 8.} /.1.; J | ^.^ { G J C ",
+") ' . @ . . . @ @ @ @ @ # # # # # # # * # & & , & S v 3.k H : 6 $ $ V ' ^ = * - _.y y v ' [ d.;.;.n {.' % ; & & > $ '.;.t 2.e b J . ` / 1 ( _ [ < [ } < : : _ : S : < < | D H A >.>.8.*.~.+.9.A g.. Q e e J j 8 b e M l ; d 1 }.c.g.>.C '.S H N P !.=.@.N g l ",
+"(.(.x x @ @ @ . @ @ @ @ @ @ # # V * * & N N & % - q A O C 9 < S :.A F :.b.o x a ' y a , = [ ;.;.d.$._.v $ $ - W , @ '.t ;.2.e ,.,.+ C / 1 ( < [ B [ < < < < } < [ : } B / w H A 0 >.>.>.~.6 >.8.5 O 5.V |.e i P y c l C $.$.C q %.^ -.* ,.C ^ & _ S X E ! *.| ",
+"i.i.K K v v @ x # @ # @ @ @ @ # $ N N % & * = , ! ^ } } S ^ [ 2 S ^ | | S - (.a y ' $ = # S t /./.f b # + @ D $ - + q ;./._ Q |.) $ 2 | / ( < [ B B [ [ < < } } [ M } B 1 w H A A *.4.>.~.~.>.8.8.9.0 6.3 Q ) i b Q [ 0 z l 1 T }.} +.~ Q P g.E >.q { 8 A M f ",
+"i.(.x x x x v @ v V @ # # # # # % % & & N $ , , , n n ! V ~ V % + V 3.k > i.a ' K V * , a : /.;.;.f ,.~ - @ $ ; % x '.<.d.: |.|.{.+ X 1 / : [ [ Z B B } } } [ } [ : [ B | D H A A >.>.0 6 6 0 0 8.9.9.9.{ R z ! e Q { r k k | Z ^.} ^ -.Q H 3 N A } [ o h | $.",
+"i.i.(.(.x x v v @ @ V V # % $ # $ $ * & & # $ , H -.; v $ V V $ V ! w $ a @ K y $ , , ~ @ B <.;./.$.b Q ) = % $ $ b q /.d.2.e m J . =.( Y : : < B B B B B B } r [ [ } } 1 w H A A >.>.4.~.6 0 8.9.8.6.>.~. .J N a |.1 | d d [ s s c.5 -.$.5 n @ P } S b 8 | N ",
+"x ' i.(.(.x v v v V @ @ V V # $ # % % , V , ; 3.-., @ ~ $ , ! , ! > - ~ ~ K i., * v ~ * $ : ;.;.;.k 7.' ,.' = % ) Q './.;.: e J c ~ C S Y ( [ B Z Z e.q e.Z Z } } [ } Z ^ D 3 A A *.4.>.6 6 *.8.8.6.9.4.A P ) ].b e j | i R 1 }.L ^ *.! i.| A N 6._ _  .j S y ",
+"i.(.i.i.(.(.x x x v @ @ # # # % % , $ $ , ! 5.3 K = V V @ V v > ..w , v @ @ $ @ K $ > * (._ /.;.t O e ,.' 7._.y e ! %./.;.} Q m J $ 0 : S 1 : B q Z q e.q Z Z Z } < } Z | 3.H A A >.>.4.~.6 0 8.8.8.9.4 ~.G ' ].y b 2 n ! 8 2.s }.< 5.J Q :.A > 7 B } N | O J ",
+"(.(.(.(.i.' (.' v x v V v V V V $ % $ ~ ! $.$.! @ =.> v $ , * P - , V a = V = x J V ! V ,.( <.;./.L $.e |.m e |.$.} <./.;.1 b b _.. d X _ _ < } Z q q b.q e.Z B } } B Z | w H A >.*.4.>.~.6 >.0 9.>.6.6.~.o ) $.b c d C f 8 [ }.^._ { ! ,.:.n * G }.=.' >.=.e ",
+"y y (.' (.' x (.' ' . v V V # $ # $ $ , k -.> i., j.=.| S ^ Z ^ ^ | | | ^ , . x v _.x $ ) Y ;./././.L C y e b j t <.;.;.<.0 e J ' {.x G ( : B Z q q q b.b.q Z Z } [ [ Z | 3.3 A A >.>.>.~.6 0 8.0 8.9.5 4 g.$ $ N Q 0 n ].j 1 T }.u ^ n = j @.' A Z 1 7.C ; b ",
+"(.(.(.' ' ' (.' ' x V V ' V , V , K ; n k ~ @ v v ^ $ v @ * H $ * @ $ , v @ $ (.' v _.V @ $ T /./.;./.<.}.=.r ;.;./.;.;.t N e _.) ' ) + D F C : } q b.b.q q q } Z : [ q ^ 3.$.A A *.4.4.6 6 >.6.0 9.0 4.A E {.I J b n { k j O u ^.#.1.K , C G = ` Z ` > 8 h e ",
+"' K y (.' ' x ' ' (.x . v V V V x = $.3 ! v v ~ $ :.# $ * - k * a * , @ $ i ; v ) ' J ' & b @ T ;.<.;.;.<.;./.<./.t <.).8 e _.b ) ' (.' @ = 5.+.^ : } q q q q Z } : Z Z C 5.-.4.>.*.>.4.6 6 0 6.6.9.9.>.7 g.h ].].Q $.8 i O O u ).'.n 7.Q 9 > = | c.Y = 1 K e ",
+"(.(.' ' ' x (.' ' a K v v v v v , $.k , K @ @ x v & x V V @ > 3.* = @ $ w $., $ V v K V b # _.b ; &.;.;.<.<./.;.;.%.R b e y Q ) ) (.' + $ = 3.R +.>.8.C ^ ^ S : } Z q [ A 3 n A 4.~.4.A 6 6 >.0 6.0 0 6.~.3.{.k y b 8 { R j C #.L #.g.v & n o > A f.o { h b e ",
+"(.' (.(.(.' x x i.x i.' @ ' v * w > ~ i.i.$ $ x & (.$ V x V , w 3.~ ~ k H w y a V = K a a a (.) l ^.<.<./.;.<.<.<.;.O v e b _.' ' (.(.v $ - 3.n n *.>.*.~.~.6 +.4.8.^ 4.n 3.n >.4.~.4.A 6 6 A 0 6.6.h.4.+.{ I ].; e h C f M f &.).s A (.K 1 > # ^ j.1.* R e e ",
+"(.(.(.' ' x ' ' ) K ' K ' v ~ 3., v v @ @ V # v v v $ V V = V V $.> 5.3.- v v ) _.a ! ~ a |.D u <./.t /.<.<././.;.t /.%.d e . ) . _._.v $ = 3.H ~.*.4.4.>.*.+.n  . .o -.w k n 4.4.*.>.4.+.6 A 4.4.C 0 *.>.$.7.! $ Q k R j R >.s #.!.^ x ; 6.G > =.L ; ` ! e Q ",
+"(.(.(.(.(.(.(.K y a @ a K ' $ ! * K i.@ v x @ # (.8 8 F F *.:.:.~.0 h.G -._.@ ' ' Q , - @ $ '.<./.<.<.<.U M T /.<./././.!.W Q ' + J J . % = 3. .n :.~.*.>.~.~.+.-. .H o $.H n >.>.*.>.A +.6 A 4.O 4.*.0 4 6 @ h N Q N | ; 2.v T ).!.{ Q {.^ @.E S =.] 0.b Q e ",
+"' ' (.' ' ' K ' a @ @ K i.v ~ , > * @ x v @ x . ; } *.*.F 8 P G 4 g.=.{ _ $ . ' N ) 7., D { d.<./.<.L [ z e @ X ;.<.<./.<.0 7.) ' ) # D 3.3.3.5. .H n n F ~.F o -. .H R $.H n *.4.~.>.A 6 6 7 4.~.^ 9.>.*. .Q $.k Q h 8 8 l $.#.%.!.=.b V E * D S j.> D {.e v ",
+"' (.' (.' x x ' (.y ' i.i.V , @ ~ ! , x v # v @ x S V $ , $ = ; 3 -.~ ' | $ + @ + x x b b e.<./.<.'.W |.|.) Q {.i 2.;.<.<._ Q _.J @ P 1 : ( ^ ^ g.4 F -.H o n H 3 3.H -.$.H n *.>.~.4.>.6 6 A A 4.6.A >.>.R ' i N Q ; 1 8 | K Z ).!.O ' > =.; o b.[ G I Q e e ",
+"x (.) x ' i.) (.(.x K ' ~ ! , K K @ 3.- v v ' $ $ c.S | ^ 9 4.] 9.:.6 ^ j.= $ & y ) v # Q : <.<.<.d Q ' . . @ @ c J }.<.<.M e J m @ X ( ( : [ Z b.q [ S =.j 5.> 3 W  .H  .5.n 4.>.*.>.4.6 6 >.4.A 4.8.>.~.-.' ; f Q h f | >.; r ).L : _.$ :.G 9 | #./ % e e y ",
+". (.(.x ' ' (.' ' x ' (.v , $ v K ~ v 3.> _.@ v v $.o :.F g.^ 5 6 *.:.6 3.$ - J _._.$ ; ,.S /.<.<.d Q ' . ~ % % @ c s <.<.[ Q b J a C 1 1 _ < Z Z b.'.c.q } ^ ] n  .i i 5.E o ~.>.*.0 0 6 6 *.4.A 4.8.A 7 n @ - $ Q h 1 f | Q !.).%.2._.b 6.3.3 ] ^./ @ Q |.Q ",
+"(.. (.(.' ' ' ' (.v x (.i.v V V V i.v ; 3.= K v @ K @ $ - H > = $ - - $ - @ V y ) V ; , e 1 <.<./.o {.' ' * ; z @ c T ;.<.} e b J + 2 1 ( : : } q q b.b.'.q q Z < 1 *.i D 5.o 4.*.~.*.0 6 6 >.>.6.4.8.>.~.6 D n o e f i Z R i Z ).%.&.b v 3.*.-.C U 1 |.b e a ",
+") x x ' (.x x ' x x K x x K v V V v V K = 5., $ v , v , H 3.~ @ $ , , V  .@ ,.(.v $ % . e 2.<.<.<.o |.' v - ; % b b s <.<.} Q {.J @ X 1 ( : < B q q q b.b.q q Z q q : p 5.> H 8.>.*.0 0 6 6 >.A 6.4.8.*.6 P = k ; e f X *.1 e %.L d.X _., ^ 3.=.B <.p Q D - e ",
+"J ' x ) ) (.x (.x ' K K K v K v @ > v (.@ & w , @ , > -.5.w ! @ $ - - - b # v a ; v ) . e S /.<.<.o |.+ # , # ) Q Q s <.<.M e m J . C 1 1 : : } q q b.b.b.b.q q < B Z : :.> 3 *.*.6 *.0 6 6 >.>.A 4.4.4.~.F w  .k Q K R &.n $ 2.).%.}.b > H ~.6.q ^.P e ]._.z ",
+"{._.(.(.(.(.' ' x ' ' x x v K K ~ ; = V K ' , - , 6 O 9.+.7 *.9.:.8 G R W ' % + $ . ) ' e 2./.<.<.I |.$ $ . _.Q b b s <.<.M e ,.J @ 2 1 1 : < B q q q q q q Z Z Z [ Z e.g.@.H *.0 *.*.0 6 6 *.>.A 4.A >.6 F  .o ! Q h =.C Y Q t }.t | m ) A 6 5 g.f.n {.|.e e ",
+") ) ) (.x (.' (.(.K x v v x v x V K w ! ~ v _.- H '.^ A F F ..4.C 7 4 :.B $ , % (.x ) J e [ <./.<.f ,.~ ' [.,.Q J e T <.<.[ e ,.{.. =.1 ( _ : } q q b.b.b.q q Z } _ < q ^ 3 5.~.*.6 0 *.+.6 >.>.A 8.4.>.+.R ; ; $.e K $.&.R J 2.t f.%.7.J 5.-.H / ^.o Q b e $ ",
+") J ) ' v x K x (.v v K (.K v v K K ~ 3 3.v v K $ [ $ v V $ & a $ , ' # ^ z $ J ' [.|.J e [ <.<.<.o {.. b Q ,._.,.e T <.<.[ e b J @ =./ ( : < B q q q q q q q Z Z B } q ^ 3.w 4.>.~.0 0 6 6 *.A A 4.4.>.6 G o n $.Q ! 0 2.Y J ).}.).r J > 5 +.F ^ a.D b ' |.Q ",
+") ) x $ @ ) ) V v x (.' v v v v K @ i.@ $.5.$ i.$ '.[ S ^ ] F :.F :.F ^ '.; J |.b |.b ) J 2./.<.<.n Q Q ,.Q |.b Q e '.<.<.M e |.b . ^ 1 1 _ : } q q b.b.q q Z Z [ < } Z ( D $.~.*.6 *.*.6 +.*.>.*.4.4.>.G o ! v k e c n '.$.e M t ).^.Q , 3.A 6.e.s ].Q m e b ",
+"(.V % v (.x V $ v v x K (.i.i.K v K v v * 3.3.@ K 5.P 5 9 +.~.F *.~.F F n ) |.m Q 7.,.) _.M <.<.<.g Q |.J Q Q Q Q b T <.<.[ Q {.b a X 1 1 _ < B q q q b.b.q q Z } < [ B | D $.*.*.*.*.*.6 +.~.>.A A *.~.*.F i + $.b y l T *.K %.L ).'.z $ o >.6.^ a.].J $ Q e ",
+"% N v ) (.$ $ v _.x $ $ v ' x v K v v K _.; H 5.@ i.$ * ! V - * ~ $ 3.= {.) ,.,.Q b ) ' _.2.<.<./.I e e Q Q |.Q Q e T <.<.: e |.J . 2 | | _ : } q q q b.q q Z Z B [ } B | w $.~.*.6 *.*.6 +.*.A A 4.8.*.n P ..D h e c n s z _.[ ).).}.7.v x 6.3 X %.d e @ e b ",
+"- v _.) x v x ' i.(.x v v v K x (.$ x (.V , = 3.$.* V K * - > 3.- , ! a |.' J |.) ' ' ) J _ <.<.<.d Q Q |.Q ,.b b e s <.<.[ e {.b a C 1 1 S : B q q q b.b.q q } [ < } B | D 5.~.*.*.*.*.6 +.~.>.A *.A *.6 F D Q j e Q l r R K %.!./.u @ J F C A 1./.i @ z c Q ",
+"' ) _.(.(._.(.V (.i.i.x v v (._.v v (.V w , i., A 3.@ @ v > 3.3.k w 3.v , J b {.) ) ) ' ) _ <./.<.$.Q Q ,.,.Q 7.b e #.;./.} e J {.. X / | _ : } q q b.q q q Z Z } < } Z | > $.6 *.6 *.*.6 +.~.*.~.A 8.~.n 6 :.d z K e o %.@ e Z ).).T J * F 1.~.B }.0 Q ) m J ",
+"_.) (.(.' K x x x (.i.' $ , $ V x i.v * & v @ - , R n ~.6 O 0 6 *.0 5 :.*.. b [.) [.) v ~ [ <.<.<.$.Q e Q b Q e e b s /./.} Q e b . 2 | 1 _ : B q q q q b.q Z Z [ < [ B | > $.~.*.6 *.6 +.+.6 >.>.>.>.*.~.+.; Q n e Q ` } ; a !.L L M 7.# =.C 7 =.t d c $ c e ",
+"K x ) ) (.x x ) $ V K ) ) V > 3 * K @ $ i.v ! 3.K 6 ~.F 9 5 [ | 6 7 0 5 F * ) ) ) (.+ ~ + Y <.<.<.k |.,.|.,.b Q Q J Z <.<.1 J Q {.. =.| | ( : } Z q q q q q Z B } : } B | w 5.6 6 6 *.*.6 n ~.>.>.A >.6 n F F o ! a Q 0 ^.c e T ).;.2.J i.6.A 5.=.%.>.J N y b ",
+") ) ) ) ) (.K v ) V , $ i._.v = $.& v v @ ; ! v V K $ = & V | ~.$ @ *  ., - x (.) x , + Q G a./.u J e Q Q Q Q b b e 0 ;.;.j e e b a C / 1 ( : B Z q q q q q Z Z [ : [ Z / w 5.~.*.6 6 6 6 n 6 *.~.A >.*.~.R = (.n Q Q Y u @ @ #.;.;.1 c ) F C F j L o c @ e e ",
+"x ) ) (.' i.(.' K ' , = @ K K i.= ! v K ! * i.V v ^ ^ S | S j.Z | | ^ ^ | W @ v # * ' b b {._.~ |.Q e e _.e Q ,.J b e @ @ b e J b . ] / 1 ( : } q q q q q q Z B } < } B | w 5.~.6 6 *.6 6 +.~.>.A 0 >.6 6 P o  .; $ J =.U e b #.).<.1 7.3 C A 8.^ L O Q c c e ",
+"i.(.x (.(.K ' _.(._.K , * a K @ ' ' i.@ > k * i.v *.:.F :.F >.+.6 :.:.:.F * , , = (.b |.|.Q e |.|.e J e e e b e e b e b e e Q {.m a =.| 1 ( : } Z q q q q q } B } : < B 1 w 3.6 ~.6 *.*.+.n 6 *.*.>.>.G 6 n ; J g Q e u &.J @ T t L 2._.F >.8.*.| a.>.K ; Q e ",
+") v v (.) (.(.(.' x i.' = * K y (.x ' @ ! 3.- $ K V @ & ; @ x & v $ $ $ (.' % = (.b |.|.J _.,.e e c 7 [ T }.T } R a e e b b b b b K 2 / 1 S : [ Z Z q q q Z Z B [ < } B | D  .G 6 6 6 6 6 +.~.~.G *.4.~.n P H - I z Q 2.u e e }.%.;.{ ,.= 9.~.A =.L C e J y |.",
+") ) x v x _._.K i.a a K , w , _.y V $ * 3.* ~ > $ i.a a , w $ v , @ x V y V V y a ) {.Q m e e b 7 }.<.<./.;.<.<.<.L 0 e e Q b c b K =.| | S : [ Z q q q q q Z B } : [ } / D 3.6 ~.6 6 6 6 n ~.~.A *.*.G n 6 o + f y e T =.b a &.;.L M 7.-.6 ^ -.A %.>.v z e e ",
+"J J (.V V x i.) i.y a $ , , - ! x v @ - k > ~ * * , v = 3.* ' $ $ @ v @ . J _.' # x J J [.e ~ 1 ;.<.<./.<.<././.<.;.<.e.@ e @ e b K =./ 1 ( _ B Z Z Z q q Z Z B [ < [ B | >  .F 6 6 6 *.n n G ~.*.*.>.G n n i ) j @ J Z }.e {.}.L <.G ,.H ^ +.^ ~.f.=.y N J J ",
+"' i.) ) v V v i.v v * $ y a ! w @.V v , ! k k * K ^ : : O , H ( ( | | g.g.x _.K ) v x ' ) _.S <.<.<.<.t %.%.U /./.<.<.<.'.c e y b K =.Y 1 S _ [ Z q q q q Z Z B < < < B 1 > 3.F 6 6 6 6 6 -.6 ~.G *.A *.n n  .$ h b c #.C Q a 2.t ).1 Q 6.>.9.6 S L =.b v |.e ",
+"x v ' i.i.v V V $ = , a ' $ , a -.= @ @ @ > $.k ~ : 3.' v $ ] A V @ , 3.< & y b |.@ # ' {.> L <.<.<.r h Q b ) ~ }.<./.<.;.I e Q b K =.| / _ _ } B Z Z Z q e.B } } : < } / w 3.G 6 +.6 6 n +.6 ~.*.*.~.G F R w ' l $ e Z u Q b %.t ;.p 7.! 8.*.*.=.).0 e @ e e ",
+"i.v , & v _.' , , a _.' - & (._.a V , - ~ K ~ -.k ^ ~ - $ x 1 :., # a ' ( J ) a ) J (.+ ' j <.;.<.L . e ,.e Q e b #.<.<.<.o ,.m b K =.| / ( _ } B Z q q q Z Z B [ : < } / D 3.F 6 6 6 6 n n +.~.~.A *.~.+.o 3.- $ c c !.j e c 2./.^.0 |.3.+.8.+.*.^.| J v Q e ",
+"v $ (.y * V b = , x ' ' V , a ' ) $ V v * ~ @ * -.j.j.c.j.^.j.> $ { ^ ( '.& J _._.J ) ' m : <.<.<.C Q e 7.e ,.e Q > <.<.<.O e Q J y 0 1 Y _ : } Z q q Z Z q B [ _ [ [ < | 3.5.+.+.+.6 6 +.n G ~.~.*.~.6 F n  .- 0 y e M [ e N %.L <.f {.~.9.0 8.+.L O v K b e ",
+"3.$ ' (.i.v i.(.- V a y ' V v a V $ ' y $ ~ @ * * -.> * ~ _.$ a @ = v ) - Q . x ) ) ) ) b : <.<./.l e e b e Q Q e @ )./.<.C e ,.e b *._ 1 S _ [ B Z q Z Z q Z B : [ } [ / > 3.+.+.+.6 6 n -.+.~.6 ~.~.6 +.o 3.; o e y T f Q e M ;.L =.e 6.~.0 9.^ L Y b N Q Q ",
+"$ v i.b a $ ' K V ' (.y ' V V $ + v ) J i.a ~ * @ > k > $ $ $ V $ v $ x @ ' V ,._.J ) (.m 2.<.<./.g e Q m Q e Q e b #./.<.S e b c e @ n 2 : < } } B q q Z Z B } < _ : [ ^ > 3.n 6 +.6 6 +.n +.G *.~.G n n n o I P c b M X Q a ^.L <.h e 3.^ *.>.=.d.>.$ J Q e ",
+"b i.K J V = V $ y y (.) i.' V $ ' ) ) ) ) ) a @ ~ @ * 3.k - @ $ $ v $ ' (.a y ) _._.) (.{._ <.<.<.o e Q e Q Q Q Q Q u <.<.M e e m e e x D F ^ [ q q b.q Z Z Z [ B _ : B / D 3.+.+.+.6 6 n n +.G 6 6 *.G n o 5.> @ e N M o e b [ <.).Y e = *.8.-.5 ^.u e @ e e ",
+"K _.@ $ @ ! - v J i.x v . (.(.' [.) ' ' ) ) ' (.w @ a * 3.- $ ,  .v $ v x v b a ) ) ) ) J : <.<.<.d Q b e |.,.b ,.Q '.<.<.} e e |.J b b [.. 3.F ^ S } q b.q } [ : _ < B ] 3.@.+.6 +.6 6 n n +.G ~.>.~.+.n R o H k $ e Z { e z T t <.~ ) >.9.0 ~.5.a.O @ e Q e ",
+"a ' ~ $ , ! V i.) ' V $ V (.' ) ) _._.c y y ' ) _., * ~ * > 3.@ ^ @ @ V y ' J ) _.) ) ) m _ <.<.<.f e y b e e Q e Q '.<./.M e e Q |.Q b ' V = w 3 F 4.^ S } Z q < < Z } p > @.F +.n 6 +.n -.+.~.n G ~.G n H D = {.e ; C $ e e r <.L j b h.*.0 8.^ %.&.e $ e Q ",
+"J y i.a - $ b y K V v V @ x x (.) ) c c y K y ) . $ ~ ~ @ * > > | a @ @ v v ' J ) ) y ' m : /.<.<.d Q a ' b Q e e Q T <.<.: e 7.Q |.{.J ' , ; 3 o n n n n ~.6.g.S _ [ ( 8 > $.n +.n 6 6 n n n G ~.~.~.n n o 3 i J { e &.>.b a #.t <.@ b 3.^ *.>.C d.| v b Q e ",
+"a _.K @ ' i.J K $ $ v v x ) ) J _.) y y y y y K ' ) V , , ~ ~ > _ $ $ ' x (.(.J J _.) (.m : <.<.<.n Q ' . @ ' Q Q Q T <.<.2.e Q J Q {.) ' V &  .H n :.F n o H  . . .n n ; ; H n 6 n 6 6 n n +.6 6 6 ~.n n o 3 D @ @ @ f K e |.s ;.U j e * *.C +.4.%.r c y e Q ",
+"_._.(.y J i.@ @ 3., v J ,.) ) ) ) ) ) ) y K K . a + v (.' , $ , : 3.$ y a ' ' J ) ) ) _.b M <.<./.n Q J @ , . ,.e Q T <.<.M e 7.b 7.m m v & >  .H n 8 F 8 o 3 5.D * D 3.> > $.6 +.n n 6 -.-.n 6 +.~.+.+.+.n i ; @ }.y C h e z &.<.).@ ,.P *.9.n o ^.Z c b e Q ",
+"V y J _._.K * k * -.@ _.' {._._.) ) _.) ) K . . a . . . @ # $ V - - - a a @ _.) ) ) ) ) ,.2.<.<.<.H |.. @ $ ' b Q Q T <.<.M 7.7._.e J ' N = ; > 3. .o R P R o 3 i = D 3.w > 3.n +.+.n 6 n -.+.6 +.~.~.+.n -.o n @ o k K N e e %.t L f @ ~.8.*.9.7 f.2.K b e Q ",
+", v J ,.) @ * * k ! $., J (.m ) _._.) ) ' . . + # @ % @ @ (.% % . = ; - ' y ,.' ) ) (._.b : <.<.<.H |.@ + + x ,.e Q T <.<.M e e e e H { ^ g.*.n  . . .5. . . .3 D w i 3.w > k n 6 -.+.+.-.n n 6 ~.6 n 6 6 o 3.D z /.b C v e $ S <.!.J 7.A 8.8.*.: L u Q c e e ",
+"K @ @ a $ $ ' J 3.* > k v b ' [._.) ) ' . v v v # . # x @ @ # # = , @ D v $ ' J _.) ) ) ,.: <.<.<.o {.' v ~ ' Q e Q T <.<.M e 7.m c 0 / S _ < [ S ^ A P 3 3.3.D W ; D D 3.3.k +.+.n n 6 -.-.n 6 6 ~.6 +.n H 5. .8 2.j J c e e ^.t %.f 7., 8.9.*.7 f.Y y e e Q ",
+"_._.v w 5.$ _.) ~ * * k 3.v [.) ) _.) ' x . @ @ V V % % E j P n R n $ v $ $ . ) ) ) ) _.{.: <.<.<.0.b ' @ $ ) e e 7.T <.<.M e e e c ` 1 / | : < Z Z q } ( 1.j o @.D ; = > 3.3.n +.n +.n -.-.+.+.+.6 6 +.n 3 w $ ; t e R c e c 1 /.}.Q J 6 *.^ n F ^.}.b b e e ",
+"K _.J $ 3.> a J i.K > > > 3.K ) ) ' ) ' v v V V x ^ q q ( ` j p ( | '.b.:.) ; ) ) y y _.,.: <.<.<.o Q . $ ' Q e e e T /.<.M e e Q ' X Y Y ( : < B B Z Z Z B [ < ^ A n D - w k n +.n +.+.-.-.n 6 6 +.6 +.n 3 & ,.j !.{ e J e J '.;.L k N 4.8.0 9.5.f.[ y e e _.",
+"@ i.J J @ w - _._.i.i.! > > k v y ) . v v v v V & ^ = v + % @ ' . . ' W < $ b ' J ) ) ) b : <.<.<.o |.. ' b e Q e Q T <.<.[ e e Q c X / ( S S < [ } Z Z q Z B B e.< / :.3.- 3.n n n n +.-.-.n +.+.+.G +.n 3 3.D o /.e N e Q e | ;.}.7.7.4.0 6 6 g.f.T b e e e ",
+"K a v K i.$ w > ' i.J _.* 3.! $.i.(.x . v v v V a b.0.G j j *.n 9 j P R q a v x _.) ) _.b : <.<.<.o J ) e e Q Q e e T <.<.M e Q b _.C X 1 ( ( [ B Z q Z q B [ [ S < q / o - 3.n +.n n +.-.-.n +.6 n 6 6 -.3 D > l t 0 Q e Q J }.).%.> 7.5.9.8.6 6 L [ K Q e Q ",
+"_.i.@ v _._.V w $ J i.i.@ k > > 3.* i.$ 3.- (.@ % P 7 F 9 9 j p j G ..o A H v ) (.(.y x ) B <.<.<.d e Q Q 7.Q e e Q T <.<.[ e e e K =./ / 1 _ [ B B Z q Z Z B [ : ( _ < 4.* 3.+.-.-.n n -.-.n +.+.n +.6 +.$.> m { %.e e e e e S /.T 7.' 4.*.9.H +.%.T b e Q Q ",
+"i.K K _._.i.K v R = b i.i.@ k > > 3.! $ x V & $ v * ' @ & @ , ' $ . = @ @ ) , V ' {.) = # e.<./.<.d e 7.Q e Q e e e u <.<.M e e e y =.Y / ( _ [ B B Z Z Z B B } : S < B =.- 3.n n -.+.n -.-.n +.*.+.n n 6 H ; {.*.<.j e e e K s ;.U $ z *.8.0 6 > j.T c e e e ",
+"~ ~ K _._.v ~ v @ $.w i._._.K ! k - $ K y @ = = $ # + * $ v & & v ; = v a ' (.$ ' ,.v > + : <.<.<.f e Q 7.e Q e e Q T /.<.[ e e e K =./ / S S [ B Z Z q Z Z } } < _ : B 2 > 3.n n -.n n -.-.n +.n 6 6 n n H H i *.t ; b e e e [ <.M 7._.^ 0 0 0 ] L u J e e e ",
+"~ K _._.' @ a ' b i.H 3.i.K K i.! ! @ _.@ , , = @ v = $ $ = @ , , ; ; W b (.a V x _.. % m ( /.<./.$.e e 7.e e e e Q T <.<.M e Q e K =.Y Y S _ < } B Z Z Z B } [ < _ : B ^ D 3.n n -.n n H -.n n n +.+.n o $.> {.` <.$.e Q e K r %.%.z Q ! 9.8.+.5 f.!.$ Q e e ",
+"~ @ v $ $ ' y ' i._.a $.- _.v i.K * - K ' $ @ ) ' ..F R j :.:.F *.:.*.~.o y a @ V . ) [.b [ <.<./.f e e Q e Q e e e T /.<.M e e e y =.Y / ( _ [ B B B q B B } [ : : : } C > 3.-.n -.n n -.$.n +.+.n +.n n H 3.7.=.;.=.e e e e u <.[ 7.) O 6 0 *.+.}.u J e e e ",
+"w * $ * $ _.i.v _.a {.a 5.$ ,.K K K * * @ $ , _., B *.:.p j r 1 *.0.:.P c.$ (.b y . ' y J } <././.$.e e 7.e Q e e e T <.<.M e e e K C | Y 1 _ < } B B Z Z B } [ : 2._ } ^ > w o -.-.n n -.H n n 6 n 6 -.3.5.3 [.X ;.v e e e K 2.;.s c = A 9.8.n ! }.^.N e e e ",
+"$ & * @ i._._.' @ {.(._.$ 3 @ b ~ y ~ > > > 3.* y : @ ' $ x _ A 3 V ' y : ' D , {.(.V # m _ <.<./.f e e Q 7.Q Q e Q T <.<.[ e Q e y =.Y | ( _ [ B B Z e.Z B } } _ : : } C w > n n -.n n H 3 n +.+.n n n n n o ) | t M Q e e b e./.1 7.@ C 6 *.9...#.#.v e Q e ",
+"m ~ - ~ @ @ K _.' % (.(.@ & w ! _._.y a * > w > a '.7 ~.R ~ 2 H $ ( ^ h.j.! v $ (.,.) + Q / <.<./.f e Q Q e Q e e e T <.<.M e Q e K =.Y Y 1 _ [ } B Z e.Z } [ [ _ : : B Y w > n o H n n -.H n n n -.-.-.$.! ; ' U ;.; e Q e J 1 /.u J 7.n 8.*.*.| d.%.v e e e ",
+"|.{.$ > * @ K i.) J @ & V _.' H * i.y a K ~ > > k k o :.-., v , , o *.:.5.a J ' - a J v b [ <.<./.o e e e e Q Q Q e T <.<.} e e e y C Y / S _ < B } B Z e.B B } 2._ : [ ^ w 3.o -.-.H n H $.n n +.6 n -.3.H  .) u <.M Q e e e u <.X 7.' H *.9.*.G ^.}.N e e |.",
+"[.Q {.$ = = V i.(.(.v v y J _.* P ! y i.@ @ ~ > ! ! , a ' x @ + # + W W ' b ) b = & J ) |.: <.<.<.$.e e Q e e e e b './.<.M e b e y =.Y Y 1 S [ B B B Z Z B [ < _ S : [ / > D R o H -.-.H 3 n n n -.n -.3 @.. ; t t j 7.Q Q y X <.M c > O >.0 -.$.T %.v e e Q ",
+") ,.{.) $ ; * K v ' v ) J K $ , W 3., J i.v @ ~ > 3.! x i.$ * $ $ & @ x (.y y x V ; J J |._ <.<.<.k e e b Q Q b e {.T /.<.S e e e c C Y | ( _ : } B Z Z Z B } } _ _ : [ ^ w 3.o -.H H n H H -.n +.H -.-.5.> ' k }./.S Q Q e e }.<.0 7.> 8.8.0 8.H %.}.; e e {.",
+"J _.) {._.V - $ V K K ) ) V , V b V ! $ i._.K K * ! $.3.& v @ $ , W $ ) ' x x & ' % . (.,._ <.<.<.k b e Q Q b e e e T /.<.[ e e e y O Y Y 1 _ < } } B Z B B [ [ _ S : [ / W w o n H -.-.H H -.n n n $.H 3.3.> ! <.).O J e Q J 0 ;.u 7.7.*.6 *.6 9.#.).c e e e ",
+"_.) J b {.(.$ ! ~ K K v v v v ' ) (.& ! , i.i.@ @ , ! 5.> V a $ & V V (._.$ - a b b $ + b : /.<.<.$.e e e e Q e Q e %.<.;.M e Q e y C Y / S _ [ } B Z Z Z B } [ _ ( _ < ^ w w o o H -.n H H -.n n -.$.H 5.3.; h u /.| e ,.e e T <.j 7.* 9 0 8.8.5 f.#.! e Q b ",
+"$ ' b _.) ,.J V - ~ v @ ' ) K @ @ x (.$ w * K K K K ~ ! w w = V V v v V , - V ,.) 7.J y c r <.<.<.j e Q Q e Q Q e K t <.;.Y e e e c C Y Y 1 S < } } B Z B } [ < 2.S : < ^ W w o o 3 H -.$.H -.n n $.-.$.3 = J j <.L 2.J e ,.e | /.| c  .C >.9.-.R '.%.c e Q Q ",
+"N v ) J _.b b _.- ! * ~ v _.' x ' . ) ) , w , i.K K v $ - w = v i.V v V = x Q b . ,.7.,.c S <.;./.} e e Q e Q Q e 0 ;.<.<.0 e Q e y C Y | ( _ < } } B B Z B [ < _ ( : < ^ w w -.-.H -.-.H $.-.n n H -.$.5.> J >.L ;.C e ,.e e } <.j 7.D =.0 9.8.= j.).i e e e ",
+",.# # J m _.) J i.* * ~ @ K (.) v (.' (._.$ w * K v v v V , $ x @ (.& > x ,.i.& ' # Q Q 7.{ /.<.<.t z Q e e e e N ^.<.<.<.R e e e c O Y | 1 S < } } B B B B } < _ S : < Y W w H -.3 -.-.H $.-.n n n 5.k 3. .> 8 /.;.u ) e e e 1 /.1 7.,.4.~.*.9.O }.}.y e e Q ",
+"b ' # . J J c J b K = ; , v K ) ) ' v v ) _.v - K v K @ @ V = ~ V v = v J $ ' J b v @ b e $ t <.<.<.#.0 ; c @ j t <./.<.;.$ e Q 7.J =.| | S _ [ } B Z Z Z B < : _ S _ [ ^ w D n o H H -.$.H -.n n -.H 3 w 3.7.=.L /.>.e e e c } t j 7.J n 0 0 *.8 f./.i e e e ",
+"J J ' @ a ) c J _.b i.$ = , $ v (.' (.v ' (.K $ > K i.i.v $ v v $ $ & (.J 3.= ,.) ,.. ' Q Q 2.<./.<.;.;.<./.t /.<.<.<.;.u J e e e c C | Y 1 _ : } } B B } } [ : _ _ _ [ / > w o o H -.n $.$.-.-.H -.H 5.3 _.b C t ;.}.e m J e 1 <.0 J ].8.8.0 n P j.}.v e Q e ",
+"i.b J v @ a y _._.{._.' $ , , v v x (.' x v x i.i.3 w _._.V V , , ; * K J i.$ ' J J . [.@ Q _.Y /.<.<.<.<././.<.<.<.t =.y e e e 7.y O Y C 1 : ( B B B B B B < < _ ( : < ^ > w -.-.3 H -.$.H -.n -.n $.3.3.3 ) | ).;.f e e e y S t i 7.o C 4.C 6 V }.t h e e e ",
+"_._.J _.) @ @ K J ) ) _.(.V , $ v x (.(.x x v x (.< : : 6.V :.B ^ S B : S i._.V a b (.x ' . e e g &.<.<./.;.<.<.<.r $.e e Q Q e Q y O 1 Y | : < < < B Z Z B < : 2.( : < ^ W D o -.3 H -.$.$.-.-.H n -.H 5.j J 1 /.).Y b ,.b e M <.{ 7.@ C 8.0 ^ 6 j.#.$ e e e ",
+"J i.) J _.' @ N J c _._.) a $ = V v K (.(.x x v x ^ > 3.= ) ( ~.$ a @ w } K _.v , y b (.m @ # Q e ) $.O : r S 0 $ e e Q J e e J 7.7.j _ S / S } } } B Z Z Z } < _ S _ [ ^ > w -.H 3 H -.$.$.-.-.H H k 3.5.(.# s <.t d e Q e y 2.t d 7.' -.4.9.*.~.L ).N e Q Q ",
+"b _.) ) _.J ) N @ y J ) y ) ) $ $ $ V K i.' v v _.: v . 3 $ ] n a , $ , [ , a J ' ! _.J x (.(.) e e e e e e e Q Q Q e e e e b e b 7.h C _ S S : Z B B B } [ < : S S _ < ^ > w o H $.$.H $.5.-.-.-.-.H $.w (.7.&.<.}.O e ) Q e u ;.j J W =.9.*.~.:.j.}.N e e e ",
+"{._.) i.i.J J ' # @ K y ' J {.' ~ $ ~ V K ' ' ' $ ( q U j.j.c.a $ 5 | ^ S ! $ ' y y , v y b y + ' $ k 8 n d d g d $.$.k $.J e Q e 7.J $.O 1 _ } < } Z e.B [ < < _ ( _ < ^ ; D H H 3 H -.5.k -.-.-.H k $.3.R + ^.t /.$ |.b {.c X t ! 7.o ^ 0 *.+.w s L ; e e e ",
+"{.) J b _.i._.{.' $ # c _._._._.v V V V V v x i.(.x V x x # @ v y , y ~ ' y , , ' b , ' $ b a Y %.t <.<.;./.<.<.<.<.<.<.<.0 e Q e b 7.b . W d 7 | _ B Z Z } < : S ( : < ^ ; w o 3 $.$.H $.5.-.-.H -.$.5.5.[._.#.<.}.o e @ Q e u ;.>.7.* C 4.9.9.= q L k b e e ",
+"_.) _.J _._._.) J ' @ # . ) _.) J (., $ V V V (.i.V v v V ' . $ a @ @ y m ' y * , m b ) ) Q q <.<.d.<.<.<.<.<.<./.<.<.;.<.1 Q e b 7.,.) . @ # ; D R *.] S } B < : / ( [ 4.> > H 3 $.H H $.k H -.$.5.$.> - (.! a.;.t @ e K Q b X %.].Q . *.4.0 >.h.^.t $ e e e ",
+"_.J _._._.) ) ) (.J ' # V ) {.(.' _.a , $ V v K ' i.x V (.v & (.V ' y a ' J b ' * $ a _.) k L <./.<.<./.<.<.<./.<.<.<.<.;.0 e Q Q Q Q ,.) v * D 3. . . .H ~.1.=./ _ B _ R = 3.H 3 $.H H $.$.H H -.5.3 5.E x ~ T <.u b b a e e &./.k 7.o >.4.4.*.7 U /.i e e e ",
+"J _._.J _.) _.) ) _.J x @ v (.) ' J ) @ $ $ V v ' x _.' V x x a ' @ y ) v b y b v * $ ' b { <.<.<.d.Y p 0 0 0 l j 0 l l n ) e e e {.b {.' v - 3.3.3 o 3 5.@.3.> D P 9 8 ; = 5.5.$.$.H H k $.H H $.5.5.5.o , n /.%.}.y e K J c 1 !.; 7.j 8.=.9.-.R '.a.v e e b ",
+"_.J _.) J ) ) ) J ) ) _.(.# @ ) ) ) ) ) a , & V ! =.| C ^ ^ ^ 2 ^ ^ | : b.(.J ) {.@ = = {.^ <./.<.< |.e e e Q |.e Q e Q Q e |.,.e Q Q ,.. @ & = 3.3 H 3 E @.> ; @ @ N = = ; 3 3 5.$.$.H k $.H H H 3 3 3.D |.i }.<.Y Q J K e e Z /.! 7.> ^ *.8.6.* '.d.j e Q e ",
+"J _.J _._.) _.) ) (.(.J _.V # . ' ' ) J ) v $ $ (.V V v ' @ & ' a a ' _.( ) y J b _.$ D (.S <.<.;.j e m m ) ) ) ) m ,.a ' Q Q e J e Q [.% & ; ; @.@.3 E 3 3.3.= * @ & D > ; 3.H $.5.H $.k k H 3 H 5.5.3. .@ { t !.#.e e N Q v M !.h 7._.9 =.9.>.O c.f.@ e e Q ",
+"J _.J ) _.) _.) (.) ) y ) (.. @ # . ) (.(.) (.$ , , a ' a y a V $ i.v D q . Q b J b ) $ ) r <./.<.I b . ) ) ' @ % # # % @ ~ . e e e > j O A F 3 D D 3.3.5.@.3.> N @ % = ; ; >  .$.5.H 3 5.5.H H $.5.H @.; b { ^.;.=.e y N e Q M ).; 7.3.>.C *.:.~.j.a.o e b e ",
+") [._._.) ) ) ) ) _.) ) ) _.) x # + (.) ' ) _.x $ ^ : | | | ^ | ^ S | 4.~.(.|.y J b b [.J } <.<.<.H ,.[.@ x . $ x , , ~ $ $.* e Q |.7 2 ( _ _ S =.A 8  .> > W > * $ * = W 3.3.3.5.$.3 H k 5.H 3 H 5.3 ; + e | %.).Z b e K J N 1 #.N b F =.: ^ ..6 q L ].e e e ",
+"_.[.[._._.) _.) J ) ' ) ) ) ) {.. # x ) (.' ) ) V $ a $ ~ y ' a @ a ) , |.(.b _.J J y [.b : ;.<.<.$.7.(.d = . v $ @ @ # = I @ e Q ) X | X | _ [ B B < | 6.o 3.* * * ! ; ; ; 3.3 5.5.3 3 5.5.H 3 $.3.H @.> ' S #.t *.e y @ ,.a } ).- Q 3 C 4.^ 6 ! b./.n e Q e ",
+") ) _.[.[.) ) ) ) ) ) ) ) ) ) (.) ' + + . (.(.' (.' @ $ @ $ a ' ' V x (.(.b [.J J ) ) [.Q S <.<.<.H Q = o R W x @ $ + $ D ; y e e c =.Y | 1 : : < < } B B : 2 1.f W N ; > @.= 5.5.5.5.5.3.5.3 $.H 3.3. .I {.| %.!.[ e e z % E #.#.$ ,.x 1.C C G :.q ^.f e e e ",
+") [.J ) [._.) ) _._.) ) ) ) ) ) ) (.. @ @ . (._.) v (.@ @ @ (.@ v a x ' [.) ) b J ) ) ) b : <.<.<.I _.= # ;  .; v @ ;  .k & _.Q e ) X Y | 1 _ < [ [ } } Z B < _ S Y 9  .* ; 3.H 5.3.3 3 3.5.H 3 3 H 3 ; = K Z #.t 8 e J b ) n 1 ;.@ 7.; A ^ : 4.g.^./.$.e e Q ",
+"b J _.) ) ) ) _.) ) _.) ) i.) i._.) (.. # V . ) ) + J , ' $ $ ' a x a ) x [._.) _.J _.) m M <.<.<.n J ' ) @ W D ; , ;  .* _.|.e e c =.Y / | : : < < < [ } B < < _ [ _ O  .> > 3 @.5.5.5.3.5.3 $.5.3 5.; _.e u #.#.2.e b % |.' Z '.N ' G =.: C -.P '.^.n e J e ",
+"b m J ) ) ) J ) ) ) _.i.) i.) ) (._._.) . V @ + # q ] 2 / ^ ] _ ^ ^ ( ] ^ . b J J _.) ) m M <.<.<.j ,.) + v v = i $ ' x [.e e e e c C Y Y 1 _ : < < < < < < _ S | | : _ G ; =  .5.3.5.3 3.5.3 $.-.3.3.H > ].#.s ).h b b . . i S ;.) 7.:.C S : n @.c.<.i e e c ",
+"m m m J [.[.) _.) ) ) ) ) ) i.i.i.) y y (.. @ # ) ] ' ) ) . $ x $ a ) # ( b b ' [.y (.) Q _ /.<.<.f ) z x ' a x = x Q e |.Q e e e c =.X / / : : : < B B } < : _ _ 1 S [ 1.> > 3 3.3.5.5.3.3.3 5.5.5.3 * |.v u s #.X e Q D D D ^.q ' 7.V 4.S S *.3 c.t O Q e e ",
+"b b {.J _.[.J _.) ) _.) ) ) ) ) _._.i.y ) (.. + . q l n P N [.* $ @ x > } ' b {.[.) ) ) e S <.<./.d ,.$ % # x v $ v b e Q e e e e c C X Y | _ : < < [ [ [ < < : 1 | 1 [ 2 @.3. . .3.5.$.5.3.3 5.H 3 5.* _.i T T ).y b e e $ F < L J 7.= A 8.[ 8.A }.<.f Q e {.",
+"b b b b J [.[.) ) _.) i._._.i.i.i.i.y (.y (.' . z 0 { X / X C 2 C 1 / g.p {.|.) _.) ) _.b 2.<.<.<.g e ) ! = x $ % , v b e e e e e J C X / | _ _ [ } < [ < < _ S 1 _ 1 [ 2 > ; 3.3.5.5.5.3.5.3 3 $.$.3.> b $ s #.T R Q |.~ x # j.q . N *.C ^ S 8 6 j.d.0 e e e ",
+"m b b b b [.[.) _.) _.i.i.) ) _.K y y y ) y ) ' . + z . ) . ) ' v v + $ |.) [.{.) ) [.) _.[ <.<.<.I e ' # = , V @ # * @ ,.e e e e J C Y Y | _ _ : < [ } } } : _ 1 1 | [ ^ ; ; H 3.3.3.3.3.3.5.3 $.$.3.n N f %.s s Q e _.$ $ = < %.e 7.A 6.S [ 3 o q a.o e e Q ",
+"m m m ,.,.b {.[.) _.) ) ) i._._.y y y ) y (.y (.. . , $ (.x . ) ) ' ' ' [.x [.) b J y . ) } <.<.<.d Q . . . $ ; @ ; $ @ & ) e Q 7.c O | | 1 S : : < [ [ [ < _ _ S | S [ Y > > @. .3.5.$.3.3.$.$.$.$.- @.e R u }.[ ! e e ' % > }._ @ 7.; 4.4.}.:.; e./.| e Q {.",
+"_.m m m ,.m {.{.) ) ) ) ) ) ) ) y _.y (.y (.(.y ) (.' @ # ' ' @ ' ' ) ) @ Q ) . ' (.y (.b : <.<.<.o e _.' # = ; @ + v = D x e Q e J O | | 1 S : < < [ [ [ [ _ _ S 1 1 _ X > > @.3.3.3.5.3.3.5.5.$.> H N 7.>.).u T e e (.. @ n #.U 7.@ @ A S C ~.A }.d.l e e e ",
+"J [.J m J b b b [._._.) ) ) (.y ) (.) y (.(.y (.) R :.F :.F 8 o P P o E P |.[.) a x (.) Q S /.<.<.o e _.+ = = % # v $ D  .. 7.e 7.c O | Y 1 S : < < [ [ [ < _ _ S Y _ : Y W > @. .> 3.5.3.3.$.$.$.3. .H J 0 }.!.C . |.W z J R L Y Q J E A C j.*.F U /.7 _.e e ",
+"J _.J J J J b {.J J _._.) ) ) ) ) y ) ) y (.(.(.+ ` ^ ] ^ ( : 2 ^ Y Y ` 4.@ [.b (.) ) ) |.: <.<.<.d Q ' ~ * % @ # % W i D # {.e 7.c O | | 1 S _ : < [ [ } < _ _ 1 | _ : 2 > > @. .3.3. .3.3.$.$.H 3.3.@.7.1 !.[ O e e a J b Q O T 7.J ` 1.4.G x o c.t { b Q b ",
+"m m J J [.m {.,.{.b J ) ) _.) _.y ) y y y (.(.(.b v ) ) . ' # . . ' _.) ,.Q |._.J ) ) ) b _ <.<.<.d Q + ~ $ v v & ; > ; - & @ _.Q c =.| Y 1 _ < < [ < [ [ [ _ _ 1 Y _ _ Y > > 3.3.> 3.3.3.3.5.5.5.w  .(.y 2.u h e Q e 7.c y { 7.i y Q * i _.A ~ > _ ;.| e c e ",
+"m [._._.[.J J b b ,.{.J ) _.) ) y ) (.(.) y y (.. ' J x v ) + # v @ y _.Q m e 7.J ) [.J |.: <.<.<.d ,.. . . . # = & , & - ; z N J y C Y X | S : : < [ [ < < _ _ 1 Y _ _ 2 > > 3.3.> 3.3.w 3.5.$.5.5.> ' ,.! @ K f e Q K 7.1 Y k Q Q v $ 7.` ] ^ j { u z c s 0 ",
+"m m m J J _.J J {.J J J J ) (.y ) y ) ) y (.(.(.) x v + . ' x (.% * ) Q m Q e |.b [._.b Q _ <.<.<.o Q ' ' . @ = * $ @ % ; W W > @ N | 1 | 1 _ [ : < < [ [ : _ _ 1 | S _ X W > @.3.w 3. .3.3. .3 3. .o P ' j ; Q J e Q K Q ; L ; J @ J 7.N _ }.|. .0 L [ { R y ",
+"b m m [.m _.[._.[.[.J {.J ) x a ) y y (.) (.(.(.) ) ) J x v ' . (.% . ) $.J 7.e e b [.[.b < <.<.<.n ,.) ' ~ % * v % $ # - W ! > h k M [ | 1 S : : < < < [ : _ _ 1 Y _ : 2 ; > 3.D > w 3.3.3. .3 n E N e f }.| v e b e b b { [ ; Q J ' N 7.P $.. ~ C t ).).h e ",
+"m m [.J J m [.[.J ) _.|._.= = v _._.) ) y y ) ) ) | / : ( b./ = H ] u #.` _.e e e e b m Q : <.<.<.f e ) . ~ $ @ $ @ # & = = = =  .g _ _ M _ S [ : < [ [ [ < _ _ S | S : Y D > 3.5.= D > D > 3.7 g h v c ! M u Q b e e j >.j T z b J v a e N l v N { %.L ).>.e ",
+"m m m J J m [._.' {.,.' V # x (.) ) i.) ) y (.) @ 1.V ) . b z j.` R @ J b e ,.e e e e |.e : <.<.<.d e ' v # # + @ @ $ # ~ - D $.@. .1 [ [ 2.S 1 : : [ [ < : _ S S Y 1 : ^ > > i - 5.>  .D ;  .D c Y M e h =.n v e b e h O S T ; Q ' J b Q K f i c O <.%.t N r ",
+"_.J m m J _.[._.) b J @ & ' J J ) y ) y y (.y (.) j ) ) $ ' . ^ # . {.b ) e Q e Q Q e e Q _ <.<.<.d Q ' . + @ @ + % % @ $ = D 3.D > 1 r [ M [ : : < [ [ } < 2._ 1 | ( : X D W D D ; i > D * @ ,.{ y Q $ k 2.O e b e e 7.7.> Y E c z N h h @ z N c | %./.s Y ; ",
+"J m m m [._.[.[.|.' ~ $ x ) _.y ) _.) ) ) (.y (.x ] ^ ^ g.^ 2 ^ ] Y / C l K e e e Q Q Q Q : <.<.<.o ,.. . . . @ # @ # % ; > ! = * 3.: B _ 1 S 2._ : < < [ : _ S S Y 1 : X > > D w 3.i 3.I Q D @ ; R Q Q =.1 0 b e e c y b 7.].7 g I $.d ].v k N a M <.t ).$ T ",
+"b m m _.m m m b {.@ & . J J ) ) _.) _.y y ) (.) b + J . . + ) {.' ) {.J c e e e e Q b J Q _ <.<.<.o Q y ' v v @ V . . , W W ; * V  .< _ 1 | 1 S : : : < : : 2._ 1 | ( : ^ W > D D - i & = # . K T v b Q j u 7 J Q 7.7.N z J % A n h f d @ @ 8 @ $.S }.#.^.Z 8 ",
+"b m _._.m b {.[.$ # x ) J _._._.y y ) ) y ) (.) ' ) {.v ' ) x @ _.) _.Q b e b Q e m _.) Q _ <.<.<.o |.' ' . + # @ @ % ; > , N * > o : Y Y 1 1 S _ M < < < : _ S 1 Y S _ Y W > D = 5.7.$ > $.N J i j Q { S $.+ @ j z 7.K b _.k A d W $.k K $ 0 ! o r '.T u R ].",
+"m J _.m b m ) ' % (.b [.(.) ) _.) ) ) y ) (.y y ) (.v ' J x + |.J _.) ,.Q e Q e ,.J ) _.,._ <.<.<.o Q y ' v v v + * W > - $ , = o o / ^ Y Y 1 S S _ : < : : _ S 1 | 1 : 2 W W D 3.= |.> G D Q c } b &.#.I $ ' ! h h b J K v D =.0.i o f @ N >.; *.&.^.U /.L &.",
+"J m _.J {.{.' # ' J b J y _.) (.) ) ) (.y (.(.) x 3 n H :.n 3 n 8 o n $.$ Q Q e _._.J b Q _ <.<.<.I Q ' . + + v # ; W & @ $ > $.; $ 4./ | X 1 S _ _ 2.< : 2._ S 1 Y 1 : ^ W W D w v v / a.! e e j { P X $.- I ! o N 7.y b a f O j ].i i v v j @ j u '.^.).;.%.",
+"J {.,.b _.+ + ' ) _.J ) J ) ) ) ) ) ) ) ) ) _.i.v H P P G R d o o d n P s e ,.[.[.{.J [.Q _ <.<.<.o Q ) . + v # w @ , % . > P & 7._.G < _ ^ 1 1 S S _ : [ : S S | 1 1 ( 2 - w w > > J > j a e c l y K D o g ! h k i Q z $ K o =.I > i f c N j $ n s '.%.d.^.s ",
+"J b |.) x a ' ) J _.J ) _._.) ) ) _._.) ) ) ) i.b $ ' b J b J ) {.' ,.e X m ) b J J _.) Q : <.<.<.d e _.' @ $ $ @ x v = D , . Q v x  .] : < < ( _ S _ _ 2.[ 2.S 1 1 ( : ^ - W w W # m Q e c e e =.0 ].0 j ! ! @ f ; b y c a h =.n i i d N N O z =.!.}.L t }.T ",
+"b |.J ' a x J J ) [._._._.) _._._.) ) ) ) (.) ) x H P o o o d d F I n 4.'.@ |.) _.J [.[.Q _ <.<./.o ,.' ' ' # = & $ @ % i . e Q ; - W H 9 4.g.C | : } [ [ 2.S | / 2 / : ^ w - ; w - . e z ~ e $ } [ =.P f $ k i f $.e @ K Q n { o ! i $.{.k *.z 0 U &.s ).}.u ",
+"b J (.. (._.{.J _.[.[.) ) ) ) ) ) ) ) ) ) (.) ) x 3 o o n H o o 3 n j D W b ) Q [.J _.) Q : <.<.<.f e m @ + + . $ % W = , [.7.,.; H o 3  .W W H F { / _ [ [ [ [ S / _ : g.W - ; W 3 I e j ).K Q [ u 0 j @ N h h f a y y c N ! Y f ].! ; @ @ Y z 0 T &.%.t !.#.",
+"b ) ' y J {._._.[._._.) J ) ) _.J ) ) (.' ) ) ) ,.) {.|.J J m m ) b a x ) e m (.J J J ) Q _ <.<.;.0 K @ % ; W > = -  .i > ' ) , - 3 3  .H  . .o = ;  .P A { ] Y / 1 : | :.= - 3.; > |.e &.u c $ 2.f j z z ].$ ! i k e $ y e k *.I ].> k Q ! *.! j #.u #.;.%.&.",
+"y y ) b J [.) J [.[.J ) ) _.) ) _.) ) ) (.) ) _.b c b _.) _._.) J v x {.m [.|.b J J J ) Q : <.<.<.t t ;.t t t t d.d./.d.L ` . , $.H D ; 5.H o R H 3.= = > = = * H I n ..D = ! w ; I - _.m n e Q 2.{ z f $ N h ; h c y c Q @ N X $.h i i z y { $ O #.#.%.%.#.'.",
+"' (.J b J _.) J _._._._._.) ) ) _._.) y ) ) [.J b y c J J ,.) . ' , ' b J ) b [.[.m ) J |._ <.<./.<.<.<.<.<.<.<.<.<.<.<.<.| ) ! W ; W w 3.3 H -.F o 3.> ; ; % @ . {.(.# , - W - W = _.7.].k b N | >.k $ $ N ! z ].].Q @ c _.f Y n k f d $ ].j ].*.}.#.!.;.}.} ",
+") J J J ) J J ) J [.[.[.) ) _.) ) ) ) ) _.J J b y @ c J J c . . V ' _._.m b b b J J [.[.Q : <.<.<.<.<.<.<.<./.<.<.<.<.<.<.S . ; = = W D w  .o R o o 3 3.* = & $ . {.v = = = ; > ; % $ e o T b e &.{ N v $ ! z ].].v K ~ c a h 1 o i ! > z @ j N O }.#.!.L #.[ ",
+"J J J J J J J J ) _._._._._.) _.) y ) [.[.J m J J Y b c _.' 1 j i.a y b J b ) J [.b y J Q S <.;.;././.;.<.;.;./.<.;.d.<./.l ) @ = = W k 3 H -.o R +.R 3 w = , # ' ) . & = ! > ; W % ,.Q O M y z X 8 K K $ ; ; z $.z b @ J K i C l i h h N N $.z j u s !.t %.'.",
+"b J J J J _.J J J [.[.[.[._.) _.) ) ) J m m J J Q X c b _.N ^ j _.i.y _.) 7.|.J b ' m ) |.~ ; h > z ! ; a y @ $ % $ ! $ . |.. . , = W D 5.3 -...R F F o  .> , V ) ) @ & = - w ; = $ y ,.7 %.Q e r 0 N $ ].N @ z y b J a y K $.| l h h i ].z i N j &.u #.L L !.",
+"J {.J J J J _.J J _._._._.) ) ) ) ) {.b {.J [.J . &.Y ^ / / c.[ ^ ^ ^ ^ 4 @ b ,.b y |.) ) J |.J b e {.~ ! f k K b e e e Q ' @ + , - ! D i 3 H o R P F F R 3 ; @ ) ) @ = = - > > D . 7.7.U M c z | 0 h @ N $.N b e e J N e v N O *.! ].i ! N ! $ n &.#.%./.%.u ",
+"J b J J J J _._.J J ) ) ) _.) ) [.[.{.m b ,.{.{.Q 8 o G G R j R P P P R I ) b m [.b J b _.~ x J ' =.%./.<.<.<./.s l . _.@ @ {.! z ; W 3.5.3 H o R P P F F ..i = ' _.. & = - > > & 8 E 7.| %.7.N }.8 J e b $ % $ Q e $ K c c N 0 { ! z h z a N N l r T !.;.%.u ",
+"J J J J J J J [.J _.J ) ) ) ) _.m m m {.b ,.,.,._.% V V x J _.' K a y m (.|.m [.m |.y m ) ' . H ^.;.<.<.<.<.<.<.<.<.}.o b = W $ , - D D 5.3 o o ....0.+.6 F o 3.@ ' ' # = > > = D @ 7._.C @ J j r ! ,.e Q z N J e e K N e @ K 0 { ].].i ! y @ N 8 } u %.;.).T ",
+"J {.J J J J J J J _._.) ) J _.[.b b b ,.b ,.,.J v # $ v i.) (.a _.a y b m b b e [.{.J _., _.H L <.<.<.<.<././.<./.;.<.L j ,.$ W - - W D i  .o o P P ..R F F 0.H ; # x $ = w > = = @.d 7.v N e $ #.z e e e v $ a e e z K b b ' j { ].].k i a a N l } u !.t %.T ",
+"J J J J J J J _.J [.) J J J b b Q b J J ,.{.) (.$ v J J (.' y _.y ' y b ) b ) m m y J x @ y _ <.d.<.<./.).U %.;.<./.<.<.'.$ @ ; - ; W D i 3 H ......P P 0.F 0.R E ; * & * ; ! = & * 7.' > b 7.8 S a b e Q N y e e Q v z e K y *.X h ].$.i @ @ N n M u !.;.).T ",
+"J {.{.J J J J J J [.) ) ) J b b ,.b b ,.,.J ' $ @ v _._.x ) ) a ' (._.b [.Q {.J |.y @ , y 5././.<./._ z {.e b > q <.<.<.;.d . $ ; W W D i 5.H o ..P +.0.0.F 0.R n @.; = & = > = = ,.,.Q ].f y v }.v e e v K e y e e c K e J _.o M I ].i i $ $ z *.r T L ;.L T ",
+"J {.J J J J J J [.J ) _.{.b ,.,.7.J J Q J V = $ i._._.K _.i.y ' y ' ' ) J J b b ' @ $ a e X <.<.<.e.J e Q |.[.Q Q C <.<.<.{ {.~ - ; W D i H o o ....R 0.0.0.0.R o o d 3 3.; ; ; = = 7.@.T K 7.o =.@ e b K K Q y N b K d @ e y d Y d z ! i z a K C u X X #.u &.",
+"J m {.J J J J J [.J [.[.b b |.b J ,.Q [.@ $ @ i._.i._.i.K _.(.) (.' ) _.b b J _.@ V v y e Y <.<.<.O e e [.x . ' |.o d.<./.C {.@ , ].W D 5.3 H H o ..0.P 8 P n o E R n n 3 > - = *  .' @ o 8 7.! }.7.Q @ v v z h D K $ l h J c i 1 n ].! i z N N { u u Z &.M 1 ",
+"{.J J J J J J J [.J m ,.b ,.b |.[.|.J @ = $ i.J i.K i.i.' _.' (.) ) y J ,.b _.' , x ) ,.Q 1 <./.<.I e [.x # . . _.~ %.<./.S |.. $ W D D 5. . .R ....P F 8 n n R H o F j 8 H > * W E _.@ / - Q R >.K Q ; ].].N $ k y y j D b b z | *.! ! ! N @ $ 1 2.} s %.^.}.",
+"b J J J J J J [.b b b ,.,.,.|.|.|._.V * V ' _.i._.J i._.' J y x y ' (.J b _.@ , V ) Q e e S <./.<.k Q ' x a ' . @ K }.<.<.M b ' $ W W D  .5.3 R ....R 8 8 8 8 R o d R j 9 F 3 ; N ,.= b { O 7.].u b y y $ $ N ; h y y *.g . Q $ { l z ].h N $ N 0 2.} T }.%.!.",
+"J b J _.J _.J m b b b Q ,.|.|.Q J @ N V (.J ) i._._.a ' ' ' m y x a i.J _.v V x J Q Q e e 1 <././.d |.' ' ' v @ ~ ~ #.<.<.} |.a $ = W W 3 H 3 o o R P P 8 P n o n o H 8 9 *.P H V ; ' # P J J $.X ; c ; v $ ].! j N y j d K Q @ =.{ h ! h z $ z 1 u T %.!.r } ",
+"J J J _.J {.J m Q b b |.Q ,.{.J # , @ ) b _.i.J J @ b b _.a ) (.(.) i.i.~ , V ) Q e e e e 1 <.<./.n Q [.. . # + . N s <.<.[ b K ~ z i i  .H o o o R 8 F 8 P 8 o H o R n :.9 G G E * ; ,.n i e R T b K v ; z ! ; h y Q 8 l ].b ' { O ! ].h ].z i 2.#.T u r T u ",
+"b b J J J m b Q b b b Q ,.|.) v = @ ) J ) ) ) _.y *.a ' ' a y a _.i.a * = V [.Q e e e e e | <./.<.g |.[.+ . v . . ~ T <./.} Q a $ ; i i ; i ..o ....P 8 8 n R P H o n F j :.~.9 ] H [.' ) J e j O ! y $ ; i z $ i K {.P *.D {.y 0 C z $ ; N @ z Y T T u u T | ",
+"b b J J J b b Q Q b b Q |.J v , , (.{.i.) J J v ) Z H R n o o ..-.R 7 4 H . 7.e 7.e e e e 1 <./.<.k Q _.+ v ' @ ~ @ s <./.e.Q a $ - ! $ ) , H o o ..P 8 8 8 R R H o 8 j ~.9 :.j 9 @ = 7.> y e *.[ e b N v $ ! z $ c c l { $.J c l O N z ! z @ z Y #.#.u #.!.0 ",
+"J J J b ,.m b Q Q m m 7.{.$ = V J _._._.) _.) ) (.[ R ....0.H +.R G 5 9 o |.e e e e e Q e 1 <.<.<.d Q (.x . + + + . j.<.<.[ Q K N W ~ {.m ) , o P n 8 F F P R R o o n j :.G 9 9 ] D _.. . J 7.0 =.y J v $ @ z ! ; Q y =.Y n ) Q n C f ! ! z K ; | s !.T }.2.$ ",
+"b [.[.,.e Q Q Q J Q Q b a , $ K _._._.) ) i.) _._.4.' m a a b y * 3.* b ,.Q Q e e Q 7.7.7.} <./.<.d e ) . v + @ @ v s <.<.} b a N N c Q b _.x = o R R o ..F 8 o o H o P :.9 :.G E (. .c N c b { M J 7.$ v $ i ! $.a J O j 0 N c n | n ! ! z @ z O }.s } T *.c ",
+"b b ,.Q Q e b ,.Q |._.V , $ K J _.J J _.) ) ) ) ) a b @ J J , ~ ! > x ,.e b e e 7.e 7.[.) [ <.<.<.d Q ) ' + v + ~ + s <.<.} b K y c Q e J ) (.. W o F P o 0.+.o H o R j :.9 9 G ` H _.' ) J e { Y ; c J $ @ $ h f b % n C 0 $.{.i O h N N $ @ N [ #.}.!.u i h ",
+") b Q Q m Q Q {.7._.& > , i._._._.) ) _.) y ) y ) J y y i.i., 3.! a |.,.e e e e 7.|.y $ ) _ ;.<.<.d Q (.' + + + @ @ #.<.<.} b y Q e e ,.m ) ' . x W R 6 0.o R R o o R j :.9 ~.:. .Q = Q C N b >.2.J e v v v j [ Y h b *.k C $ |.i 0 z @ N K @ z 0 #.}.#.r e u ",
+") _.J |.7.|.|.Q b $ w , i.J J _._._.J ) ) ) ) ) ) x v Q (.- w w v J |.,.e b Q e e ' , x Q S <.<.<.d Q ) x v v @ v @ s <.<.[ e Q e e b b J c ' x (.@ W R F 0.o 0.H o o 8 :.~.9 9 p > ) ! b.q 7.o { J e v k O S 1 %.y J b {.> o e ! 0 ! $ z v $ ! *.'.Z #.k y r ",
+",.x . b e Q b Q , - , i.b J ) J _.) _.) _.) ) ) ) J J ' - ! > _._.,.J e b e Q ,.' . x J 7.: <./.<.f 7.) ' v v @ . @ #.<.<.M e e e e Q Q J ) ' x # ' x W 0.F ....H o n P G 9 :.G d @ v @ L 0 e k | >.C X | X 1 u S h e J Q 0 @ b z =.o N z z ; ! 0 }./.%.u u <.",
+"b y V ' b Q b i.- $ i.b J ) ) J _._.) _.) ) ) ) _.( 2 | h.w O [ 2 ] Y ` 1 Q e Q $ (.,.b b _ <.<.<.d Q ) x v + + @ + #.<.<.[ e e e e e Q J ) . + $ v a $ w ..F R o o n F :.G 9 ~.*.@ ) E ^.r e r L Z &.Z } %.t }.M v K Q b l n {.i Y *.! i h h ].0 &.;.| >.}.T ",
+"J b ' & @ |.J = , i.J _.i.J J (._._.) ) ) ) ) y _.h.* w w a g.H ,.|.J _.X e m # ) ) J b Q : <./.<.d Q ) ' + v + @ ~ #.<.<.[ e e e b b b c ) . $ . & = a $ i R R o o n P :.9 G G p ; . $ } j 7.Z %.M M Z T Z { h g a e Q K 0 @ ) ! { n z $.k z $ O L u v $.).[ ",
+"J b b b a 3.D V J J J J J _.) _.) _.J J [._.y _.J } k w ' Q / I b (.|.|.^ v = [.J J [._.Q _ <.<.<.o Q ) (.. + @ $ . j.<.<.M e e e e Q ,.[.' + # , , , , @ x - 0.d E o j :.:.:.:.F . ; @ >.k b '.).1 Z } f >.X e e b . e . n h K N C *.z ! ; $ h 2.).u Q T ^.h ",
+"_.i.J y ' V > (.b b J ) i._.J _.) _.{.) (._._.i.> [ b.j.j.c.r y y p 2 p < # ) J J [._.) Q : <.<./.H Q ) ' . + ~ . ' s <.<.: e e e e Q ,._.' V # $ & & = , . + ; I P n o 9 *.:.*.9 d y N >.! b >.Z 2.Z 0 i [ %.! Q b J e c i $ b $ O *.h $.h $ ].M ;.{ n t S e ",
+"J @ , , b Q V , ) {.b _.) ) J J (.{.[.' y J y ~ > ! * J ) J b b b |.b . ; J |.b [.m [._.Q _ <.<.<.d Q ' ' . @ ~ _.,.T /.<.M e e e Q Q ,._.x @ & & * = = = + (.) z d P 8 :.9 :.9 G n . ! 8 f y >.Z 2.O ; N 2.}.].e e J Q {.@ z z ; 0 j z ; ; $ ! } Z Q ; %.8 h ",
+"y ' W @ J _.,.V v ) ,.b _.) ) J J _.) ) J _.~ w ! a b 7._._.b ) ' |.. ; ) ) J _.J J [.[.Q : <.<.<.H e ) ' + . . Q Q './.<.M e e e e Q ,.) . # N = = * * = $ x ) [.$ o *.:.F 9 ~.:.; y $.r N v { ; h N 7.v S r @ J e y h o 8 n f N >.8 ! ! ].z i | l e l j {.{ ",
+"_.' * y y a 7._.V v (.{.b ) (._._.) _.J y $ ! w ' Q [.) ,.Q y Q 7.@ , ' Q J Q b [.{.[.) Q _ <.<.<.d e ) . . ) m e e '.<.<.[ e e e e Q m ) @ # & * = - = * % # x ,.J W j ~.:.~.:.P @.* ; !.}.j $.C j R $ N j R N z b y 8 0 l j k @ j R z z N h R X N K 1 ! c 0 ",
+"$ D a y ' J J J ) ' v x _.b _._._._.J i.* 3.- x Q [.Q b b _.J _.% # x |.) b [.) _.J [.[.Q : <.<.<.H Q ' + ' |.e e Q T <.<.M e e e e Q J ) @ $ * N * = - * $ + ' _.m (.D :.9 :.*.G D 7.R %.C $.| f b z ! ; N N g f J y R j 8 8 $.K l l h ! N ! o { N M &.K i s ",
+"$.; b J (.i.(.b J _.x V x J b ) _.J i., D - v b J q | =.=.X O / _ ] / ` 2 {.J [.J {.[.[.Q _ <.<.<.f Q ' c m e e e e T <.<.M e e e Q |.J ) @ # & = $ = ; = $ @ (.) J {.v  .F 9 9 H > N _.}.2.N k k y ! ! z i k n f e c R >.j o ; ! O 0 i h h i j i e f =.k u }.",
+"= J |.J J y ) ) _.,.b V v _.b _._._.$ k w ' |.b Q C Q J {.,.V D + ' ) ) ^ b b ) J {._.[.Q : <.<.<.d Q m Q e e Q e e '.<.<.2.e e e Q ,._.) @ # & ; & * ; = & $ . {.J ' ' ' 5.*.:.p n J N S Z b C $ b ; i N N ; ! d c ! { { 0 j o K >.>.h k h ! f y b ].y j T [ ",
+"J ,.,.J _.J J _.J b v = $ J b (.|.' w D ' Q b m J &.g k j % ; v ) ) . ; Z ,.[.{.[.J J [.Q _ <./.<.I Q e e e e e e e T <./.r e e e Q ,.J ' @ % * = = = = = % @ + ) m ) $ $ v D *.*.= z b | %.f k =.y z ! ! z ! f z 7.$ l h >.f ! ! l j h ! ! z h K > ; i T T X ",
+"|.J b J (.(.J _.b x , @ ) i.) b ' 3.D (.b b b b J g 0 =.2 ^ ^ C ^ ^ { C 8 ,.|.J [.{.J [.Q : <.<.<.g Q e e e e e e Q T <./.M e e e e ,.J ) @ # * * = = = = & @ + ) _.y # $ V * i P D J 7.; [ { 1 f b a v z z $ ; h e $ R 1 Z { k $ l 8 ! ; ! i ! v O j | s T Y ",
+"J Q ) . i.) ) ,.= $ v i.b b ' a D D a |.|.J b b b b J . ' @ ' b |.' x J Q J b {.J J [.[.Q _ <.<./.o e e e e Q e e Q './.<.M e e e Q ,.J ' . $ * = = = - = % @ . _._.x @ = & $ V 8 G = ; 0 i ; C { b v ! ].N i $.@ y h { j %.C ; N >.o ; ; ! h K e K j | T } C ",
+"J b (.@ _.Q b (.3.V J J J J V 3.W (.Q b |.{.[.,.b J ) N (.,.J $ ' ) ) J ) [.|.) J J [.[.Q : <.<./.$.e Q e e 7.e e e T <.<.M Q e e e ,.J ' . # * * = = = = N @ . _._.' @ - ; , @ ) D c >.!.k b 2.h a $ a ].! ; ; k e >.>.{ O l h N 8 k $ N h i a Q N =.[ T [ } ",
+",.$ v b {.,._.5.(._.J _.@ , - ! y _.y b 7.,._.,.J J ~ ) 7.$ (.{.' ' Q ' 7._.) Q [.J [.) Q _ <.<.<.$.e b e e e e |.e }.<.<.M e e e Q ,.J ) @ % * = = = = = , ~ v ) ) x $ = - = = @. .k 8 L R b f 8 _.N k N @ ! i v 7.z O | %.j ; v k f ; $ ; h i ! o | T &.u M ",
+"# V ' ,.,.@ ; - Q J _.y , , a y _.@ ' b |.b ,.J ,.z _.{.) _._.. ) + (.b (.7.(.{.{.{.[.[.e _ <.<./.I e Q e e e e e e ^.<.<.1 e e e e ,._.' @ # * * * = = z , @ . _._.. & = = = D P # 7.| /.Z 7.o ! z ! ; z N $ z N b j ! 2.%.2.z v k $.N @ z ; k i ; X [ r u S ",
+"= J {.) ) ; D ,._.J J ' a y m y a a _.J ) b Q J % d.a.}.#.'.}.T '.c.U '.b.x Q ) b b [.[.e S <.<./.0 e e e e e e e z )./.<.X e Q e Q ,.J ) . % & = = = = = % ~ v ) ) ' % = ; i o j > J ; L ).; i f K v ; v y ; k h Q h >.>.Y $.; K f i $ $ z ].; @ n C Y u 2.M ",
+"{.J ,.(.> = ) J {._.J b J _.y , y y _.(.b b _.J {.G 1 c.u { ].y + ' _.) _.Q {.[.{.b [.[.e S <./.<.M b ,.J e e e Q >.<.<.<.0 e e e e ,.J ' . # * = = = = = % @ . _.) ' @ - 5.8 4 G - ,.7.M %.R l f z z h ! z h f ; y ! ! Z ).M $.b R f v @ $ ! z k 0 C } u &.S ",
+"J b $ > v ,.b [.J ) J b y $ ~ y _._._.) ' [.,.J b K J _.> { e.u 1 P ) J + 7.J _.|._.) |.b  .<.<.<.;.0 J J e e e C <.<.<.<.$.e e e Q ,.[.) @ % N * * * ; = # . . _.[.[.% H *.*.G A = 7.N 1 O $ }.0 c h $.! z h $ Q K v Q { u t Z @ $.h $ @ h h k k ! 0 &.u 2.2.",
+",._.V x J b _.) J J b b ' @ ' _.|.i.' y ) b ,.) c b c K _.J ) (.k ` } r ` @ m Q (.|.J ' ,.+ }.<.;.<.;.}.[ / [ #.<./.;.<.%.v e e e e ,._.(.+ $ * * = * * * N # . y ,..  .j G 9 G P @ K 2.t 2.; &.y c j ; b y N 7.Q e N c r Y o j c f ! @ $ ! i ! ].$.} %.%.&.Z ",
+"a - V |.|.y ) b J y b _.$ y Q y J ' a ' ) {.J ) _._.. m {.. y c $ 7 [ '.` ,.7.x ,._.J b b e 7 <.<.;.<.<.<.<./.<././.<.t 0 e Q e e Q |.J ) . % * % * = * * * @ . _.{.= G 9 :.G G ` $.b =.t Z @ #.j J K Q Q y $ Q e c b h #.L T z y h ].J N o z $ $ k X %.^.Z s ",
+"@ - , m |._.(.J J |.' = a J J b ' V a ) (.' ) ) . ) J _.a $.2 #.: 0 @ e _._.+ m |.(.) {.+ J ,.{ <./.<./.;.<.<.<.<.<.a.{ e e J e e e |._.' v $ & * * = = * * @ ' J @  .G j :.9 9 d y 2.^.s j R %.! 7.K K c 7.J e e Q z Q 0 [ %.=.J f ~ K N $ i ! i 0 u }.%.S #.",
+"m ) @ $ y |.b _.|.a $ a ' b b x @ + y J y . x (.) ; A u c.=.f c _.' {.Q b e c ) x Q ) b |.. e b n [ ^.t <./.d.a.#._ k Q e Q e Q e Q ,.m ) @ $ * & = * ; = @ @ . # D n j j G 9 G A > f }.L U y [ k c K b b y @ c Q e 7.O t [ f N v i ! a N N v i o 1 } !.#.Z '.",
+"Q e ) = , _.b b @ - a Q J ) a W y ) J b ) (.(.x (.d.d./ 1 2 O X X =.C Y 7 ) Q J x b ' J Q ' ' c 7.y ) _.% - , . J {.e e Q b e Q e Q ,.[.' @ $ * = = = ; * N * = E g n F 9 *.G G P Q R [ !.0 j O b 7.@ y Q e Q Q e e $ $ T %.u h N f ' $ h K ].; ; O &.#.%.| #.",
+"J Q Q ' , $ ' y w _.' i.e $ H @ b J J J _.J _.' ' V J (.' _.. ' c K J e e e Q Q [.x (.[.) b c J J Q b J e Q Q e m ) _.m b e Q Q Q e |.J ) @ $ & & ; * ; * = > E P o o j 9 G G G # J 0 !.U #.y &.z @ $ b e Q J e e J c j | O | Q @ ! $ . N K z i e C u %.}.[ }.",
+"Q J Q Q x $ $ - y _.b b $ D @ Q [._.) ) (.J b y a a x (.' ' ) _.c K c Q Q e e e b ) ' ) {., [ s *.) _.' |.) ) ' ' |. .u '.% e e Q Q |.[.) @ $ & $ = ; * * > o j H E n F 8 :.A j 9 J ; T }.8 h 0 $ Q ,.b J Q b J Q e k [ %.n J 7.! d @ ) a {.z N i O =.| M =.}.",
+"{.Q ,.,.Q x w $ b _.b y = v b y ) J {.) ) J J J i.$ $ x (.. ' _.' y c J e e e e e |.x . J ( /.<.d.k Q a y ' . ' ' + './.;._ e e e Q |.{.. x @ = = = & $ > o P o o o o 8 G 9 G G { $ j 0 8 n # t z Q ; $.y J a a K e k &.[ $ J _.! N K ; a K k ! o [ 1 X 0 j X ",
+"b |.,.|.e [.$ _.m b y $ @ (.) b ) J ) J b _.' i.J i.V V (.' ' ' ) y J Q e e e Q e Q _.) J _ <.<.;.f Q . ) ' . . . ~ j.<.<.[ e b e Q b ) ' V % = = & ; ; E 8 n o E o n 8 G 9 9 G o ' 0 %.L X =.j @ e $ ! m J $ ! ) b h s 0 @ e c ].$ y N @ z h b o X { | u Z | ",
+"{.b ,.Q Q Q b Q y , , ' y _.b _._.J J ) ' $ = = i.J y v @ v a ) . ' c Q e e e e e e Q |.m : <.<.<.d ,.' ' . v v @ + j.<.<.} m y b 7.Q _.) @ = & $ = 3.o 8 8 n o o o g P :.~.G G ] N z T ).=.Q }.a e $ ].y y $ ].y 7.l '.| K Q Q h ].' c Q @ ; b k Y C 2.r r 2.",
+"{.{.b b b |.|.|.' 3.- _._.J b y _.) b y , @ i., $ _.J _.' @ v J ) ) _.e e e e e e e e e Q 2.<.<.<.d 7.) ' v + @ @ @ j.<.<.B m ' @ {.Q _.' v $ & = 3.o 8 F n o o o o n P G 9 G G  .$ | u u z =.Y N b K v J J y $ K e R } f Q e K N z % @ J @ N e j 2.| 2.1 Y =.",
+",.,.b b J b |.b |.(., * y _.K J _._.' V $ ) b J = $ ' _._.$ , a ' x ) |.e Q Q e e e e e e S <.<.<.d 7.) ' a + @ v @ c.<.<.} b ' ; % ) {.(.v $ = 3.o :.F n P 8 n H H n j :.9 9 G { @ E !.;.| J }.J e a z K c Q b e Q 1 }.8 e e ) k N K c Q $ $ y O [ | 1 M | >.",
+"m ,.m b b {.|.{.Q Q ' = , _.J _.J _.= = ) _.a b v V x J J K $ $ a ' ) |.e e e Q e e Q e e 1 <.<./.d 7.) x v x @ @ @ j.<./.} ,.K N > * _._.x $ > R 8 F R o 8 R d o o o P G 9 G G E _.{ X =.; =.` c b $ z y b Q c b K Y q K e e ].h a y c J N @ K C r Y X X =.*.",
+"b |.m ,.|.m |.b Q m m ' - @ b i._.K $ ' |.J (.b J ' v @ K _.i.- & % V ' ,.e e e e e Q e e 1 <.<.<.d 7._.' . . @ @ @ }.<.<.} ,.. + W D # i.v ; 3...P R R 8 8 P o E o n j :.G 9 G D y 0 s %.1 a #.b Q N z c Q e b e b [ C $ e J K $ c y J b ; $ K >.1 { >.O O 0 ",
+"m |._.{.|.c J b b |.) a V ! - J ~ * ' b i.) J x ) ; o 0.3.i.v +.>.*.:.n - J e e e e Q e e 2.<./.<.o Q ) ' x . @ + + j.<./.} ,.. , z i  .= ,  .R -.o R P F R R R H o o P :.9 G G E b ; &.#.0 l k c Q $ N c b J K Q z [ | e Q Q ~ $ c ) b J i N y =.[ C 0 0 0 0 ",
+",.,.b ,.b b b b c J J J y K * -.v ' J J _.x x [.[.e.d o 3 _.| g.5 :.F F c.~ c e e e e e e | <.<.<.i y . J @ x a v @ j.<.<.} Q . # W W D o R H o o R ..R R n R o o E n G G G 9 j ' _.7 1 &.>.h }.e K N J Q e e Q Q K T h Q e _.$ @ a v c b N $ k 1 | O =.| Y C ",
+",.,.,.b J J b b c Q [.) J @ > , J b J v a J J x . X + _.) J | 9.$ _.7.J ] x . b e e e e e 1 <.<.<.n e N % J v @ ' . #.<.;.[ m ' ~ ; ; > H o H o o R R R 8 n n o f g n n 8 A G @.@ 7.j !.L X ; f a . $ J Q e Q y Q { &.! e b b . ) ' a J b ; ; f | Y 0 O C O O ",
+"b b {.m b b J J b ) J Q y * ~ i._._.' $ @ ) J ) # '.` ] ^ ^ j.$.b 3 H :.q ; e {.Q Q e e e | <.<./.f e ) - , . . ~ . c.<.<.} |.' ~ ; ; W 5.H 3 ..o o R P R R o o H o n j 9 9 H # $.y ! C r f $.&.J K ! ' Q m a ) e D | _.e e ) $ K y y b b k $ $ C X 0 O | C 0 ",
+",.,.,.,.m b b m J @ ) J = , _.b ,.v $ x _.y i.J J  .j n 3 0.H _.y i 8 ~.8 (.(.[.|.Q e e e 1 <.<./.$.e e ' D ~ . ~ $ T <.<.} Q . ~ ; W ; i 3 E R o o o n n n n o g E o A G  .N @ ,.y =.L s ! n r k J J b Q e y $ b M j Q e Q a v c c y Q y 8 ; @ >.O 0 X 1 C { ",
+"b b ,.{.b m J b J ,.. = V y J b ) & w $ J b _.y J J = $ ) _.J ) b v $ x J V W J _.[.Q e e 1 <.<.<.o e Q e (.- , . ~ j././.} {.. $ - W D i 3 H o R R R R n R n n o d o j H # (.@ f Q N &.!.! $.[ @ J c Q Q J c e h '.> ,.Q Q $ y b c c e e k @ v 0 C Y Z S 0 O ",
+",.b ,.b b b J J b J ' $ ' Q J $ W % $ > = i.J _.b ' b $ , [.v Q (.& J 7.b i.K , a (.,.e e 1 <.<.<.D e Q e Q ) z z K T <./.[ {.) $ - D D i 3 H H o R R R 8 R o o E n E = V x . @ J K =.T X c { U e.n y e Q Q 7.b 0 0 K e Q e % y b c c Q v j N z l 0 | }.u j j ",
+",.b ,.b b J b b {.) {.b ) _.y W $ J ,.' - - K _.K J b ) $ V b ' @ J y a b Q J V , @ J 7.e 1 <.<.<.o e e Q |.e (.].].U <.<.} |.' $ - W D  .3 H o o o R P n n n R f E = ' (.v V v Q b >.}.}.N $.u &.&./ - m e c N M S Q Q Q J ' Q b b Q e ! 0 $ $ *.O | !.u h y ",
+",.b b {.b m J b J Q ,.[.[.& w @ Q b |.,.' w - i.b +.^ h.h.*.& ) (.' J ,.J _.b J - $ _.7.e 1 <.<.<.M m e Q e Q e ' 0 <./.;.r |.. , - W > i 3 H o o o o R R R o n 8 ; J _.V V ' x . _.{ 2.R e >.'.&.&.C N J e e K #.i e e e b _.b b J b e ; j K $ l X 1 s [ $ Q ",
+"|.b ,.,.b b b J [._.{.Q x - # |.J m ,.Q b a * > b ! R R ..W ; y ) J (._.Q v Q b _.- = b Q Y <./.<.<.1 ) e e e _.S <.<.;.<.2 Q . $ = D 3.i  .H H R n P 8 n R n n ; J _.' @ x (.W % b l X v e $ o 1 s S h Q Q Q 0 }.j J e Q ) c e b J e e $ o y h =.C =.u &.c e ",
+",.b ,.{.m m b b |.,.{.|.b ) m Q |.b ,.b ,._.v * = ,._.i.i._.(.' _.J y _.J 7.K J ,.v = D |.i t <.;.<.<.%.7 e D T <.;.<.<.t l e ' ~ , W D D  .H o H R o R 8 j H D _.7.) . x v & 8 * ,.b ) 7.K v Q Q K N e ,.,.y 1 O a Q Q e c m Q Q a J e h R e ; R 0 Y } u $.e ",
+"b b {.,.b b m m ,.J [.J b |.|.|.|.|.b m b |.J x - * v J J ) x (.(.. {.Q _.Q _.J _.b ' $ + _.d #.<./.;.<.<.f.t <.;.<./.t C m ) ~ , - W D 5. .H o R o R n j o ; ) [.,._._.v D :./ ' ) _.J y N ) m b c e b y e $.r l ,.Q J b K b Q b b b Q $ h e z j O 1 u u | { ",
+"b ,.,.b b ,.,.b [.J _._.J b b [.,.|.|.,.b ,.|.,.& , $ @ ' _.b (.J . ' v ,._.Q _._.,.J J > = 7.' 0 L <././.<.<./.<.;.[ N e a ' ' $ z ; W 3. .3 o +.o R 8 o = ) ,.{.Q {.) w A C C D N b y f j @ ,.J e ) ,.e ) j }.8 J e Q ,._.e e c e e J ].z J n >.8 R 0 f l [ ",
+"b b b b b m J {.,.m b b m m m b b ,.,.,.b m ,.|.|.H : b.Z Z h.^ j.c.[ p i.b _.b b J J Q m > > e b } /.<.<.<.<.<./.#.; e e c > , = ; W D 3. .H o o o n 8 3.. J ) {.7.J > G ^ ] A ] p . k Y [ Y k m c Q c 1 { } 0 @ Q e b J e e Q Q b e b o z e R d y . ! $ b e ",
+"b {.,.m b b b J ,.J _.,.,.m m ,.|.J _.b |.J J m ) _ 8 > * ' (.y _.b v g.q ) Q b {.) (.' [.m ; *.^./.<.<.<.<././.<.<.%.>.Q e z $.- ; W D 3.3 H o o 8 n @.# (.) ' J Q % :.g.=.4.A j p ' n Y C S g b ! Q % =.u | 0 Q Q e c y e e J Q Q e J d N b z J e e c O r j ",
+"{.b b b ,.m J b {.[.c _.m {._.J |.b m J b J J J m | y V 3 x y ' x $ b J ^ b ) ,._.b |.b ) ) 7 <.<.<.<.<.<.;.<.<././.<./.M 7.7.$ W W W W i 3 H o o R 5.$ x (.) J 7.) H =.g.4 *.9 0 n + n Y X P ,.k n z ! r Y S ~ Q Q Q b m e e e b e Q z k @ z v Q e b v @ y z ",
+",.b b m ,.b m m J b ,.m m J J _._.,.,.J J c J J _.] ^ ^ ^ [ C ^ C C ^ ` 2 J b _.[.b {.+ e H d./.<.<.t U { @ n T <././.<.<.o 7.Q D > D D i 3 H o o > v ) ' x (.{.(.D A 1.9 *.1.5 ; ' @ N O s j [.y K b *.S M X Q Q e J Q e e e Q e e b h f b y _.e y =.{ ].e Q ",
+"b ,.,.b m b b b m m m m m J J J J J J J _.J m b # @ y _._.@ 3.- a _.y b _.7.) |._.J [.[.Q _ <.<.<.;.n e b Q e e o }.<./.<.S Q e e .  . .>  .H H # v (.v v ) _.# o 4.9 8 9 j 9 { n ' @ ] 1 H $ > a ) P O j } f c Q Q |.b Q e e Q e Q e v N ) N e $ k { D e e e ",
+",.,.,.,.m b m m m m m _.[.J J _.c J c c _.b ) @ + ) J K i._., k ~ v _._.|.{.b ,.[.m [.[.Q : <.<./.O {.,.Q e b e e $.%.<.<.r c m e 7.z H E H H D . . x v x ) , H A P j j j O X O Y _ 8 r T D ~ $ @ ; 1 =.[ C a e Q Q |.Q Q e e e Q e e z y ~ z e Q b 1 | y e e ",
+"{.b b m b m b ,.m m m m m J [.J _.J _.c m J . , ' _.b J y _.y ~ > ! i.J b [.,.J [.J ) ) Q _ <.<.<. .e $ * {.7.e Q b #.<.<.r ) $ [.7._.D I E > @ ' . x ' ) , o A A n 8 P 7 A p O ( 1 : q p ' $ , - j l g 2.*.J |.e ,.|.|.Q Q Q Q ,.e ,.@ c y *.Q e > O } j e e ",
+"b b ,.b m m m m m m m J m J J J m c _.m _.+ ~ v {.y v x ' y J _.* 3.V Q @.Q |.[.[.{.[.) Q : <.<.<.$.e @  .; J x ~ ) #.<.<.} 7.$ ; ' 7._.; > @ (.. @ x ) @ o A *.F o n j A l P 0 S ` : l @ ~ % i n S j =./ ].b Q Q Q Q |.Q e e Q e e z h e ! j N b ! 0 2.{ . e ",
+",.,.,.b ,.b m b m m m m J [.J J [.) _.,.(.@ + [.. {.m _.) y ' (._.= w @ '.|.J |.J J [.[.Q _ <.<.<. .Q [.+ o  .= + @ j.<.<.} e . > = _.7.' % @ ' v (.' # 3.*.5 8 d 3 n 7 n P 1.0 Y Y | P . N D ' p 0 *.r X Q b e Q Q Q Q Q Q Q e Q m @ K J @ p J e e n r l Q e ",
+",.b ,.m m m m m m m m J m [._.J _.{.{.) ' ' ) ) m x ' ) ) x @ (.J x & N ^.e b ) J J [.[.Q : <.<.<.H Q b a H 3 = + @ j.<./.[ ) ' N ; ; + |._.# ' (.' = o 9 p F o H H o 7 n = P Y O C Y ` j =.e.X 0 I 0 2.i b ,.b b |.Q Q Q Q Q Q Q e Q b Q g k K h 0 0 2.X ' e ",
+"b b b ,.,.,.b m m m m m J J m J ) J [.) ) {.J ) ) { ^ 2 2 h.( ^ ( ^ / ^ %.* ) Q J J _.) Q _ <.<./.n 7.J , - V @ (.x s <.<.} ) ) @ ;  .@.V ) v (.x = o A A F o n H n H G G # @ O ` Y S 1 } } / _ 0 =.[ Y J ) e ,.b Q e e Q Q Q e e Q J Q ,.e _.e e I 7 l | j e ",
+",.b ,.m m m b m m m m J m _._.J ) _.J J J J ) ) ) F o o G H ..:.A F  .3 :.* a (.J J J [.Q 2.<.<./.o e # = x x v # & }.<.<.} [.~ @ z ; I  .$ ' v $ R 5 { G o H n o H n j G @.# @.Y 4./ S 7 o { Y 0 O S h K Q J e b |.Q e e Q Q e Q ,.a N a c e Q e Q @ N c Q b ",
+",.,.m ,.,.b b m m m m m m m m J J J c _._.) _.[._.. ) ) (.) a |.J ,.|.,.Q . - ' |.J ) J Q : <.<.<.H b @ v ' (.@ W D U <.<.} b , > ; ; = o R % ' R *.5 j R n 8 o H o F 9 { n . $ 0 { 7 j j ` 0 P 0 | 0 @ b b ,.,.Q Q Q Q |.Q Q Q e c . ].~ e Q Q e e $ i y c ].",
+",.,.b m {.m b ,.b b b m m m [.J _.J _._.J c _.) b ) ' ) ) ) _.(.[.) b Q e 7.+ ; a J J ) e _ <.<.<.o J (.(.a V $ & ; }.<.<.[ Q @ > > D >  .R H H F :.:.8 P o R R H n j G 2 Y P D j l j *.{ { j n 0 1 O N b ,.Q ,.b ,.|.Q Q Q Q e Q Q ) h ! J Q b e Q y z . _.$ ",
+"m ,.b ,.,.m b m m b b m m _.m [.J J J J c _.) [.' ) (.x _.(.y v ' . ,.Q ,.e e ) - ' _.[.e : <./.<.n |.[.) V = & x # j.<.<.B b ~ ; -  .D ; 3 o :.7 8 n P R R o n o 3 P 9 A G G C j 0 0 O O 7 f P 0 Y 7 $ ,.Q b J Q Q Q Q Q Q e Q Q e v f $.v Q e Q e e y ! ! a ",
+",.,.m m b m m b m m m m m m J J _.J _._._._._.) ,.b @ :.F D y ) + [.' o 7 ) e |.v * v |.7.: <.<.<.d 7.[.+ = = # . @ #.<.<.} Q . > ;  .E 3. .H F ~.P o R R R o o H P 9 d E 7 { 0 p 1.O 4.p j o G Y O $.y b Q Q Q b ,.|.Q Q Q Q e Q e _.J e e e Q Q e e e ,.@ @ ",
+"m ,.,.,.b m m m m m b m m J m [._._.J _._._.) _.) } ^ o P : S 0./ q '.2 $.b e e Q $ , x |._ <.<.<.I e v & % @ v + @ #.<.<.r [.~ D - W  .H H 5.R +.6 F P R n 8 o 8 :.1.` 1.` =.0 =.1.0 0 7 G 0 O X R a Q ,.m Q Q Q Q Q |.Q Q Q Q e b v _.e e e e e e ,.e e _.].",
+"{.,.b b b ,.m b b m m m m m m m [._.J _._._._.) (.7 m _.' |.; q W + _._.c e e Q e ,.@ = ) _ /.<.<.I Q $ , . x + . + s <.<.&.K z - N = 3 8 R 5.H n 6 :.+.R R P o o 9 / ^ 0 { =.O 2 { A l o  .j =.n N b Q J m b m b |.Q Q |.Q Q Q Q J y Q e e e Q e e e e Q e b ",
+",.,.b b b m b m m b b m m J m m [._.[.[._.[.[.J ) 1 n o o o P } R R P o d c e e e e b # v [ /.<./.g [.@ v . . + ~ @ s <.<.r c @ ~ =  .o 8 :.F -.o n :.:.F P R R F R ` q B 1.7 =.{ 0 G h @ J * d ! y Q c c b b Q Q Q |.|.Q Q Q e Q _.J e e e e Q e e e e e e e ",
+"m ,.b b b b b b m b ,.{.m m m m [.[._._._.) _._.|.j I P d P I l j F n I o K Q e Q Q e Q @ b.<././.n J ) ) . @ + . + #.<.<.} J . ~ = 3 3 w H :.o R H R :.:.o o P :.F 7 *.G 0 ^ _ ` O o y _.J ' % @ J b _.[.b _.m ,.Q Q Q Q Q Q Q e a ) e Q e e e b e e e e Q ,.",
+"Q b b b {.{.b ,.|.J @ @ {.|.) ) J J J _._.c c _._.. {.J J ' b |.' , ' J ) [.' ' 7.7.Q 7.|.C <.;.t z Q ' ' a x @ @ ~ [ <./.` Q . = ..F D D H H F R ..o R F 6 0.o H H o P 9 C A C | 0 z J b N  .j D & y ) ' |.|.(.|.m |.Q Q Q e Q {.' b e e e e e e e e e e e e ",
+"b ,.b J J J m ,.b & W v J {.[.m J J J c J c c _.) |.' ) J _.J b Q . @ b Q {.) (.J |.|.7.e a | u n Q Q ) . v v ~ ' x H } : - Q ' i H 8 3 w 3.H R 8 R P R 8 0.R o E o ..4 ] *.# . y J y $ 8 p S F > W = i W y m Q Q ,.,.|.Q Q e e b c Q e e e e e e e e e e e Q ",
+"m Q b J J b ,.J v D > K J ) [.{._.c c J _.) ) ) ) [.) b . . J + ) ) + ~ 7.|.{.V x b 7.|.,.e e b b Q ' x a a a ' , , ; x {.) (.D w =  .o  .5.3 o F F P P R R 0.0.6  .+.{ H v b ,.b J b >.=.C *.! x ; - i 5.5.3 y Q b b |.e e Q e b J e e Q e e e e e e e e e Q ",
+"J Q Q b b Q b (.D - x J y x ) [.[.J [._.J c c c b > $.j k E j E o f $.n z _.Q b $ v b 7.7.Q z i ! J ) ) (.@ v v v d W ' |.. D $ - $ D 8 8 8 8 P o R 8 8 0.P F j F H :.*., |.) _._.b J k 1 O W x m # @ $ W F A ..' b Q ,.e e b Q J Q e e Q e e e e e e e e e e ",
+",.,.,.,.Q b y % ; (.,.J ) (.x ) ) ) _._.[.J c c a u d o P j d o j f f P _ ) Q b _.a @ b 7.p t /.j.- . @ ' (.' $ D D . ~ , $ D = , = i ..8 o o o H o P P ....+.6 3 *.F W $ ) b {.,.Q b m p _ - _.(.(.. (.$ ; D p ; ) Q |.Q e Q b _.Q e Q Q e e e e e e e e e e ",
+"|.,.b m J . # = ) b J J ,.J . (.(.y ) [._.J c c 7.1 K y ) . ' _.,.. . e | b @ b {.J @ ' J | <.;.<.D . = $ a @ W = (.@ ; D ; + , , D D  . .i 5.o o R P P P 0.+.F G R ; J m b b ) _._.c J z 1 $ ) ) ) x ) , W v i i . Q |.b e Q b J e e e e e e e e e e e e e e ",
+",.,.,.b . # $ . |.J _._.J {.) ) x ' (.) _._._.c a u Y C X 9 $.j j f R 0 '.c b @ J 7.) (.) _ <./.<.D b @ , $ a @ ' , , D - @ W $ D  .i D i @.o o o R R P +.P F 6 :.x b J x x ) [.J 7.) Q . D N . ' . . ) i p i v D $ J Q ,.Q Q b Q e Q e e e e e e e e e e e e ",
+"m ,.,.,.+ $ x Q J ) b J (.[.{.(.V v a (.(.) ) y J z o o g o o o R R $.o c e ,.) ) ,.J J ) : <.<.<.d e J - ! , y @ $ D W $ - , =  .i ; W 5. .o 3 o o R R +.6 ~.~.) [.# x = $ [.) b ' Q . m @ ) c ' . ) (. .A I ) ; , ' Q ,.Q Q b e e Q e e e e e e e e e e e e ",
+",.,.[.v . (.J b J J J J [.J [.) _.@ V ' ) ' c ,.m @ Q . . ' ' _._.K b b Q e e e $ . _.b Q : <.<.<.I Q _., 3 w ' = W - v $ , W i W - ; i i @.3 P R R P R -.4 6 @ ) @ $ , - ; = ; % b [.b ) (.' . ) @ ' J I p ; $ + . m ,.Q Q e e Q e J K Q e e e e e e e e e e ",
+"|.m ) x (._.J J J J J J [._.J J J _.v V v ' ) [.) |.a ,.) _.@ ' y ' y 7.e e Q e |.' + ) 7.2.<.<.<.$.Q v a ~ - 3 , $ , @ $ = W W ; - ; i  .E 3 H R -.o P 6 7 ..a b |.) v @ - D D i @ [.) W = @ ' ) ' ' K H 9 ~ ~ , . |.e e e b % $.$ d ! e Q e e e e e e e e e ",
+"|.[.(.) J J J _.J J J J J [.[._._._.) @ , # (.) ) J ) _._.' b J ' J y b e Q e e e |.) . J _ <.<.<.H b a y (.! ..= @ @ $ $ - ; $ , ; D i H R o 3 R H 0.>.5 5 P 5.' Q Q [._.~ = # D ; ) . I - ' ' v @ y + d G $ v ; ' ) J {.. ! d k $ j d e e e Q e e e e Q e e ",
+"b [.J b b _.J b J J J [._._.[.J J _._.y V = , ' ' I ' ) _.' y . K ) c Q Q e Q e Q e 7.' ' [ /.<.<.n Q m ' - D - W $ ~ ~ , = - $ = D i i 3 P 8 o H R 9 5 ~.+.....w ' ,.b J ' . J ; w @ i :.$ ' @ K @ y _.> P ~ J m e J ,.b > g k J b ! n @ e b y e e e e e e e ",
+"J [._.b b _._.b J J J [.[.) _._.) y J J ' $ , $ a h.Z } '.Y { d J @ c 7.b e e e Q e e 7.b } <./.<.d Q ) = 5.= ' = = $ $ z = $ = - D  .w i H F 8 R 7 5 :.0...o R  ., ) ,.J ) v $ W W , 0.{ = @ . v N K _.D j $ b b |.J e b ].$ Q e Q c i k J e Q e e e e e e e ",
+",.[.) _.b J _._.J J J J J _.[._.) J J _._._.a - $ $ @ b ) % d O Y _ X C 0 b e e Q e Q 7.7.2.<.<.<.I Q $ ; , x @ v $ + @ , , ~ ; - W i > > 3.o 8 9 A *.P o 0.R H i ; ~ ) [.c N 3 $ - - :.4.$ . y @ z v v E l z J m _.Q ,., ~ b Q K J b K k h e e e e Q e e e e ",
+"|.b ) i.i.J b J J J [.[.[._.J [.) m _.y _.b ' , $ = a @ ' d j X / Y Y Y 0 J e e e e e ,.e 1 ;.<.<.d b $ $ (.' ; @ + @ ~ z , = ; ; W W D 3.5.H 8 4 *.F o H o ..H D ; , @ y ' ; H @ i 3 *.4.= @ v K N ' ' i 7 - ,.|.b e z $.' e J J Q e e a ! c e e b J Q e e e ",
+",.,.J (.i.i.J b J J J [.[.) [.) J [.) _._._.i.i.> q j.S 2 *.n ) ' ) ' 7.Q e Q Q e 7.e e e M <.;./.j J ) ) x @ = ; ~ ~ ~ ~ $ ! D D W D H H 3 3 ..:.F :.:.8 F *.{ ; % - ! + @ > i @ o ..9 { D @ ' $ i N ' @.{ $._.m Q ' P g {.Q Q e J e e Q y N c e b y J Q e e ",
+"Q b b ,.) x i.J J J J J [.[.[.[.[.) [.[._._.J J _.5 h.| : ^ ( ^ A n c J e e e e e e Q e e 1 <.<.<.d Q (.$ ; $ a W W $ $ - W i - $ - W D o R 3 R 3 P F +.:.A 9 H % - > ; . . d W W P I H 4.j = ' ' g g y ' P j ~ m ,.].i ~ m e Q e e e e e b J b e Q a @ Q e Q ",
+"b b b b ,._.(.K b J _.y [.b b ) [.) ) ) ) _._._.' m - w $ @ $ J  .E s T T Q Q e e e Q e e S <.<.<.o Q x $ = @ ' @ ; H @ , H , @ - i 3.3.0.4 P H ....P 4 g.4 o W W $ W ' ,.%  .i - o 4.7 { 0 N ' @ 8 G = . D P o . . k h Q e b J Q e e e e Q Q e e Q v N c e e ",
+"b b b Q Q b ) v J J J ) _.J m ) ) [.J [._.) ) ) J y $ 7 ^ S '.^ < X O f b e e e Q e e e e S <.<.<.o Q ) @ , + v @ @ D H = ; 3 , = ; 3.H :.F 3 H H ..5 ^ 4.F H i > = ) . ' ) o - . j Y ` ^ A # @ @ h E ].) . i j - z h a e Q _.b b J Q e e e e e e Q @ ! a e e ",
+"Q Q b J b Q {.(.V ' b ,.J ) J J ) ) ) _._._._.J @ q | { h.w , V $ ) ,.m e J b e ,.e e e e _ <.<.<.o e _.. ~ @ $ ' , x D H = W o = ; 5.0.:.o 5.o o 4 ^ { R o R H W ' _.' . . > D ' p ` ] ^ o @ . x @ $ N ) J # D k D $ ,.,.b 7.b J J Q e e e e e e Q a i N b e ",
+"b Q b J J ,.,.,.% v y J b ) ) b _.) J _.[.[._._.Q ' a J y w w @ - _.x Q Q e e Q e e Q Q |.: <.<.<.d e m ' @ @ = @ a $ v W i $ D D 5.i  .H o o o *.5 *.0.o P 0.i . ,.J ' @ ) % * ' H p X A % ' # # @ . . K ) _.) N i ].v v ' m ,.Q e e e e e e e e e a k z Q Q ",
+"c Q Q Q b b ,.Q _.. $ V J b J _.J ) ) ) ) _._._.y y J y ' x & W $ $ v b Q Q e e e 7.[.) _.M <./.<.o Q ) x . . $ W ' $ , . W  ., i 5.w D w 5.P ~.4 :.o o F P i # # = . * = b % ) ) . p 1 G * . N # # @ ' y ) _.{._.N W W N ].! K b e e e e e e e e e y i N e Q ",
+"b b b Q b b b b ,.[.@ $ v b b ) _._.J _._.) ) _.) ) J V ) Q = w k - $ b |.e {.) e b (.) _._ <.<.<.o Q ' . x a $ , D a $ = ~ D D 5.i D 5. .3 :.{ R o o :.j i z D o > D D > @ ) # @ ) o 1.o * @ @ . @ @ ' ) _._._.' ' y v @ z f > K c b Q e e e e e e c ; @ e e ",
+"7.,.b Q b J b Q b e {.$ , i.J _.) ) ) ) _.J ) _._.J x b _.x ,.a ! w $ $ |.{.) b ,.) . ) ,.1 /.<.<.o e _.' ' v - $ = D , @ = $ - ; W = - i 0.*.6 o 0.0.F 3 @ ; 0 > ; W p A ~ ' ' # # ' W ].' N @ @ @ @ . ' ) _.J J y b K $ K N ! $ a K y J e e e e e {.z @ e Q ",
+",.b b J b b J J ,.,.,.J V = v Q _.J J ) _.) ) _.J x J ) x _.' ) ' ! k a b _.b {._.) J ,.Q 2./.<.<. .|.x (., W v , $ = W , $ = = ; ; W  .3 D 5.F ..H 0.F > (.+ H i D D  .E ; . ) . # * N V @ @ N # $ # @ # $ ' Q b J J J Q ,.c ' N z $ K y K J e e e b b Q e e ",
+",.{.b b b b b b J J ,.,.) V , v ,.J y i.J J ) _.b ) _.y (.[.y y i.@ w ! y m b J _.J J ) ) [ <.<.<.P e b ; W . v a , = - D ; $ = , - > i & [.+ o 0.o R :.o = ' _.d  .N y * @.; ) ' ) @ = ; N @ % @ # . . @ N , % J _.J J b Q Q Q Q a z N @ K c b e e Q e e e e ",
+",.,.,.b m b b m _.J ,.,.b ' V = K i.J J _._.J ) y b ) ) ) _.J y _.J @ w = V _.b J J {.' . r <.<./.j {.) ~ W , (.$ = $ = i D = , - ; , x {.b y , o R 0.0.8 o = J @ + . + W H $.= ' . @ N - = = N % # @ ' ' + N ! % a ) J Q Q 7.e e Q b c $ ].a e e e e e e e e ",
+",.,.b b {.m b b m J J J Q ,.) V > $ J b _.) J (.i.J _.y v x ) (._.$ a y , D , b J b b _.) [ <.<.<.$._.$ (.~ D , , , , = ; D i ; ! % c Q |.. ' _.= o :.0.0.:.8 D Q Q # E o  .@.E # + + @ % * ; ; = * # @ ' _.) @ z N @ a ) c ,.Q Q e e e b c b e e e e e e e e ",
+",.,.b b b m m m J ,.b J {.Q Q J = * v J J _._.) J v _.[.) _.(.J ' 3.! b . * W b J J J b Q M <.<.<.I Q $ , v v i v @ W - $ - i i % c e ,.) [.(.v _.= H P P F 8 ..% J ' k H k  .H # + + & N + # ; z # @ @ . ) ) ) _.a N ].z a c J e |.Q e e e e e e e e e e e e ",
+"b ,.b b b b m ,._.J J J _.{.,.{.b , - v J _.y _.) H y J J |.i W , ' $ , H ' , ) J ) (.{.e : <.<.<.o e ) = - + $ @ = = , = , v $ y Q e b _.[.' + (.y $ o :.+.o R o % J ' i P d = + - W $ + ~ N # * # @ @ @ ' ' ' ,.) a @ a . K a K c Q e e e e e e e e e e e e ",
+",.,.,.,.b m ,.J b b b J J b b J 7.i.- * ' _._.) x g.x ) . ) 2 1.$ Q _.& ^ v . ) b J ) _.Q M <.<.<.o |.) ' ; - (.= = $ $ = + |.e Q e e Q b ' . ) V (.' = o P +.P P E N . = d  .N @.o E * . N * @ = * N # @ ' ) ) _.J J b b J y . @ K J Q e e e e e e e e e e e ",
+"b ,.,.,.,.m b J ,.b J J J J b ,.J ,.@ 3.; (.J y J ^ ) J x J 1 4.) v ) 7.1 = a b J b {.m e _ <.<.<.d e ) ' v @ , , @ , = x b Q e Q e e J J J ' v + $ V ' & o +...H P H ; # @ > o 4.G o H > # @ * # % N % + ' c _._.[.J J b ,.7.e J Q e e Q e e e e e e e e e e ",
+",.,.b b b b {.b b b b b J J J J ,.{.|._.; D V J _.L ^.u j.j.%.%.c.j.}.j.^.' $ = b ,.b b e 2.<./.<.d Q ) (.(.. @ , = ~ ) Q e Q e e e Q m _.) . . # $ $ # v @ D P H H F G H & &  .p 9 1.1.H % % = & $ * = * . ) ) _.J J J m b b Q Q Q e Q Q Q e e e e e e e e e ",
+",.,.,.b m b J J J J J b J J J b J J ) J (.; D V b K b @ ' J . ) ' @ ' Q ' 7.V = _._.J (.' r <.<.<.H Q . . x x @ @ $ . |.e e Q e e e Q b J ) ' ' ' . ' ' ) [.(.+ % N * = ; % + + o 9 A j o P o * & $ & = = @ ) ) c _.J b b b b Q Q Q Q e e e e e e e e e e e Q ",
+",.,.,.b b J b b b b b J b J J J y m J {.,.x - 3.J i._.{.,.) _.K (.) ' x J ,.|.J > y |.' ~ } ;.<.<.o b v + x ' . @ ~ y e e e Q e e Q Q Q b J _.) ) _.) y ) [.,.b . @ $ # % ; $ [.(.- W , i A ] G i ; # @ . (.) ' [._._.J b Q Q Q Q Q e Q Q e e e e e e e e e e ",
+",.b ,.,.b m m J J J J J J J J J c [.Q ,.{.b (.D > J y x _.) ' c [.' . ) Q ' [.Q v & @ b Q } <./.<.d Q . + + . + @ v ) e e e Q e e Q |.,.b m _._.' ) ) ' ' ) {.|.b K $ % N z * @ J J J y N D n 7 7 8 k = ~ . ) ) J J J J m b b Q Q Q e e Q Q e e e e e e Q e e ",
+"b ,.b b b b b b b b b J b J J J ,.' ' J J ,.J K  .= ) {.. J ' _.(.(.x ) ' Q |.|.Q @ W + e _ <./.<. .e ) @ @ + . . c ,.e e Q e Q Q Q Q Q m _.c ) ' ' ' ) ) (._._.7.J a N z z z z @ _.J @ N @ # ! E $.$.I @.z K _._._._.m b ,.Q Q Q Q Q Q e e e e e e e Q e e e ",
+"b b b J m J J J J J b J J J J J {._.@ % (.b b b V S < =.: ^ } _ | g.] ] { ' Q |.J 7.(.* ' S /.<.<.$.e ) a ' _.|.|.e e e Q Q e Q e e b b m _.y ) ) ' . ' ) ) [.[.J ,.J v * z z N N K _.y a $ # a ) ' a N N # K ) J J J J b ,.,.,.Q Q e Q e e e e e e e Q e e c ",
+"b b b b b b b b b ,.J J b J J J ) ,.(.= V _.b b Q , H D ) x g.P _.x ' b J Q [.m b b b [.{.Z <./.<.d e y _.b e e e e e e e e Q Q Q Q Q Q m [.) y _.) ' ) ) ) J |.b Q Q _.v N N N ].* @ J ,.@ $ c c c _.J _.c c c c _.J b b b Q Q Q Q Q e Q e e e e e e e e J N ",
+",.b b b b J J J J ,.b {.J _.[.[.[.) {.) $ , J ,.i.@ w = ) . ] n _.) ) ) |._.|.Q e _.) |.Q < <.<.<.d e J Q e e Q 7.Q Q Q Q Q Q e Q Q b ,.m m J _.) ' . . + $ ~ @ ) ' ) _.) @ N $ $ N ].@ J ' # ) c c c c c J b ,.J c _.J b b Q ,.Q Q Q e Q e e e e e e e b $ i ",
+"b ,.,.b m b b b b J J J {.{.[._.J ) _.J i.V ~ ' - j.^.'.j.c.j.j.j.'.j.c.'.. Q ~ [.,.|.|.) < <.<./.j e K Q e Q e e e Q e e e 7.b ,.e e Q m ' $ W H H n j G G G j n o o o d E $.E = N % N @ _._.K J c c c b b J b J J J m m b b Q Q e e Q Q Q Q e e e e e y ! k ",
+"b b b b m m b {.J {.b {.J _._.) {._.) ) {.) V % -  ., ) ,.Q Q y (.a _.,.x Q J -  .7.b v _.1 <.<.<.2.c b b J Q e e e e e J b e Q Q m K z k P 9 p 0 A p p *.G G j P P j G 9 9 G 9 1.9 R i = # (.,._.c J c _.b J m b b b b b ,.Q Q e Q b Q e e e e e e e K ! k k ",
+"b b b b b b b b J ,.{.{.) _._.J J {.) ) b b x V ; (._._.b & (.7.J J (.- . ' b i n $ e ) |.H <.<.<./.}.u s T u T T T T T s O c @ ! i o P j 9 j n H 3  .D - & $ $ , , & D  .H F 9 p 2 2 A F o i % ' _.J _.c _.,.b b ,.,.b b Q b ,.e b Q e e e e e e Q a h i i h ",
+"b b b b b J J {.{.,.{._.) ) _._.) b {.) _._.) J V (.(._.Q 3 i J J b @ ; |.7.,.F n 9 [.7.m ) u <.<.<.<.;./.<.<./.<.<.<./.<.q z H d n 0.o D ; @ x |.b J ) y y ) J ,.Q Q ,.J J (.a = o *.A 5 5 4 j D $ [.,.{.J J _.,.,.b ,.b Q Q ,.Q Q e e Q Q e e b N i k h h i ",
+"b b ,.b J ,.{.J ,.J ) ) _.{._.) ) _._._._.(.) {.b # ,.) ,.E P i Q [.* ) e Q , o F o w 7.b Q i U ;.<.<.<.<.<.<./.<.<./.;.<.r @ W E W + J |.b (.@ W D  .o R ......H 3 5. .D = a (.|.J $ i R 9 A 4.0 o = . J ,.b J ,.,.Q Q Q Q Q Q b e e Q Q e e Q ].i k h h i i ",
+"b b b b b b b m J ) ) _.J b J ) ,.) ) b ,.b _.) . p v [.Q D j 0.; ' ) 7.{.Q i 8 :.o R . Q e e z S }.;.;./.;.;.;././.<.<.<.} + x J Q 7.J @ > o :.~.~.*.*.*.~.:.F R 0.F 9 *.9 F 8 D $ ' (.v , 3 *.1.A G E * ) |.7.b b ,.,.,.,.Q Q b e Q Q e e Q y k i i i k i i ",
+"b b b b b J b b ) _.) _.J J J J ) ) {.Q ,.Q b ' ) < n E E 1./ C : 0  .I 3 ) 3 F H F 0.D ,.J y e e c $ @ ; $ N $ k h D k  .$ e |.Q (.- o :.~.:.:.:.:.:.6 F F +.P F n 8 :.9 9 9 9 9 F n o W @ v # E 8 :.F o D # ) {.b ,.Q Q Q Q b Q Q e Q e e K ! h i i k i h h ",
+"b b b b ,.b b ,.. ) J J ) ) _.b , @ _._.V y ,.) ) } n E d 1./ : ^ ( :.o w @ F P ..o o  .b Q Q c |.e b y $ @ ! ; @ K ) {.e 7.|.a w H F F R R F ~.:.:.~.7 ~.:.6 8 R o n :.9 9 :.:.:.:.j :.j R  .W # ;  .o P F H ; J {.,.|.Q Q Q Q ,.Q Q e b K h o h k k h h k k ",
+"b m ,.,.Q J ) x ) J {.i.' b J > V b ,.b $.8 = ,.{.p ' e _.E :.G 0...P - ,.5.~.H R :.= J Q _.J e Q { !.;.;.<.<.;.}.C J e ' W W 3 R -.H ..+.F F F ~.~.~.:.~.:.F +.R 8 F j 9 ~.9 :.j F :.F R o F 9 G H % . w o o o o % ,.Q b Q e m ,.m e |.z I $.k k $.k i i i i ",
+",.m |.Q b x . ) _._.) ' ) ,._.> * i.b ,.> G n  .Q ) 7.[.,. .:.P ~...6 -.~ H :.0.j @ [.7.J _.e ].}.;.<.<./.;.<.<.<.;.U n 3 d H H o o o P +.8 F :.:.:.~.:.:.:.F F ..R +.F ~.~.~.~.:.:.:.:.F ..P :.p A 8 ; @ v ; H 3 o W [.7.,.m Q e e Q ) z $.I i k k k i i i i ",
+"m ,.Q ,.' @ x |.b _.(._._._.@ , ; v ) {.$ j n F 3 x 7.[.(.n :.:.R 6 +.R n R ..:.> Q c Q J 7.* }.<.<.;.<.<.<.<.<.<.<.<.L 0 o H H H -...P 0.+.6 :.~.~.:.~.~.:.F 8 R R 8 :.:.~.:.:.:.F :.~.F P ....j 4.1.:.i $ v $ R 0.E = (.7.e ,.Q 7.) @ ~ ! k k k i i k i h h ",
+"{.Q J . + ) b |.b _.) ,._.$ > = v x ' J ) o o 8 F H D . J 3.R 7 - 3 6 6 ..R -...) ,.Q J Q b : <.;.<.<.t L L U <.<.<.;.<.}.i j 0.o o o ..R 8 6 :.:.:.:.:.:.:.F 8 P P +.:.~.*.~.:.:.F :.~.:.P R ..R :.p 5 4.F - _.$ 3 0.d ; ) Q e b J . ~ . @ ! I k h h k $.i k ",
+"|.b (.+ ' |.Q y ) J ,.,._.$ * , J ) ) ,.b o 8 8 o P :.5.$ $.+...$ ' ..7 o ..R N |.) Q ) Q z t <.<.<.e.d . |.b D j.<./.<.<.F H 0.F P o o P 6 :.:.~.~.:.~.~.:.6 F ..R 8 :.~.~.:.:.:.6 F ~.:.F 8 P R R F 9 5 A 8  .b . i j n ~ b ' ' @ + a . . $ i $.k k k k i i ",
+"{.' . ) ,.b ) a J b b _.v i.,.,.{._.J ,.Q W n R F :.:.R P 6 G +.= ) $ 5.~.F = |.m _.J ) 7.*.<.<.<.#.@ e e m % ~ - r /.<.;.^ % o F +.....0.F :.F :.~.:.:.~.:.F P R P P F ~.7 ~.~.:.6 F ~.~.F F :.+.R P F ~.5 A *. .' b - i K J N . @ + . ~ @ K N k k $.k k i k ",
+". . (.|.,.) x (.J _.J K , $ _.,.J Q ,.,.,.+ 0.8 R ..F R G ..+.{ - ' e ) n  .m e ) J m e e S <.<.<.X e Q , D H D % R <.<.<.Y , $.F F :.P R F 6 :.~.:.:.~.:.6 F +.P ..F :.:.9 ~.:.:.F :.~.~.:.~.~.F +.P 0.8 9 5 9 A o . e |.a @ a @ @ . @ @ @ a a ! k $.k i i i ",
+"= . b b ' v ' J _.@ ) J ! P H ; ' {.,.{.{._.F *.3.J $.:.P +.0 4 ~ |.Q |._.) m Q e c y Q Q [ ;.<./.f Q % i 0.H R I $.L <.<.[ . D 8 :.~.:.P 0.6 :.~.~.:.~.:.:.F P R R F :.~.~.~.:.:.:.:.~.~.:.:.9 6 +.+...o 8 *.*.*.{ d . ,.) @ ~ . K ~ ~ ' ' @ @ $ h $.k i $.$.",
+") |.|.y . y J b v & = J ' o P ..P 3 , ' Q _.3 ~...J |., R g.4 P v ,.b ,.e e |.e e |._.Q c } <.<./.I ) I n R n j n o ^.<.<.r . D ..:.~.:.:.:.+.F ~.~.~.:.~.~.:.F R P P :.:.9 :.:.6 6 :.:.9 ~.~.~.~.6 F F ..H 0.9 { o - @ . @ @ K . D ~ . @ $ K a K N k $.i k $.",
+"J b ) V v b b ' > - v ,.J w :.F P ..o o D = 3 o 6 ' e ) , 3 F ~.' ,.,.b e e Q e b e e ' ! '.<.;.<.o + H n +.F :.0.o U <.<.e.. > o :.7 ~.*.~.6 :.:.6 ~.~.~.6 +.+...P P :.~.7 ~.:.F :.~.~.~.9 ~.~.*.~.6 F F n P j P ; @ % % . @ z n l > + K ~ . a a $ ! k $.$.$.",
+"Q _.v a J b y , $ v {.b 7.(.o R ..+.F ~.8 ..P 6 :.w J J . . = k ) Q ,.b e e Q e |.e |.> d '.<.<.<.P ~ o 0.0.F :.P o U <.<.r . > o :.9 *.4 *.~.~.F F :.*.*.:.8 F R ..+.:.~.~.~.:.:.6 :.:.~.~.~.~.~.7 *.F F :.0.H , ' . , ~ . @ $ G { n N ' @ a @ a @ $ h $.k i ",
+"J ' ' b ,.x = - [.J J y |.|.W P ..P 0.~.~.F P P P H + ' ' Q b ) m Q ,.Q e e Q e e ,.$ P d q <.<.<.j ~ 3 R 0.P 8 P R ^./.<.r . W H +.~.~.4 A *.4 :.~.*.5 4 ~.8 +.R R P F ~.~.~.:.F 6 ~.:.~.~.~.~.6 ~.~.F :.G  .+ |.+ N @ + > > ' > 7 { $.. . a @ v @ v N k $.k ",
+"a . J Q J $ $ . J b ) [.b Q ) 3 0.R 3 D H ..P 6 +.0.v ,.J e ,.Q ,.Q Q b e Q Q e e ~ I G W [ <.<./.j $  .o 0.P F F R U <.<.r K ! o F ~.9 4 5 5 5 *.*.4 { 5 *.F P P P F :.:.~.~.:.:.F :.~.~.~.~.~.*.:.6 9 :.3 + Q ' , - ' z 9 G - . d O o $ ~ @ K a v K @ h k k ",
+"x J Q {.' ) {.Q [.|.b |.J b Q = :.0.W m ' = 5.+.{ A $ Q Q |._.m b b Q 7.e e e e Q i *.:.v _ /.<.<.j $ 3 ..+.0.F F R ^.<.<.r K ! o F ~.:.*.4 5 { 5 { { g.5 5 ~.P ..R +.:.~.~.~.:.:.6 :.~.9 ~.~.~.4 :.9 A H . |.) - ~ + , o g.{ P + - P h . @ ~ a a @ v v z i $.",
+"J |.b (.) ,.|.(.b Q 7.7.{.Q e b 0.*.o x |.m m @ o .., |.|.|.b ,.Q b b Q Q e Q Q @ d 7 I |.S /.<.<.G #  .P P P 6 0...U <.<.r . W o F :.~.*.4 4 5 5 { { 5 { 5 *.F R P 8 :.~.~.~.:.F F :.:.~.~.~.~.~.*.*...$ |.J % , + , o p { { 4.$.@ ; ~ . ~ @ @ a ~ @ K @ ! $.",
+",.y V a J b $ I D W $ $ V v $ v - F :.= (._.b ' Q ) b Q b b ,.b b J b e e Q e Q H R H $ Q [ <.<.<.j +  .P P ..F 8 R ^.<.<.r . W H F ~.~.4 4 *.4 5 { { 5 { O 4 F ..P 0.F ~.~.~.~.:.:.~.~.9 ~.~.~.~.*.o + |.' % N @ z R { g.4.5 { p v ~ @ @ @ + @ v @ $ v v ; $.",
+"i.- ~ J y J ) W :.9 6 P P F :.....0.0.F = ) @ b |.|.,.,.,.b b b Q b J e b Q e ~ o n $ e ' q <.<.<.F $ H 8 8 F :.P R U <.<.e.x D o F :.7 4 5 4 5 4.5 5 5 4 A { g.6 ..R ~.*.9 :.:.~.0.F *.F :.*.F *...@ |.@ z ~ ~ k 4.] { 4.g.{ *.].% @ ~ $ ~ + . @ @ a $ @ $ k ",
+"~ , y b $ $ _._.H :.~.G 6 P R R R ..+.5 R v b |.|.|.,.,.,.,.b ,.,.b b e b e e ; n  .m |.- u <.<.<.F ~ H R R P F P R U /.<.Z x W -.F :.~.4 5 4 5 5 4.4.4.{ 4 4 4 *.F R F :.9 *.A 8 9 :.:.p G :.{ 0.% ) ~ ; N ~ ! p *.4.{ 4 { *.W @ K $ % ) a ! - @ @ a $ @ @ h ",
+"* a b b ' @ (.Q $ o 6 ~.7 +.P 7 6 +.+.*.9 * 7.|.,.,.,.b b b b b b J b Q e e ) $.P , e + I q <.<.<.j $ 3 R ..R +.P o ^.<.<.r x w H F ~.*.4 5 *.4 5 4.5 { 5 5 4 4 { A :.8 F ~.5 { 9 :.:.9 :.*.9 n % ) x ; z . ! F ] 4.*.4.] 9 > . @ @ z ~ . D P n + @ v v v @ ].",
+"y b J m m ) x ) |.= o G ~.H - - o 8 :.F :. .m b ,.b Q b b ,.b b b J Q b e e % P d {.Q D o q <.<.<.j ~  .d o o R 8 o ^./.<.Z ' W -.F :.*.4 5 *.4 A 4 5 { { { A *.{ 5 4 ~.~.A O O =.9 j G j p n @ [.@ - $ ' , 0.g.{ { 5 g.g.i ' ~ $ z @ ' > l p j @ a @ @ v K N ",
+"|.b _.(.|.{.) (.|._.- 0.~...$ Q |.y a _.. + b 7.Q b b b b b {.b m J Q b e b i j W e . o I e.<./.<.P @ k H H H n P R U <.<.B . w H F ~.~.*.*.*.4 5 5 A 5 { { { 5 4 5 5 A { =.g.{ ] 1.*.:.7 o z ) . z % @ W 0.{ g.{ 4 g.{ k ~ ~ $ N @ @ W j { A p , a @ @ @ @ @ ",
+"' [.{.{.b J _.m (.|.b , -.~.o * v J J 7.e ,.b J b b b b b b b b m J Q Q Q @ d o (.e D n D q <.<.<.F + i E H o P P R ^.<.<.e.x W H :.9 7 A A *.A A 5 A 5 { { g.{ *.A { { =.h.=.6.=.1.g.1.n N @ N z N N i *.9.O O h.g.9 i @ v N N $ K > p { { A 0 i @ ~ $ @ @ a ",
+". (.|.Q b ,.|.{.x J |.m - +.6 F $ J Q |.|.Q Q |.b b b b {.b {.m J ,.b 7.b h P $.e x d R i q <.<.<.n @ i 3 H o P F o U <.<.r a w H F 7 9 *.*.*.*.5 4 { 5 5 5 5 { 5 5 5 { =.h.h.g.=.4 ` A ; . z ].z N  .5 h.{ 5 9.{ A i . ~ % a $ @ ! P { 4.9 A A P @ @ @ v $ . ",
+"Q ) J ,.,.7.7.[._.$ , ~ w o o :.I $ m m m b b Q b b b b b b b b J ,.m e J d G D e W o H  .u <.<.<.n . i 3 H o 8 P o U <.<.r x D H F 7 *.*.*.*.4 4 4 { 5 5 5 A 4.g.5 4 5 6.=.h.h.{ =.p @., N - z N > 9 2 O 0 O O 5 D + $ % % ~ . z 7 g.p A { 4.4.0 ~ @ $ K $ . ",
+"b ,.) @ v = 3 3 o -.+.G +.....0.:.$.x e m J e b b b b b {.J J J ,.,.b 7.$ d P - b I ..H I Z <.<./.j @ D E o R F P ..U <.<.e.~ = 3 F ~.~.4 *.*.*.5 5 4 A 4.4.{ 5 A 5 { 5 5 { g.h.C :.> ~ N ; ; N - l ] g.5 g.g.4 - ~ @ % $ @ @ , 4.0 { 4.4.A A p 4.$.. $ @ v K ",
+"{._.# E j 9 :.....n R +.*.6 P P 9 n - _.b Q e J b b b b b b b b c _.m ,.! j P v J H 0.d 3 q <.<.<.l ~ D  .E R ~.F n U <.<.} v D o F ~.:.7 *.4 4 *.4 5 5 5 4 4 4 4 5 O O { { g.C *.5.& N - N N ; F ` h.{ O ^ 1.H ~ + % - $ v W :.4.A 4.A 5 4.4 p 4.o . @ @ @ a ",
+",.Q _.& E n 8 P H +.+.6 6 R $.W ; - ~ _.b Q e {.b b {.b J J {.m Q b b m > j H [., 0.0.o d q <.<.<.j @ D E H o 9 R o }.<.<.} x W 3 8 :.7 A 5 4 5 5 5 5 4 5 5 { { A 5 4.1.=.C g.9 > % # * - z i P ` ^ ` h.] 4.R , + - - @ + D 7 ` A A A 5 A 4 A 4.A :.% a $ $ $ ",
+"J b ,.{.v , 5.~.G +.n ! _.|.J {.|.|.|.Q m b Q b {.b b b b J b m Q _.J ,.a - , b E 0.o o H q <.<./.o . k o o H 8 :.n U <.<.r . D o 6 ~.7 4 4 7 *.5 5 5 4 5 { { 4 *.5 A A ] C 9 D + % * ~ % $.p ] g.{ 1.^ A D % ~ $ - $ ' ; *.] 4 4.4.5 5 5 5 4 4.A p ! @ $ . @ ",
+"b J b b {.{.v w 6 G ~.H a Q b ) J m Q ,.m _.b {.b b {.J J m m m J ) Q Q e e ,.b 3 0.0...I q <.<.<.l @ i $.@.3.H j 8 ^./.<.e.+ W o F ~.~.4 4 4 5 4 5 5 4 5 { 5 *.A 4 5 O g.p  .@ $ - z # > 9 ] 2 { g.{ A I ~ @ % - a . D ~.{ 5 A 5 4.4 5 5 5 4 A 4.{ D @ $ y a ",
+") _.{._.(.J ) a -.7 ~.o 3.' Q _.{.[.m m b b b {.J b b b m m m J J _.7.J b 7.7.Q $ H :.0. .q <./.<.P c ' J Q Q J * ; U <.<.r v ; 3 +.7 *.5 5 4 4 5 { 5 5 5 { { 4 4 5 1.g.G D % N z ~ @ - P g.] { g.^ *.D @ N ! % . v > *.g.5 9 4.4.4.4 4 7 0 4 A *.l ; ) $ @ @ ",
+". (.b |.,.J J ) ) ; H 8 G E @ _.,.,.b ,.,.b J J b {.{.m m m [.J b ) {.- D , [.Q b , o F 3 q <./.<.P Q Q e 7.7.Q Q _.#.<.<.r . ; o :.~.+...H D 5.~.5 g.5 4 5 5 5 4 4 5 j i # $ - N ~ - P g.] g.g.2 g.H ~ @ z h % + i 9 4.{ A 5 5 { { 5 5 5 7 4 *.F R ].Q ' $ $ ",
+". . ) J b {.) y _.) > R n G F ; # a ' J |.,.c y b b b m m m m J ,.[.|.> j P W ' Q m - 0...q <.<.<.d e Q ) V V v {.,.T <.<.B + D o R 3 = ' y y ' @ H 4 { 4.5 5 5 4 5 F ; @ * ].N N ].n ` 2 4.4.^ 1.n = , z ~ N % i ~.g.5 *.4 4.A { { 5 5 5 4 4 *.R R > e {.@ a ",
+") + v {.Q Q b v n 8 8 R R P F *.0.' Q m c ' _.,.m ,.,.,.m J J J _.Q {. .....0.3 b Q ) 3 I './.<.<.d e * 3 o H :.o [.u <.<.q ) W o o @ b @ w W , @ (.; A { { 5 4 { F ; @ N z N N @.A h.g.1.h.g.4.D - N N ! N . i ` 5 4 5 5 5 { { A { { 4 A 5 :.H d o  .Q e e Q ",
+"Q Q |.J ' , 3...F G :.F 8 P H w . e Q _._.m ,.|.b b ,.m [._.J b m ,.J  .R R 0.H ' J |.5.o Z <.<./.$.) E H R o R R  .#./.<.} @ W I ; J v o 4 4 9 - x $ n 4.5 5 4 P D + @ - % ~ ].p 1.1.{ C ^ ~.D , $ - ; N + ! *.{ 5 4 5 { 5 4.4.5 4.5 4.*.F ..H o o k Q Q Q b ",
+"7.{.$ i ..P +.R o ~.A n w @ _.|.Q Q ) ' _.m Q ,.b b _._._.m b m J ,.[.3 P o ..R & |.e W H e./.<.<.$.) E H ..o n l j %.<.<._ + W d + b D 4 4.{ O o @ v i { 4.{ 5 3.~ . , ].z > 8 ` =.{ { h.5  .@ $ z ].z N i *.` { 5 5 5 { 5 4 A 4.p A { p ..3 o H R  .Q e e Q ",
+") = ..:.6 ~.6 -.P H ; (.J _.J |.|.J ) m b b Q b m m _._.m b b m J J [.3 0.H o 8 w e |.= H q /.<./.l . d R H o 8 o P t <.<.| ) D  .) b  .5 *.*.{ p , v ; { 4 { 4 @ @ $ z z - n ^ 1.4.O ^ { H , , - ! z $ z d ` ` 5 5 6.5 5 5 A 4.5 A A 5 9 0.H H H o  .Q Q e b ",
+"|.' D o o ..6 6 n 5.$ i._.m b {._.J ) ,.|.m Q ,.J _._.m m m m m _.J J 5.0.o R P > Q |.; 3 Z <./.<.M @ - n o H o o S <.<.<.=.c D I + J 3 A 4.4.O :., + W g.4.5 4 $ ~ @ $ % N $.4.1.g.g.^ ] :.D = z ! N z z ].R g.5 O 5 5 5 4.A 5 4 4.4.A A 9 F H H R k Q e Q Q ",
+"x b |._.' @ 5.6 P +.F R D # b e ) b _.J b b Q Q _.J J m ,.m m J b b b i R R 0.o ' ,.7.D H =.<.<.<.t 0 $.3  .d F r t <.<.<.7 . k o , b $ ..*.A ~.W v = H g.{ { 4.o ; . ~ - , z  .4.g.g.O h.h.*.o $ z z z % . - d 5 O 5 5 5 4 +.0.:.A 4.A 4 A :.H H R  .Q e e b ",
+"@ ' m ,.|.Q Q _.H -.P 6 ~.P 3 w @ Q Q |.Q Q ,.J _.J b ,.b b m m m ,.{.i ..8 0.5.|.,.J H ....U <.;.<.d.#.q < q %.<.<.;.<.%.> $ k F H . m @ W W , @ @  .A g.5 { { { n - % - N % z I A ` 4.g.^ 2 g.$.! z N $ , ~ $ n 4.O 5 5 F H H ..:.*.4.A ~.+.o H o k Q Q Q Q ",
+"(.@ ' ,.Q ,.Q Q |.$ k -.-.8 :.:.d ' ,.b ,.b _.) m m ,.b J m b ,.J m _. ...8 o = |.Q ; R R W ^ /.<./.<.<.<.<.d.<.<./.<./.C {.- $.0.9 D ) b ) a ' a - 6 ^ g.5 5 5 ` A 3 ~ ~ z z z @ o { g.g.O O g.] i , z % , ~ $ , n 4.{ 7 +.o ..H ..~.{ 4.0.o o d R  .Q e e b ",
+"|.) . ' b Q Q |.J ' w R :.6 P H ) Q b Q Q ) c m m b m m ,.m m m _.,.|.> ~. .$ Q Q ) H +...3 i ^ <.<.<.<./.<.<.<./.<.;.{ c @ D H P 0.0.3 , _.y , H 7 g.{ 5 { 5 5 *.{ A $.@ @ ].].- % I { g.O h.^ g.4. .~ $ z % % @ $ o p 6 ..R H 0.o n 7 F H H o o n W e Q Q e ",
+"J J _.' [.Q Q [.& 3 6 P P F W 7.,.e ,.b b [.m ,.m m b m m b b m Q J b ' $ b b Q [.W F o o R W W { c.<.<.<./.<./.<.q P . _.W I P 9 9 *.9 R 3 o ~.*.{ g.5 4 5 5 5 5 4 { 4 H z N N N ].z I { g.5 g.O ] :.W ~ ~ ~ z ].+ @ D 0...-...o 3 H R ..d o o H n z e Q e Q ",
+"{.,.J _.J ,.(.= F ..P :.3 v ,.Q m Q m ) _.J m _.m m m m m m b m Q J ,.Q Q 7.|.Q  .8 F -.P F H i + D 9 ^ _ : S /  .' ) + W I H F F :.9 *.j n :.A g.O 5 4 4 4 4 4 5 7 5 ^ 4.H z $ ].N $ z I 5 h.O { ^ g.:. ., @ $ a y Q {.= o ..H o o o o H o R ..o R @ e Q e e ",
+"' J Q Q _.= H F P P ..; [.e e _.,.{.c _.m ,.,.,.,.m m ,.m m m b m [.|.|.v $ $ b  .n o o +.o ..0...; . v + ' ) ) ~ $ W D i o 0.~.F 6 :.9 :.o ..:.g.{ 5 7 { { { 5 5 7 4 =.] 1.n W z $ z - , I 4.h.g.] ] ] A H , ~ ' {.|.e |.= 0...o ....o H H H o o d _.e b e Q ",
+"' [.|.(.D P 0.-.o F H # {._._.Q e ,.,.,.,.,.,.,.m b ,.m b m ,.m J b Q J  .P E [.~ 0.0...-.o 0.H o ..H W = ; W > ; i ..H ..:.F F ~.:.9 *.:.0.R 8 7 5 0 5 5 O 5 4 5 5 5 5 { ^ g.P N z N $ ]., I g.` g.g.g.g.*. ., $ _.m J e |.W F H H d o o o o o R  .b e b e e ",
+"7.,.+  .F 6 0.o F o E H o I i i ! - ' ,.,.,._._.b m m b b m b m {.,.|.{.i j d ) @ 0.F ....-.+...R ....H H H  .5.H o F :.:.+.P 7 6 F :.9 j R R :.7 { 6.0 7 5 5 5 5 5 5 { 5 g.C g.$.% K z ! N z I { ] h.{ { g.5 o $ . _.m |.e J - 0.0.o o R ..o d n W Q e Q e e ",
+"Q J ~ D 5.i H F 8 :.8 n F F 0...A P % m ,.,.m m m {.m m m m m m b b m Q $ H o $ [.k 0.R P ....o +.n o P 0.o ..F 0...0.~.4 G P 6 ~.:.~.9 j n F ~.4 5 5 7 4 5 5 { 5 *.{ O 8.{ =.g.A D ].].N z ! $ R 4.g.{ 6.h.9.4 W , ' J J Q e e W H 0.R R R o o ..$ 7.Q e e e ",
+"Q Q ,.Q Q |.) ) ~ N N > 3 -.+.4 F k ) Q m ,.,.,.m ,.m b {.m m ,.b m [.7.. I 0.! Q i 8 o o R P R -.+.+.R P :.F o P :.F P 6 7 :.+.6 F :.~.F 0.:.5 5 0 5 6.5 5 5 { 4.*.5 O O 8.O 5 C { I $ $ z z ; N d 4.g.O O 8.O ~.W # @ _.e b b Q = o o d H o o o . e Q e Q Q ",
+",.m _.Q Q J |.Q 7.,.7.Q D :.6 +.W |.e [.|.Q Q [.,.m m m m b ,.m Q c b e b W n  .e + o 0.o R R ....n P P P P P +.+.+.+.+.6 6 7 7 +.F ~.*.*.~.*.5 4 5 7 5 5 5 4 4 5 5 5 { { O { { 5 { { j W @ $ z , $ 3 O h.{ 6.{ O 5 E ~ K y Q b e Q ~ d R o o o D ,.e Q e b e ",
+"Q ,.' ) {.b Q Q m e Q , 0.7 6 H (.Q ,._.b [.,.,.m b m b b m ,.,.b J ,.e e % n H m b  .F H o R ..R P ..n P +.P P P +.+.+.6 6 ~.~.~.:.~.9 *.*.*.4 4 5 5 5 4 4 4 4 5 5 0 { 6.{ { 1.{ g.] ` F ! $ - , ~ ; o *.g.h.4 5 g.4 I % y Q e Q Q b - n o H n % e e Q e Q e ",
+"Q Q . @ J Q e ,.,.e ~ 0.:.F 5.' |.b {.Q Q |.,.|.b b m b m ,.J J J ,.b Q e ' I n $ e , j o 8 8 o R ..R +.P P +.+.F +.P 8 +.F 6 ~.*.~.:.7 *.*.7 A 4 4 4 4 5 5 4 4 4 5 5 5 { { O { { g.O ] ` o , $ - ]., $  .5 g.5 5 { ] A $.~ ' J e Q e {.- ..R o ) e e Q e Q e ",
+"|.e _.) |.Q Q b e v o A 0.5.@ e Q b b |.) ) b ,.b ,.m m m b m m _.,.Q Q e ,.W P  .e {.3 8 R n R P P R P n P P +.P F +.8 +.F F 6 *.7 *.4 4 *.4 4 4 4 5 4 4 5 4 4 4 5 5 { { { { { A { { { ` 4.I $ $ ].; $ , 3 *.g.O *.5 g.p i @ . J |.b e ,.! R $.Q e Q Q e Q e ",
+"b e |.,.Q b Q Q )  .:.0.o D $ @ - W 3.H R > ' {.b b ,.,.b m J J b b ,.Q e Q v d n + Q % 8 R P P R P n P P P P P F +.+.+.+.F +.6 :.:.*.4 4 7 ~.*.4 5 4 5 5 4 4 4 4 4 5 5 { { { O { O O 4.O ] 5 H z % N , $ $  .{ { { *.{ g.F = + . Q Q ,.e b , ! e e b Q e e Q ",
+",.Q |.Q Q b Q J o 9 F ..F 0.H j F 0.0.:.0.$ |.Q b b m m J {.J b Q m ,.Q ,.e {.D 0.i |.{. .o R 8 P +.P R P n P P P +.+.P +.6 F F +.6 *.4 A 7 7 4 4 4 4 A 4 4 4 4 A 4 A 5 4.{ { O ` 4.g.g.4.` ] { P W ~ z z + ~ i A ] 1.4 1.{ +.3 % K J ,.Q e |._.e e b e e e e ",
+"Q Q ,.|.b |._.W A ~.0.R 0.P 0.F R 0.0.R > ) |.{.,.b m _.J b b ,.,.Q Q e Q e e + o n , Q @ H H ..P ..P P P P P P +.P 8 F F F 6 6 :.F ~.4 5 4 4 *.4 4 4 5 5 5 5 4 *.A 4.4.{ { { { { { { { { O g.h.` j ; # , ~ . ~ $.A { *.4 g.O 1. .; K ,.Q Q e e e Q Q Q e e e ",
+"e ,.b |.b b v :.3 D  .i = z % J ; H F .., |.Q b |.b m _._.{.Q Q J Q Q Q Q Q e ) d n H Q |.H H H P P P R P ..P R 8 +.+.F F F F F ~.F F 7 { { 5 *.A 4 4 4 4 A 4 4 *.*.A 4.{ { { O 4.{ O g.] ] g.g.2 { o ~ ~ - z $ @ I { g.4 *.5 4.0 W @ . Q e b Q Q e e Q Q e e ",
+"|.e ,.m e m $ (.m |.m |.Q b Q Q 5.P :.; J b Q |.Q ) _.,.b e e J Q Q b e Q Q Q e ; o j $ Q = n o -.0.6 +...+.P R P P 8 F F :.6 :.F F :.~.7 A 5 { 7 4 5 5 5 4 4 5 A 4.A 4.{ g.{ 4.{ O { 5 A g.h.O 5 2 4. .$ $ - $ % . i { { *.A 4.F % ~ ~ ' _.e Q e |.b Q e e e ",
+"Q ,.|.|.b J m Q b b m b b |.|.@ ..F ..v Q |.|._.z o ; Q e y y e Q b b Q Q Q Q Q ' I o 3 . _. .n H o ..P P R P F P +.+.+.+.F F 6 6 6 :.:.~.4 5 4.4 4 5 5 5 4.4 4 *.A 4.{ 4.{ { { g.{ A ~.~.4.] g.O g.g.4.H + ' , . N -  .p g.4.4.$ ~ D > @ y Q Q e e e Q Q e e ",
+"|.|.b (.x y J b |.J b b m Q (. .8 ..3.y J , W H :.P a ,.J Q ,.b b Q b Q e Q |.e e $ 3 l D Q . E ..H H 0.:.8 o +.8 8 8 F P F :.F :.:.6 ~.9 7 4 5 5 A 4 4 5 5 5 5 *.A 5 4.4.4.{ g.{ *.~.F 0.9 g.h.=.O =.^ 4.3 $ $ $ % $ @ D p A k .  .{ j z @ a c c e e e Q e e ",
+"J |.x = y |.J J m ) J J b |., 0.H R E 5.o P n P F H |.e ,.e Q e J Q Q Q Q Q |.e e ,.- R o @ 7.. ..R o o F :.n R R 0.0.+.8 F :.F F F :.~.~.~.4 5 5 5 4 5 4 A 4 A 7 A 5 4.{ { { { *.F F F :.*.{ g.g.h.O { g.g.0., % ~ ~ a @ k  .. D p ` g $ @ $ a a J Q e e e Q ",
+"J J @ a |.|.J b J y m m |.) 3 j +.F 0.R F :.:.:.n D |.Q [.e b ) J Q |.b Q Q |.Q Q e ) - F H {.Q = o R 3 H F ~.6 8 P 0.8 +.F F :.:.:.6 :.~.*.7 *.4 5 { 5 5 4 4 5 5 4 4 5 { O 5 A :.0.0.:.:.p g.g.O ^ ^ 4 A 2 { P x % ~ + ~ . . - 9 { *.! K v N @ $ @ ) Q e e b ",
+"_.$ x |.|.) J b b m J |.|.= F 0.R F F 8 H i H 0.P % 7.Q |.|.$ d y Q Q Q e Q |.e e Q e . H P D b 7.= P P H o F :.8 8 8 8 0.F F :.6 F ~.~.~.*.*.4 7 5 { { 5 4 4 4 5 5 5 5 { { A 6 0.R n F l A ` g.{ g.h.g.{ { 1.{ i % ' ~ z a v ! { O o % @ $ N @ v $ $ m e e b ",
+"$ $ y |.J ) b |.b b {.Q y 3 8 H F o D W x (. .o H # |.e [.; n P y b Q b e e Q e Q |.e |.~ H n = 7.J w R o o R ..:.F F 8 8 8 F F F :.:.~.*.7 4 4 *.4 5 { { 5 A 7 5 7 5 5 { 4 :.0.F 0.0.n :.4.] ` g.O g.h.g.4.4.] 4. .# ~ ~ $ z ~ o 0.- @ @ v @ v @ ].i z Q e Q ",
+", b Q J [.{.m m J J J Q # 0.R i - @ J ) |.J 3 8 H b Q @ i n 8 P . b Q ,.e e |.e |.e b e Q  .R R - b ' 3 ..H o o :.F F +.F F F 6 F 6 :.~.9 *.*.4 4 4 7 A 5 { 5 7 7 4 5 5 5 7 0...0.0.F 0.j { ] { g.g.g.g.g.g.{ { g.A i + ~ @ . ~ ' W @ a $ $ $ @ $ h g k _.e Q ",
+"b b ,.b b {.{.{.m |.|.J ' ' b b e J . |.e + R ..D $ i n n o o +.x ,.,.e $ > e e Q e Q e e J h j n D b |.D R 3 o H 6 9 F ..P :.:.6 :.6 ~.7 7 7 7 4 5 4 7 5 5 { 5 4 7 5 7 6 P 0.F R 0.R o F A { { 1.{ 1.g.g.g.{ { O P - @ . @ % @ ~ @ ~ $ $ @ @ @ h f d d k ' e ",
+"b b b {.b m J J m |.|.b m b |.b J a # b |.W 0.H ..3 0.F o n 0.+.$ Q Q . $.o @ e Q Q e Q b e c k n o ; Q 7.; 8 0.E 0.:.F +.F F +.6 G 6 ~.7 7 4 7 7 7 5 4 0 5 5 6.5 4 7 6 0.+.P P 0.F F 8 F 4 { { g.{ g.g.1.5 g.g.0.~ x 0.G % ' z % @ a @ $ @ $ N f d f d o ! c ",
+",.{.{.{.{.{.J {.{.|.Q b b b b ) W , ) e e 3 0...H ..G d ; H 0.0.a |.) $.g n  .) e b Q Q Q e e _. .0.H & b e + n ..F :.9 ~.:.:.F 6 :.~.~.~.4 7 4 4 7 5 5 7 7 4 O 5 7 F P +.8 F 0.8 8 0.0.0.9 { h.5 O g.g.5 ] g.7 + , I 0 { I ~ ' $ @ @ $ v a N h R g f f R o - ",
+"b b b {.b b b {.b b b b b b ) v $ (.|.Q _.o o ..F R i + |.> R 0.' ) > j o d n > e e Q b Q e b e _.k P H W {.7.' :.F F :.7 ~.:.F 6 6 6 ~.~.7 7 7 7 4 5 5 5 7 5 5 *.:.P R P 8 P R P R R 8 R F *.{ ` O 4 { h.] n $ = n { 2 A D @ @ ~ @ @ ~ a v ! d d d o d f o f ",
+"{.{.{.b {.{.{.b b b {.J J J (.+ _.J {.b . n d R H ; ) e Q  .F n & $ o P I o H I # e e b Q e e Q e ) D j n i @ |., i F *.9 6 F 6 :.:.~.~.~.*.*.4 4 4 4 5 5 { 4 7 P +.8 P P P 8 8 R 8 F j F F j ~.{ g.g.{ *.i , ; p ` { 7 $.@ . % @ $ @ v ~ ].k g $.f o d k $.g ",
+"{.b {.b b b b b b {.J [.J {.[.) _.J ,.Q ; G H W ) m Q |.J I 8 R E H j k N @.H n I , Q e Q Q e Q Q e J ! o P H i b (.; 3 P 6 :.6 6 :.:.~.~.7 *.7 4 4 4 7 4 5 ~.F H R 8 F 8 8 8 8 8 j F P P j G G *.1.~.D , , 3 A ` =.n - @ ~ % @ $ @ @ $ ! $.f d f $.f o f I d ",
+"b {.J {.b b b b J J b J J b m _._.,.,.J $.I - b |.,.,.,.7.h R P 8 P d ' Q , o 0...o z b e b Q Q e _.Q e , P j j H = b b % ..:.8 :.:.:.~.9 *.*.A *.4 *.4 *.~.F ..o o R 8 8 P 8 P n 8 P P j 9 G F n  .% + D 9 ` O *.I $ ~ @ . ~ ~ ~ @ @ ].$.d d $.g $.$.d o f f ",
+"J {.{.{.b b b b J b |.J _.J J J _.,._._.> J |.Q {.{.,.J ,.k R R P P - Q 7.$ 0.5.o ..H z e e Q Q ,.e e b {.+  .n A 9  .' Q y w ..F :.:.~.9 *.*.A *.*.*.A *.F ..o ..R o R 8 P F 8 n P j :.l 9 o 3.v |.# F { { { 0 i z . $ $ ~ % a a @ - $.g d f $.o d f f f f d ",
+"_.J b b {.{.b J b b J b b J b J b b ,.b ,.J |.|.J ) Q Q Q D n n *.W ,.Q Q b ..o ..E n k Q e m e Q e Q J m Q ) D p j F P D ) |.(.- H 9 *.~.:.~.9 *.A A *.j R R P o o o R n F 8 8 j F :.l n ; (.,._.= o 7 ` =.G W ~ % , % ~ ~ $ $ @ ].$.g d f f d f f f f f f f ",
+"b {.{.J J b {.J m b J m b J b J b b ,.b ,.J J J J b ,._.,.> P :.i + Q e 7.Q i o o R H N 7.e Q e e Q b {.b m ) . ; I :.9 G H = ' |.) ,  .0.9 A 4.A A A ~.:.0.R R H o n j :.j P P P d D $ _.,.' = o P l G P I D % + ~ ~ $ % ~ @ . ].i f d f f f d f f I f I f f ",
+"7.Q J [.[.J b b b b b b J J J J J {.{.,.J _.) x ,.J ) _.7.i 0.D ) {.Q e e e $ ..H n z Q Q 7.e Q e ,.m b m c _.Q |.@ > k o A 7 H  .= . x + $ W  .0...d H H H H H H o o o E  .D > ' _.J ' z  .P l p l d ! @ y K ~ ~ ~ % % ~ $ z ! f f d d f f d o f f f f f f f ",
+"7.Q ,.J _.[.[.b b b J b J J J J b b {.{.b [.) ' _.) J |.Q D D b |.b {.Q e e ) o R  .) 7.7.7.7.|.J Q ,._._.J _.m |.b J ) + i j p G :.F 0.H W , @ ) b |.Q |.b b ,.Q ,.,.,.,.b {.[.z @.n j j l l l k z . J |.Q _.@ N $ @ . @ ! I n n R g d f f f o I $.f $.$.f f ",
+"Q 7.Q |.J ) [.b m m b m b m J J b b J J J {._.(.@ ) |.,.[.. _.Q b J J e Q e Q $.o @ Q 7.e 7.|.,.[.|.m ) J b _._.) J ,.b {.c ~ W j G p 7 G ~.9 7 D W , $ # @ ' (.(.. # * >  .o j G j j j 9 P i ~ ' ) J J J J J J $ ~ K K - I P P P n o o o d f $.$.f $.f f I I ",
+",.7.e Q ,._._.{.{.J b b b b J J b b {.J [.{.b J ' a ' b |.|.|.b J J b e e Q Q ; i b e Q e e [.J |.[.' c m b m Q _.c _.c J {.J _.' , H :.A { *.:.F F P 8 0.8 8 n o R P j j G j j j l l f - a _.c J c ) c _.{.{.,.c @ z > $.o n o g o o f f o f $.f f I f $.$.f ",
+",.Q 7.Q Q ,.[.) ) J b b b b b b J J J m [.J J b J @ @ [.e b _.J [._.Q e e e e v . e e Q e ,.) b b . . [.,.J m Q b b J b _.y y _.J ) ' @ - i d o n n F P P 0.n n n P j j :.P o H > z . _._.c y J y y c J b Q b c Q ' h d g I I n g o f f f f f f $.$.$.$.f f $.",
+"Q b Q Q Q e b ) [.[.J b b b b J _.J J m [.) J m J b x . m b _.J ) _.Q Q e e e J e Q e e Q J J J (.+ x [.[._.J _._.m m J c c J _.) m _.(.) b b b + ~ ; W ! ; ! D ! ; ; ! - N . c m ,.b J c ) y c c c c c c b b J b J $ $.n d I d n g f $.$.$.f f f f f $.$.f f ",
+"Q Q Q Q Q ,.Q Q ) (.[.b b b m J J J J b m m [.J J b b ) ) _.J J [.[._.Q e Q |.Q e e Q ,.b ,._.' a y ) [.) ) ) [.m m {._.c y ) c c ) ) _.m b b {.|.,.,.|.|.,.|.Q 7.Q b b m J J _.J J c c ) c c _.y c c J J m J J J _.e {.i o $.$.$.d g f k $.$.$.$.k k $.$.$.I ",
+"Q Q Q Q Q Q Q Q [.) ) [.b b b J J b J J {.J [.[.b [._.b ) v x b ) J ,.{.,.e e ,.e ,.[.m {.[.' . ) J J J ) ) (.' ' ' ) J m J J ) y c J b b ,.b b b Q ,.b b b b ,.Q b m J ) c c _._._.c c c c c c c _._.c c c c c c ,.b b y ! g f f $.$.$.I $.$.d $.$.$.$.$.$.f ",
+"Q Q Q Q Q |.Q |.,.[.(.(.[.b b J b m J J J J m m b ) [.b m @ V y b J J |.|.b b m |.m _.{.J ) ' ' J J J ) (.' ' ' ' . . ' _._._._.y c b ,.|.b b m ,.b b b b b ,.b b b J y c ) c J c c J J J {.c c c ) y ' K y y c c Q J Q e K $.d I k i f k $ $ $.f $.$.$.$.$.$.",
+"Q Q Q Q Q ,.Q Q Q ,.J (.) ) {.b b b b J J {.{.b ) ) J J {._.x $ _.J _.|.7._.. ,.b |.|.|.J ' (.J J _._.) ) ) ) ' ' ' . . K ' K y c m Q 7.Q b J b b b m m m b b b Q b b c c J _.b J J J J c c c y K a a a . y c J J J b Q Q Q a i f f $.k $ e e ! $.$.$.$.$.$.$.",
+"Q Q Q Q Q Q Q Q Q Q |.J (.(.[.b b b b b J J m m ) b J ) m |._.@ % (.J b |.|.m [.{.|.Q J ) _.b b b [.(.y ) ) ) ) ' ) ) ' + ~ @ @ b b Q Q ,.m m m ,.b b J J J ,.|.b b {.{.J c J c b {.c c y K @ @ $ ~ v . ' y c J J J b ,.c e e a k I k $ Q e y i $.k k k k k $.",
+"Q Q Q Q Q Q |.Q |.Q Q |.) ' (.J J J m b b J J {.m m J _._.[.J J v # _.|.J {.b ) b b {.) ) J b J b J [.) ) ) ) (.. ' ' . @ ~ K _.e e Q Q b b J J m m J J J J b b b b c y y ' y ' K K a a @ @ $ $ @ ~ a K ' ) ) c c J b Q Q Q Q e K z $ e e a i $.$.k k k k k $.",
+"Q Q Q Q Q Q Q |.,.Q 7.Q |.[.) ' ) _.b b b b J J {.{.J J [._.b b b a @ b Q ) x ) b J y ) {.|.b ) b {.) ) ) ) ' ) ' ' . @ ~ K b e e e Q b b m J J J c c y ) c _.J Q {.c a @ v a K @ @ @ @ @ @ a a @ a a K y y c c _.J m b e Q b e e b b e e % $.i i k i i k k k "};
Index: /orxonox/branches/levelloader/src/gui/orxonox_gui.cc
===================================================================
--- /orxonox/branches/levelloader/src/gui/orxonox_gui.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/gui/orxonox_gui.cc	(revision 3417)
@@ -0,0 +1,116 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, 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.  
+
+
+   ### File Specific:
+   main-programmer: Benjamin Grauer
+
+*/
+
+#include "orxonox_gui.h"
+#include "orxonox_gui_video.h"
+#include "orxonox_gui_audio.h"
+#include "orxonox_gui_exec.h"
+#include "orxonox_gui_flags.h"
+#include "orxonox_gui_banner.h"
+#include "orxonox_gui_keys.h"
+
+  Window* orxonoxGUI;
+  OrxonoxGuiVideo* video;
+  OrxonoxGuiAudio* audio;
+  OrxonoxGuiExec* exec;
+  OrxonoxGuiFlags* flags;
+  OrxonoxGuiBanner* banner;
+  OrxonoxGuiKeys* keys;
+
+int main( int argc, char *argv[] )
+{
+  OrxonoxGui* orxonoxgui = new OrxonoxGui(argc, argv);
+  return 0;
+}
+
+/* ORXONOXGUI */
+
+/**
+   \brief Initializes the Gui
+*/
+OrxonoxGui::OrxonoxGui (int argc, char *argv[])
+{
+#ifdef HAVE_GTK2
+  initGTK(argc, argv);
+#endif /* HAVE_GTK2 */
+  orxonoxGUI = new Window( "Grafical OrxOnoX loader, "PACKAGE_VERSION);
+#ifdef HAVE_GTK2
+  orxonoxGUI->connectSignal ("destroy", orxonoxGUI->orxonox_gui_quit);
+  orxonoxGUI->connectSignal ("delete_event", orxonoxGUI->orxonox_gui_quit);
+#endif /* HAVE_GTK2 */
+  
+  Box* windowBox = new Box ('h');
+
+  banner = new OrxonoxGuiBanner();
+  windowBox->fill (banner->getWidget());
+  
+  Box* optionBox = new Box ('v');
+  
+  Box* avBox = new Box ('h');
+
+  video = new OrxonoxGuiVideo ();
+  avBox->fill (video->getWidget ());
+  audio = new OrxonoxGuiAudio ();
+  avBox->fill (audio->getWidget ());
+      
+  optionBox->fill (avBox);
+
+  keys = new OrxonoxGuiKeys ();
+  optionBox->fill (keys->getWidget ());
+
+  exec = new OrxonoxGuiExec (orxonoxGUI);
+  optionBox->fill (exec->getWidget ());
+
+  flags = new OrxonoxGuiFlags (orxonoxGUI);
+
+
+  optionBox->fill (flags->getWidget ());
+  windowBox->fill (optionBox);
+  
+  orxonoxGUI->fill (windowBox);
+  flags->setTextFromFlags (orxonoxGUI);
+
+  exec->setFilename ("~/.orxonox.conf");
+  exec->readFromFile (orxonoxGUI);
+  //  orxonoxGUI->walkThrough(orxonoxGUI->listOptions);
+
+  orxonoxGUI->showall ();
+
+  
+#ifdef HAVE_GTK2
+  mainloopGTK();
+#else /* HAVE_GTK2 */
+  cout << " Listing all the Orxonox Options: \n";
+  cout << "  #############################\n";
+  orxonoxGUI->walkThrough(orxonoxGUI->listOptions);
+
+  cout << "\nDo you want me to save the the above values now? [Yn] ";
+  char c = getchar();
+  if ((c == 'y' || c == 'Y' || c== 10) && exec->shouldsave())
+    exec->writeToFile (Window::mainWindow);
+ 
+#endif /* HAVE_GTK2 */
+
+}
Index: /orxonox/branches/levelloader/src/gui/orxonox_gui.h
===================================================================
--- /orxonox/branches/levelloader/src/gui/orxonox_gui.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/gui/orxonox_gui.h	(revision 3417)
@@ -0,0 +1,34 @@
+/*!
+ \file orxonox_gui.h
+ \brief Creation of the Gui
+
+ \todo way to start gui without GTK (textmode) AND IMPROOVE
+ \todo curl interface to Download cool stuff
+
+ \todo widgets save themselves
+ \todo good way to step through all the Widgets
+ \todo label -> protected : getlabel function
+*/
+
+#ifndef _ORXONOX_GUI_H
+#define _ORXONOX_GUI_H
+
+#include <iostream>
+using namespace std;
+
+#include "orxonox_gui_gtk.h"
+
+#include <stdlib.h>
+
+//! Class that creates the OrxonoxGui
+class OrxonoxGui
+{
+ public:
+  OrxonoxGui (int argc, char *argv[]);
+  ~OrxonoxGui ();
+
+};
+
+
+
+#endif /* _ORXONOX_GUI_H */
Index: /orxonox/branches/levelloader/src/gui/orxonox_gui_audio.cc
===================================================================
--- /orxonox/branches/levelloader/src/gui/orxonox_gui_audio.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/gui/orxonox_gui_audio.cc	(revision 3417)
@@ -0,0 +1,64 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, 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.  
+
+
+   ### File Specific:
+   main-programmer: Benjamin Grauer
+
+*/
+
+#include "orxonox_gui_audio.h"
+
+/**
+   \brief Creates an Audio-Frame
+*/
+OrxonoxGuiAudio::OrxonoxGuiAudio ()
+{
+  audioFrame = new Frame ("Audio-Options:");
+  audioBox = new Box ('v');
+  audioFrame->setGroupName ("audio");
+  
+  enableSound = new CheckButton ("Disable Sound");
+  enableSound->setFlagName ("no-sound", 0);
+  enableSound->saveable = true;
+  audioBox->fill (enableSound);
+  Label* musicVolumeLabel = new Label ("Music Volume");
+  audioBox->fill (musicVolumeLabel);
+  musicVolume = new Slider ("Music Volume", 0, 100);
+  musicVolume->setFlagName ("music-volume", "m", 80);
+  musicVolume->saveable = true;
+  audioBox->fill (musicVolume);
+  Label* effectsVolumeLabel = new Label ("Effects Volume");
+  audioBox->fill (effectsVolumeLabel);
+  effectsVolume = new Slider ("Effects Volume", 0, 100);
+  effectsVolume->setFlagName ("effects-volume", "e", 80);
+  effectsVolume->saveable = true;
+  audioBox->fill (effectsVolume);
+
+  audioFrame->fill (audioBox);
+}
+
+/**
+   \brief Return the Frame
+   \return Returns the Audio-frame
+*/
+Widget* OrxonoxGuiAudio::getWidget ()
+{
+  return audioFrame;
+}
Index: /orxonox/branches/levelloader/src/gui/orxonox_gui_audio.h
===================================================================
--- /orxonox/branches/levelloader/src/gui/orxonox_gui_audio.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/gui/orxonox_gui_audio.h	(revision 3417)
@@ -0,0 +1,26 @@
+/*!
+  \file orxonox_gui_audio.h
+  \brief File that holds the class that creates the Audio-Options.
+*/
+
+#ifndef _ORXONOX_GUI_AUDIO_H
+#define _ORXONOX_GUI_AUDIO_H
+
+#include "orxonox_gui.h"
+
+//! Class that creates the Audio-Options.
+class OrxonoxGuiAudio
+{
+ private:
+  Frame* audioFrame;        //!< The Frame that holds the audio Options.
+  Box* audioBox;            //!< The Box that holds the audio Options.
+  CheckButton* enableSound; //!< A Ckeckbutton for enabling Sound.
+  Slider* musicVolume;      //!< A Slider for music volume.
+  Slider* effectsVolume;    //!< A Slider for effects volume.
+ public:
+  OrxonoxGuiAudio ();
+  ~OrxonoxGuiAudio ();
+  
+  Widget* getWidget ();
+};
+#endif /* _ORXONOX_GUI_AUDIO_H */
Index: /orxonox/branches/levelloader/src/gui/orxonox_gui_banner.cc
===================================================================
--- /orxonox/branches/levelloader/src/gui/orxonox_gui_banner.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/gui/orxonox_gui_banner.cc	(revision 3417)
@@ -0,0 +1,80 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, 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.  
+
+
+   ### File Specific:
+   main-programmer: Benjamin Grauer
+
+*/
+
+#include "orxonox_gui_banner.h"
+
+/**
+   \brief Creates a new BannerEventBox and its content.
+*/
+OrxonoxGuiBanner::OrxonoxGuiBanner ()
+{
+  // Banner Itself //
+  bannerEventBox = new EventBox ("BannerEventBox");
+  bannerImage = new Image ("banner.xpm");
+  bannerEventBox->fill(bannerImage);
+
+  // Banner Window //
+  logoWindow = new Window("Logo");
+
+#ifdef HAVE_GTK2
+  bannerEventBox->connectSignal ("button_press_event", logoWindow, Window::windowOpen);
+
+  logoWindow->connectSignal("destroy", logoWindow, Window::windowClose);
+  logoWindow->connectSignal("delete_event", logoWindow, Window::windowClose);
+#endif /* HAVE_GTK2 */
+  logoEventBox = new EventBox();
+  logoBox = new Box('v');
+  logoLabel = new Label("OrxOnoX, Version: " PACKAGE_VERSION);
+  logoImage = new Image("banner.xpm");
+  logoEventBox->fill(logoImage);
+  
+  logoBox->fill(logoLabel);
+  logoBox->fill(logoEventBox);
+#ifdef HAVE_GTK2
+  logoEventBox->connectSignal("button_press_event",logoWindow, Window::windowClose);
+#endif /* HAVE_GTK2 */
+
+  logoWindow->fill (logoBox);
+  
+  Window::addWindow (logoWindow);
+}
+
+/**
+   \brief Destructs it.
+*/
+OrxonoxGuiBanner::~OrxonoxGuiBanner ()
+{
+}
+
+/**
+   \brief Returns an EventBox
+   \return The EventBox, that holds the Banner.
+*/
+Widget* OrxonoxGuiBanner::getWidget ()
+{
+  return bannerEventBox;
+}
+
+
Index: /orxonox/branches/levelloader/src/gui/orxonox_gui_banner.h
===================================================================
--- /orxonox/branches/levelloader/src/gui/orxonox_gui_banner.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/gui/orxonox_gui_banner.h	(revision 3417)
@@ -0,0 +1,39 @@
+/*!
+  \file orxonox_gui_banner.h
+  \brief  File that holds the class that creates the Banner-Image.\n
+  This is Commercial :-)
+*/
+
+#ifndef _ORXONOX_GUI_BANNER_H
+#define _ORXONOX_GUI_BANNER_H
+
+#include "orxonox_gui.h"
+
+//! Class that creates the Banner-Image
+class OrxonoxGuiBanner
+{
+ private:
+  // the banner Frame
+  Frame* bannerFrame;       //!< The frame that holds the Banner.
+  Box* bannerBox;           //!< The box that holds the Banner.
+  EventBox* bannerEventBox; //!< an Image needs an EventBox to catch klicks.
+  Image* bannerImage;       //!< The Image for the Banner.
+  Label* bannerLabel;       //!< The Label of the Banner.
+
+  // the logo Window
+  Window* logoWindow;       //!< The Window that holds the Orxonox-CrewLogo.
+  EventBox* logoEventBox;   //!< The EventBox that holds the Orxonox-CrewLogo. it has to be an eventbox, because Images can not receive clicks.
+  Box* logoBox;             //!< The Box that holds the Orxonox-CrewLogo
+  Image* logoImage;         //!< The Orxonox-CrewLogo-Image
+  Label* logoLabel;         //!< The Label for the Orxonox-CrewLogo
+
+ public:
+  OrxonoxGuiBanner ();
+  ~OrxonoxGuiBanner ();
+
+  Widget* getWidget ();
+
+};
+
+
+#endif /* _ORXONOX_GUI_BANNER_H */
Index: /orxonox/branches/levelloader/src/gui/orxonox_gui_exec.cc
===================================================================
--- /orxonox/branches/levelloader/src/gui/orxonox_gui_exec.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/gui/orxonox_gui_exec.cc	(revision 3417)
@@ -0,0 +1,300 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, 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.  
+
+
+   ### File Specific:
+   main-programmer: Benjamin Grauer
+
+*/
+
+#include "orxonox_gui_exec.h"
+#include <iostream>
+#include <string>
+
+/** 
+    \brief Creates the Exec-Frame
+    \param orxonoxGUI ExecFrame needs to know where to get the Options from
+*/
+OrxonoxGuiExec::OrxonoxGuiExec (Window* orxonoxGUI)
+{
+  configFile = (char*)malloc (512*sizeof (char));
+
+  execFrame = new Frame ("Execute-Tags:");
+  execBox = new Box ('v');
+  execFrame->setGroupName ("misc");
+  
+  start = new Button ("Start");
+#ifdef HAVE_GTK2
+  start->connectSignal ("clicked", startOrxonox);
+#endif /* HAVE_GTK2 */
+  execBox->fill (start);
+  saveSettings = new CheckButton ("Save Settings");
+  saveSettings->value = 1;
+  saveSettings->saveable = true;
+  execBox->fill (saveSettings);
+  verboseMode = new Menu ("verbose mode", "no output", "verbose", "debug", "lastItem");
+  verboseMode->setFlagName ("verbose", "v", 0);
+  verboseMode->saveable = true;
+  execBox->fill (verboseMode);
+  alwaysShow = new CheckButton ("Always Show this Menu");
+  alwaysShow->setFlagName ("gui", "g", 0);
+  alwaysShow->saveable = true;
+  execBox->fill (alwaysShow);
+  quit = new Button ("Quit");
+#ifdef HAVE_GTK2
+  quit->connectSignal ("clicked", orxonoxGUI->orxonox_gui_quit);
+#endif /* HAVE_GTK2 */
+  execBox->fill (quit);
+
+  execFrame->fill (execBox);
+}
+
+/**
+   \brief Return the Frame
+   \return Returns the Exec-frame
+*/
+Widget* OrxonoxGuiExec::getWidget ()
+{
+  return execFrame;
+}
+
+/* FILE HANDLING */
+
+/**
+   \brief Sets the location of the configuration File.\n
+   * The name will be parsed from ~/ to /home/[username] on unix and c:/Documents and Settings/username/Settings/ on Windows
+   \param filename the location of the configFile
+*/
+void OrxonoxGuiExec::setFilename (char* filename)
+{
+  char* buffer = (char*) malloc (512*sizeof(buffer));
+  sprintf (buffer, "%s", filename);
+  if (!strncmp (buffer, "~/", 2))
+  {
+#ifdef __WIN32__
+    sprintf (configFile, "%s/%s", getenv ("USERPROFILE"), buffer+2);
+#else
+    sprintf (configFile, "%s/%s", getenv ("HOME"), buffer+2);
+#endif
+  }
+  else if (buffer)
+    sprintf(configFile, "%s", buffer);
+  delete buffer;
+}
+
+/**
+   \brief checks if a option should be saved.
+   \return 1 if it should 0 if not/
+*/
+int OrxonoxGuiExec::shouldsave ()
+{
+  return (static_cast<Option*>(saveSettings)->value);
+}
+
+/** 
+    \brief Saves the configuration-file to the Disk.\n
+    \param widget from which Widget on should be saved.
+
+    this Function only opens and closes the file, in between OrxonoxGuiExec::writeFileText (Widget* widget) will execute the real writing process.
+*/
+void OrxonoxGuiExec::writeToFile (Widget* widget)
+{
+  CONFIG_FILE = fopen (configFile, "w");
+  if (CONFIG_FILE)
+    writeFileText (widget, 0);
+  fclose (CONFIG_FILE);
+}
+
+/**
+   \brief Actually writes into the configuration file to the disk.
+   \param widget from which Widget on should be saved.
+   \param depth initially "0", and grows higher, while new Groups are bundeled.
+*/
+void OrxonoxGuiExec::writeFileText (Widget* widget, int depth)
+{
+  int counter = 0;
+  while (counter < depth && ((widget->isOption>0
+			      && (static_cast<Option*>(widget)->saveable) )
+			     || (widget->isOption<0
+				 && static_cast<Packer*>(widget)->getGroupName())))
+    {
+      fprintf (CONFIG_FILE, "  ", depth);
+      counter++;
+    }
+  
+  // check if it is a Packer, and if it is, check if it has a name and if there is something in it.
+  if (widget->isOption <0)
+    {
+      if (static_cast<Packer*>(widget)->getGroupName())
+	{
+	  fprintf (CONFIG_FILE, "[%s]\n", static_cast<Packer*>(widget)->getGroupName());
+	  writeFileText (static_cast<Packer*>(widget)->down, depth+1);
+	  fprintf(CONFIG_FILE, "\n");
+	}
+      else
+	{
+	  writeFileText (static_cast<Packer*>(widget)->down, depth);
+	}
+    } 
+  //  if (widget->isOption == 0)
+  //    printf ("%s\n",widget->label);
+  if (widget->isOption >= 1)
+    if  (static_cast<Option*>(widget)->saveable)
+      {
+	char Buffer[256];
+	char* space2under;
+	strcpy (Buffer, static_cast<Option*>(widget)->label);
+	if (strchr (Buffer, '_'))
+	  cout << "Warning Optionname" << Buffer << " is not Valid for Saving, because it includes an underscore" << endl;
+	while (space2under = strchr(Buffer, ' '))
+	  {
+	    space2under[0] = '_';
+	  }
+	if (widget->isOption <=3)
+	  fprintf (CONFIG_FILE, "%s = %d\n", Buffer, static_cast<Option*>(widget)->value);
+	else if (widget->isOption == 5)
+	  fprintf (CONFIG_FILE, "%s = %s\n", Buffer, static_cast<OptionLabel*>(widget)->cValue);
+      }
+
+  if (widget->next != NULL)
+    writeFileText (widget->next, depth);
+}
+
+/**
+   \brief Reads in Configuration Data.
+   \param widget from which Widget on should be saved.
+*/
+void OrxonoxGuiExec::readFromFile (Widget* widget)
+{
+  CONFIG_FILE = fopen (configFile, "r");
+  if (CONFIG_FILE)
+    {
+      Widget* groupWidget = widget;
+      char Buffer[256] = "";
+      char Variable[256]= "";
+      char* Value;
+      while (fscanf (CONFIG_FILE, "%s", Buffer) != EOF)
+	{
+	  // group-search //
+	  if (!strncmp (Buffer, "[", 1))
+	    {
+	      if ((groupWidget = locateGroup (widget, Buffer, 1))==NULL)
+		{
+		  cout << "!!There is no group called " << Buffer << " in this GUI.\n First best Widget will get the Infos assigned.\n Config-File will be updated in next Save\n";
+		  groupWidget = widget;
+		}
+	    }
+	  // option-setting //
+	  if (!strcmp (Buffer, "="))
+	    {
+	      char* under2space;
+	      while (under2space = strchr(Variable, '_'))
+		{
+		  sprintf (under2space, " %s", under2space+1);
+		}
+	      
+	      fscanf (CONFIG_FILE, "%s", Buffer);
+	      Value = Buffer;
+	      readFileText (groupWidget, Variable, Value, 0);
+	      sprintf (Variable, "");
+	    }
+	  sprintf (Variable, "%s", Buffer);
+	}
+      widget->walkThrough(widget->setOptions);
+    }
+}
+/**
+   \brief Maps Confugurations to the Options.
+   \param widget which widget downwards
+   \param variableName the name of the Variable that should be set up.
+   \param variableValue the Value of the Variable that should be set up
+   \param depth the depth of the local Widget
+*/
+void OrxonoxGuiExec::readFileText (Widget* widget, char* variableName, char* variableValue, int depth)
+{
+  if (widget->isOption >= 1 && widget->isOption <= 3)
+    {
+      if (!strcmp (static_cast<Option*>(widget)->label, variableName))
+	static_cast<Option*>(widget)->value = atoi(variableValue);
+    }
+  else if (widget->isOption == 5)
+    {
+       if (!strcmp (static_cast<Option*>(widget)->label, variableName))
+	static_cast<OptionLabel*>(widget)->setValue(variableValue);
+    }
+  if (widget->isOption < 0)
+    {
+      readFileText (static_cast<Packer*>(widget)->down, variableName, variableValue, depth+1);
+    } 
+
+  if (widget->next != NULL && depth !=0)
+    readFileText (widget->next, variableName, variableValue, depth);
+}
+
+/**
+   \brief Locates a Group.
+   \param widget The Widget from where to search from
+   \param groupName The GroupName for which to search.
+   \param depth The Depth of the search seen from the first widget we searched from.
+   \returns The Widget that holds the Group, or the NULL if the Group wasn't found.
+*/
+Widget* OrxonoxGuiExec::locateGroup(Widget* widget, char* groupName, int depth)
+{
+  Widget* tmp;
+
+  // removes the trailing and ending [ ].
+  if (!strncmp (groupName, "[", 1))
+    {
+      groupName = groupName+1;
+      groupName[strlen(groupName)-1] = '\0';
+    }
+
+  if (widget->isOption < 0)
+    {
+      if (static_cast<Packer*>(widget)->getGroupName() && !strcmp(groupName, static_cast<Packer*>(widget)->getGroupName()))
+	{
+	  return widget;
+	}
+      else
+	{
+	  if ((tmp = locateGroup (static_cast<Packer*>(widget)->down, groupName, depth+1)) != NULL)
+	    return tmp;
+	}
+    } 
+  
+  if (widget->next != NULL && depth != 0)
+    {
+      if ((tmp = locateGroup (widget->next, groupName, depth)) != NULL)
+	return tmp;
+    }
+  return NULL;
+}
+
+#ifdef HAVE_GTK2
+/**
+   \brief Starts ORXONOX. (not really implemented yet, but the function is there.\n
+   This is a Signal and can be executed through Widget::signal_connect
+   \param widget the widget that executed the start command
+   \param data additional data
+*/
+gint startOrxonox (GtkWidget *widget, Widget* data)
+{
+  cout << "Starting Orxonox" <<endl;
+}
+#endif /* HAVE_GTK2 */
Index: /orxonox/branches/levelloader/src/gui/orxonox_gui_exec.h
===================================================================
--- /orxonox/branches/levelloader/src/gui/orxonox_gui_exec.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/gui/orxonox_gui_exec.h	(revision 3417)
@@ -0,0 +1,45 @@
+/*!
+  \file orxonox_gui_exec.h
+  \brief File that holds the class that creates the execute-Options.
+*/
+
+#ifndef _ORXONOX_GUI_EXEC_H
+#define _ORXONOX_GUI_EXEC_H
+
+#include "orxonox_gui.h"
+#include <stdio.h>
+using namespace std;
+
+//! Class that creates the execute-Options.
+class OrxonoxGuiExec
+{
+ private:
+  Frame* execFrame;            //!< The Frame that holds the ExecutionOptions.
+  Box* execBox;                //!< The Box that holds the ExecutionOptions.
+  Button* start;               //!< The start Button of orxonox.
+  CheckButton* saveSettings;   //!< A CheckBox for if the Options should be saved.
+  Menu* verboseMode;           //!< A Menu for setting the verbose-Mode. \todo setting up a verbose-class.
+  CheckButton* alwaysShow;     //!< A CheckButton, for if orxonox should start with or without gui.
+  Button* quit;                //!< A Button to quit the Gui without starting orxonox.
+  char* configFile;            //!< The name of the .orxonox.conf(ig)-file.
+  FILE* CONFIG_FILE;           //!< Filehandler for reading and writing.
+
+ public:
+  OrxonoxGuiExec (Window* orxonoxGUI);
+  ~OrxonoxGuiExec ();
+  
+  Widget* getWidget ();
+  
+  void setFilename (char* filename);
+  int shouldsave ();
+  void writeToFile (Widget* widget);
+  void writeFileText (Widget* widget, int depth);
+  void readFromFile (Widget* widget);
+  void readFileText (Widget* widget, char* variableName, char* variableValue, int depth);
+  Widget* locateGroup(Widget* widget, char* groupName, int depth);
+
+};
+#ifdef HAVE_GTK2
+  gint startOrxonox (GtkWidget *widget, Widget* data);
+#endif /* HAVE_GTK2 */
+#endif /* _ORXONOX_GUI_EXEC_H */
Index: /orxonox/branches/levelloader/src/gui/orxonox_gui_flags.cc
===================================================================
--- /orxonox/branches/levelloader/src/gui/orxonox_gui_flags.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/gui/orxonox_gui_flags.cc	(revision 3417)
@@ -0,0 +1,105 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, 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.  
+
+
+   ### File Specific:
+   main-programmer: Benjamin Grauer
+
+*/
+
+#include "orxonox_gui_flags.h"
+
+/**
+   \brief Creates the Flags-Frame
+   \param widget The Widget from which the data will be parsed
+*/
+OrxonoxGuiFlags::OrxonoxGuiFlags (Widget* widget)
+{
+  flagText = (char*) malloc (1024);
+
+  flagsFrame = new Frame ("Orxonox-Startup-Flags:");
+  flagsBox = new Box ('v');
+
+  flagsLabel = new Label ();
+  flagsLabel->setSize (260,60);
+  flagsBox->fill (flagsLabel);
+  shortFlags = new CheckButton ("shortFlags");
+  flagsBox->fill (shortFlags);
+
+  flagsFrame->fill (flagsBox);
+}
+
+/**
+   \brief Function to return the Frame that holds the Flagtext.
+   \returns Frame that holds the Flagtext.
+*/
+Widget* OrxonoxGuiFlags::getWidget ()
+{
+  return flagsFrame;
+}
+
+/**
+   \brief Sets the Flags from widget downwards.
+   \param widget the Widget from which on to scan for deeper Options and their settings.
+*/
+void OrxonoxGuiFlags::setTextFromFlags (Widget* widget)
+{
+  sprintf (flagText, "");
+  strcat (flagText, "orxonox");
+  FlagsText (widget);
+  flagsLabel->setText (flagText);
+}
+
+/** 
+    \brief this actually sets the flagtext, and appends it to flagText
+    \param widget like OrxonoxGuiFlags::setTextFromFlags(widget)
+*/
+void OrxonoxGuiFlags::FlagsText(Widget* widget)
+{
+  if (widget->isOption >= 1)
+    if  (static_cast<Option*>(widget)->value != static_cast<Option*>(widget)->defaultValue && (static_cast<Option*>(widget)->flagName || static_cast<Option*>(widget)->flagNameShort ))
+      {
+	if (shortFlags->isActive())
+	  {
+	    strcat (flagText, " -");
+	    strcat (flagText, static_cast<Option*>(widget)->flagNameShort);
+	  }
+	else
+	  {
+	    strcat (flagText, " --");
+	    strcat (flagText, static_cast<Option*>(widget)->flagName);
+	  }
+	if (static_cast<Option*>(widget)->isOption == 2)
+	  {
+	    sprintf (flagText, "%s=%i", flagText, static_cast<Option*>(widget)->value);
+	  }
+      }
+  switch (widget->isOption)
+    {
+    case -1:
+      FlagsText (static_cast<Container*>(widget)->down);
+      break;
+    case -2:
+      FlagsText (static_cast<Box*>(widget)->down);
+      break;
+    } 
+  
+  if (widget->next != NULL)
+    FlagsText (widget->next);
+}
Index: /orxonox/branches/levelloader/src/gui/orxonox_gui_flags.h
===================================================================
--- /orxonox/branches/levelloader/src/gui/orxonox_gui_flags.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/gui/orxonox_gui_flags.h	(revision 3417)
@@ -0,0 +1,30 @@
+/*!
+  \file orxonox_gui_flags.h
+  \brief File that holds the class that creates the flags-Text.
+*/
+
+#ifndef _ORXONOX_GUI_FLAGS_H
+#define _ORXONOX_GUI_FLAGS_H
+
+#include "orxonox_gui.h"
+
+//! Class that creates the flags-Text.
+class OrxonoxGuiFlags
+{
+ private:
+  Frame* flagsFrame;          //!< The Frame that holds the flagsDisplay.
+  Box* flagsBox;              //!< The Box that holds the flagsDisplay.
+  CheckButton* shortFlags;    //!< CheckButton to change the display of short and long flags \todo show long if long not availible...
+  Label* flagsLabel;          //!< The Label of the Flags
+  char* flagText;             //!< The Text of the Label. \todo Delete when Object is destroyed.
+
+ public:
+  OrxonoxGuiFlags (Widget* widget);
+  ~OrxonoxGuiFlags ();
+
+  void setTextFromFlags (Widget* widget);
+  void OrxonoxGuiFlags::FlagsText(Widget* widget);
+  
+  Widget* getWidget ();
+};
+#endif /* _ORXONOX_GUI_FLAGS_H */
Index: /orxonox/branches/levelloader/src/gui/orxonox_gui_gtk.cc
===================================================================
--- /orxonox/branches/levelloader/src/gui/orxonox_gui_gtk.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/gui/orxonox_gui_gtk.cc	(revision 3417)
@@ -0,0 +1,1142 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, 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.  
+
+
+   ### File Specific:
+   main-programmer: Benjamin Grauer
+
+*/
+
+
+#include <iostream>
+
+#include "orxonox_gui_gtk.h"
+
+
+using namespace std;
+
+// temporarily.
+#include "orxonox_gui_flags.h"
+#include "orxonox_gui_exec.h"
+extern Window* orxonoxGUI;
+extern OrxonoxGuiFlags* flags;
+extern OrxonoxGuiExec* exec;
+
+#ifdef HAVE_GTK2
+/**
+   \brief Initializes the Guis GTK-stuff.
+   \param argc the argument count.
+   \param argv The Argument strings.
+*/
+bool initGTK(int argc, char *argv[])
+{
+  gtk_init (&argc, &argv);
+  gtk_rc_parse( "rc" );
+}
+
+/**
+   \brief enters the GTK-main-loop
+*/
+bool mainloopGTK(void)
+{
+  gtk_main();
+}
+#endif /* HAVE_GTK2 */
+
+/* WIDGET */
+
+/**
+   \brief deletes any given Widget
+   This is still pretty crappy.
+*/
+Widget::~Widget()
+{
+  //  cout << "hiding: " <<this->label <<"\n";
+  this->hide();
+  //  cout << "check if Packer: "<<this->label <<"\n";
+  if (this->isOption < 0)
+    {
+      //  cout << "get Down "<<this->label <<"\n";
+      static_cast<Packer*>(this)->down->~Widget();
+    }
+  //  cout << "next != NULL?: " <<this->label <<"\n";
+  if (this->next != NULL)
+    this->next->~Widget();
+  cout << "delete Widget: " <<this->label <<"\n";
+  //  delete widget;
+}
+
+/**
+   \brief Initializes a widget.
+   Initializes the next Pointer and the other Widget-specific Defaults.
+*/
+void Widget::init()
+{
+  next = NULL;
+  label = NULL;
+  return;
+}
+
+/**
+   \brief makes the widget visible.
+*/
+void Widget::show()
+{
+#ifdef HAVE_GTK2
+  gtk_widget_show (this->widget);
+#endif /* HAVE_GTK2 */
+}
+
+/**
+   \brief hides the widget.
+*/
+void Widget::hide()
+{
+#ifdef HAVE_GTK2
+  gtk_widget_hide (this->widget);
+#endif /* HAVE_GTK2 */
+}
+
+/**
+   \brief Sets the resolution of a specific widget to the given size.
+   \param width the width of the widget to set.
+   \param height the height of the widget to set.
+*/
+void Widget::setSize(int width, int height)
+{
+#ifdef HAVE_GTK2
+  gtk_widget_set_usize (this->widget, width, height);
+#endif /* HAVE_GTK2 */
+}
+
+#ifdef HAVE_GTK2
+/** 
+    \brief Connect any signal to any given Sub-widget
+*/
+gulong Widget::connectSignal (char* event, gint (*signal)(GtkWidget*, GdkEvent*, void *))
+{
+  return g_signal_connect (G_OBJECT (this->widget), event, G_CALLBACK (signal), NULL);
+}
+
+/**
+   \brief Connect a signal with additionally passing the whole Object
+*/
+gulong Widget::connectSignal (char* event, gint (*signal)( GtkWidget*, Widget *))
+{
+  return g_signal_connect (G_OBJECT (this->widget), event, G_CALLBACK (signal), this);
+}
+
+/**
+   \brief Connect a signal with additionally passing a whole external Object
+*/
+gulong Widget::connectSignal (char* event, void* extObj, gint (*signal)(GtkWidget*, GdkEvent*, void *))
+{
+  return g_signal_connect (G_OBJECT (this->widget), event, G_CALLBACK (signal), extObj);
+}
+
+/**
+   \brief Connect a signal with additionally passing a whole external Object
+*/
+gulong Widget::connectSignal (char* event, void* extObj, gint (*signal)(GtkWidget*, GdkEventKey*, void *))
+{
+  return g_signal_connect (G_OBJECT (this->widget), event, G_CALLBACK (signal), extObj);
+}
+
+void Widget::disconnectSignal (gulong signalID)
+{
+  g_signal_handler_disconnect (G_OBJECT (this->widget), signalID);
+}
+#endif /* HAVE_GTK2 */
+
+/**
+   \brief Moves through all the Widgets downwards from this and executes the function on them.
+   \param Function must be of type void and takes a Widget* as an Input. 
+*/
+void Widget::walkThrough (void (*function)(Widget*))
+{
+  function(this);
+  if (this->isOption < 0)
+    {
+      static_cast<Packer*>(this)->down->walkThrough (function);
+    } 
+
+  if (this->next != NULL)
+    this->next->walkThrough(function);
+}
+
+/** 
+    \brief This is for listing the option of "widget"
+    \param widget specifies the widget that should be listed
+*/
+void Widget::listOptions (Widget* widget)
+{
+  if (widget->isOption < 0 && static_cast<Packer*>(widget)->groupName)
+    cout << "[" << static_cast<Packer*>(widget)->groupName << "]\n";
+  if (widget->isOption >= 1 && widget->isOption <= 3)
+    cout << "  " << static_cast<Option*>(widget)->label <<" is : " << static_cast<Option*>(widget)->value <<endl;
+  else if (widget->isOption == 5)
+    cout << "  " << static_cast<Option*>(widget)->label <<" is : " << static_cast<OptionLabel*>(widget)->cValue <<endl;
+}
+
+/** 
+    \brief This is for setting the option of "widget"
+    \param widget specifies the widget that should be set.
+*/
+void Widget::setOptions (Widget* widget)
+{
+  if (widget->isOption >= 1)
+    static_cast<Option*>(widget)->redraw();// <<" is : " << static_cast<Option*>(this)->value <<endl;
+}
+
+#ifdef HAVE_GTK2
+
+/**
+   \brief Signal that does absolutely nothing
+   \param widget The widget that initiated the Signal
+   \param event The event-type.
+   \param nothing nothin.
+*/
+gint Widget::doNothingSignal (GtkWidget *widget, GdkEvent* event, void* nothing)
+{
+}
+#endif /* HAVE_GTK2 */
+
+//void deleteWidget(Widget* lastWidget)
+
+
+/* PACKERS */
+
+/**
+   \brief Initializes a Packer.
+
+   Sets the down-pinter to NULL and other PackerSpecific-values to their defaults.
+*/
+void Packer::init (void)
+{
+  down = NULL;
+  groupName = NULL;
+
+
+  static_cast<Widget*>(this)->init();
+  return;
+}
+
+/**
+   \brief Sets the group name under which all the lower widgets of this will be saved.
+   \param name The name of the group.
+*/
+void Packer::setGroupName (char* name)
+{
+  if (groupName)
+    delete groupName;
+  groupName = new char [strlen(name)+1];
+  strcpy(groupName, name);
+}
+
+/**
+   \brief Retrieves the group name under which all the lower widgets of this will be saved.
+   \returns name The name of the group.
+*/
+char* Packer::getGroupName (void)
+{
+  return groupName;
+}
+
+/* CONTAINERS */
+
+/**
+   \brief Initializes a Container.
+
+   sets the Container-Specific defaults.
+*/
+void Container::init (void)
+{
+  isOption = -1;
+
+  static_cast<Packer*>(this)->init();
+
+  return;
+}
+
+/**
+   \briefFills a Container with lowerWidget.
+   \param lowerWidget the Widget that should be filled into the Container.
+
+   It does this by filling up the down pointer only if down points to NULL.
+*/
+void Container::fill (Widget *lowerWidget)
+{
+  if (this->down == NULL)
+    {
+#ifdef HAVE_GTK2
+      gtk_container_add (GTK_CONTAINER (this->widget), lowerWidget->widget);
+#endif /* HAVE_GTK2 */
+      this->down = lowerWidget;
+    }
+  else
+    cout << "!!error!! You try to put more than one Widget into a Container. \nNot including this item.\nThis is only possible with Boxes.\n"<<endl;
+}
+
+// gtk_container_set_border_width (GTK_CONTAINER (widget), 5);
+
+/* WINDOW */
+
+Window* Window::mainWindow = NULL;
+
+/**
+   \brief Adds a new Window Windows to the List of Windows.
+   \param windowToAdd The Windows that should be added to the List
+   \todo this instead of windowToAdd (possibly)
+*/
+void Window::addWindow(Window* windowToAdd)
+{
+  if (!mainWindow)
+    {
+      mainWindow = windowToAdd;
+      return;
+    }
+
+  Widget* tmpWindow = mainWindow;
+  while (tmpWindow->next)
+    tmpWindow = tmpWindow->next;
+  tmpWindow->next = windowToAdd;
+  
+  return;
+}
+      
+
+
+/**
+   \brief Creating a new Window without a Name
+*/
+Window::Window (void)
+{
+  this->init();
+}
+
+/**
+   \brief Creating a Window with a name
+   \param windowName the name the window should get.
+*/
+Window::Window (char* windowName)
+{
+  this->init();
+  this->setTitle (windowName);
+}
+
+/**
+   \brief initializes a new Window
+*/
+void Window::init()
+{
+  if (!mainWindow)
+    mainWindow = this;
+  
+  isOpen = false;
+
+  static_cast<Container*>(this)->init();
+
+#ifdef HAVE_GTK2
+  widget = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_policy (GTK_WINDOW(widget), TRUE, TRUE, TRUE);
+#if !defined(__WIN32__)
+  //  gtk_window_set_decorated (GTK_WINDOW (widget), FALSE);
+#endif 
+  gtk_container_set_border_width (GTK_CONTAINER (widget), 3);
+#endif /* HAVE_GTK2 */
+}
+
+/**
+   \brief Shows all Widgets that are included within this->widget.
+*/
+void Window::showall ()
+{
+  if (!isOpen)
+    {
+      //      printf ("showall\n");
+#ifdef HAVE_GTK2
+      gtk_widget_show_all  (widget);
+#endif /* HAVE_GTK2 */ 
+     isOpen = true;
+    }
+  else
+    {
+      //      printf ("showone\n");
+#ifdef HAVE_GTK2
+      gtk_widget_show (widget);
+#endif /* HAVE_GTK2 */
+    }
+}
+
+/**
+   \brief Set The Window-title to title
+   \param title title the Window should get.
+*/
+void Window::setTitle (char* title)
+{
+  if (label)
+    delete []label;
+  label = new char[strlen(title)+1];
+  strcpy(label, title);
+#ifdef HAVE_GTK2
+  gtk_window_set_title (GTK_WINDOW (widget), title);
+#endif /* HAVE_GTK2 */
+}
+
+/**
+   \brief opens up a Window and fixes the Focus to it
+*/
+void Window::open()
+{
+  if (this != mainWindow)
+    {
+      isOpen = true;
+#ifdef HAVE_GTK2
+      gtk_widget_show_all(widget);
+      gtk_grab_add(widget);
+#endif /* HAVE_GTK2 */
+    }
+}
+
+/**
+   \brief closes up a Window and removes the Focus from it
+*/
+void Window::close()
+{
+  if (this != mainWindow)
+    {
+      isOpen = false;
+#ifdef HAVE_GTK2
+      gtk_grab_remove(widget);
+      gtk_widget_hide (widget);
+#endif /* HAVE_GTK2 */
+    }
+}
+
+#ifdef HAVE_GTK2
+/**
+   \brief opens up a window (not topmost Window).
+   this is the Signal that does it. !!SIGNALS ARE STATIC!!
+   \param widget the widget that did it.
+   \param event the event that did it.
+   \param window the Window that should be opened
+*/
+gint Window::windowOpen (GtkWidget *widget, GdkEvent* event, void* window)
+{
+  static_cast<Window*>(window)->open();
+}
+
+/**
+   \brief closes a window (not topmost Window).
+   this is the Signal that does it. !!SIGNALS ARE STATIC!!
+   \param widget the widget that did it!
+   \param event the event that did it!
+   \param window the Window that should be closed
+*/
+gint Window::windowClose (GtkWidget *widget, GdkEvent* event, void* window)
+{
+  static_cast<Window*>(window)->close();
+}
+
+/**
+ * Quits the orxonox_GUI.
+ * This can be called as a Signal and is therefor static
+ \param widget The widget that called this function
+ \param event the event that happened to execute this function
+ \param data some data passed with the Signal
+ */
+gint Window::orxonox_gui_quit (GtkWidget *widget, GdkEvent *event, gpointer data)
+{
+  if (exec->shouldsave())
+    exec->writeToFile (Window::mainWindow);
+
+  gtk_main_quit();
+  return FALSE;
+}
+#endif /* HAVE_GTK2 */
+
+
+/* FRAME */
+
+/** 
+    \brief Creates a new Frame without a name
+*/
+Frame::Frame (void)
+{
+  this->init();
+}
+
+/**
+   \brief Creates a new Frame with name title
+*/
+Frame::Frame (char* title)
+{
+  this->init();
+  this->setTitle(title);
+}
+
+/** 
+    \brief Initializes a new Frame with default settings
+*/
+void Frame::init()
+{
+  static_cast<Container*>(this)->init();
+
+#ifdef HAVE_GTK2
+  widget = gtk_frame_new ("");
+  gtk_container_set_border_width (GTK_CONTAINER (widget), 3);
+#endif /* HAVE_GTK2 */
+}
+
+/**
+   \brief Sets the Frames name to title
+   \param title The title the Frame should get.
+*/
+void Frame::setTitle (char* title)
+{
+  if (label)
+    delete []label;
+  label = new char[strlen(title)+1];
+  strcpy(label, title);
+#ifdef HAVE_GTK2
+  gtk_frame_set_label (GTK_FRAME (widget), title);
+#endif /* HAVE_GTK2 */
+}
+
+// EVENTBOX //
+
+/**
+   \brief Creates a new EventBox with default settings.
+*/
+EventBox::EventBox ()
+{
+  this->init();
+}
+/**
+   \brief Creates a new EventBox with name title
+   \param title title the Eventbox should get (only data-structure-internal)
+*/
+EventBox::EventBox (char* title)
+{
+  this->init();
+  this->setTitle(title);
+}
+
+/**
+   \brief Initializes a new EventBox
+*/
+void EventBox::init(void)
+{
+  isOption = -1;
+
+  static_cast<Container*>(this)->init();
+
+#ifdef HAVE_GTK2
+  widget = gtk_event_box_new ();
+  gtk_container_set_border_width (GTK_CONTAINER (widget), 3);
+#endif /* HAVE_GTK2 */
+}
+
+/**
+   \brief Sets the Title of the EventBox (not implemented)
+   \param title Name the EventBox should get (only datastructure-internal).
+*/
+void EventBox::setTitle (char* title)
+{
+  if (label)
+    delete []label;
+  label = new char[strlen(title)+1];
+  strcpy(label, title);
+}
+
+/* BOX */
+
+/**
+   \brief Creates a new horizontal Box
+*/
+Box::Box (void)
+{
+  this->init('h');
+}
+
+/**
+   \brief Creates a new Box of type boxtype
+   \param boxtype if 'v' the Box will be vertically, if 'h' the Box will be horizontally
+*/
+Box::Box (char boxtype)
+{
+  this->init(boxtype);
+}
+
+/**
+   \brief Initializes a new Box with type boxtype
+   \param boxtype see Box(char boxtype)
+*/
+void Box::init(char boxtype)
+{
+  isOption = -2;
+
+  static_cast<Packer*>(this)->init();
+#ifdef HAVE_GTK2
+  if (boxtype == 'v')
+    {
+      widget = gtk_vbox_new (FALSE, 0);
+    }
+  else
+    {
+      widget = gtk_hbox_new (FALSE, 0);
+    }
+#endif /* HAVE_GTK2 */
+
+}
+
+/** 
+    \brief Fills a box with a given Widget.
+    \param lowerWidget the next Widget that should be appendet to this Box
+
+    It does this by apending the first one to its down-pointer and all its following ones to the preceding next-pointer. The last one will receive a NULL pointer as Next
+*/
+void Box::fill (Widget *lowerWidget)
+{
+#ifdef HAVE_GTK2
+  gtk_box_pack_start (GTK_BOX (this->widget), lowerWidget->widget, TRUE, TRUE, 0);
+#endif /* HAVE_GTK2 */
+  if (this->down == NULL)
+    this->down = lowerWidget;
+  else
+    {
+      Widget* tmp;
+      tmp = this->down;
+      while (tmp->next != NULL)
+	{
+	  tmp = tmp->next;
+	}
+      tmp->next = lowerWidget;
+    }
+}
+
+/* IMAGE */
+
+/**
+   \brief Creates a new Image
+   \param imagename the location of the Image on the Hard Disc
+*/
+Image::Image (char* imagename)
+{
+  this->init();
+  if (label)
+    delete []label;
+  label = new char[strlen(imagename)+1];
+  strcpy(label, imagename);
+
+#ifdef HAVE_GTK2
+  widget = gtk_image_new_from_file (imagename);
+#endif /* HAVE_GTK2 */
+}
+
+/** 
+    \brief Initializes a new Image
+*/
+void Image::init()
+{
+  isOption = 0;
+
+  static_cast<Widget*>(this)->init();
+}
+
+
+/* OPTION */
+
+/**
+   \brief Initializes a new Option.
+   sets all Option-Specific-Values to their defaults.
+*/
+void Option::init()
+{
+  value = 0;
+  flagName = NULL;
+  flagNameShort = NULL;
+  saveable = false;
+  defaultValue = 0;
+
+  static_cast<Widget*>(this)->init();
+
+  return;
+}
+
+/**
+   \brief This sets The FlagName of an Option and defines its default Values
+   !! Options will be saved if flagname is different from NULL !!
+   \param flagname the Name that will be displayed in the output
+   \param defaultvalue the default Value for this Option (see definition of defaultvalue
+*/
+void Option::setFlagName (char* flagname, int defaultvalue)
+{
+  if (flagName)
+    delete flagName;
+  flagName = new char [strlen(flagname)+1];
+  strcpy(flagName, flagname);
+  defaultValue = defaultvalue;
+
+  //  cout << "Set Flagname of " << label << " to " << flagname << endl;
+}
+
+/** 
+    \brief see Option::setFlagName (char* flagname, int defaultvalue)
+    \param flagname the Name that will be displayed in the output
+    \param defaultvalue the default Value for this Option (see definition of defaultvalue
+    \param flagnameshort a short flagname to be displayed in the output
+*/
+void Option::setFlagName (char* flagname, char* flagnameshort,  int defaultvalue)
+{
+  if (flagName)
+    delete flagName;
+  flagName = new char [strlen(flagname)+1];
+  strcpy(flagName, flagname);
+
+  if (flagNameShort)
+    delete flagNameShort;
+  flagNameShort = new char [strlen(flagnameshort)+1];
+  strcpy(flagNameShort, flagnameshort);
+  defaultValue = defaultvalue;
+  //  cout << "Set Flagname of " << label << " to " << flagname << endl;
+}
+
+
+/* BUTTON */
+
+/**
+   \brief Creates a new Button with a buttonname
+   \param buttonname sets the Name of the Button
+*/
+Button::Button(char* buttonname)
+{
+  this->init();
+  this->setTitle(buttonname);
+}
+
+/**
+   \brief Initializes a new Button
+*/
+void Button::init(void)
+{
+  isOption = 0;
+
+  static_cast<Option*>(this)->init();
+
+#ifdef HAVE_GTK2
+  widget = gtk_button_new_with_label ("");
+#endif /* HAVE_GTK2 */
+}
+
+/**
+   \brief Sets a new name to the Button
+   \param title The name the Button should get
+*/
+void Button::setTitle (char *title)
+{
+  if (label)
+    delete []label;
+  label = new char[strlen(title)+1];
+  strcpy(label, title);
+#ifdef HAVE_GTK2
+  gtk_button_set_label (GTK_BUTTON(widget), title);
+#endif /* HAVE_GTK2 */
+}
+
+/**
+   \brief redraws the Button
+   not implemented yet
+*/
+void Button::redraw ()
+{
+}
+
+/* CHECKBUTTON */
+
+/**
+   \brief Creates a new CheckButton with an ame 
+   \param buttonname The name the CheckButton should display.
+*/
+CheckButton::CheckButton (char* buttonname)
+{
+  this->init();
+  this->setTitle(buttonname);
+
+#ifdef HAVE_GTK2
+  this->connectSignal ("clicked", this->OptionChange);
+#endif /* HAVE_GTK2 */
+}
+
+/**
+   \brief Initialize a new CheckButton with default settings
+*/
+void CheckButton::init(void)
+{
+  isOption = 1;
+
+  static_cast<Option*>(this)->init();
+
+#ifdef HAVE_GTK2
+  widget = gtk_check_button_new_with_label ("");
+#endif /* HAVE_GTK2 */
+}
+
+/**
+   \brief Sets a new Title to a CheckButton
+   \param title The new Name the CheckButton should display.
+*/
+void CheckButton::setTitle(char* title)
+{
+  if (label)
+    delete []label;
+  label = new char[strlen(title)+1];
+  strcpy(label, title);
+#ifdef HAVE_GTK2
+  gtk_button_set_label(GTK_BUTTON(widget), title);
+#endif /* HAVE_GTK2 */
+}
+
+bool CheckButton::isActive()
+{
+#ifdef HAVE_GTK2
+  return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+#endif /* HAVE_GTK2 */
+}
+
+#ifdef HAVE_GTK2
+/** 
+    \brief Signal OptionChange writes the Value from the CheckButton to its Object-Database.
+    \param widget The widget(CheckButton) that has a changed Value
+    \param checkbutton the CheckButton-Object that should receive the change.
+*/
+gint CheckButton::OptionChange (GtkWidget *widget, Widget* checkbutton)
+{
+  static_cast<CheckButton*>(checkbutton)->value = (int)gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON ((CheckButton*)checkbutton->widget));
+  flags->setTextFromFlags(orxonoxGUI);   ////// must be different!!!
+  cout << static_cast<CheckButton*>(checkbutton)->label << " set to: " << static_cast<CheckButton*>(checkbutton)->value << endl;
+}
+#endif /* HAVE_GTK2 */
+
+/**
+   \brief Redraws the CheckButton (if option has changed).
+   Example: if new settings are loaded the Button must be redrawn for the GUI to display that Change
+*/
+void CheckButton::redraw ()
+{
+#ifdef HAVE_GTK2
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), value);
+#endif /* HAVE_GTK2 */
+}
+
+/* SLIDER */
+
+/**
+   \brief Creates a new Slider
+   \param slidername The data-structure-name of the slider.
+   \param start The minimal Value of the slider.
+   \param end The maximal Value of the slider.
+*/
+Slider::Slider (char* slidername, int start, int end)
+{
+  this->init(start, end);
+  this->setValue(start);
+  this->setTitle(slidername);
+#ifdef HAVE_GTK2
+  this->connectSignal ("value_changed", this->OptionChange);
+#endif /* HAVE_GTK2 */
+}
+
+/**
+   \brief Initializes a Slider with start and end Values
+   params: see Slider::Slider (char* slidername, int start, int end)
+*/
+void Slider::init(int start, int end)
+{
+  isOption = 2;
+
+  static_cast<Option*>(this)->init();
+
+#ifdef HAVE_GTK2
+ widget = gtk_hscale_new_with_range (start, end, 5);
+#endif /* HAVE_GTK2 */
+}
+
+/**
+   \brief Sets a new Title to the Slider
+   \param title The new Name of the slider
+*/
+void Slider::setTitle(char* title)
+{
+  if (label)
+    delete []label;
+  label = new char[strlen(title)+1];
+  strcpy(label, title);
+}
+
+/**
+   \brief Setting a new value to the Slider.
+   Maybe you also require a Slider::redraw() for this to display
+*/
+void Slider::setValue(int value)
+{
+  this->value = value;
+}
+
+#ifdef HAVE_GTK2
+/** 
+    \brief Signal OptionChange writes the Value from the Slider to its Object-Database.
+    \param widget The widget(Slider) that has a changed Value
+    \param slider the Slider-Object that should receive the change.
+*/
+gint Slider::OptionChange (GtkWidget *widget, Widget* slider)
+{
+  static_cast<Slider*>(slider)->value = (int)gtk_range_get_value (GTK_RANGE ((Slider*)slider->widget));
+  flags->setTextFromFlags(orxonoxGUI);  //// must be different !!!
+  cout << static_cast<Slider*>(slider)->label << " set to: "<< static_cast<Slider*>(slider)->value << endl;
+}
+#endif /* HAVE_GTK2 */
+
+/**
+   \brief Redraws the widget
+   Example: see void CheckButton::redraw ()
+*/
+void Slider::redraw ()
+{
+#ifdef HAVE_GTK2
+  gtk_range_set_value (GTK_RANGE (widget), value);
+#endif /* HAVE_GTK2 */
+}
+
+/* MENU */
+
+/** 
+    \brief Creates a Menu-Item-list out of multiple input.
+    !! Consider, that the last input argument has to be "lastItem" for this to work!!
+    \param menuname The Database-Name of this Menu
+    \param ... items to be added to this Menu. !! Consider, that the last input argument has to be "lastItem" for this to work!!
+*/
+Menu::Menu (char* menuname, ...)
+{
+  this->init();
+  this->setTitle(menuname);
+    
+  char *itemName;
+
+#ifdef HAVE_GTK2             /////////////////////// REINPLEMENT
+  va_start (itemlist, menuname);
+  while (strcmp (itemName = va_arg (itemlist, char*), "lastItem"))
+    {
+      this->addItem(itemName);
+    }
+  va_end(itemlist);
+#endif /* HAVE_GTK2 */
+
+#ifdef HAVE_GTK2
+  gtk_option_menu_set_menu (GTK_OPTION_MENU (widget), menu);
+  this->connectSignal ("changed", this->OptionChange);
+#endif /* HAVE_GTK2 */
+}
+
+/**
+   \brief Initializes a new Menu with no items
+*/
+void Menu::init(void)
+{
+  isOption = 2;
+
+  static_cast<Option*>(this)->init();
+
+#ifdef HAVE_GTK2
+  widget = gtk_option_menu_new ();
+  menu = gtk_menu_new ();
+#endif /* HAVE_GTK2 */
+
+}
+
+/**
+ * Sets the Database-Name of this Menu
+ \param title Database-Name to be set.
+*/
+void Menu::setTitle(char* title)
+{
+  if (label)
+    delete []label;
+  label = new char[strlen(title)+1];
+  strcpy(label, title);
+}
+
+/**
+   \brief appends a new Item to the Menu-List.
+   \param itemName the itemName to be appendet.
+*/
+void Menu::addItem (char* itemName)
+{
+#ifdef HAVE_GTK2
+  item = gtk_menu_item_new_with_label (itemName);
+  gtk_menu_shell_append(GTK_MENU_SHELL (menu), item);
+#endif /* HAVE_GTK2 */
+}
+
+#ifdef HAVE_GTK2
+/** 
+    \brief Signal OptionChange writes the Value from the Menu to its Object-Database.
+    \param widget The widget(Menu) that has a changed Value
+    \param menu the Menu-Object that should receive the change.
+*/
+gint Menu::OptionChange (GtkWidget *widget, Widget* menu)
+{
+  static_cast<Menu*>(menu)->value = (int)gtk_option_menu_get_history (GTK_OPTION_MENU (menu->widget));
+  flags->setTextFromFlags(orxonoxGUI); //// must be different !!!
+  cout << static_cast<Menu*>(menu)->label << " changed to : " << static_cast<Menu*>(menu)->value << endl;
+}
+#endif /* HAVE_GTK2 */
+
+/**
+   \brief Redraws the widget
+   Example: see void CheckButton::redraw ()
+*/
+void Menu::redraw ()
+{
+#ifdef HAVE_GTK2
+ gtk_option_menu_set_history (GTK_OPTION_MENU (widget), value);
+#endif /* HAVE_GTK2 */
+}
+
+/**
+   \brief Creates a new OptionLabel with a LabelName and a Value.
+   \param label The name of the OptionLabel.
+   \param value The Value of the OptionLabel (what will be displayed).
+*/
+OptionLabel::OptionLabel(char* label, char* value)
+{
+  init();
+  setTitle(label);
+  setValue(value);
+}
+
+/**
+   \brief Initializes an OptionLabel
+*/
+void OptionLabel::init(void)
+{
+  static_cast<Option*>(this)->init();
+  isOption = 5;
+  cValue = NULL;
+
+#ifdef HAVE_GTK2
+  widget = gtk_label_new ("");
+#endif /* HAVE_GTK2 */
+}
+
+/**
+   \brief Updates the value of an OptionLabel
+   \param newValue The new Name that should be displayed.
+*/
+void OptionLabel::setValue(char* newValue)
+{
+  if (cValue)
+    delete cValue;
+  cValue = new char [strlen(newValue)+1];
+  strcpy(cValue, newValue);
+#ifdef HAVE_GTK2
+  gtk_label_set_text (GTK_LABEL (widget), cValue);
+#endif /* HAVE_GTK2 */
+}
+
+/**
+   \brief Sets a ned Title to the OptionLabel.
+   \param title The now title of the OptionLabel.
+*/
+void OptionLabel::setTitle(char* title)
+{
+  if (label)
+    delete []label;
+  label = new char [strlen(title)+1];
+  strcpy(label, title);
+#ifdef HAVE_GTK2
+  gtk_label_set_text (GTK_LABEL (widget), title);
+#endif /* HAVE_GTK2 */
+}
+
+/**
+   \brief Redraws an OptionLabel (not implemented yet, but it works).
+*/
+void OptionLabel::redraw(void)
+{
+  
+}
+
+/**
+   \brief Creates a new default Label with no Text.
+   You migth consider adding Label::setTitle with this.
+*/
+Label::Label ()
+{
+  this->init();
+}
+
+/**
+   \brief Creates a new Label with a Text.
+   \param text The text to be displayed.
+*/
+Label:: Label (char* text)
+{
+  this->init();
+  this->setText(text);
+}
+
+/**
+   \brief initializes a new Label
+*/
+void Label::init(void)
+{
+  isOption = 0;
+
+  static_cast<Widget*>(this)->init();
+
+#ifdef HAVE_GTK2
+  widget = gtk_label_new ("");
+  gtk_label_set_line_wrap (GTK_LABEL(widget), TRUE);
+#endif /* HAVE_GTK2 */
+}
+
+/**
+   \brief Sets a new Text to a Label.
+   \param text The text to be inserted into the Label.
+*/
+void Label::setText (char* text)
+{
+  if (label)
+    delete []label;
+  label = new char[strlen(text)+1];
+  strcpy(label, text);
+#ifdef HAVE_GTK2
+  gtk_label_set_text (GTK_LABEL (this->widget), text);
+#endif /* HAVE_GTK2 */
+}
+
+/**
+   \brief get the Text of a Label
+   \return The Text the Label holds.
+*/
+char* Label::getText ()
+{
+  return label;
+}
Index: /orxonox/branches/levelloader/src/gui/orxonox_gui_gtk.h
===================================================================
--- /orxonox/branches/levelloader/src/gui/orxonox_gui_gtk.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/gui/orxonox_gui_gtk.h	(revision 3417)
@@ -0,0 +1,318 @@
+/*!
+ \file orxonox_gui_gtk.h
+ \brief Contains all th different Widgets.
+*/
+
+#ifndef _ORXONOX_GUI_GTK_H
+#define _ORXONOX_GUI_GTK_H
+
+#if HAVE_CONFIG_H 
+#include <config.h> 
+#endif
+
+#ifdef HAVE_GTK2
+#include <gtk/gtkmain.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtkframe.h>
+#include <gtk/gtkhbox.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtkbutton.h>
+#include <gtk/gtkcheckbutton.h>
+#include <gtk/gtkhscale.h>
+#include <gtk/gtkoptionmenu.h>
+#include <gtk/gtkmenu.h>
+#include <gtk/gtkmenuitem.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkimage.h>
+#include <gtk/gtkeventbox.h>
+#endif /* HAVE_GTK2 */
+
+#ifdef HAVE_GTK2
+bool initGTK(int argc, char *argv[]);
+bool mainloopGTK(void);
+#endif /* HAVE_GTK2 */
+
+
+//! This is the topmost object that can be displayed all others are derived from it.
+class Widget
+{
+ private:
+
+ public:
+  ~Widget ();
+
+  Widget* next; //!< next always points to the next Widget in the list. Every Widget has a next one, or has NULL as next
+#ifdef HAVE_GTK2
+  GtkWidget* widget; //!< widget is the gtk_widget that the specific Object Contains.
+#endif /* HAVE_GTK2 */
+  void init(void);
+  int isOption; //!< with this Paramenter one can set the option-type: -2:Container, -1: Box, 0: not an Option, 1: Bool-option, 2: int-option, 3: float option, 4:char option, 5: char* option
+  /**
+     \briefdefines isOption states
+  */
+  enum option { containerType = -2, boxType = -1, nothingType = 0, boolType = 1, intType = 2}; 
+  char* label; //!< The name of the Widget. Some do display it, Options need it to save;
+#ifdef HAVE_GTK2
+  gulong connectSignal (char* event, gint (*signal)(GtkWidget*, GdkEvent*, void *));
+  gulong connectSignal (char* event, gint (*signal)(GtkWidget*, Widget *));
+  gulong connectSignal (char* event, void* extObj, gint (*signal)(GtkWidget*, GdkEvent*, void *));
+  gulong connectSignal (char* event, void* extObj, gint (*signal)(GtkWidget*, GdkEventKey*, void *));
+  void disconnectSignal (gulong signalID);
+#endif /* HAVE_GTK2 */
+  void show ();
+  void hide ();
+  void setSize(int width, int height);
+
+  void walkThrough (void (*function)(Widget*));
+  static void listOptions (Widget* widget);
+  static void setOptions (Widget* widget);
+  
+#ifdef HAVE_GTK2
+  static gint doNothingSignal (GtkWidget *widget, GdkEvent* event, void* nothing);
+#endif /* HAVE_GTK2 */
+};
+
+//! This is a Packer Object, which has the ability to Pack other Widgets into itself.
+class Packer : public Widget
+{
+ public:
+  Widget* down; //!< this points to the Widget below this.
+  char* groupName; //!< For each Packer you can specify a Groupname under which the lowerWidgets will be saved.
+
+  void init(void);
+  void setGroupName (char* name);
+  char* getGroupName (void);
+};
+
+//! This is a Container Class, it can contain one sub-Widget: down.
+/**
+ * A Container is a Widget that can hold a subWidget in addition to a next-Widget.
+ * The Container can by itself not be displayed created or used.
+ * The derived classes of Container can be displayed
+*/
+class Container : public Packer
+{
+ private:
+  int borderwidth;
+  int policy;
+  
+ public:
+  void init(void);
+  //  void setBorderWidth (int borderwidth);
+  //  virtual void setTitle (char* title) = 0;
+  void fill (Widget *lowerWidget);
+};
+
+//! Window is the class that creates new Windows, and handels them
+/**
+ * A Window is a class derived from Container that contains a window-widget.
+ * It has the ability to hold one sub-object
+ */
+class Window : public Container
+{
+ private:
+  bool isOpen;                //!< A bool Variable that checks if a Window is already open.
+ public:
+  static Window* mainWindow;  //!< Pointer to the First Window that was opened. By default this should be the GUI's main-Window.
+  static void addWindow(Window* windowToAdd);
+
+  Window (void);
+  Window (char* windowName);
+  void init ();
+  
+  void setTitle (char* title);
+  void showall ();
+  void open();
+  void close();
+
+#ifdef HAVE_GTK2
+  static gint windowOpen (GtkWidget *widget, GdkEvent* event, void* window);
+  static gint windowClose (GtkWidget *widget, GdkEvent* event, void* window);
+  static gint orxonox_gui_quit (GtkWidget *widget, GdkEvent *event, gpointer data);
+#endif /* HAVE_GTK2 */
+};
+
+//! Frame is the class that handles frames
+/**
+ * A Frame is an object, that has a border and if you like a name on it.
+ * It can contain a Widget, which means that you can insert anything you like inside of a frame
+ */
+class Frame :public Container
+{
+ public:
+  Frame (char* frameName);
+  Frame (void);
+  void init(void);
+  
+  void setTitle (char* title);
+};
+
+//! EventBox is a Container that can Handle all Events happening inside of it.
+/**
+ * Example: if you have a picture, and you want it to catch mouse-clicks, you have to pack it inside a EventBox
+ */
+class EventBox : public Container
+{
+ public:
+  EventBox (char* eventBoxName);
+  EventBox (void);
+  void init(void);
+  
+  void setTitle (char* title);
+};
+
+//! A Box can contain multiple Widgets
+/**
+   A Box can Contain multiple Widgets, that are ordered either horizontally or vertically
+   I defined the standartbox to be horizontally.
+   A Box is always filled left->right (horizontally) or up->down (vertically)
+*/
+class Box : public Packer
+{
+ public:
+  Box (void);
+  Box (char boxtype);
+  void init(char boxtype);
+
+  void fill (Widget* lowerWidget);
+
+};
+
+//! Image is the keeper of one Image 
+/** 
+ * Images are mighty cool.
+ * Images can help you lighten up the Programming process, and will give everyone a better impression of the Software.
+ */
+class Image : public Widget
+{
+ public:
+  Image (char* imgaename);
+  void init(void);
+};
+
+//! An Option is a Widget that contains something that may change its state.
+/**
+ * Options are the essence of a GUI, they: Configure, Start, Quit, Execute, and make it worth something
+ */
+class Option : public Widget
+{
+ public:
+  //virtual gint OptionChange (GtkWidget *widget, GdkEvent *event, gpointer data);
+  void init(void);
+
+  int value; //!< every option has a value either true or false (0,1) or something else like 25 for 25% of the volume
+  char* flagName; //!< options have a flag name that will be appendet if you start the Program from the GUI.
+  char* flagNameShort; //!< like flag_name but shorter
+  int defaultValue; //!< A default value is good, for hiding a option if it is not needed. (hidden if value == default_value)
+  bool saveable;  //!< Options can be Saved.
+
+  void setFlagName (char* flagname, int defaultvalue);
+  void setFlagName (char* flagname, char* flagnameshort, int defaultvalue);
+  virtual void redraw () = 0; //!< A Option must be able to redraw itself.
+};
+
+//! Buttons can be pressed, and released.
+/**
+ * Buttons are mainly there for executing some action like Starting the Programm, or Quiting it.
+ */
+class Button : public Option 
+{
+ public:
+  Button (char* buttonname);
+  void init(void);
+
+  void setTitle(char* title);
+  
+  void redraw();
+};
+
+//! CheckButtons are a key in configuring bool Variables
+/** CheckButtons can configure bool Variables like wireframe on/off, enable_sound etc.
+ */
+class CheckButton : public Option
+{
+ public:
+  CheckButton (char* buttonname);
+#ifdef HAVE_GTK2
+  static gint OptionChange (GtkWidget* widget, Widget* checkbutton);
+#endif /* HAVE_GTK2 */
+  
+  void init(void);
+  void setTitle(char* title);
+
+  bool isActive();
+  void redraw ();
+};
+
+//! Sliders are Options that can be modified in their value
+/**
+ * good for volume, brightness, etc.
+ */
+class Slider : public Option
+{
+ public:
+  Slider (char* slidername,int start, int end);
+  void init(int start, int end);
+
+  void setTitle(char* title);
+  void setValue(int value);
+
+#ifdef HAVE_GTK2
+  static gint OptionChange (GtkWidget* widget, Widget* slider);
+#endif /* HAVE_GTK2 */
+  void redraw();
+};
+
+//! A Menu is an Option that has a dropdown menu, where you can chose between different Items
+class Menu : public Option
+{
+ private:
+#ifdef HAVE_GTK2
+  GtkWidget* menu;     //!< The menu That will hold the Options.
+  GtkWidget* item;     //!< One Item From a Menu.
+#endif /* HAVE_GTK2 */
+  va_list itemlist;    //!> The list to readin multiple Options.
+  
+ public:
+  Menu (char* menuname, ...);
+  void init(void);
+
+  void setTitle(char* title);
+
+  void addItem(char* itemName);
+#ifdef HAVE_GTK2
+  static gint OptionChange (GtkWidget* widget, Widget* menu);
+#endif /* HAVE_GTK2 */
+  void redraw();
+};
+
+//! A CharLabel is a simple Label, that holds a char*, and will be updated, if changed.
+class OptionLabel : public Option
+{
+ public:
+  OptionLabel(char* label, char* value);
+  void init(void);
+  
+  char* cValue;   //!< The Value the Label will have.
+  
+  void setValue(char* newValue);
+  void setTitle(char* title);
+  void redraw();
+};
+
+//! A label is a Widget, that displays a text
+class Label : public Widget
+{
+ public:
+  Label ();
+  Label (char* text);
+  void init(void);
+  
+  void setText (char* text);
+  char* getText ();
+};
+
+
+//gint orxonox_gui_quit (GtkWidget *widget, GdkEvent *event, gpointer data);
+
+#endif /* _ORXONOX_GUI_GTK_H */
Index: /orxonox/branches/levelloader/src/gui/orxonox_gui_keys.cc
===================================================================
--- /orxonox/branches/levelloader/src/gui/orxonox_gui_keys.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/gui/orxonox_gui_keys.cc	(revision 3417)
@@ -0,0 +1,267 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, 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.  
+
+
+   ### File Specific:
+   main-programmer: Benjamin Grauer
+
+*/
+
+#include "orxonox_gui_keys.h"
+
+/**
+   \brief Creates an Keyboard-Frame
+*/
+OrxonoxGuiKeys::OrxonoxGuiKeys ()
+{
+  keysFrame = new Frame ("Keyboard-Options:");
+  //  keysFrame->setGroupName("Keyboard");
+  keysBox = new Box ('h');
+  player1 = new Player("player1");
+  player2 = new Player("player2");
+
+  keysBox->fill(player1->getOpenButton());
+  keysBox->fill(player2->getOpenButton());
+
+  keysFrame->fill (keysBox);
+}
+
+/**
+   \brief Return the Frame
+   \return Returns the Audio-frame
+*/
+Widget* OrxonoxGuiKeys::getWidget ()
+{
+  return keysFrame;
+}
+
+/* PLAYER */
+
+/**
+   \brief Creates new inputs for a player
+   \param player the name of the Player
+*/
+Player::Player(char* player)
+{
+  char windowName[100] = "Keyboard settings of ";
+  strcat (windowName, player);
+  pKeyWindow = new Window(windowName);
+  pKeyFrame = new Frame (windowName);
+   pKeysBox = new Box('v');
+   pKeysBox->setGroupName (player);
+    pKeysBox->fill(addKey(UP, "up"));
+    pKeysBox->fill(addKey(DOWN, "down"));
+    pKeysBox->fill(addKey(LEFT, "left"));
+    pKeysBox->fill(addKey(RIGHT, "right"));
+    pKeysBox->fill(addKey(SHOOT, "shoot"));
+    
+    closeButton = new Button("close");
+#ifdef HAVE_GTK2
+    closeButton->connectSignal("button_press_event", pKeyWindow, Window::windowClose);
+#endif /* HAVE_GTK2 */
+
+    pKeysBox->fill(closeButton);
+    pKeyFrame->fill(pKeysBox);
+   pKeyWindow->fill(pKeyFrame);
+   Window::addWindow(pKeyWindow);
+#ifdef HAVE_GTK2
+   pKeyWindow->connectSignal("destroy", pKeyWindow, Window::windowClose);
+   pKeyWindow->connectSignal("delete_event", pKeyWindow, Window::windowClose);
+#endif /* HAVE_GTK2 */
+
+  openButton = new Button (player);
+#ifdef HAVE_GTK2
+  openButton->connectSignal("button_press_event", pKeyWindow, Window::windowOpen);
+#endif /* HAVE_GTK2 */
+
+  inputWindow = new Window("inputWindow");
+
+  inputButton = new Button ("test");
+  inputWindow->fill (inputButton);
+#ifdef HAVE_GTK2
+  inputWindow->connectSignal("destroy",  Widget::doNothingSignal);
+  inputWindow->connectSignal("delete_event", Widget::doNothingSignal);
+#endif /* HAVE_GTK2 */
+
+}
+
+/**
+   \brief adds a new Key.
+   \param key the number of the Key
+   \param name The name of the new Key.
+   \returns A widget that has the Key-Box
+*/
+Widget* Player::addKey (KEYS key, char* name)
+{
+  inputKey[key] = new InputKey;
+  inputKey[key]->pKeyBox = new Box();
+  inputKey[key]->pKeyButton = new Button(name);
+  inputKey[key]->pKeyOLabel = new OptionLabel (name, name);
+  inputKey[key]->pKeyOLabel->saveable = true;
+
+#ifdef HAVE_GTK2
+  //inputKey[key]->pKeyButton->connectSignal("key_press_event", inputKey[key]->pKeyButton, key_cb);
+  inputKey[key]->pKeyButton->connectSignal("button_press_event", inputKey[key], inputWindowEvent);
+#endif /* HAVE_GTK2 */
+  inputKey[key]->pKeyBox->fill(inputKey[key]->pKeyButton);
+  inputKey[key]->pKeyBox->fill(inputKey[key]->pKeyOLabel);
+  return inputKey[key]->pKeyBox;
+}
+
+/**
+   \returns the OpenButton of a Player
+*/
+Button* Player::getOpenButton()
+{
+  return openButton;
+}
+
+/**
+   \brief sets a new Key (only output)
+   \param key the new Key.
+*/
+void Player::setkey(KEYS key)
+{
+  cout << "setting up Key: "<< key <<endl;
+}
+
+Window* Player::inputWindow = NULL;
+Button* Player::inputButton = NULL;
+long Player::keySignal = 0;
+
+#ifdef HAVE_GTK2
+gint Player::inputWindowEvent(GtkWidget* w, GdkEventKey* event, void* inputKey)
+{
+  inputButton->setTitle("press a Key");
+  keySignal = inputButton->connectSignal("key_press_event", inputKey, key_cb);
+  inputWindow->open();
+}
+  
+/**
+   \brief Function which gets keystrokes
+   \param w the widget that released the Function.
+   \param event The event that happened.
+   \param Widget the Widget which will be applied.
+   \returns Nothing
+*/
+gint Player::key_cb(GtkWidget* w, GdkEventKey* event, void* inputKey)
+{
+  InputKey* inputkey = (InputKey*) inputKey;
+  char title [20];
+
+  switch(event->keyval) 
+    {
+    case GDK_Up:
+      strcpy(title, "up");
+      break;
+    case GDK_Down:
+      strcpy(title, "down");
+      break;
+    case GDK_Left:
+      strcpy(title, "left");
+      break;
+    case GDK_Right:
+      strcpy(title, "right");
+      break;
+      
+    case GDK_space:
+      strcpy(title, "space");
+      break;
+      
+    case 65293:
+      strcpy(title, "enter");
+      break;
+      
+      // Special Keys //
+    case GDK_Escape:
+      strcpy(title, "esc");
+      break;
+    case GDK_Tab:
+      strcpy(title, "tab");
+      break;
+    case GDK_Shift_L:
+      strcpy(title, "l_shift");
+      break;
+    case GDK_Shift_R:
+      strcpy(title, "r_shift");
+      break;
+    case GDK_Control_L:
+      strcpy(title, "l_ctrl");
+      break;
+    case GDK_Control_R:
+      strcpy(title, "r_ctrl");
+      break;
+    case GDK_Alt_L:
+      strcpy(title, "l_alt");
+      break;
+    case GDK_Alt_R:
+      strcpy(title, "r_alt");
+      break;
+      // FXX KEYS //
+    case GDK_F1:
+      strcpy(title, "f1");
+      break;
+    case GDK_F2:
+      strcpy(title, "f2");
+      break;
+    case GDK_F3:
+      strcpy(title, "f3");
+      break;
+    case GDK_F4:
+      strcpy(title, "f4");
+      break;
+    case GDK_F5:
+      strcpy(title, "f5");
+      break;
+    case GDK_F6:
+      strcpy(title, "f6");
+      break;
+    case GDK_F7:
+      strcpy(title, "f7");
+      break;
+    case GDK_F8:
+      strcpy(title, "f8");
+      break;
+    case GDK_F9:
+      strcpy(title, "f9");
+      break;
+    case GDK_F10:
+      strcpy(title, "f10");
+      break;
+    case GDK_F11:
+      strcpy(title, "f11");
+      break;
+    case GDK_F12:
+      strcpy(title, "f12");
+      break;
+      
+      
+    default:
+      char* tmp;
+      sprintf(tmp, "%c", event->keyval);
+      printf ("other key %s \n", tmp);
+      strcpy(title, tmp);
+      break;
+    }
+
+  inputkey->pKeyOLabel->setValue (title);
+  inputButton->disconnectSignal(keySignal);
+  inputWindow->close();
+}
+#endif /* HAVE_GTK2 */
Index: /orxonox/branches/levelloader/src/gui/orxonox_gui_keys.h
===================================================================
--- /orxonox/branches/levelloader/src/gui/orxonox_gui_keys.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/gui/orxonox_gui_keys.h	(revision 3417)
@@ -0,0 +1,80 @@
+/*!
+  \file orxonox_gui_keys.h
+  \brief File that holds the class that creates the Keyboard-Options.
+*/
+
+#ifndef _ORXONOX_GUI_KEYS_H
+#define _ORXONOX_GUI_KEYS_H
+
+#include "orxonox_gui.h"
+#ifdef HAVE_GTK2
+#include <gdk/gdkkeysyms.h>
+#endif /* HAVE_GTK2 */
+
+/**
+   \brief defines the Possible Player Keys
+*/
+enum KEYS { UP, DOWN, LEFT, RIGHT, SHOOT };
+
+class Player;
+//! Class that creates the Keys-Options.
+class OrxonoxGuiKeys
+{
+ private:
+  Frame* keysFrame;      //!< The Frame that holds the keyOptions.
+  Box* keysBox;          //!< The Frame that holds the keyOptions.
+  Player* player1;       //!< The first Player's keys.
+  Player* player2;       //!< The seconds Player's keys.
+  Button* misc;          //!< Other keyboeard options come here. \todo include some like pause, quit and so on.
+
+ public:
+  OrxonoxGuiKeys ();
+  ~OrxonoxGuiKeys ();
+  
+  Widget* getWidget ();
+};
+
+//! Class to hold infos about a Player
+/**
+   \todo split into subclass and superclass ButtonConfigurator
+*/
+class Player
+{
+ private:
+  Window* pKeyWindow;     //!< The Window for a new Key-setting.
+  Frame* pKeyFrame;       //!< The Frame for a new Key-setting.
+  Button* openButton;     //!< The OpenButton for this key-settings.
+  Button* closeButton;    //!< The CloseButton for this key-settings.
+  Box* pKeysBox;          //!< The Box that holds the Key-settings.
+  
+  //! One KeyOption has one InputKey
+  struct InputKey
+  {
+    Box* pKeyBox;           //!< One Box that holds the Keys
+    Button* pKeyButton;     //!< The Button for changing the Key.
+    OptionLabel* pKeyOLabel;//!< The Label for displaying the Key-setting.
+  };
+
+  InputKey* inputKey[10];     //!< Buttons-array. \todo make it dynamic.
+
+  static Window* inputWindow; //!< A Window that gets keyboard clicks. Static, because only one needed.
+  static Button* inputButton; //!< A Button that gets keyboard clicks. Static, because only one needed.
+  static long keySignal;      //!< A keySignal that handles keyboard clicks. Static, because only one needed.
+ public:
+  Player(char* player);
+
+  Widget* addKey (KEYS key, char* name);
+
+  Button* getOpenButton();
+
+#ifdef HAVE_GTK2
+  static gint inputWindowEvent(GtkWidget* w, GdkEventKey* event, void* widget);
+  static gint key_cb(GtkWidget* w, GdkEventKey* event, void* inputKey);
+#endif /* HAVE_GTK2 */
+  void setkey(KEYS key);
+  
+};
+
+
+
+#endif /* _ORXONOX_GUI_KEYS_H */
Index: /orxonox/branches/levelloader/src/gui/orxonox_gui_video.cc
===================================================================
--- /orxonox/branches/levelloader/src/gui/orxonox_gui_video.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/gui/orxonox_gui_video.cc	(revision 3417)
@@ -0,0 +1,56 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, 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.  
+
+
+   ### File Specific:
+   main-programmer: Benjamin Grauer
+
+*/
+
+
+#include "orxonox_gui_video.h"
+
+/**
+   \brief Creates the Video-Option-Frame
+*/
+OrxonoxGuiVideo::OrxonoxGuiVideo ()
+{
+  videoFrame = new Frame ("Video-Options:");
+  videoBox = new Box ('v');
+  videoFrame->setGroupName("video");
+  
+  fullscreen = new CheckButton ("Fullscreen-mode");
+  fullscreen->setFlagName ("windowed", "q", 1);
+  fullscreen->saveable = true;
+  videoBox->fill (fullscreen);
+  wireframe = new CheckButton ("WireFrame-mode");
+  wireframe->setFlagName ("wireframe", "w", 0);
+  wireframe->saveable = true;
+  videoBox->fill (wireframe);
+
+  videoFrame->fill (videoBox);
+}
+
+/**
+   \return Returns the Video-frame
+*/
+Widget* OrxonoxGuiVideo::getWidget ()
+{
+  return videoFrame;
+}
Index: /orxonox/branches/levelloader/src/gui/orxonox_gui_video.h
===================================================================
--- /orxonox/branches/levelloader/src/gui/orxonox_gui_video.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/gui/orxonox_gui_video.h	(revision 3417)
@@ -0,0 +1,24 @@
+/*!
+  \file orxonox_gui_video.h
+  \brief File that holds the class that creates the Video-Options.
+*/
+#ifndef _ORXONOX_GUI_VIDEO_H
+#define _ORXONOX_GUI_VIDEO_H
+
+#include "orxonox_gui.h"
+
+//! Class that creates the Video-Options.
+class OrxonoxGuiVideo
+{
+ private:
+  Frame* videoFrame;        //!< The Frame that holds the video options.
+  Box* videoBox;            //!< The Box that holds the video options.
+  CheckButton* fullscreen;  //!< CheckButton for fullscreen-mode
+  CheckButton* wireframe;   //!< CheckButton for wireframe Mode.
+ public:
+  OrxonoxGuiVideo ();
+  ~OrxonoxGuiVideo ();
+  
+  Widget* getWidget ();
+};
+#endif /* _ORXONOX_GUI_VIDEO_H */
Index: /orxonox/branches/levelloader/src/gui/rc
===================================================================
--- /orxonox/branches/levelloader/src/gui/rc	(revision 3417)
+++ /orxonox/branches/levelloader/src/gui/rc	(revision 3417)
@@ -0,0 +1,139 @@
+# pixmap_path "<dir 1>:<dir 2>:<dir 3>:..."
+#
+pixmap_path "/usr/include/X11R6/pixmaps:/home/imain/pixmaps"
+#
+# style <name> [= <name>]
+# {
+#   <option>
+# }
+#
+# widget <widget_set> style <style_name>
+# widget_class <widget_class_set> style <style_name>
+
+# Here is a list of all the possible states.  Note that some do not apply to
+# certain widgets.
+#
+# NORMAL - The normal state of a widget, without the mouse over top of
+# it, and not being pressed, etc.
+#
+# PRELIGHT - When the mouse is over top of the widget, colors defined
+# using this state will be in effect.
+#
+# ACTIVE - When the widget is pressed or clicked it will be active, and
+# the attributes assigned by this tag will be in effect.
+#
+# INSENSITIVE - When a widget is set insensitive, and cannot be
+# activated, it will take these attributes.
+#
+# SELECTED - When an object is selected, it takes these attributes.
+#
+# Given these states, we can set the attributes of the widgets in each of
+# these states using the following directives.
+#
+# fg - Sets the foreground color of a widget.
+# bg - Sets the background color of a widget.
+# bg_pixmap - Sets the background of a widget to a tiled pixmap.
+# font - Sets the font to be used with the given widget.
+#
+
+# This sets a style called "button".  The name is not really important, as
+# it is assigned to the actual widgets at the bottom of the file.
+
+style "window"
+{
+  #This sets the padding around the window to the pixmap specified.
+  #bg_pixmap[<STATE>] = "<pixmap filename>"
+  #bg_pixmap[NORMAL] = "warning.xpm"
+  bg[NORMAL] = { 0, 0, 0 }
+  fg[NORMAL] = { 0, 1.0, 0 }
+  base[NORMAL] = { 0, 0, 0 }
+  base[INSENSITIVE] = { 0, 0, 0 }
+}
+
+style "scale"
+{
+  #Sets the foreground color (font color) to red when in the "NORMAL"
+  #state.
+  
+  fg[NORMAL] = { 0, 1.0, 0 }
+  bg[NORMAL] = { 0, 1.0, 0 }
+  bg[INSENSITIVE] = { 0, 1.0, 0 }
+  bg[PRELIGHT] = { 0, 1.0, 0 }
+  bg[ACTIVE] =   {0.2, 0.2, 0.2 }
+  
+  #Sets the background pixmap of this widget to that of its parent.
+  bg_pixmap[NORMAL] = "<parent>"
+}
+
+style "button"
+{
+  # This shows all the possible states for a button.  The only one that
+  # doesn't apply is the SELECTED state.
+  
+  fg[PRELIGHT] = { 0, 0, 0 }
+  bg[PRELIGHT] = { 0, 1.0, 0 }
+  bg[ACTIVE] = { 0, 1.0, 0 }
+  fg[ACTIVE] = { 0, 1.0, 0 }
+  bg[NORMAL] = { 0, 0, 0 }
+  fg[NORMAL] = { 0, 1.0, 0 }
+  bg[INSENSITIVE] = { 1.0, 0, 1.0 }
+  fg[INSENSITIVE] = { 1.0, 0, 1.0 }
+  base[NORMAL] = { 0, 1.0, 0 }
+  base[PRELIGHT] = { 0, 1.0, 0 }
+}
+
+# In this example, we inherit the attributes of the "button" style and then
+# override the font and background color when prelit to create a new
+# "main_button" style.
+
+style "main_button" = "button"
+{
+  font = "-adobe-helvetica-medium-r-normal--*-100-*-*-*-*-*-*"
+  bg[PRELIGHT] = { 0, 0.75, 0 }
+}
+
+style "toggle_button" = "button"
+{
+  fg[NORMAL] = { 0, 1.0, 0 }
+  fg[ACTIVE] = { 0, 1.0, 0 }
+  text[NORMAL] = { 0, 0, 0}
+  # This sets the background pixmap of the toggle_button to that of its
+  # parent widget (as defined in the application).
+  #bg_pixmap[NORMAL] = "<parent>"
+}
+
+style "text"
+{
+  #bg_pixmap[NORMAL] = "marble.xpm"
+  fg[NORMAL] = { 0, 1.0, 0 }
+}
+
+style "ruler"
+{
+  font = "-adobe-helvetica-medium-r-normal--*-20-*-*-*-*-*-*"
+}
+
+# pixmap_path "~/.pixmaps"
+
+# These set the widget types to use the styles defined above.
+# The widget types are listed in the class hierarchy, but could probably be
+# just listed in this document for the users reference.
+
+widget_class "GtkWindow" style "window"
+widget_class "GtkFrame" style "window"
+widget_class "Gtk*EventBox" style "window"
+widget_class "GtkDialog" style "window"
+widget_class "GtkFileSelection" style "window"
+widget_class "*Gtk*Scale" style "scale"
+widget_class "*GtkCheckButton*" style "toggle_button"
+widget_class "*Gtk*Menu*" style "toggle_button"
+widget_class "*GtkRadioButton*" style "toggle_button"
+widget_class "*GtkButton*" style "button"
+widget_class "*Ruler" style "ruler"
+widget_class "*GtkText" style "text"
+widget_class "*GtkLabel" style "text"
+
+
+# This sets all the buttons that are children of the "main window" to
+# the main_button style.  These must be documented to be taken advantage of.
+widget "main window.*GtkButton*" style "main_button"
Index: /orxonox/branches/levelloader/src/helper_parent.cc
===================================================================
--- /orxonox/branches/levelloader/src/helper_parent.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/helper_parent.cc	(revision 3417)
@@ -0,0 +1,42 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Patrick Boenzli
+   co-programmer: ...
+*/
+
+
+#include "helper_parent.h"
+
+
+using namespace std;
+
+
+/**
+   \brief standard constructor
+
+   \todo this constructor is not jet implemented - do it
+*/
+HelperParent::HelperParent () 
+{
+   this->setClassName ("HelperParent");
+}
+
+
+/**
+   \brief standard deconstructor
+
+   \todo this deconstructor is not jet implemented - do it
+*/
+HelperParent::~HelperParent () {}
+
Index: /orxonox/branches/levelloader/src/helper_parent.h
===================================================================
--- /orxonox/branches/levelloader/src/helper_parent.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/helper_parent.h	(revision 3417)
@@ -0,0 +1,24 @@
+/*! 
+    \file helper_parent.h
+    \brief this is a parent class, that isn't visible in the real world itself
+*/
+
+
+#ifndef _HELPER_PARENT_H
+#define _HELPER_PARENT_H
+
+#include "stdincl.h"
+#include "p_node.h"
+
+
+
+class HelperParent : public PNode {
+
+ public:
+  HelperParent ();
+  ~HelperParent ();
+
+
+};
+
+#endif /* _HELPER_PARENT_H */
Index: /orxonox/branches/levelloader/src/importer/Makefile.am
===================================================================
--- /orxonox/branches/levelloader/src/importer/Makefile.am	(revision 3417)
+++ /orxonox/branches/levelloader/src/importer/Makefile.am	(revision 3417)
@@ -0,0 +1,41 @@
+#AM_CXXFLAGS="-I/usr/X11R6/include"
+AM_LDFLAGS=$(MWINDOWS)
+
+#"-O3 -pedantic -fPIC -ffast-math -I/usr/X11R6/include"
+
+
+bin_PROGRAMS=importer
+importer_SOURCES= framework.cc \
+	          windowHandler.cc \
+	  	  model.cc \
+		  objModel.cc \
+	  	  array.cc \
+	  	  material.cc \
+		  texture.cc \
+	  	  vector.cc 
+
+noinst_HEADERS= framework.h \
+	  	windowHandler.h \
+	  	model.h \
+		objModel.h \
+	  	array.h \
+		material.h \
+		texture.h
+
+
+
+#  uncomment the following if orxonox requires the math library
+#orxonox_LDADD=-lm
+
+#EXTRA_DIST=orxonox.lsm.in orxonox.spec.in orxonox.texinfo
+
+#  if you write a self-test script named `chk', uncomment the
+#  following and add `chk' to the EXTRA_DIST list
+#TESTS=chk
+
+#  build and install the .info pages
+#info_TEXINFOS = orxonox.texinfo
+#orxonox_TEXINFOS = gpl.texinfo
+
+#  install the man pages
+#man_MANS=orxonox.1
Index: /orxonox/branches/levelloader/src/importer/Makefile.in
===================================================================
--- /orxonox/branches/levelloader/src/importer/Makefile.in	(revision 3417)
+++ /orxonox/branches/levelloader/src/importer/Makefile.in	(revision 3417)
@@ -0,0 +1,472 @@
+# Makefile.in generated by automake 1.8.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+@SET_MAKE@
+
+
+SOURCES = $(importer_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+bin_PROGRAMS = importer$(EXEEXT)
+subdir = src/importer
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS)
+am_importer_OBJECTS = framework.$(OBJEXT) windowHandler.$(OBJEXT) \
+	model.$(OBJEXT) objModel.$(OBJEXT) array.$(OBJEXT) \
+	material.$(OBJEXT) texture.$(OBJEXT) vector.$(OBJEXT)
+importer_OBJECTS = $(am_importer_OBJECTS)
+importer_LDADD = $(LDADD)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/array.Po ./$(DEPDIR)/framework.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/material.Po ./$(DEPDIR)/model.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/objModel.Po ./$(DEPDIR)/texture.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/vector.Po ./$(DEPDIR)/windowHandler.Po
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+SOURCES = $(importer_SOURCES)
+DIST_SOURCES = $(importer_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEBUG = @DEBUG@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOXYGEN = @DOXYGEN@
+DOXYGEN_FALSE = @DOXYGEN_FALSE@
+DOXYGEN_TRUE = @DOXYGEN_TRUE@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GTK2_CFLAGS = @GTK2_CFLAGS@
+GTK2_LIBS = @GTK2_LIBS@
+HAVE_GTK2_FALSE = @HAVE_GTK2_FALSE@
+HAVE_GTK2_TRUE = @HAVE_GTK2_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MSBITFIELDS = @MSBITFIELDS@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SUB_PROJECTS_FALSE = @SUB_PROJECTS_FALSE@
+SUB_PROJECTS_TRUE = @SUB_PROJECTS_TRUE@
+VERSION = @VERSION@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+
+#AM_CXXFLAGS="-I/usr/X11R6/include"
+AM_LDFLAGS = $(MWINDOWS)
+importer_SOURCES = framework.cc \
+	          windowHandler.cc \
+	  	  model.cc \
+		  objModel.cc \
+	  	  array.cc \
+	  	  material.cc \
+		  texture.cc \
+	  	  vector.cc 
+
+noinst_HEADERS = framework.h \
+	  	windowHandler.h \
+	  	model.h \
+		objModel.h \
+	  	array.h \
+		material.h \
+		texture.h
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cc .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  src/importer/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign  src/importer/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  if test -f $$p \
+	  ; then \
+	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+	   echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+	   $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+	  else :; fi; \
+	done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+	  echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(bindir)/$$f"; \
+	done
+
+clean-binPROGRAMS:
+	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+importer$(EXEEXT): $(importer_OBJECTS) $(importer_DEPENDENCIES) 
+	@rm -f importer$(EXEEXT)
+	$(CXXLINK) $(importer_LDFLAGS) $(importer_OBJECTS) $(importer_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/array.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/framework.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/material.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/model.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/objModel.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/texture.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vector.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/windowHandler.Po@am__quote@
+
+.cc.o:
+@am__fastdepCXX_TRUE@	if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cc.obj:
+@am__fastdepCXX_TRUE@	if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	    $$tags $$unique; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(bindir)"; do \
+	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+	clean-generic ctags distclean distclean-compile \
+	distclean-generic distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-binPROGRAMS \
+	install-data install-data-am install-exec install-exec-am \
+	install-info install-info-am install-man install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+	uninstall-am uninstall-binPROGRAMS uninstall-info-am
+
+
+#  uncomment the following if orxonox requires the math library
+#orxonox_LDADD=-lm
+
+#EXTRA_DIST=orxonox.lsm.in orxonox.spec.in orxonox.texinfo
+
+#  if you write a self-test script named `chk', uncomment the
+#  following and add `chk' to the EXTRA_DIST list
+#TESTS=chk
+
+#  build and install the .info pages
+#info_TEXINFOS = orxonox.texinfo
+#orxonox_TEXINFOS = gpl.texinfo
+
+#  install the man pages
+#man_MANS=orxonox.1
+# 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:
Index: /orxonox/branches/levelloader/src/importer/array.cc
===================================================================
--- /orxonox/branches/levelloader/src/importer/array.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/importer/array.cc	(revision 3417)
@@ -0,0 +1,134 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Benjamin Grauer
+   co-programmer: ...
+*/
+
+#include "array.h"
+
+/**
+   \brief creates a new Array
+*/
+Array::Array ()
+{
+  this->initializeArray ();
+}
+
+/**
+   \brief deletes an Array.
+   It does this by first deleting all the array-entries, and then delete the array[] itself
+*/
+Array::~Array()
+{
+  PRINTF(2)("deleting array\n");
+  Entry* walker = this->firstEntry;
+  Entry* previous;
+  while (walker)
+    {
+      previous = walker;
+      walker = walker->next;
+      delete previous;
+    }
+  if (finalized)
+    delete []this->array;
+}
+
+/**
+   \brief initializes an Array
+   the Function does this by setting up a fistEntry, and setting the entryCount.
+*/
+void Array::initializeArray ()
+{
+  PRINTF(2)("crating new Array\n");
+  this->firstEntry = new Entry;
+  this->firstEntry->next =NULL;
+  this->currentEntry=firstEntry;
+  this->finalized = false;
+  this->entryCount = 0; //0 means one entry
+  return;
+}
+
+/**
+   \brief finalizes an array.
+   This Function creates the array, and makes it ready to be sent to the application.
+*/
+void Array::finalizeArray (void)
+{
+  PRINTF(3)("Finalizing array. Length: %i\n", entryCount);  
+  //  if ((array = (GLfloat*)malloc( entryCount* sizeof(GLfloat))) == NULL)
+  if (!(this->array = new GLfloat [this->entryCount]))
+    PRINTF(1)("could not allocate %i data Blocks\n", this->entryCount);
+  Entry* walker = this->firstEntry;
+  for (int i=0; i<this->entryCount; i++)
+    {
+      this->array[i] = walker->value;
+      walker = walker->next;
+    }
+  this->finalized = true;
+
+  return;
+}
+
+/**
+   \brief adds a new Entry to the Array
+   \param entry Entry to add.
+*/
+void Array::addEntry (GLfloat entry)
+{
+  if (!this->finalized)
+    {
+      PRINTF(3)("adding new Entry to Array: %f\n", entry);
+      
+      this->currentEntry->value = entry;
+      this->currentEntry->next = new Entry;
+      this->currentEntry = currentEntry->next;
+      this->currentEntry->next = NULL;
+      ++this->entryCount;
+    }
+  else 
+    PRINTF(1)("adding failed, because list has been finalized\n");
+}
+
+/**
+   \brief Adds 3 entries at once (convenience)
+*/
+void Array::addEntry (GLfloat entry0, GLfloat entry1, GLfloat entry2)
+{
+  this->addEntry (entry0);
+  this->addEntry (entry1);
+  this->addEntry (entry2);
+}
+  
+/**
+   \brief Gives back the array !! MUST be executed AFTER finalize.
+   \returns The created array.
+*/
+GLfloat* Array::getArray ()
+{
+  return this->array;
+}
+
+/**
+   \returns The Count of entries in the Array
+*/
+int Array::getCount()
+{
+  return this->entryCount;
+}
+
+/**
+   \brief Simple debug info about the Array
+*/
+void Array::debug ()
+{
+  PRINTF(0)("entryCount=%i, address=%p\n", this->entryCount, this->array);
+}
Index: /orxonox/branches/levelloader/src/importer/array.h
===================================================================
--- /orxonox/branches/levelloader/src/importer/array.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/importer/array.h	(revision 3417)
@@ -0,0 +1,49 @@
+/*!
+  \file array.h
+  \brief Contains the Array Class that handles float arrays.
+  this class creates a Array of a semi-Dynamic length.
+  beware, that after finalizing the array may not be resized again.
+*/
+
+#ifndef _ARRAY_H
+#define _ARRAY_H
+
+extern int verbose; //!< will be obsolete soon
+
+#include "../stdincl.h"
+#include <fstream>
+
+
+//! Array Class that handles dynamic-float arrays.
+class Array
+{
+ public:
+  Array ();
+  ~Array();
+
+  void initializeArray ();
+  void finalizeArray (void);
+  void addEntry (GLfloat entry);
+  void addEntry(GLfloat entry0, GLfloat entry1, GLfloat entry2);
+  
+  GLfloat* getArray ();
+  int getCount();
+  void debug(void);
+ private:
+  //! One entry of the Array
+  struct Entry
+  {
+    GLfloat value;  //!< The value of this Entry.
+    Entry* next;    //!< Pointer to the Next entry.
+  };
+
+  GLfloat* array;      //!< The array that will be produced when finalizing the Array.
+  int entryCount;      //!< The count of Entries in this Array.
+  bool finalized;      //!< If this variable is set to true, the Array can not be changed anymore. true if finalized, false else (initially).
+  Entry* firstEntry;   //!< Pointer to the first Entry of this Array
+  Entry* currentEntry; //!< Pointer to the current Entry of this Array. The one Entry we are working with.
+  
+  
+};
+
+#endif
Index: /orxonox/branches/levelloader/src/importer/framework.cc
===================================================================
--- /orxonox/branches/levelloader/src/importer/framework.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/importer/framework.cc	(revision 3417)
@@ -0,0 +1,282 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Benjamin Grauer
+   co-programmer: ...
+*/
+
+#include "framework.h"
+int verbose;
+void DrawGLScene()
+{
+  currFrame = SDL_GetTicks();
+  dt = currFrame - lastFrame; 
+  if (dt == 0)
+    dist += (zoomTo-dist)/500;
+  else 
+    dist += (zoomTo-dist)/500 *(float)dt;
+
+  rotatorP += rotatorV *(float)dt;
+  
+
+  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
+  glLoadIdentity(); // Reset the view
+  
+  glMatrixMode(GL_PROJECTION);
+  glLoadIdentity();	
+  gluPerspective(45.0f,500/375,0.1f,dist * 5.0f);
+    gluLookAt (0, dist , dist, 0,0,0, up.x,up.y,up.z);
+
+  glMatrixMode(GL_MODELVIEW);
+  glPushMatrix();
+  //  glRotatef (180, dir.x, dir.y, dir.z);
+  glMultMatrixf (*matQ);
+  if (obj)
+    obj->draw();
+
+  glPopMatrix();
+
+  SDL_GL_SwapBuffers(); // Swap the buffers
+  lastFrame = currFrame;
+}
+
+
+int main(int argc, char *argv[])
+{
+  verbose = 3;
+
+  Uint8* keys; // This variable will be used in the keyboard routine
+  int done=FALSE; // We aren't done yet, are we?
+
+  // Create a new OpenGL window with the title "Cone3D Basecode" at
+  // 640x480x32, fullscreen and check for errors along the way
+  if(wHandler.CreateGLWindow("Whandler Basecode", 800, 600, 32, FALSE) == FALSE)
+  {
+    // If an error is found, display a message, kill the GL and SDL screens (if they were created) and exit
+    PRINTF(1)("Could not initalize OpenGL :(\n\n");
+    wHandler.KillGLWindow();
+    return 0;
+  }
+  
+  PRINTF(2)("screensize: %i, %i\n", wHandler.screen->w, wHandler.screen->h);
+  if (argc>=3)
+    obj = new OBJModel (argv[1], atof(argv[2]));
+  else if (argc>=2)
+    obj = new OBJModel(argv[1]);
+  else 
+    {
+      // This is an example, of how it is possible, to create a new Model, and adding some vertex-information.
+      // This also packs everything into a DisplayList, and can be handled exactly as any other model.
+      // This is an example of a cube with Texture-Coordinates, but without explicite Vertex-Normals. (they are soft-created).
+
+      obj = (OBJModel*) new Model();
+      obj->setName("CUBE");
+      obj->addVertex (-0.5, -0.5, 0.5);
+      obj->addVertex (0.5, -0.5, 0.5);
+      obj->addVertex (-0.5, 0.5, 0.5);
+      obj->addVertex (0.5, 0.5, 0.5);
+      obj->addVertex (-0.5, 0.5, -0.5);
+      obj->addVertex (0.5, 0.5, -0.5);
+      obj->addVertex (-0.5, -0.5, -0.5);
+      obj->addVertex (0.5, -0.5, -0.5);
+      
+      obj->addVertexTexture (0.0, 0.0);
+      obj->addVertexTexture (1.0, 0.0);
+      obj->addVertexTexture (0.0, 1.0);
+      obj->addVertexTexture (1.0, 1.0);
+      obj->addVertexTexture (0.0, 2.0);
+      obj->addVertexTexture (1.0, 2.0);
+      obj->addVertexTexture (0.0, 3.0);
+      obj->addVertexTexture (1.0, 3.0);
+      obj->addVertexTexture (0.0, 4.0);
+      obj->addVertexTexture (1.0, 4.0);
+      obj->addVertexTexture (2.0, 0.0);
+      obj->addVertexTexture (2.0, 1.0);
+      obj->addVertexTexture (-1.0, 0.0);
+      obj->addVertexTexture (-1.0, 1.0);
+
+      obj->addFace ("1 2 4 3");
+      obj->addFace ("3 4 6 5");
+      obj->addFace ("5 6 8 7");
+      obj->addFace ("7 8 2 1");
+      obj->addFace ("2 8 6 4");
+      obj->addFace ("7 1 3 5");
+      obj->finalize();
+    }
+  M = Vector(wHandler.screen->w/2, wHandler.screen->h/2, 0); 
+  rotAxis = Vector (0.0,1.0,0.0);
+  rotAngle = 0;
+
+  matQ[0][0] = matQ[1][1] = matQ[2][2] = matQ[3][3] = 1;
+  rotQ = Quaternion (rotAngle, rotAxis);
+  rotQlast = rotQ;
+  dir = Vector (0.0, 0.0, 1.0);
+  up = Vector (0.0, 1.0, 0.0);
+
+  glEnable(GL_LIGHTING);
+  glEnable(GL_DEPTH_TEST);
+
+  GLfloat whiteLight[] = {1.0, 1.0, 1.0,1.0};
+  GLfloat light0Position[] = {10.0, 10.0, 10.0, 0.0};
+  GLfloat light1Position[] = {-10.0, -7.0, -6.0, 0.0};
+  GLfloat lmodelAmbient[] = {.1, .1, .1, 1.0};
+
+  glEnable(GL_LIGHT0);
+  glLightfv(GL_LIGHT0, GL_POSITION, light0Position);
+  glLightfv(GL_LIGHT0, GL_DIFFUSE, whiteLight);
+  glLightfv(GL_LIGHT0, GL_SPECULAR, whiteLight);
+  
+  glEnable(GL_LIGHT1);
+  glLightfv(GL_LIGHT1, GL_POSITION, light1Position);
+  glLightfv(GL_LIGHT1, GL_DIFFUSE, whiteLight);
+  glLightfv(GL_LIGHT1, GL_SPECULAR, whiteLight);
+  
+
+  glEnable(GL_TEXTURE_2D);
+  rotatorP = .0;
+  rotatorV = .0;
+  dist = 5.0;
+  zoomTo = dist;
+  // Build the font from a TGA image font.tga in the data directory
+  // Hide the mouse cursor
+    SDL_ShowCursor(2);
+    mouse1Down = false;
+
+  // This is the main loop for the entire program and it will run until done==TRUE
+  while(!done)
+  {
+    // Draw the scene
+    DrawGLScene();
+    // And poll for events
+    SDL_Event event;
+    while ( SDL_PollEvent(&event) ) {
+      switch (event.type) {
+      case SDL_MOUSEMOTION:
+	PRINTF(3)("Mouse motion about %d,%d Pixels to (%d,%d).\n", 
+		  event.motion.xrel, event.motion.yrel,
+		  event.motion.x, event.motion.y);
+	// TRACKBALL
+	if (mouse1Down)
+	  {
+	    int mX = event.button.x;
+	    int mY = event.button.y;
+	    int wH = wHandler.screen->h;
+	    int wW = wHandler.screen->w;
+	    Vector tmpV (mX, mY, sqrt ( (float) abs(wH * wH/4 - (wW/2-mX) * (wW/2-mX) - (wH/2-mY) * (wH/2-mY)) ));
+	    //	    PRINTF(0)("tmpV: %f, %f, %f\n", tmpV.x, tmpV.y, tmpV.z);
+	    p2 = tmpV-M;
+	    p2.y = -p2.y;
+	    rotAxis = p1.cross(p2);
+	    //  PRINTF(0)("rotAxis: %f, %f, %f\n", rotAxis.x, rotAxis.y, rotAxis.z);
+
+	    // in case that there is no rotation-axis defined
+	    if (rotAxis.x != 0 || rotAxis.y != 0 || rotAxis.z != 0)
+	      {
+		rotAxis.normalize();
+		//		PRINTF(0)("rotAxis: %f, %f, %f\n", rotAxis.x, rotAxis.y, rotAxis.z, rotAngle);
+				
+		rotAngle = angleRad (p1, p2);
+		rotQ = Quaternion (rotAngle, rotAxis);
+		rotQ = rotQ * rotQlast;
+		rotQ.matrix (matQ);
+		//	dir = rotQ.apply(dir);
+		//      dir.normalize();
+		//	PRINTF(0)("rotAxis: %f, %f, %f, %f\n", dir.x, dir.y, dir.z, rotAngle);
+	      }
+	    rotQlast = rotQ;
+	    p1 = p2;
+
+	  }
+	break;
+      case SDL_MOUSEBUTTONDOWN:
+	if (event.button.button == 4)
+	  {
+	    PRINTF(0)("MouseWheel up\n");
+	    zoomTo *= .5;
+	  }
+	else if (event.button.button == 5)
+	  {
+	    PRINTF(2)("MouseWheel down\n");
+	    zoomTo *= 2.0;
+	  }
+	else if (event.button.button == 1)
+	  {
+	    mouse1Down = true;
+	    int mX = event.button.x;
+	    int mY = event.button.y;
+	    int wH = wHandler.screen->h;
+	    int wW = wHandler.screen->w;
+	    Vector tmpV (mX, mY, sqrt ( (float) abs(wH * wH/4 - (wW/2-mX) * (wW/2-mX) - (wH/2-mY) * (wH/2-mY)) ));
+	    p1 = tmpV-M;
+	    p1.y = -p1.y;
+
+	  }
+	else
+	  {
+	    PRINTF(0)("MouseButton %d pressed at (%d,%d).\n",
+		   event.button.button, event.button.x, event.button.y);
+	    rotatorV = ( (float)wHandler.screen->w/2 -event.button.x) / (float)wHandler.screen->w / 100.0;
+	  }
+	    
+	break;
+      case SDL_MOUSEBUTTONUP:
+	if (event.button.button == 4);
+	else if (event.button.button == 5);
+	else if (event.button.button == 1)
+	  mouse1Down =false;
+	else 
+	    {
+	      PRINTF(2)("MouseButton %d released at (%d,%d).\n",
+			event.button.button, event.button.x, event.button.y);
+	    }
+	break;
+
+
+      case SDL_KEYDOWN:
+	switch (event.key.keysym.sym)
+	  {
+	  case SDLK_x:
+	    delete obj;
+	    obj = NULL;
+	    break;
+	  case SDLK_c:
+	    if (!obj)
+	      obj = new OBJModel(argv[1]);
+	    break;
+	  }
+	break;
+	    
+        // If a quit event was recieved
+      case SDL_QUIT:
+	// then we're done and we'll end this program
+          done=TRUE;
+          break;
+      default:
+          break;
+      }
+
+
+    }
+
+    // Get the state of the keyboard keys
+    keys = SDL_GetKeyState(NULL);
+
+    // and check if ESCAPE has been pressed. If so then quit
+    if(keys[SDLK_ESCAPE]) done=TRUE;
+  }
+
+  // Kill the GL & SDL screens
+  if (obj)
+    delete obj;
+  wHandler.KillGLWindow();
+  // And quit
+  return 0;
+}
Index: /orxonox/branches/levelloader/src/importer/framework.h
===================================================================
--- /orxonox/branches/levelloader/src/importer/framework.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/importer/framework.h	(revision 3417)
@@ -0,0 +1,38 @@
+#ifndef _FRAMEWORK_H
+#define _FRAMEWORK_H
+ 
+#include "windowHandler.h" // Include the Whandler Basecode
+#include "objModel.h"
+#include "vector.h"
+
+float rotatorP;
+float rotatorV;
+
+float dist;
+float zoomTo;
+
+Uint32 lastFrame;
+Uint32 currFrame;
+Uint32 dt;
+
+
+Vector dir;
+Vector up;
+
+float matQ[4][4];
+
+Vector M;
+Vector p1;
+Vector p2;
+Vector rotAxis;
+float rotAngle;
+Quaternion rotQ;
+Quaternion rotQlast;
+
+bool mouse1Down;
+
+WindowHandler wHandler;  // Create an instance of the whandler basecode class
+OBJModel* obj;
+
+
+#endif /* _FRAMEWORK_H */
Index: /orxonox/branches/levelloader/src/importer/material.cc
===================================================================
--- /orxonox/branches/levelloader/src/importer/material.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/importer/material.cc	(revision 3417)
@@ -0,0 +1,359 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Benjamin Grauer
+   co-programmer: ...
+
+*/
+
+#include "material.h"
+
+using namespace std;
+
+
+/**
+   \brief creates a default Material with no Name
+   normally you call this to create a material List (for an obj-file) and then append with addMaterial()
+*/
+Material::Material()
+{
+  this->init();
+  
+  this->setName ("");
+}
+
+/**
+   \brief creates a Material.
+   \param mtlName Name of the Material to be added to the Material List
+*/
+Material::Material (char* mtlName)
+{
+  this->init();
+  
+  this->setName (mtlName);
+}
+
+/** 
+    \brief deletes a Material
+*/
+Material::~Material()
+{
+  PRINTF(2)("delete Material %s.\n", this->name);
+  if (this->name)
+    delete []this->name;
+  if (this->diffuseTexture)
+    this->diffuseTexture;
+  if (this->nextMat)
+    delete this->nextMat;
+}
+
+/**
+   \brief adds a new Material to the List.
+   this Function will append a new Material to the end of a Material List.
+   \param mtlName The name of the Material to be added.
+*/
+Material* Material::addMaterial(char* mtlName)
+{
+  PRINTF(2)("adding Material %s.\n", mtlName);
+   Material* tmpMat = this;
+  while (tmpMat->nextMat != NULL)
+    {
+      tmpMat = tmpMat->nextMat;
+    }
+  tmpMat->nextMat = new Material(mtlName);
+  return tmpMat->nextMat;
+  
+}
+
+/**
+   \brief initializes a new Material with its default Values
+*/
+void Material::init(void)
+{
+  PRINTF(2)("initializing new Material.\n");
+  this->nextMat = NULL;
+  this->name ="";
+  this->setIllum(1);
+  this->setDiffuse(0,0,0);
+  this->setAmbient(0,0,0);
+  this->setSpecular(.5,.5,.5);
+  this->setShininess(2.0);
+  this->setTransparency(0.0);
+
+
+  this->diffuseTexture = NULL;
+  this->ambientTexture = NULL;
+  this->specularTexture = NULL;
+
+  this->diffuseTextureSet = false;
+  this->ambientTextureSet = false;
+  this->specularTextureSet = false;
+
+  
+}
+
+/**
+   \brief Search for a Material called mtlName
+   \param mtlName the Name of the Material to search for
+   \returns Material named mtlName if it is found. NULL otherwise.
+*/
+Material* Material::search (char* mtlName)
+{
+  PRINTF(2)("Searching for material %s", mtlName);
+  Material* searcher = this;
+  while (searcher != NULL)
+    {
+      PRINT(2)(".");
+      if (!strcmp (searcher->getName(), mtlName))
+	{
+	  PRINT(2)("found.\n");
+	  return searcher;
+	}
+      searcher = searcher->nextMat;
+    }
+  PRINT(2)("not found\n");
+  return NULL;
+}
+
+/**
+   \brief sets the material with which the following Faces will be painted
+*/
+bool Material::select (void)
+{
+  // setting diffuse color
+  //  glColor3f (diffuse[0], diffuse[1], diffuse[2]);
+  glMaterialfv(GL_FRONT, GL_DIFFUSE, this->diffuse);
+
+  // setting ambient color
+  glMaterialfv(GL_FRONT, GL_AMBIENT, this->ambient);
+
+  // setting up Sprecular
+  glMaterialfv(GL_FRONT, GL_SPECULAR, this->specular);
+
+  // setting up Shininess
+  glMaterialf(GL_FRONT, GL_SHININESS, this->shininess);
+  
+  // setting illumination Model 
+  if (this->illumModel == 1) //! \todo make this work, if no vertex-normals are read.
+    glShadeModel(GL_FLAT);
+  else if (this->illumModel >= 2)
+    glShadeModel(GL_SMOOTH);
+
+  if (this->diffuseTextureSet)
+    glBindTexture(GL_TEXTURE_2D, this->diffuseTexture->getTexture());
+  else
+    glBindTexture(GL_TEXTURE_2D, 0);
+  
+}
+
+
+/**
+   \brief Set the Name of the Material. (Important for searching)
+   \param mtlName the Name of the Material to be set.
+*/ 
+void Material::setName (char* mtlName)
+{
+  PRINTF(3)("setting Material Name to %s.\n", this->name);
+  this->name = new char [strlen(mtlName)+1];
+  strcpy(this->name, mtlName);
+}
+
+/**
+   \returns The Name of The Material
+*/
+char* Material::getName (void)
+{
+  return this->name;
+}
+
+/**
+   \brief Sets the Material Illumination Model. 
+   \brief illu illumination Model in int form
+*/
+void Material::setIllum (int illum)
+{
+  PRINTF(3)("setting illumModel of Material %s to %i\n", this->name, illum);
+  this->illumModel = illum;
+  //  PRINTF(3)("setting illumModel to: %i\n", illumModel);
+}
+/**
+   \brief Sets the Material Illumination Model. 
+   \brief illu illumination Model in char* form
+*/void Material::setIllum (char* illum)
+{
+  this->setIllum (atoi(illum));
+}
+
+/**
+   \brief Sets the Material Diffuse Color.
+   \param r Red Color Channel.
+   \param g Green Color Channel.
+   \param b Blue Color Channel.
+*/
+void Material::setDiffuse (float r, float g, float b)
+{
+  PRINTF(3)("setting Diffuse Color of Material %s to r=%f g=%f b=%f.\n", this->name, r, g, b);
+  this->diffuse[0] = r;
+  this->diffuse[1] = g;
+  this->diffuse[2] = b;  
+  this->diffuse[3] = 1.0;
+
+}
+/**
+   \brief Sets the Material Diffuse Color.
+   \param rgb The red, green, blue channel in char format (with spaces between them)
+*/
+void Material::setDiffuse (char* rgb)
+{
+  float r,g,b;
+  sscanf (rgb, "%f %f %f", &r, &g, &b);
+  this->setDiffuse (r, g, b);
+}
+
+/**
+   \brief Sets the Material Ambient Color. 
+   \param r Red Color Channel.
+   \param g Green Color Channel.
+   \param b Blue Color Channel.
+*/
+void Material::setAmbient (float r, float g, float b)
+{
+  PRINTF(3)("setting Ambient Color of Material %s to r=%f g=%f b=%f.\n", this->name, r, g, b);
+  this->ambient[0] = r;
+  this->ambient[1] = g;
+  this->ambient[2] = b;
+  this->ambient[3] = 1.0;
+}
+/**
+   \brief Sets the Material Ambient Color.
+   \param rgb The red, green, blue channel in char format (with spaces between them)
+*/
+void Material::setAmbient (char* rgb)
+{
+  float r,g,b;
+  sscanf (rgb, "%f %f %f", &r, &g, &b);
+  this->setAmbient (r, g, b);
+}
+
+/**
+   \brief Sets the Material Specular Color. 
+   \param r Red Color Channel.
+   \param g Green Color Channel.
+   \param b Blue Color Channel.
+*/
+void Material::setSpecular (float r, float g, float b)
+{
+  PRINTF(3)("setting Specular Color of Material %s to r=%f g=%f b=%f.\n", this->name, r, g, b);
+  this->specular[0] = r;
+  this->specular[1] = g;
+  this->specular[2] = b;
+  this->specular[3] = 1.0;
+ }
+/**
+   \brief Sets the Material Specular Color.
+   \param rgb The red, green, blue channel in char format (with spaces between them)
+*/
+void Material::setSpecular (char* rgb)
+{
+  float r,g,b;
+  sscanf (rgb, "%f %f %f", &r, &g, &b);
+  this->setSpecular (r, g, b);
+}
+
+/**
+   \brief Sets the Material Shininess.
+   \param shini stes the Shininess from float.
+*/
+void Material::setShininess (float shini)
+{
+  this->shininess = shini;
+}
+/**
+   \brief Sets the Material Shininess.
+   \param shini stes the Shininess from char*.
+*/
+void Material::setShininess (char* shini)
+{
+  this->setShininess (atof(shini));
+}
+
+/**
+   \brief Sets the Material Transparency.
+   \param trans stes the Transparency from int.
+*/
+void Material::setTransparency (float trans)
+{
+  PRINTF(3)("setting Transparency of Material %s to %f.\n", this->name, trans);
+  this->transparency = trans;
+}
+/**
+   \brief Sets the Material Transparency.
+   \param trans stes the Transparency from char*.
+*/
+void Material::setTransparency (char* trans)
+{
+  this->setTransparency (atof(trans));
+}
+
+/**
+   \brief Adds a Texture Path to the List of already existing Paths
+   \param pathName The Path to add.
+*/
+void Material::addTexturePath(char* pathName)
+{
+  PathList::getInstance()->addPath(pathName);
+}
+
+// MAPPING //
+
+/**
+   \brief Sets the Materials Diffuse Map
+   \param dMap the Name of the Image to Use
+*/
+void Material::setDiffuseMap(char* dMap)
+{
+  PRINTF(3)("setting Diffuse Map %s\n", dMap);
+  diffuseTexture = new Texture();
+  this->diffuseTextureSet = diffuseTexture->loadImage(dMap);
+
+}
+
+/**
+   \brief Sets the Materials Ambient Map
+   \param aMap the Name of the Image to Use
+   \todo implement this
+*/
+void Material::setAmbientMap(char* aMap)
+{
+  SDL_Surface* ambientMap;
+
+}
+
+/**
+   \brief Sets the Materials Specular Map
+   \param sMap the Name of the Image to Use
+   \todo implement this
+*/
+void Material::setSpecularMap(char* sMap)
+{
+  SDL_Surface* specularMap;
+
+}
+
+/**
+   \brief Sets the Materials Bumpiness
+   \param bump the Name of the Image to Use
+   \todo implemet this
+*/
+void Material::setBump(char* bump)
+{
+
+}
Index: /orxonox/branches/levelloader/src/importer/material.h
===================================================================
--- /orxonox/branches/levelloader/src/importer/material.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/importer/material.h	(revision 3417)
@@ -0,0 +1,84 @@
+/*!
+  \file material.h
+  \brief Contains the Material Class that handles Material for 3D-Objects.
+  \todo free SDL-surface when deleting Material.
+  \todo delete imgNameWithPath after use creation.
+*/
+
+#ifndef _MATERIAL_H
+#define _MATERIAL_H
+
+
+
+extern int verbose; //!< will be obsolete soon.
+
+#include "../stdincl.h"
+#include "texture.h"
+
+#if HAVE_CONFIG_H 
+#include <config.h> 
+#endif /* HAVE_CONFIG_H */
+
+
+
+
+//! Class to handle Materials.
+class Material
+{
+ public:
+  Material ();
+  Material (char* mtlName);
+  Material* addMaterial(char* mtlName);
+  ~Material ();
+  void init(void);
+
+  Material* search (char* mtlName);
+  bool select (void);
+
+  void setName (char* mtlName);
+  char* getName (void);
+  void setIllum (int illum);
+  void setIllum (char* illum);
+  void setDiffuse (float r, float g, float b);
+  void setDiffuse (char* rgb);
+  void setAmbient (float r, float g, float b);
+  void setAmbient (char* rgb);
+  void setSpecular (float r, float g, float b);
+  void setSpecular (char* rgb);
+  void setShininess (float shini);
+  void setShininess (char* shini);
+  void setTransparency (float trans);
+  void setTransparency (char* trans);
+
+
+ 
+  void addTexturePath(char* pathName);
+  char* searchTextureInPaths(char* texName) const;
+ // MAPPING //
+  void setDiffuseMap(char* dMap);
+  void setAmbientMap(char* aMap);
+  void setSpecularMap(char* sMap);
+  void setBump(char* bump);
+
+ private:
+  char* name;        //!< The Name of the Material.
+  int illumModel;    //!< The IlluminationModel is either flat or smooth.
+  float diffuse [4]; //!< The diffuse color of the Material.
+  float ambient [4]; //!< The ambient color of the Material.
+  float specular [4];//!< The specular color of the Material.
+  float shininess;   //!< The shininess of the Material.
+  float transparency;//!< The transperency of the Material.
+
+  Texture* diffuseTexture; //!< The diffuse texture of the Material.
+  Texture* ambientTexture; //!< The ambient texture of the Material.
+  Texture* specularTexture;//!< The specular texture of the Material.
+  
+  bool diffuseTextureSet; //!< Chekcs if the diffuse texture is Set.
+  bool ambientTextureSet; //!< Chekcs if the ambient texture is Set.
+  bool specularTextureSet;//!< Chekcs if the specular texture is Set.
+
+  Material* nextMat; //!< pointer to the Next Material of the List. NULL if no next exists.
+
+
+};
+#endif
Index: /orxonox/branches/levelloader/src/importer/model.cc
===================================================================
--- /orxonox/branches/levelloader/src/importer/model.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/importer/model.cc	(revision 3417)
@@ -0,0 +1,840 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Benjamin Grauer
+   co-programmer: ...
+*/
+
+#include "model.h"
+#include <math.h>
+
+using namespace std;
+
+/**
+   \brief Creates a 3D-Model.
+
+   This only initializes a 3D-Model, but does not cleanup the Faces.
+*/
+Model::Model(void)
+{
+  this->initialize();
+}
+
+/**
+   \brief Creates a 3D-Model of Primitive-Type type
+
+   if you want to just display a Cube/Sphere/Cylinder/... without any material.
+   
+   \todo implement Cube/Sphere/Cylinder/...
+*/
+Model::Model(PRIMITIVE type)
+{
+  this->initialize();
+
+  switch (type)
+    {
+    default:
+    case CUBE:
+      this->cubeModel();
+      break;
+    case SPHERE:
+      break;
+    case CYLINDER:
+      break;
+
+    }
+  this->importToGL ();
+
+  this->cleanup();
+}
+
+/**
+   \brief Creates a 3D-Model. and assigns it a Name.
+*/
+Model::Model(char* modelName)
+{
+  this->initialize();
+  this->setName(modelName);
+}
+
+/**
+   \brief deletes an Model.
+
+   Looks if any from model allocated space is still in use, and if so deleted it.
+*/
+Model::~Model(void)
+{
+  PRINTF(3)("Deleting Model ");
+  if (this->name)
+    {
+      PRINT(3)("%s\n", this->name);
+      delete []this->name;
+    }
+  else
+      PRINT(3)("\n");
+
+  PRINTF(3)("Deleting display Lists.\n");
+  Group* walker = this->firstGroup;
+  while (walker != NULL)
+    {
+      glDeleteLists (walker->listNumber, 1);
+      Group* delWalker = walker;
+      walker = walker->next;
+      delete delWalker;
+    }
+
+  PRINTF(3)("Deleting Materials.\n");
+  if (this->material)
+    delete this->material;
+}
+
+/**
+   \brief Finalizes an Object. This can be done outside of the Class.
+*/
+void Model::finalize(void)
+{
+  this->importToGL ();
+  
+  this->cleanup();
+
+  this->finalized = true;
+}
+
+/**
+   \brief Draws the Models of all Groups.
+   It does this by just calling the Lists that must have been created earlier.
+*/
+void Model::draw (void) const
+{
+  PRINTF(2)("drawing the 3D-Models\n"); 
+  Group* walker = this->firstGroup;
+  while (walker != NULL)
+    {
+      PRINTF(3)("Drawing model %s\n", walker->name);
+      glCallList (walker->listNumber);
+      walker = walker->next;
+    }
+}
+
+/**
+   \brief Draws the Model number groupNumber
+   \param groupNumber The number of the group that will be displayed.
+
+   It does this by just calling the List that must have been created earlier.
+*/
+void Model::draw (int groupNumber) const 
+{
+  if (groupNumber >= this->groupCount)
+    {
+      PRINTF(1)("You requested model number %i, but this File only contains of %i Models.\n", groupNumber-1, this->groupCount);
+      return;
+    }
+  PRINTF(2)("drawing the requested 3D-Models if found.\n"); 
+  Group* walker = this->firstGroup;
+  int counter = 0;
+  while (walker != NULL)
+    {
+      if (counter == groupNumber)
+	{
+	  PRINTF(2)("Drawing model number %i named %s\n", counter, walker->name);
+	  glCallList (walker->listNumber);
+	  return;
+	}
+      ++counter;
+      walker = walker->next;
+    }
+  PRINTF(1)("Model number %i in %s not Found.\n", groupNumber, this->name);
+  return;
+
+}
+
+/**
+   \brief Draws the Model with a specific groupName
+   \param groupName The name of the group that will be displayed.
+
+   It does this by just calling the List that must have been created earlier.
+*/
+void Model::draw (char* groupName) const
+{
+  PRINTF(2)("drawing the requested 3D-Models if found.\n"); 
+  Group* walker = this->firstGroup;
+  while (walker != NULL)
+    {
+      if (!strcmp(walker->name, groupName))
+	{
+	  PRINTF(2)("Drawing model %s\n", walker->name);
+	  glCallList (walker->listNumber);
+	  return;
+	}
+      walker = walker->next;
+    }
+  PRINTF(1)("Model Named %s in %s not Found.\n", groupName, this->name);
+  return;
+}
+
+/**
+   \returns Count of the Models in this File
+*/
+int Model::getGroupCount (void) const
+{
+  return this->groupCount;
+}
+
+/**
+    \brief initializes the Model.
+
+    This Function initializes all the needed arrays, Lists and clientStates.
+    It also defines default values.
+*/
+bool Model::initialize (void)
+{
+  PRINTF(2)("new 3D-Model is being created\n"); 
+
+  this->name = NULL;
+  this->finalized = false;
+  // setting the start group;
+  this->firstGroup = new Group;
+  this->currentGroup = this->firstGroup;
+  this->groupCount = 0;
+  
+  this->initGroup (this->currentGroup);
+  this->scaleFactor = 1;
+  this->material = new Material();
+
+  this->vertices = new Array();
+  this->vTexture = new Array();
+  this->normals = new Array();
+
+  return true;
+}
+
+void Model::setName(const char* name)
+{
+  if (this->name) 
+    delete this->name;
+  this->name = new char[strlen(name)+1];
+  strcpy(this->name, name);
+}
+/**
+   \brief initializes a new Group model
+   \param group the group that should be initialized.
+   \todo Maybe Group should be a Class, because it does a lot of stuff
+   
+*/
+bool Model::initGroup(Group* group)
+{
+  PRINTF(3)("Adding new Group\n");
+  group->name = "";
+  group->faceMode = -1;
+  group->faceCount = 0;  
+  group->next = NULL;
+
+  group->firstFace = new Face;
+  this->initFace (group->firstFace);
+  group->currentFace = group->firstFace;
+}
+
+/**
+   \brief initializes a new Face. (sets default Values)
+   \param face The face to initialize
+*/
+bool Model::initFace (Face* face)
+{
+  face->vertexCount = 0;
+
+  face->firstElem = NULL;
+  
+  face->materialString = NULL;
+  
+  face->next = NULL;
+
+  return true;
+}
+
+/**
+   \brief finalizes an Model.
+   This funcion is needed, to delete all the Lists, and arrays that are no more needed because they are already imported into openGL. This will be applied at the end of the importing Process.
+*/
+bool Model::cleanup(void)
+{
+  PRINTF(3)("cleaning up the 3D-Model to save Memory.\n");
+
+  if (this->vertices)
+    delete this->vertices;
+  if (this->vTexture)
+    delete this->vTexture;
+  if (this->normals)
+    delete this->normals;
+
+  this->cleanupGroup(this->firstGroup);
+  return true; 
+}
+
+/**
+   \brief Cleans up all groups starting from group.
+   \param group the first Group to clean
+*/
+bool Model::cleanupGroup (Group* group)
+{
+  PRINTF(3)("Cleaning up group\n");
+  if (group->firstFace != NULL)
+    {
+      cleanupFace (group->firstFace);
+      delete group->firstFace;
+    }
+
+  if (group->next !=NULL)
+    cleanupGroup (group->next);
+  return true;
+}
+
+/**
+   \brief Cleans up all Faces starting from face until NULL is reached.
+   \param face the first face to clean.
+*/
+bool Model::cleanupFace (Face* face)
+{
+  PRINTF(3)("Cleaning up Face\n");
+
+  if (face->materialString != NULL)
+      delete []face->materialString;
+  if (face->firstElem != NULL)
+    {
+      this->cleanupFaceElement(face->firstElem);
+      delete face->firstElem;
+    }
+      
+  if (face->next != NULL)
+    {
+      this->cleanupFace (face->next);
+      delete face->next;
+    }
+      
+}
+
+
+/**
+   \brief Cleans up all FaceElements starting from faceElem.
+   \param faceElem the first FaceElement to clean.
+*/
+bool Model::cleanupFaceElement(FaceElement* faceElem)
+{
+  if (faceElem->next != NULL)
+    {
+      this->cleanupFaceElement (faceElem->next);
+      delete faceElem->next;
+    }
+}
+
+/**
+   \brief parses a group String
+   \param groupString the new Group to create
+
+   This function initializes a new Group. 
+   With it you should be able to import .obj-files with more than one Models inside. 
+*/
+bool Model::addGroup (char* groupString)
+{
+  PRINTF(3)("Read Group: %s.\n", groupString);
+  if (this->groupCount != 0 && this->currentGroup->faceCount>0)
+    {
+      //      finalizeGroup(currentGroup);
+      this->currentGroup = this->currentGroup->next = new Group;
+      this->initGroup(this->currentGroup);
+    }
+  // setting the group name if not default.
+  if (strcmp(groupString, "default"))
+    {
+      this->currentGroup->name = new char [strlen(groupString)+1];
+      strcpy(this->currentGroup->name, groupString);
+    }
+  ++this->groupCount;
+
+}
+
+/**
+   \brief parses a vertex-String
+   \param vertexString The String that will be parsed.
+
+   If a vertex line is found this function will inject it into the vertex-Array
+*/
+bool Model::addVertex (char* vertexString)
+{
+  float subbuffer1;
+  float subbuffer2;
+  float subbuffer3;
+  sscanf (vertexString, "%f %f %f", &subbuffer1, &subbuffer2, &subbuffer3);
+  PRINTF(3)("reading in a vertex: %f %f %f\n", &subbuffer1, &subbuffer2, &subbuffer3);
+  this->vertices->addEntry(subbuffer1*scaleFactor, subbuffer2*scaleFactor, subbuffer3*scaleFactor);
+  return true;
+}
+
+/**
+   \brief parses a vertex-String
+   \param x the X-coordinate of the Vertex to add.
+   \param y the Y-coordinate of the Vertex to add.
+   \param z the Z-coordinate of the Vertex to add.
+   
+*/
+bool Model::addVertex(const float x, const float y, const float z)
+{
+  PRINTF(4)("reading in a vertex: %f %f %f\n", x, y, z);
+  this->vertices->addEntry(x*scaleFactor, y*scaleFactor, z*scaleFactor);
+  return true;
+}
+
+/**
+   \brief parses a face-string
+   \param faceString The String that will be parsed.
+
+   If a face line is found this function will add it to the glList.
+*/
+bool Model::addFace (char* faceString)
+{
+  if (this->currentGroup->faceCount >0)
+    this->currentGroup->currentFace = this->currentGroup->currentFace->next = new Face;
+  this->initFace (this->currentGroup->currentFace);
+
+  FaceElement* tmpElem = this->currentGroup->currentFace->firstElem = new FaceElement;
+  tmpElem->next = NULL;
+  while(strcmp (faceString, "\0"))
+    {
+      if (this->currentGroup->currentFace->vertexCount>0)
+	  tmpElem = tmpElem->next = new FaceElement;
+      tmpElem->next = NULL;
+
+      char tmpValue [50];
+      int tmpLen;
+      char* vertex = NULL;
+      char* texture = NULL;
+      char* normal = NULL;
+
+      sscanf (faceString, "%s", tmpValue);
+      tmpLen = strlen(tmpValue);
+      vertex = tmpValue;
+
+      if ((texture = strstr (vertex, "/")) != NULL)
+	{
+	  texture[0] = '\0';
+	  texture ++;
+	  
+	  if ((normal = strstr (texture, "/")) !=NULL)
+	    {
+	      normal[0] = '\0';
+	      normal ++;
+	    }	  
+	}
+      if (vertex)
+	tmpElem->vertexNumber = atoi(vertex)-1;
+      else
+	tmpElem->vertexNumber = -1;
+      if (texture)
+	tmpElem->texCoordNumber = atoi(texture)-1;
+      else
+	tmpElem->texCoordNumber = -1;
+      if (normal)
+	tmpElem->normalNumber = atoi(normal)-1;
+      else
+	tmpElem->normalNumber = -1;
+
+      faceString += tmpLen;
+      if (strcmp (faceString, "\0"))
+	faceString++;
+      this->currentGroup->currentFace->vertexCount++;
+    }
+
+  this->currentGroup->faceCount += this->currentGroup->currentFace->vertexCount -2;
+}
+
+/**
+   \brief imports a new Face.
+   \param faceElemCount The Cout of Vertices this Face has.
+   \param ... The Elements by number.
+
+   \todo hmmpf... this also has to parse normals and vertices... sounds like stress...
+*/
+bool Model::addFace(const float faceElemCount, ...)
+{
+  // TODO
+
+}
+
+/**
+   \brief parses a vertexNormal-String
+   \param normalString The String that will be parsed.
+
+   If a vertexNormal line is found this function will inject it into the vertexNormal-Array
+*/
+bool Model::addVertexNormal (char* normalString)
+{
+  float subbuffer1;
+  float subbuffer2;
+  float subbuffer3;
+  sscanf (normalString, "%f %f %f", &subbuffer1, &subbuffer2, &subbuffer3);
+  PRINTF(3)("found vertex-Normal %f, %f, %f\n", &subbuffer1,&subbuffer2,&subbuffer3);
+  this->normals->addEntry(subbuffer1, subbuffer2, subbuffer3);
+  return true;
+}
+
+/**
+   \brief adds a VertexNormal.
+   \param x The x coordinate of the Normal.
+   \param y The y coordinate of the Normal.
+   \param z The z coordinate of the Normal.
+
+   If a vertexNormal line is found this function will inject it into the vertexNormal-Array
+*/
+bool Model::addVertexNormal(const float x, const float y, const float z)
+{
+  PRINTF(3)("found vertex-Normal %f, %f, %f\n", x, y, z);
+  this->normals->addEntry(x, y, z);
+}
+
+/**
+   \brief parses a vertexTextureCoordinate-String
+   \param vTextureString The String that will be parsed.
+
+   If a vertexTextureCoordinate line is found,
+   this function will inject it into the vertexTexture-Array
+*/
+bool Model::addVertexTexture (char* vTextureString)
+{
+  float subbuffer1;
+  float subbuffer2;
+  sscanf (vTextureString, "%f %f", &subbuffer1, &subbuffer2);
+  PRINTF(3)("found vertex-Texture %f, %f\n", &subbuffer1, &subbuffer2);
+  this->vTexture->addEntry(subbuffer1);
+  this->vTexture->addEntry(subbuffer2);
+  return true;
+}
+
+/**
+   \brief adds a Texture Coordinate
+   \param u The u coordinate of the TextureCoordinate.
+   \param v The y coordinate of the TextureCoordinate.
+
+   If a TextureCoordinate line is found this function will inject it into the TextureCoordinate-Array
+*/
+bool Model::addVertexTexture(const float u, const float v)
+{
+  PRINTF(3)("found vertex-Texture %f, %f\n", u, v);
+  this->vTexture->addEntry(u);
+  this->vTexture->addEntry(v);
+}
+
+/**
+   \brief Function that selects a material, if changed in the obj file.
+   \param matString the Material that will be set.
+*/
+bool Model::addUseMtl (char* matString)
+{
+  /*
+  if (!this->mtlFileName)
+    {
+      PRINTF(4)("Not using new defined material, because no mtlFile found yet\n");
+      return false;
+    }
+  */      
+  if (this->currentGroup->faceCount >0)
+    this->currentGroup->currentFace = this->currentGroup->currentFace->next = new Face;
+  this->initFace (this->currentGroup->currentFace);
+  
+  this->currentGroup->currentFace->materialString = new char[strlen(matString)+1];
+  strcpy (this->currentGroup->currentFace->materialString, matString);
+  
+  if (this->currentGroup->faceCount == 0)
+    this->currentGroup->faceCount ++;
+
+}
+
+/**
+   \brief reads and includes the Faces/Materials into the openGL state Machine
+*/
+bool Model::importToGL (void)
+{
+
+  // finalize the Arrays
+  this->vertices->finalizeArray();
+  this->vTexture->finalizeArray();
+  if (normals->getCount() == 0) // vertices-Array must be uilt for this
+    this->buildVertexNormals();
+  this->normals->finalizeArray();
+
+  this->currentGroup = this->firstGroup;
+
+  while (this->currentGroup != NULL)
+    {
+
+      // creating a glList for the Group
+      if ((this->currentGroup->listNumber = glGenLists(1)) == 0)
+	{
+	  PRINTF(1)("list could not be created for this Model\n");
+	  return false;
+	}
+      glNewList (this->currentGroup->listNumber, GL_COMPILE);
+
+      // Putting Faces to GL
+      Face* tmpFace = this->currentGroup->firstFace;
+      while (tmpFace != NULL)
+	{
+	  if (tmpFace->vertexCount == 0 && tmpFace->materialString != NULL)
+	    {
+	      if (this->currentGroup->faceMode != -1)
+		glEnd();
+	      this->currentGroup->faceMode = 0;
+	      Material* tmpMat;
+	      if ((tmpMat = material->search(tmpFace->materialString)) != NULL)
+		{
+		  tmpMat->select();
+		  PRINTF(2)("using material %s for coming Faces.\n", tmpFace->materialString);
+		}
+	      else 
+		PRINTF(1)("material %s not found.\n", tmpFace->materialString);
+
+
+	    }
+
+	  else if (tmpFace->vertexCount == 3)
+	    {
+	      if (this->currentGroup->faceMode != 3)
+		{
+		  if (this->currentGroup->faceMode != -1)
+		    glEnd();
+		  glBegin(GL_TRIANGLES);
+		}
+	      
+	      this->currentGroup->faceMode = 3;
+	      PRINTF(3)("found triag.\n");
+	    }
+	  
+	  else if (tmpFace->vertexCount == 4)
+	    {
+	      if (this->currentGroup->faceMode != 4)
+		{
+		  if (this->currentGroup->faceMode != -1)
+		    glEnd();
+		  glBegin(GL_QUADS);
+		}
+	      this->currentGroup->faceMode = 4;
+	      PRINTF(3)("found quad.\n");
+	    }
+	  
+	  else if (tmpFace->vertexCount > 4)
+	    {
+	      if (this->currentGroup->faceMode != -1)
+		glEnd();
+	      glBegin(GL_POLYGON);
+	      PRINTF(3)("Polygon with %i faces found.", tmpFace->vertexCount);
+	      this->currentGroup->faceMode = tmpFace->vertexCount;
+	    }
+	  
+	  FaceElement* tmpElem = tmpFace->firstElem;
+	  while (tmpElem != NULL)
+	    {
+	      //      PRINTF(2)("%s\n", tmpElem->value);
+	      this->addGLElement(tmpElem);
+	      tmpElem = tmpElem->next;
+	    }
+	  tmpFace = tmpFace->next;
+	}
+      glEnd();
+      glEndList();
+
+      this->currentGroup = this->currentGroup->next;
+    } 
+}
+
+/**
+   \brief Adds a Face-element (one vertex of a face) with all its information. 
+   \param elem The FaceElement to add to the OpenGL-environment.
+
+   It does this by searching:
+   1. The Vertex itself
+   2. The VertexNormale
+   3. The VertexTextureCoordinate
+   merging this information, the face will be drawn.
+*/
+bool Model::addGLElement (FaceElement* elem)
+{
+  PRINTF(3)("importing grafical Element to openGL.\n");
+
+  if (elem->texCoordNumber != -1)
+    glTexCoord2fv(this->vTexture->getArray() + elem->texCoordNumber * 2);
+  if (elem->normalNumber != -1)
+    glNormal3fv(this->normals->getArray() + elem->normalNumber * 3);
+  if (elem->vertexNumber != -1)
+    glVertex3fv(this->vertices->getArray() + elem->vertexNumber * 3);
+
+}
+
+/**
+   \brief A routine that is able to create normals.
+
+   The algorithm does the following:
+   1. It calculates creates Vectors for each normale, and sets them to zero.
+   2. It then Walks through a) all the Groups b) all the Faces c) all the FaceElements
+   3. It searches for a points two neighbours per Face, takes Vecotrs to them calculates FaceNormals and adds it to the Points Normal.
+   4. It goes through all the normale-Points and calculates the VertexNormale and includes it in the normals-Array.
+*/
+bool Model::buildVertexNormals ()
+{
+  
+  PRINTF(2)("Normals are being calculated.\n");
+
+  Vector* normArray = new Vector [vertices->getCount()/3];
+  for (int i=0; i<vertices->getCount()/3;i++)
+    normArray[i] = Vector(.0,.0,.0);
+  
+  int firstTouch;
+  int secondTouch;
+  Vector prevV;
+  Vector nextV;
+  Vector curV;
+
+  Group* tmpGroup = firstGroup;
+  while (tmpGroup)
+    {
+      Face* tmpFace = tmpGroup->firstFace;
+      while (tmpFace)
+	{
+	  if (tmpFace->firstElem)
+	    {
+	      FaceElement* firstElem = tmpFace->firstElem;
+	      FaceElement* prevElem;
+	      FaceElement* curElem = firstElem;
+	      FaceElement* nextElem;
+	      FaceElement* lastElem;
+	      // find last Element of the Chain. !! IMPORTANT:the last Element of the Chain must point to NULL, or it will resolv into an infinity-loop.
+	      while (curElem)
+		{
+		  prevElem = curElem;
+		  curElem = curElem->next;
+		}
+	      lastElem = prevElem;
+	      
+	      curElem = firstElem;
+	      for (int j=0; j<tmpFace->vertexCount; j++)
+		{
+		  if (!(nextElem = curElem->next))
+		    nextElem = firstElem;
+		  curElem->normalNumber = curElem->vertexNumber;
+		  
+		  curV = Vector (vertices->getArray()[curElem->vertexNumber*3], vertices->getArray()[curElem->vertexNumber*3+1], vertices->getArray()[curElem->vertexNumber*3+2]);
+		  prevV = Vector (vertices->getArray()[prevElem->vertexNumber*3], vertices->getArray()[prevElem->vertexNumber*3+1], vertices->getArray()[prevElem->vertexNumber*3+2]) - curV;
+		  nextV = Vector (vertices->getArray()[nextElem->vertexNumber*3], vertices->getArray()[nextElem->vertexNumber*3+1], vertices->getArray()[nextElem->vertexNumber*3+2]) - curV;
+		  normArray[curElem->vertexNumber] = normArray[curElem->vertexNumber] + nextV.cross(prevV);
+
+		  prevElem = curElem;
+		  curElem = curElem->next;
+		}
+	    }
+	  tmpFace = tmpFace->next;
+	}
+      tmpGroup = tmpGroup->next;
+    }
+
+  for (int i=0; i<vertices->getCount()/3;i++)
+    {
+      normArray[i].normalize();
+      PRINTF(3)("Found Normale number %d: (%f; %f, %f).\n", i, normArray[i].x, normArray[i].y, normArray[i].z);
+
+      this->normals->addEntry(normArray[i].x, normArray[i].y, normArray[i].z);
+
+    }
+  delete []normArray; 
+  
+}
+
+
+/**
+   \brief Includes a default model
+
+   This will inject a Cube, because this is the most basic model.
+*/
+void Model::cubeModel(void)
+{
+  this->addVertex ("-0.5 -0.5 0.5");
+  this->addVertex ("0.5 -0.5 0.5");
+  this->addVertex ("-0.5 0.5 0.5");
+  this->addVertex ("0.5 0.5 0.5");
+  this->addVertex ("-0.5 0.5 -0.5");
+  this->addVertex ("0.5 0.5 -0.5");
+  this->addVertex ("-0.5 -0.5 -0.5");
+  this->addVertex ("0.5 -0.5 -0.5");
+
+  this->addVertexTexture ("0.0 0.0");
+  this->addVertexTexture ("1.0 0.0");
+  this->addVertexTexture ("0.0 1.0");
+  this->addVertexTexture ("1.0 1.0");
+  this->addVertexTexture ("0.0 2.0");
+  this->addVertexTexture ("1.0 2.0");
+  this->addVertexTexture ("0.0 3.0");
+  this->addVertexTexture ("1.0 3.0");
+  this->addVertexTexture ("0.0 4.0");
+  this->addVertexTexture ("1.0 4.0");
+  this->addVertexTexture ("2.0 0.0");
+  this->addVertexTexture ("2.0 1.0");
+  this->addVertexTexture ("-1.0 0.0");
+  this->addVertexTexture ("-1.0 1.0");
+
+  this->addVertexNormal ("0.0 0.0 1.0");
+  this->addVertexNormal ("0.0 0.0 1.0");
+  this->addVertexNormal ("0.0 0.0 1.0");
+  this->addVertexNormal ("0.0 0.0 1.0");
+  this->addVertexNormal ("0.0 1.0 0.0");
+  this->addVertexNormal ("0.0 1.0 0.0");
+  this->addVertexNormal ("0.0 1.0 0.0");
+  this->addVertexNormal ("0.0 1.0 0.0");
+  this->addVertexNormal ("0.0 0.0 -1.0");
+  this->addVertexNormal ("0.0 0.0 -1.0");
+  this->addVertexNormal ("0.0 0.0 -1.0");
+  this->addVertexNormal ("0.0 0.0 -1.0");
+  this->addVertexNormal ("0.0 -1.0 0.0");
+  this->addVertexNormal ("0.0 -1.0 0.0");
+  this->addVertexNormal ("0.0 -1.0 0.0");
+  this->addVertexNormal ("0.0 -1.0 0.0");
+  this->addVertexNormal ("1.0 0.0 0.0");
+  this->addVertexNormal ("1.0 0.0 0.0");
+  this->addVertexNormal ("1.0 0.0 0.0");
+  this->addVertexNormal ("1.0 0.0 0.0");
+  this->addVertexNormal ("-1.0 0.0 0.0");
+  this->addVertexNormal ("-1.0 0.0 0.0");
+  this->addVertexNormal ("-1.0 0.0 0.0");
+  this->addVertexNormal ("-1.0 0.0 0.0");
+
+  /* normaleLess-testingMode
+  this->addFace ("1 2 4 3");
+  this->addFace ("3 4 6 5");
+  this->addFace ("5 6 8 7");
+  this->addFace ("7 8 2 1");
+  this->addFace ("2 8 6 4");
+  this->addFace ("7 1 3 5");
+  */
+
+  this->addFace ("1/1/1 2/2/2 4/4/3 3/3/4");
+  this->addFace ("3/3/5 4/4/6 6/6/7 5/5/8");
+  this->addFace ("5/5/9 6/6/10 8/8/11 7/7/12");
+  this->addFace ("7/7/13 8/8/14 2/10/15 1/9/16");
+  this->addFace ("2/2/17 8/11/18 6/12/19 4/4/20");
+  this->addFace ("7/13/21 1/1/22 3/3/23 5/14/24");
+
+}
+
+
+void Model::cylinderModel()
+{
+  int detailLevel = 10;
+  float size;
+  for (int i = 0; i < detailLevel; i++)
+    {
+      this->addVertex(sin((float)i/detailLevel), -size/2, cos((float)i/detailLevel));
+    }
+}
Index: /orxonox/branches/levelloader/src/importer/model.h
===================================================================
--- /orxonox/branches/levelloader/src/importer/model.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/importer/model.h	(revision 3417)
@@ -0,0 +1,125 @@
+/*!
+  \file model.h
+  \brief Contains the Model Class that handles 3D-Models
+*/
+
+#ifndef _MODEL_H
+#define _MODEL_H
+
+#include "../stdincl.h"
+
+#include "array.h"
+#include "material.h"
+#include "vector.h"
+
+using namespace std;
+
+enum PRIMITIVE {PLANE, CUBE, SPHERE, CYLINDER};
+
+//! Class that handles 3D-Models. it can also read them in and display them.
+class Model
+{
+ public:
+  Model(void);
+  Model(PRIMITIVE type);
+  Model(char* modelName);
+  virtual ~Model(void);
+
+  void setName(const char* name);
+  
+  void draw(void) const;
+  void draw(int groupNumber) const;
+  void draw(char* groupName) const;
+  int getGroupCount() const;
+
+ protected:
+  char* name;            //!< This is the name of the Model.
+  bool finalized;        //!< Sets the Object to be finalized.
+  
+  //! This is the placeholder of one Vertex beloning to a Face.
+  struct FaceElement
+  {
+    int vertexNumber;    //!< The number of the Vertex out of the Array* vertices, this vertex points to.
+    int normalNumber;    //!< The number of the Normal out of the Array* normals, this vertex points to.
+    int texCoordNumber;  //!< The number of the textureCoordinate out of the Array* vTexture, this vertex points to.
+    FaceElement* next;   //!< Point to the next FaceElement in this List.
+  };
+
+  //! This is the placeholder of a Face belonging to a Group of Faces.
+  /**
+     \todo take Material to a call for itself.
+
+     This can also be a Material-Change switch. 
+     That means if you want to change a Material inside of a group,
+     you can create an empty face and apply a material to it, and the Importer will cahnge Colors
+  */
+  struct Face 
+  {
+    int vertexCount;        //!< The Count of vertices this Face has.
+    FaceElement* firstElem; //!< Points to the first Vertex (FaceElement) of this Face.
+
+    char* materialString;   //!< The Name of the Material to which to Change.
+
+    Face* next;             //!< Pointer to the next Face.
+  }; 
+
+  //! Group to handle multiple Models per obj-file.
+  struct Group
+  {
+    char* name;         //!< the Name of the Group. this is an identifier, that can be accessed via the draw (char* name) function.
+
+    GLuint listNumber;  //!< The number of the GL-List this Group gets.
+    Face* firstFace;    //!< The first Face in this group.
+    Face* currentFace;  //!< The current Face in this Group (the one we are currently working with.)
+    int faceMode;       //!< The Mode the Face is in: initially -1, 0 for FaceList opened, 1 for Material,  3 for triangle, 4 for Quad, 5+ for Poly \todo ENUM...
+    int faceCount;      //!< The Number of Faces this Group holds.
+
+    Group* next;        //!< Pointer to the next Group.
+  };
+
+
+  Array* vertices;      //!< The Array that handles the Vertices.
+  int verticesCount;    //!< A global Counter for vertices.
+  Array* normals;       //!< The Array that handles the Normals.
+  Array* vTexture;      //!< The Array that handles the VertexTextureCoordinates.
+
+  
+  Group* firstGroup;    //!< The first of all groups.
+  Group* currentGroup;  //!< The currentGroup. this is the one we will work with.
+  int groupCount;       //!< The Count of Groups.
+
+  Material* material;   //!< Initial pointer to the Material. This can hold many materials, because Material can be added with Material::addMaterial(..)
+  float scaleFactor;    //!< The Factor with which the Model should be scaled. \todo maybe one wants to scale the Model after Initialisation
+
+  bool initialize(void);
+  bool initGroup(Group* group);
+  bool initFace (Face* face);
+  bool cleanup(void);
+  bool cleanupGroup(Group* group);
+  bool cleanupFace(Face* face);
+  bool cleanupFaceElement(FaceElement* faceElem);
+
+ public:
+  bool addGroup(char* groupString);
+  bool addVertex(char* vertexString);
+  bool addVertex(const float x, const float y, const float z);
+  bool addFace(char* faceString);
+  bool addFace(const float faceElemCount, ...);
+  bool addVertexNormal(char* normalString);
+  bool addVertexNormal(const float x, const float y, const float z);
+  bool addVertexTexture(char* vTextureString);
+  bool addVertexTexture(const float u, const float v);
+  bool addUseMtl(char* mtlString);
+  void finalize(void);
+
+ protected:
+  bool importToGL(void);
+  bool addGLElement(FaceElement* elem);
+
+  bool buildVertexNormals(void);
+
+  void cubeModel(void);
+  void cylinderModel(void);
+};
+
+#endif
Index: /orxonox/branches/levelloader/src/importer/objModel.cc
===================================================================
--- /orxonox/branches/levelloader/src/importer/objModel.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/importer/objModel.cc	(revision 3417)
@@ -0,0 +1,303 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Benjamin Grauer
+   co-programmer: ...
+*/
+
+#include "objModel.h"
+
+/**
+   \brief Crates a 3D-Model and loads in a File.
+   \param fileName file to parse and load (must be a .obj file)
+*/
+OBJModel::OBJModel(char* fileName)
+{
+  this->initializeOBJ();
+
+  this->importFile (fileName);
+
+  this->importToGL ();
+
+  this->cleanup();
+}
+
+/**
+   \brief Crates a 3D-Model, loads in a File and scales it.
+   \param fileName file to parse and load (must be a .obj file)
+   \param scaling The factor that the model will be scaled with.
+*/
+OBJModel::OBJModel(char* fileName, float scaling)
+{
+  this->initializeOBJ();
+  this->scaleFactor = scaling;
+
+  this->importFile (fileName);
+
+  this->importToGL ();
+
+  this->cleanup();
+}
+
+/**
+   \brief deletes an OBJModel.
+
+   Looks if any from model allocated space is still in use, and if so deleted it.
+*/
+OBJModel::~OBJModel()
+{
+  PRINTF(4)("Deleting the obj-names\n");
+  if (this->objPath)
+    delete []this->objPath;
+  if (this->objFileName)
+    delete []this->objFileName;
+  if (this->mtlFileName)
+    delete []this->mtlFileName;
+}
+
+/**
+   \brief Initializes an obj-model
+*/
+void OBJModel::initializeOBJ(void)
+{
+  this->objPath = NULL;
+  this->objFileName = NULL;
+  this->mtlFileName = NULL;
+
+  this->initialize();
+}
+
+/**
+   \brief Imports a obj file and handles the the relative location
+   \param fileName The file to import
+*/
+bool OBJModel::importFile (char* fileName)
+{
+  PRINTF(3)("preparing to read in file: %s\n", fileName);
+
+
+#ifdef __WIN32__
+  // win32 path reading
+  char pathSplitter= '\\';
+#else /* __WIN32__ */
+  // unix path reading
+  char pathSplitter='/';
+#endif /* __WIN32__ */
+  char* tmpName = fileName;
+  if (tmpName[0] == pathSplitter)
+    tmpName++;
+  char* name = tmpName;
+  while (( tmpName = strchr (tmpName+1, pathSplitter)))
+    {
+      name = tmpName+1;
+    }
+  this->objPath = new char[name-fileName+1];
+  strncpy(this->objPath, fileName, name-fileName);
+  this->objPath[name-fileName] = '\0';
+  if (verbose>=2)
+    if (strlen(objPath)> 0)
+      PRINTF(0)("Resolved file %s to folder: %s.\n", name, objPath);
+    else
+      PRINTF(0)("Resolved file %s.\n", name);
+  
+  this->setName(name);
+  if (this->material)
+    this->material->addTexturePath(this->objPath);
+  this->objFileName = new char[strlen(name)+1];
+  strcpy (this->objFileName, name);
+  this->readFromObjFile ();
+  return true;
+}
+
+/**
+   \brief Reads in the .obj File and sets all the Values.
+   This function does read the file, parses it for the occurence of things like vertices, faces and so on, and executes the specific tasks
+*/
+bool OBJModel::readFromObjFile (void)
+{
+  char* fileName = new char [strlen(objPath)+strlen(objFileName)+1];
+  if (this->objFileName != NULL && !strcmp(this->objFileName, ""))
+    return false;
+  strcpy(fileName, this->objPath);
+  strcat(fileName, this->objFileName);
+
+  ifstream* OBJ_FILE = new ifstream(fileName);
+  if (OBJ_FILE->fail())
+    {
+      PRINTF(1)("unable to open .OBJ file: %s\n Loading cube-Model instead.\n", fileName);
+      cubeModel();
+      OBJ_FILE->close();
+      delete []fileName;
+      delete OBJ_FILE;
+      return false;
+    }
+  PRINTF(2)("Reading from opened file %s\n", fileName);
+  char Buffer[10000];
+  while(!OBJ_FILE->eof())
+    {
+      OBJ_FILE->getline(Buffer, 10000);
+      PRINTF(3)("Read input line: %s\n", Buffer);
+      
+
+      // case vertice
+      if (!strncmp(Buffer, "v ", 2))
+	{
+	  this->addVertex(Buffer+2);
+	}
+
+      // case face
+      else if (!strncmp(Buffer, "f ", 2))
+	{
+	  this->addFace (Buffer+2);
+	}
+      
+      else if (!strncmp(Buffer, "mtllib ", 7))
+	{
+	  this->readMtlLib (Buffer+7);
+	}
+
+      else if (!strncmp(Buffer, "usemtl ", 7))
+	{
+	  this->addUseMtl (Buffer+7);
+	}
+
+      // case VertexNormal
+      else if (!strncmp(Buffer, "vn ", 3))
+	{
+	  this->addVertexNormal(Buffer+3);
+	}
+      
+      // case VertexTextureCoordinate
+      else if (!strncmp(Buffer, "vt ", 3))
+	{
+	  this->addVertexTexture(Buffer+3);
+	}
+      // case group
+      else if (!strncmp(Buffer, "g ", 2))
+	{
+	  this->addGroup (Buffer+2);
+	}
+      else if (!strncmp(Buffer, "s ", 2)) //! \todo smoothing groups have to be implemented
+	{
+	  if (verbose >= 2)
+	    PRINTF(2)("smoothing groups not supportet yet. line: %s\n", Buffer);
+	}
+    }
+  OBJ_FILE->close();
+  delete OBJ_FILE;
+  delete []fileName;
+  return true;
+
+}
+
+/** 
+    \brief Function to read in a mtl File.
+    \param mtlFile The .mtl file to read
+
+    This Function parses all Lines of an mtl File.
+    The reason for it not to be in the materials-class is,
+    that a material does not have to be able to read itself in from a File.
+
+*/
+bool OBJModel::readMtlLib (char* mtlFile)
+{
+  this->mtlFileName = new char [strlen(mtlFile)+1];
+  strcpy(this->mtlFileName, mtlFile);
+  char* fileName = new char [strlen(objPath) + strlen(this->mtlFileName)+1];
+  strcpy(fileName, this->objPath);
+  strcat(fileName, this->mtlFileName);
+  
+
+  PRINTF(3)("Opening mtlFile: %s\n", fileName);
+
+  ifstream* MTL_FILE = new ifstream (fileName);
+  if (MTL_FILE->fail())
+    {
+      PRINTF(1)("unable to open file: %s\n", fileName);
+      MTL_FILE->close();
+      delete []fileName;
+      delete MTL_FILE;
+      return false;
+    }
+  char Buffer[500];
+  Material* tmpMat = material;
+  while(!MTL_FILE->eof())
+    {
+      MTL_FILE->getline(Buffer, 500);
+      PRINTF(4)("found line in mtlFile: %s\n", Buffer);
+      
+
+      // create new Material
+      if (!strncmp(Buffer, "newmtl ", 7))
+	{
+	  tmpMat = tmpMat->addMaterial(Buffer+7);
+	  //	  PRINTF(2)("%s, %p\n", tmpMat->getName(), tmpMat);
+	}
+      // setting a illumMode
+      else if (!strncmp(Buffer, "illum ", 6))
+	{
+	  tmpMat->setIllum(Buffer+6);
+
+	}
+      // setting Diffuse Color
+      else if (!strncmp(Buffer, "Kd ", 3))
+	{
+	  tmpMat->setDiffuse(Buffer+3);
+	}
+      // setting Ambient Color
+      else if (!strncmp(Buffer, "Ka ", 3))
+	{
+	  tmpMat->setAmbient(Buffer+3);
+	}
+      // setting Specular Color
+      else if (!strncmp(Buffer, "Ks ", 3))
+	{
+	  tmpMat->setSpecular(Buffer+3);
+	}
+      // setting The Specular Shininess
+      else if (!strncmp(Buffer, "Ns ", 3))
+	{
+	  tmpMat->setShininess(Buffer+3);
+	}
+      // setting up transparency
+      else if (!strncmp(Buffer, "d ", 2))
+	{
+	  tmpMat->setTransparency(Buffer+2);
+	}
+      else if (!strncmp(Buffer, "Tf ", 3))
+	{
+	  tmpMat->setTransparency(Buffer+3);
+	}
+      
+      else if (!strncmp(Buffer, "map_Kd ", 7))
+	{
+	  tmpMat->setDiffuseMap(Buffer+7);
+	}
+      else if (!strncmp(Buffer, "map_Ka ", 7))
+	{
+	  tmpMat->setAmbientMap(Buffer+7);
+	}
+      else if (!strncmp(Buffer, "map_Ks ", 7))
+	{
+	  tmpMat->setSpecularMap(Buffer+7);
+	}
+      else if (!strncmp(Buffer, "bump ", 5))
+	{
+	  tmpMat->setBump(Buffer+7);
+	}
+     
+
+    }
+  MTL_FILE->close();
+  delete []fileName;
+  delete MTL_FILE;
+  return true;
+}
Index: /orxonox/branches/levelloader/src/importer/objModel.h
===================================================================
--- /orxonox/branches/levelloader/src/importer/objModel.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/importer/objModel.h	(revision 3417)
@@ -0,0 +1,33 @@
+/*!
+  \file objmodel.h
+  \brief Contains the OBJ-model Class, that reads in a Model from a .obj-file
+*/
+
+#ifndef _OBJMODEL_H
+#define _OBJMODEL_H
+
+#include "model.h"
+
+//! A Class, that handles the parsing of an obj-file, and inclusion as a Model.
+class OBJModel : public Model
+{
+ public:
+  OBJModel(char* fileName);
+  OBJModel(char* fileName, float scaling);
+  virtual ~OBJModel();
+  void initializeOBJ(void);
+
+ private:
+  // Variables
+  char* objPath;        //!< The Path where the obj and mtl-file are located.
+  char* objFileName;    //!< The Name of the obj-file.
+  char* mtlFileName;    //!< The Name of the mtl-file (parsed out of the obj-file)
+
+  ///// readin /////
+  bool importFile (char* fileName);
+  bool readFromObjFile (void);
+  bool readMtlLib (char* matFile);
+
+};
+
+#endif /* _OBJ_MODEL_H */
Index: /orxonox/branches/levelloader/src/importer/texture.cc
===================================================================
--- /orxonox/branches/levelloader/src/importer/texture.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/importer/texture.cc	(revision 3417)
@@ -0,0 +1,956 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Benjamin Grauer
+   co-programmer: ...
+
+   TGA-code: borrowed from nehe-Tutorials
+
+*/
+
+
+#include "texture.h"
+
+// headers only for PathList
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdlib.h>
+#include <fstream>
+
+/**
+   \brief creates a ned PathList.
+   
+   It is a good idea to use this as an initial List,
+   because if you give on a name the Path will not be checked for its existence.
+*/
+PathList::PathList()
+{
+  this->pathName = NULL;
+  this->next = NULL;
+}
+
+/**
+   \brief Creates a new PathList with a Name.
+   \param pName the Name of The Path.
+
+   This function just adds the Path without checking if it exists.
+*/
+PathList::PathList(char* pName)
+{
+  this->pathName = new char [strlen(pName)+1];
+  strcpy (this->pathName, pName);
+  this->next = NULL;
+}
+
+/**
+   \brief destroys a PathList
+
+   It does this by deleting the Name and then delete its preceding PathList.
+*/
+PathList::~PathList()
+{
+  if (this->pathName)
+    delete []this->pathName;
+  if (this->next)
+    delete this->next;
+}
+
+PathList* PathList::firstPath = NULL;
+
+/**
+   \returns A Pointer to the first Path of the Pathlist
+*/
+PathList* PathList::getInstance(void)
+{
+  if (firstPath)
+    return firstPath;
+  firstPath = new PathList();
+}
+/**
+   \brief Adds a new Pathlist Element.
+   \param pName
+   
+   Adding a Path automatically checks if the Path exists,
+   and if it does not it will not add it to the List.
+*/
+void PathList::addPath (char* pName)
+{
+  if (pName[0] == '\0')
+    {
+      PRINTF(3)("not Adding empty Path to the List.\n");
+      return;
+    }
+  char* tmpPName = new char[strlen(pName)];
+  strncpy(tmpPName, pName, strlen(pName)-1);
+  tmpPName[strlen(pName)-1] = '\0';
+  if (access (tmpPName, F_OK) == 0)
+    {
+      struct stat status;
+      stat(tmpPName, &status);
+      if (status.st_mode & S_IFDIR)
+	{
+	  PRINTF(2)("Adding Path %s to the PathList.\n", pName);
+	  PathList* tmpPathList = this;
+	  while (tmpPathList->next)
+	    tmpPathList = tmpPathList->next;
+	  tmpPathList->next = new PathList(pName);
+	}
+      else
+	PRINTF(2)("You tried to add non-folder %s to a PathList.\n", tmpPName);
+    }
+  else
+      PRINTF(2)("You tried to add non-existing folder %s to a PathList.\n", tmpPName);
+  delete []tmpPName;
+}
+
+
+
+/**
+   \brief Constructor for a Texture
+*/
+Texture::Texture(void)
+{
+  this->pImage = new Image;
+  this->pImage->data = NULL;
+  this->map = NULL;
+  this->texture = 0;
+}
+
+/**
+   \brief Destructor of a Texture
+   
+   Frees Data, and deletes the textures from GL
+*/
+Texture::~Texture(void)
+{
+  if (this->pImage->data)
+    delete []this->pImage->data;
+  delete pImage;
+  if (this->texture)
+    glDeleteTextures(1, &this->texture);
+}
+
+/**
+   \brief Searches for a Texture inside one of the defined Paths
+   \param texName The name of the texture o search for.
+   \returns pathName+texName if texName was found in the pathList. NULL if the Texture is not found.
+*/
+char* Texture::searchTextureInPaths(char* texName) const
+{
+  char* tmpName = NULL;
+  PathList* pList = PathList::getInstance();
+  while (pList)
+    {
+      if (pList->pathName)
+	{
+	  tmpName = new char [strlen(pList->pathName)+strlen(texName)+1];
+	  strcpy(tmpName, pList->pathName);
+	}
+      else
+	{
+	  tmpName = new char [strlen(texName)+1];
+	  tmpName[0]='\0';
+	}
+      strcat(tmpName, texName);
+      if (access (tmpName, F_OK) == 0)
+	return tmpName;
+      
+      if (tmpName)
+	delete []tmpName;
+      tmpName = NULL;
+      pList = pList->next;
+    }
+  return NULL;
+}
+
+/**
+   \brief a Simple function that switches two char values
+   \param a The first value
+   \param b The second value
+*/
+inline void Texture::swap (unsigned char &a, unsigned char &b)
+{
+  unsigned char temp;
+  temp = a;
+  a    = b;
+  b    = temp;
+}
+
+
+/**
+   \brief Loads a Texture to the openGL-environment.
+   \param pImage The Image to load to openGL
+   \param texture The Texture to apply it to.
+*/
+bool Texture::loadTexToGL (Image* pImage)
+{
+  PRINTF(2)("Loading texture to OpenGL-Environment.\n");
+  glGenTextures(1, &this->texture);
+  glBindTexture(GL_TEXTURE_2D, this->texture);
+  /* not Working, and not needed. 
+  glTexImage2D( GL_TEXTURE_2D, 0, 3, width,
+		height, 0, GL_BGR,
+		GL_UNSIGNED_BYTE, map->pixels );
+  */ 
+  gluBuild2DMipmaps(GL_TEXTURE_2D, 3, pImage->width, pImage->height, pImage->format, GL_UNSIGNED_BYTE, pImage->data);
+  
+  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
+  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR_MIPMAP_LINEAR);	
+}
+
+
+#ifdef HAVE_SDL_SDL_IMAGE_H
+bool Texture::loadImage(char* imageName)
+{
+  char* imgNameWithPath = searchTextureInPaths(imageName);
+  if (imgNameWithPath)
+    {
+      this->map=IMG_Load(imgNameWithPath);
+      if(!map)
+	{
+	  PRINTF(1)("IMG_Load: %s\n", IMG_GetError());
+	  return false;
+	}
+      pImage->height = map->h;
+      pImage->width  = map->w;
+      pImage->data   = (GLubyte*)map->pixels;
+      pImage->bpp    = map->format->BytesPerPixel;
+      if (pImage->bpp == 3)
+	pImage->format = GL_RGB;
+      else if (pImage->bpp == 4)
+	pImage->format = GL_RGBA;
+	  
+      PRINTF(0)("Bits Per Pixel: %d\n", pImage->bpp);
+      if( !IMG_isPNG(SDL_RWFromFile(imgNameWithPath, "rb")) && !IMG_isJPG(SDL_RWFromFile(imgNameWithPath, "rb")))
+	for (int i=0;i<map->h * map->w *3;i+=3)
+	  { 
+	    GLuint temp = pImage->data[i];
+	    pImage->data[i] = pImage->data[i+2];
+	    pImage->data[i+2] = temp;
+	  }
+      /* this is the real swapping algorithm */
+      for( int i = 0 ; i < (pImage->height / 2) ; ++i )
+	for( int j = 0 ; j < pImage->width * pImage->bpp; j += pImage->bpp )
+	  for(int k = 0; k < pImage->bpp; ++k)
+	    swap( pImage->data[ (i * pImage->width * pImage->bpp) + j + k], pImage->data[ ( (pImage->height - i - 1) * pImage->width * pImage->bpp ) + j + k]);
+ 
+      this->loadTexToGL (this->pImage);
+      SDL_FreeSurface(map);
+      this->pImage->data = NULL;
+    }
+  else
+    {
+      PRINTF(1)("Image not Found: %s\n", imgNameWithPath);
+      return false;
+    }
+}
+
+
+#else /* HAVE_SDL_SDL_IMAGE_H */
+/**
+   \brief Makes the Programm ready to Read-in a texture-File
+   1. Checks what type of Image should be imported
+   2. ToDO: Checks where to find the Image
+*/
+bool Texture::loadImage(char* imageName)
+{
+  char* imgNameWithPath = searchTextureInPaths(imageName);
+  if (imgNameWithPath)
+    {
+      if (!strncmp(imgNameWithPath+strlen(imgNameWithPath)-4, ".bmp", 4))
+	{
+	  PRINTF(3)("Requested bmp-image. Trying to Import.\n");
+	  return this->loadBMP(imgNameWithPath);
+	}
+      
+      else if (!strncmp(imgNameWithPath+strlen(imgNameWithPath)-4, ".jpg", 4) || !strncmp(imgNameWithPath+strlen(imgNameWithPath)-5, ".jpg", 5))
+	{
+	  PRINTF(3)("Requested jpeg-image. Trying to Import\n");
+	  return this->loadJPG(imgNameWithPath);
+	}
+      else if (!strncmp(imgNameWithPath+strlen(imgNameWithPath)-4, ".tga", 4))
+	{
+	  PRINTF(3)("Requested tga-image. Trying to Import\n");
+	  return this->loadTGA(imgNameWithPath);
+	}
+      else if (!strncmp(imgNameWithPath+strlen(imgNameWithPath)-4, ".png", 4))
+	{
+	  PRINTF(3)("Requested png-image. Trying to Import\n");
+	  return this->loadPNG(imgNameWithPath);
+	}
+      else
+	{
+	  PRINTF(1)("Requested Image was not recognized in its type. (Maybe a type-Cast-error.)\n FileName: %s", imgNameWithPath);
+	  return false;
+	}
+    }
+  else
+    {
+      PRINTF(1)("Image not Found: %s\n", imgNameWithPath);
+      return false;
+    }
+}
+
+/**
+   \brief reads in a Windows BMP-file, and imports it to openGL.
+   \param bmpName The name of the Image to load.
+   \param texture A pointer to the Texture which should be read to.
+*/
+bool Texture::loadBMP (char* bmpName)
+{
+  FILE *file;
+  unsigned long size;                 // size of the image in bytes.
+  unsigned long i;                    // standard counter.
+  unsigned short int planes;          // number of planes in image (must be 1) 
+  unsigned short int bpp;             // number of bits per pixel (must be 24)
+  GLuint temp;                          // temporary color storage for bgr-rgb conversion.
+
+  // make sure the file is there.
+  if ((file = fopen(bmpName, "rb"))==NULL)
+    {
+      PRINTF(1)("File Not Found : %s\n",bmpName);
+      return false;
+    }
+  // seek through the bmp header, up to the width/height:
+  fseek(file, 18, SEEK_CUR);
+  
+  // read the width
+  if ((i = fread(&pImage->width, 4, 1, file)) != 1) 
+    {
+      PRINTF(1)("Error reading width from %s.\n", bmpName);
+      return false;
+    }
+  // read the height 
+  if ((i = fread(&pImage->height, 4, 1, file)) != 1) 
+    {
+      PRINTF(1)("Error reading height from %s.\n", bmpName);
+      return false;
+    }
+  
+  // calculate the size (assuming 24 bits or 3 bytes per pixel).
+  size = pImage->width * pImage->height * 3;
+  
+  // read the planes
+  if ((fread(&planes, 2, 1, file)) != 1) 
+    {
+      PRINTF(1)("Error reading planes from %s.\n", bmpName);
+      return false;
+    }
+  if (planes != 1) 
+    {
+      PRINTF(1)("Planes from %s is not 1: %u\n", bmpName, planes);
+      return false;
+    }
+  
+  // read the bpp
+  if ((i = fread(&bpp, 2, 1, file)) != 1) 
+    {
+      PRINTF(1)("Error reading bpp from %s.\n", bmpName);
+      return false;
+    }
+  if (bpp != 24) 
+    {
+      PRINTF(1)("Bpp from %s is not 24: %u\n", bmpName, bpp);
+      return false;
+    }
+  
+  // seek past the rest of the bitmap header.
+  fseek(file, 24, SEEK_CUR);
+  
+  // read the data. 
+  pImage->data = (GLubyte *) malloc(size);
+  if (pImage->data == NULL) 
+    {
+      PRINTF(1)("Error allocating memory for color-corrected image data");
+      return false;	
+    }
+  
+  if ((i = fread(pImage->data, size, 1, file)) != 1) 
+    {
+      PRINTF(1)("Error reading image data from %s.\n", bmpName);
+      return false;
+    }
+  fclose(file);
+
+  // reverse all of the colors. (bgr -> rgb)
+  for (i=0;i<size;i+=3) 
+    { 
+      temp = pImage->data[i];
+      pImage->data[i] = pImage->data[i+2];
+      pImage->data[i+2] = temp;
+    }
+  this->loadTexToGL (pImage);
+  
+
+  if (pImage)
+    {
+      if (pImage->data)
+	{
+	  free(pImage->data);
+	}
+      
+      free(pImage);
+    }
+  return true;
+
+}
+
+/**
+   \brief reads in a jpg-file
+   \param jpgName the Name of the Image to load
+   \param texture a reference to the Texture to write the image to
+*/
+bool Texture::loadJPG (char* jpgName)
+{
+#ifdef HAVE_JPEGLIB_H
+  struct jpeg_decompress_struct cinfo;
+  Image *pImage = NULL;
+  FILE *pFile;
+  
+  // Open a file pointer to the jpeg file and check if it was found and opened 
+  if((pFile = fopen(jpgName, "rb")) == NULL) 
+    {
+      // Display an error message saying the file was not found, then return NULL
+      PRINTF(1)("Unable to load JPG File %s.\n", jpgName);
+      return false;
+    }
+  
+  // Create an error handler
+  jpeg_error_mgr jerr;
+  
+  // Have our compression info object point to the error handler address
+  cinfo.err = jpeg_std_error(&jerr);
+  
+  // Initialize the decompression object
+  jpeg_create_decompress(&cinfo);
+  
+  // Specify the data source (Our file pointer)	
+  jpeg_stdio_src(&cinfo, pFile);
+  
+  // Allocate the structure that will hold our eventual jpeg data (must free it!)
+  pImage = (Image*)malloc(sizeof(Image));
+  
+  // DECOFING
+  // Read in the header of the jpeg file
+  jpeg_read_header(&cinfo, TRUE);
+  
+  // Start to decompress the jpeg file with our compression info
+  jpeg_start_decompress(&cinfo);
+  
+  // Get the image dimensions and row span to read in the pixel data
+  pImage->rowSpan = cinfo.image_width * cinfo.num_components;
+  pImage->width   = cinfo.image_width;
+  pImage->height   = cinfo.image_height;
+  
+  // Allocate memory for the pixel buffer
+  pImage->data = new unsigned char[pImage->rowSpan * pImage->height];
+  
+  // Here we use the library's state variable cinfo.output_scanline as the
+  // loop counter, so that we don't have to keep track ourselves.
+  
+  // Create an array of row pointers
+  unsigned char** rowPtr = new unsigned char*[pImage->height];
+  for (int i = 0; i < pImage->height; i++)
+    rowPtr[i] = &(pImage->data[i*pImage->rowSpan]);
+  
+  // Now comes the juice of our work, here we extract all the pixel data
+  int rowsRead = 0;
+  while (cinfo.output_scanline < cinfo.output_height) 
+    {
+      // Read in the current row of pixels and increase the rowsRead count
+      rowsRead += jpeg_read_scanlines(&cinfo, &rowPtr[rowsRead], cinfo.output_height - rowsRead);
+    }
+  
+  // Delete the temporary row pointers
+  delete [] rowPtr;
+  
+  // Finish decompressing the data
+  jpeg_finish_decompress(&cinfo);//  decodeJPG(&cinfo, pImage);
+  
+  // This releases all the stored memory for reading and decoding the jpeg
+  jpeg_destroy_decompress(&cinfo);
+  
+  // Close the file pointer that opened the file
+  fclose(pFile);
+  
+
+  if(pImage == NULL)
+    exit(0);
+  
+  this->loadTexToGL (pImage);
+  if (pImage)
+    {
+      if (pImage->data)
+	{
+	  free(pImage->data);
+	}
+      
+      free(pImage);
+    }
+  return true;
+#else /* HAVE_JPEGLIB_H */
+  PRINTF(1)("sorry, but you did not compile with jpeg-support.\nEither install SDL_image or jpeglib, and recompile to see the image\n");
+  return false;
+#endif /* HAVE_JPEGLIB_H */
+
+}
+
+/**
+   \brief reads in a tga-file
+   \param tgaName the Name of the Image to load
+   \param texture a reference to the Texture to write the image to
+*/
+bool Texture::loadTGA(const char * tgaName)
+{
+  typedef struct
+  {
+    GLubyte Header[12];
+  } TGAHeader;
+  TGAHeader tgaHeader;			
+  
+  GLubyte uTGAcompare[12] = {0,0,2, 0,0,0,0,0,0,0,0,0};	// Uncompressed TGA Header 
+  GLubyte cTGAcompare[12] = {0,0,10,0,0,0,0,0,0,0,0,0};	// Compressed TGA Header 
+  FILE * fTGA;
+  fTGA = fopen(tgaName, "rb");
+
+  if(fTGA == NULL)
+    {
+      PRINTF(1)("Error could not open texture file: %s\n", tgaName);
+      return false;
+    }
+  
+  if(fread(&tgaHeader, sizeof(TGAHeader), 1, fTGA) == 0)
+    {
+      PRINTF(1)("Error could not read file header of %s\n", tgaName);
+      if(fTGA != NULL)
+	{
+	  fclose(fTGA);
+	}
+      return false;
+    }
+  
+  if(memcmp(uTGAcompare, &tgaHeader, sizeof(TGAHeader)) == 0)
+    {
+      loadUncompressedTGA(tgaName, fTGA);
+      if (fTGA)
+	fclose (fTGA);
+    }
+  else if(memcmp(cTGAcompare, &tgaHeader, sizeof(TGAHeader)) == 0)
+    {
+      loadCompressedTGA(tgaName, fTGA);
+	if (fTGA)
+	  fclose (fTGA);
+    }
+  else
+    {
+      PRINTF(1)("Error TGA file be type 2 or type 10\n");
+      if (fTGA)
+	fclose(fTGA);
+      return false;
+    }
+  return true;
+}
+
+/**
+   \brief reads in an uncompressed tga-file
+   \param filename the Name of the Image to load
+   \param fTGA a Pointer to a File, that should be read
+   \param texture a reference to the Texture to write the image to
+*/
+bool Texture::loadUncompressedTGA(const char * filename, FILE * fTGA)
+{
+  GLubyte header[6];      // First 6 Useful Bytes From The Header 
+  GLuint  bytesPerPixel;  // Holds Number Of Bytes Per Pixel Used In The TGA File 
+  GLuint  imageSize;	  // Used To Store The Image Size When Setting Aside Ram 
+  GLuint  temp;		  // Temporary Variable
+  GLuint  type;
+  GLuint  Height;	  // Height of Image 
+  GLuint  Width;	  // Width of Image 
+  GLuint  Bpp;		  // Bits Per Pixel 
+
+  GLuint cswap;
+  if(fread(header, sizeof(header), 1, fTGA) == 0)
+    {
+      PRINTF(1)("Error could not read info header\n");
+      return false;
+    }
+  
+  Width = pImage->width  = header[1] * 256 + header[0];
+  Height =  pImage->height = header[3] * 256 + header[2];
+  Bpp = pImage->bpp = header[4];
+  // Make sure all information is valid
+  if((pImage->width <= 0) || (pImage->height <= 0) || ((pImage->bpp != 24) && (pImage->bpp !=32)))
+    {
+      PRINTF(1)("Error invalid texture information\n");
+      return false;
+    }
+  
+  if(pImage->bpp == 24)	
+    {
+      pImage->type = GL_RGB;
+    }
+  else
+    {
+      pImage->type = GL_RGBA;
+    }
+  
+  bytesPerPixel	= (Bpp / 8);
+  imageSize = (bytesPerPixel * Width * Height);
+  pImage->data = (GLubyte*) malloc(imageSize);
+  
+  if(pImage->data == NULL)
+    {
+      PRINTF(1)("Error could not allocate memory for image\n");
+      return false;
+    }
+  
+  if(fread(pImage->data, 1, imageSize, fTGA) != imageSize)
+    {
+      PRINTF(1)("Error could not read image data\n");
+      if(pImage->data != NULL)
+	{
+	  free(pImage->data);
+	}
+      return false;
+    }
+  
+  for(cswap = 0; cswap < (int)imageSize; cswap += bytesPerPixel)
+    {
+      pImage->data[cswap] ^= pImage->data[cswap+2] ^=
+	pImage->data[cswap] ^= pImage->data[cswap+2];
+    }
+  
+  this->loadTexToGL (pImage);
+
+  return true;
+}
+
+/**
+   \brief reads in a compressed tga-file
+   \param filename the Name of the Image to load
+   \param fTGA a Pointer to a File, that should be read
+   \param texture a reference to the Texture to write the image to
+*/
+bool Texture::loadCompressedTGA(const char * filename, FILE * fTGA)
+{
+  GLubyte header[6];      // First 6 Useful Bytes From The Header 
+  GLuint  bytesPerPixel;  // Holds Number Of Bytes Per Pixel Used In The TGA File 
+  GLuint  imageSize;	  // Used To Store The Image Size When Setting Aside Ram 
+  GLuint  temp;		  // Temporary Variable
+  GLuint  type;
+  GLuint  Height;	  // Height of Image 
+  GLuint  Width;	  // Width of Image 
+  GLuint  Bpp;		  // Bits Per Pixel 
+
+  if(fread(header, sizeof(header), 1, fTGA) == 0)
+    {
+      PRINTF(1)("Error could not read info header\n");
+      return false;
+    }
+  
+  Width = pImage->width  = header[1] * 256 + header[0];
+  Height = pImage->height = header[3] * 256 + header[2];
+  Bpp = pImage->bpp	= header[4];
+
+  GLuint pixelcount	= Height * Width;
+  GLuint currentpixel	= 0;
+  GLuint currentbyte	= 0;
+  GLubyte * colorbuffer = (GLubyte *)malloc(bytesPerPixel);
+
+  //Make sure all pImage info is ok 
+  if((pImage->width <= 0) || (pImage->height <= 0) || ((pImage->bpp != 24) && (pImage->bpp !=32)))
+    {
+      PRINTF(1)("Error Invalid pImage information\n");
+      return false;
+    }
+  
+  bytesPerPixel	= (Bpp / 8);
+  imageSize		= (bytesPerPixel * Width * Height);
+  pImage->data	= (GLubyte*) malloc(imageSize);
+  
+  if(pImage->data == NULL)
+    {
+      PRINTF(1)("Error could not allocate memory for image\n");
+      return false;
+    }
+  
+  do
+    {
+      GLubyte chunkheader = 0;
+      
+      if(fread(&chunkheader, sizeof(GLubyte), 1, fTGA) == 0)
+	{
+	  PRINTF(1)("Error could not read RLE header\n");
+	  if(pImage->data != NULL)
+	    {
+	      free(pImage->data);
+	    }
+	  return false;
+	}
+      // If the ehader is < 128, it means the that is the number of RAW color packets minus 1 
+      if(chunkheader < 128)
+	{
+	  short counter;
+	  chunkheader++;
+	  // Read RAW color values
+	  for(counter = 0; counter < chunkheader; counter++)
+	    { 
+	      // Try to read 1 pixel 
+	      if(fread(colorbuffer, 1, bytesPerPixel, fTGA) != bytesPerPixel)
+		{
+		  PRINTF(1)("Error could not read image data\n");
+		  if(colorbuffer != NULL)
+		    {
+		      free(colorbuffer);
+		    }
+		  
+		  if(pImage->data != NULL)
+		    {
+		      free(pImage->data);
+		    }
+		  
+		  return false;	
+		}
+	      // write to memory 
+	      // Flip R and B vcolor values around in the process 
+	      pImage->data[currentbyte	  ] = colorbuffer[2];				    
+	      pImage->data[currentbyte + 1] = colorbuffer[1];
+	      pImage->data[currentbyte + 2] = colorbuffer[0];
+	      
+	      if(bytesPerPixel == 4) // if its a 32 bpp image 
+		{
+		  pImage->data[currentbyte + 3] = colorbuffer[3];// copy the 4th byte 
+		}
+	      
+	      currentbyte += bytesPerPixel;
+	      currentpixel++;
+
+	      // Make sure we haven't read too many pixels 
+	      if(currentpixel > pixelcount)	
+		{
+		  PRINTF(1)("Error too many pixels read\n");
+		  if(colorbuffer != NULL)
+		    {
+		      free(colorbuffer);
+		    }
+		  
+		  if(pImage->data != NULL)
+		    {
+		      free(pImage->data);
+		    }
+		  
+		  return false;
+		}
+	    }
+	}
+      // chunkheader > 128 RLE data, next color  reapeated chunkheader - 127 times
+      else
+	{
+	  short counter;
+	  chunkheader -= 127;	// Subteact 127 to get rid of the ID bit 
+	  if(fread(colorbuffer, 1, bytesPerPixel, fTGA) != bytesPerPixel) // Attempt to read following color values 
+	    {
+	      PRINTF(1)("Error could not read from file");
+	      if(colorbuffer != NULL)
+		{
+		  free(colorbuffer);
+		}
+	      
+	      if(pImage->data != NULL)
+		{
+		  free(pImage->data);
+		}
+	      
+	      return false;
+	    }
+	  
+	  for(counter = 0; counter < chunkheader; counter++) //copy the color into the image data as many times as dictated
+	    {							
+	      // switch R and B bytes areound while copying
+	      pImage->data[currentbyte	  ] = colorbuffer[2];
+	      pImage->data[currentbyte + 1] = colorbuffer[1];
+	      pImage->data[currentbyte + 2] = colorbuffer[0];
+	      
+	      if(bytesPerPixel == 4)
+		{
+		  pImage->data[currentbyte + 3] = colorbuffer[3];
+		}
+	      
+	      currentbyte += bytesPerPixel;
+	      currentpixel++;
+	      
+	      if(currentpixel > pixelcount)
+		{
+		  PRINTF(1)("Error too many pixels read\n");
+		  if(colorbuffer != NULL)
+		    {
+		      free(colorbuffer);
+		    }
+		  
+		  if(pImage->data != NULL)
+		    {
+		      free(pImage->data);
+		    }
+		  
+		  return false;
+		}
+	    }
+	}
+    }
+  
+  while(currentpixel < pixelcount);	// Loop while there are still pixels left
+
+  this->loadTexToGL (pImage);
+
+  return true;
+}
+
+
+/*
+static int ST_is_power_of_two(unsigned int number)
+{
+  return (number & (number - 1)) == 0;
+}
+*/
+
+/**
+   \brief reads in a png-file
+   \param pngName the Name of the Image to load
+   \param texture a reference to the Texture to write the image to
+*/
+bool Texture::loadPNG(const char* pngName)
+{
+#ifdef HAVE_PNG_H
+
+  FILE *PNG_file = fopen(pngName, "rb");
+  if (PNG_file == NULL)
+    {
+      return 0;
+    }
+  
+  GLubyte PNG_header[8];
+  
+  fread(PNG_header, 1, 8, PNG_file);
+  if (png_sig_cmp(PNG_header, 0, 8) != 0)
+    {
+      PRINTF(2)("Not Recognized as a pngFile\n");
+      fclose (PNG_file);
+      return 0;
+    }
+  
+  png_structp PNG_reader = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
+  if (PNG_reader == NULL)
+    {
+      fclose(PNG_file);
+      return 0;
+    }
+  
+  png_infop PNG_info = png_create_info_struct(PNG_reader);
+  if (PNG_info == NULL)
+    {
+      png_destroy_read_struct(&PNG_reader, NULL, NULL);
+      fclose(PNG_file);
+      return 0;
+    }
+  
+  png_infop PNG_end_info = png_create_info_struct(PNG_reader);
+  if (PNG_end_info == NULL)
+    {
+      png_destroy_read_struct(&PNG_reader, &PNG_info, NULL);
+      fclose(PNG_file);
+      return 0;
+    }
+  
+  if (setjmp(png_jmpbuf(PNG_reader)))
+    {
+      png_destroy_read_struct(&PNG_reader, &PNG_info, &PNG_end_info);
+      fclose(PNG_file);
+      return (0);
+    }
+  
+  png_init_io(PNG_reader, PNG_file);
+  png_set_sig_bytes(PNG_reader, 8);
+  
+  png_read_info(PNG_reader, PNG_info);
+  
+  pImage->width = png_get_image_width(PNG_reader, PNG_info);
+  pImage->height = png_get_image_height(PNG_reader, PNG_info);
+  
+  png_uint_32 bit_depth, color_type;
+  bit_depth = png_get_bit_depth(PNG_reader, PNG_info);
+  color_type = png_get_color_type(PNG_reader, PNG_info);
+  
+  if (color_type == PNG_COLOR_TYPE_PALETTE)
+    {
+      png_set_palette_to_rgb(PNG_reader);
+    }
+  
+  if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8)
+    {
+      png_set_gray_1_2_4_to_8(PNG_reader);
+    }
+  
+  if (color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
+    {
+      png_set_gray_to_rgb(PNG_reader);
+    }
+  
+  if (png_get_valid(PNG_reader, PNG_info, PNG_INFO_tRNS))
+    {
+      png_set_tRNS_to_alpha(PNG_reader);
+    }
+  else
+    {
+      png_set_filler(PNG_reader, 0xff, PNG_FILLER_AFTER);
+    }
+  
+  if (bit_depth == 16)
+    {
+      png_set_strip_16(PNG_reader);
+    }
+  
+  png_read_update_info(PNG_reader, PNG_info);
+  
+  pImage->data = (png_byte*)malloc(4 * pImage->width * pImage->height);
+  png_byte** PNG_rows = (png_byte**)malloc(pImage->height * sizeof(png_byte*));
+  
+  unsigned int row;
+  for (row = 0; row < pImage->height; ++row)
+    {
+      PNG_rows[pImage->height - 1 - row] = pImage->data + (row * 4 * pImage->width);
+    }
+  
+  png_read_image(PNG_reader, PNG_rows);
+  
+  free(PNG_rows);
+  
+  png_destroy_read_struct(&PNG_reader, &PNG_info, &PNG_end_info);
+  fclose(PNG_file);
+  
+  /*  if (!ST_is_power_of_two(pImage->width) || !ST_is_power_of_two(pImage->height))
+    {
+      free(pImage->data);
+      return 0;
+    }
+  */
+  this->loadTexToGL (pImage);  
+  
+  free(pImage->data);
+  
+  return true;
+#else /* HAVE_PNG_H */
+  PRINTF(1)("sorry, but you did not compile with png-support.\nEither install SDL_image or libpng, and recompile to see the image\n");
+  return false;
+#endif /* HAVE_PNG_H */
+
+}
+#endif /* HAVE_SDL_SDL_IMAGE_H */
Index: /orxonox/branches/levelloader/src/importer/texture.h
===================================================================
--- /orxonox/branches/levelloader/src/importer/texture.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/importer/texture.h	(revision 3417)
@@ -0,0 +1,100 @@
+/*!
+  \file texture.h
+  \brief Contains the texture class, that handles the reading of Images into Texutre-files.
+
+  \todo free SDL-surface when deleting Material.
+  \todo delete imgNameWithPath after use creation.
+*/
+
+#ifndef _TEXTURE_H
+#define _TEXTURE_H
+
+#include "../stdincl.h"
+extern int verbose;
+#ifdef HAVE_SDL_SDL_IMAGE_H
+#include <SDL/SDL_image.h>
+#else
+// IMAGE LIBS //
+#ifdef HAVE_JPEGLIB_H
+extern "C"{         // This has to be done, because not a c++ lib
+#include <jpeglib.h>
+}
+#endif /* HAVE_JPEGLIB_H */
+#ifdef HAVE_PNG_H
+#include <png.h>
+#endif /* HAVE_PNG_H */
+#endif /* HAVE_SDL_SDL_IMAGE_H */
+
+
+
+//! Class to handle lists of paths.
+/**
+   \todo Ability to return Paths by itself.
+
+   It is simple to use, and good, for all PathList you want.
+   just create a new Pathlist, and add Paths.
+*/
+class PathList
+{
+ private:
+  PathList();
+  static PathList* firstPath; //!< A static Pointer to the first PathList in the List.
+ public:
+  PathList(char* pName);
+  ~PathList();
+  static PathList* getInstance(void);
+  
+  void addPath (char* pName);
+  char* pathName;              //!< The Name of the current Path.
+  PathList* next;              //!< Pointer to the next Pathlist.
+};
+
+//! A Class, that reads in Textures from different fileformats.
+class Texture
+{
+ private:
+  //! Struct to handle Infos about an Image
+  struct Image
+  {
+    int rowSpan;    //!< The count of the rows this Image has.
+    GLuint width;   //!< The width of the Image.
+    GLuint height;  //!< The height of the Image.
+    GLuint bpp;     //!< BytesPerPixel
+    GLenum format;  //!< The Format of the PixelData
+    GLuint type;    //!< Type of the Image.
+    GLubyte *data;  //!< The Image Data comes here! DANGER: uncompressed data.
+  };
+  Image* pImage;
+  GLuint texture;
+  SDL_Surface* map;
+  char* searchTextureInPaths(char* texName) const;
+  inline void swap(unsigned char &a, unsigned char &b);
+ public:
+  Texture(void);
+  ~Texture(void);
+
+  inline GLuint getTexture(void) {return this->texture;} //!< \returns The textureID of this texture.
+  bool loadTexToGL (Image* pImage);
+
+  bool loadImage(char* imageName);
+#ifndef HAVE_SDL_SDL_IMAGE_H
+
+  bool loadBMP (char* bmpName);
+
+  bool loadJPG (char* jpgName);
+
+  /// TGA ///
+
+  bool loadTGA(const char * tgaName);
+  bool loadUncompressedTGA(const char * filename, FILE * fTGA);
+  bool loadCompressedTGA(const char * filename, FILE * fTGA);
+
+  bool loadPNG(const char* pngName, GLuint* texture);
+#endif
+
+
+};
+
+
+
+#endif /* _TEXTURE_H */
Index: /orxonox/branches/levelloader/src/importer/toDo
===================================================================
--- /orxonox/branches/levelloader/src/importer/toDo	(revision 3417)
+++ /orxonox/branches/levelloader/src/importer/toDo	(revision 3417)
@@ -0,0 +1,6 @@
+toDO list for orxonox/importer:
+
+groupName is set on the wrong place, if set on the right programm will kill itself.
+
+ray03.obj from nomenes gives back a free, that has no reference.
+
Index: /orxonox/branches/levelloader/src/importer/vector.cc
===================================================================
--- /orxonox/branches/levelloader/src/importer/vector.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/importer/vector.cc	(revision 3417)
@@ -0,0 +1,965 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Christian Meyer 
+   co-programmer: Patrick Boenzli : Vector::scale()
+                                    Vector::abs()
+   
+   Quaternion code borrowed from an Gamasutra article by Nick Bobick and Ken Shoemake
+*/
+
+
+#include "vector.h"
+
+
+using namespace std;
+
+/**
+   \brief add two vectors
+   \param v: the other vector
+   \return the sum of both vectors
+*/
+Vector Vector::operator+ (const Vector& v) const
+{
+  Vector r;
+
+  r.x = x + v.x;
+  r.y = y + v.y;
+  r.z = z + v.z;
+  
+  return r;
+}
+
+/**
+   \brief subtract a vector from another
+   \param v: the other vector
+   \return the difference between the vectors
+*/
+Vector Vector::operator- (const Vector& v) const
+{
+  Vector r;
+  
+  r.x = x - v.x;
+  r.y = y - v.y;
+  r.z = z - v.z;
+  
+  return r;
+}
+
+/**
+   \brief calculate the dot product of two vectors
+   \param v: the other vector
+   \return the dot product of the vectors
+*/
+float Vector::operator* (const Vector& v) const
+{
+  return x*v.x+y*v.y+z*v.z;
+}
+
+/**
+   \brief multiply a vector with a float
+   \param f: the factor
+   \return the vector multipied by f
+*/
+Vector Vector::operator* (float f) const
+{  
+  Vector r;
+  
+  r.x = x * f;
+  r.y = y * f;
+  r.z = z * f;
+  
+  return r;
+}
+
+/**
+   \brief divide a vector with a float
+   \param f: the divisor
+   \return the vector divided by f   
+*/
+Vector Vector::operator/ (float f) const
+{
+  Vector r;
+  
+  if( f == 0.0)
+  {
+    // Prevent divide by zero
+    return Vector (0,0,0);
+  }
+  
+  r.x = x / f;
+  r.y = y / f;
+  r.z = z / f;
+  
+  return r;
+}
+
+/**
+   \brief calculate the dot product of two vectors
+   \param v: the other vector
+   \return the dot product of the vectors
+*/
+float Vector::dot (const Vector& v) const
+{
+  return x*v.x+y*v.y+z*v.z;
+}
+
+/**
+  \brief calculate the cross product of two vectors
+  \param v: the other vector
+	\return the cross product of the vectors
+*/
+Vector Vector::cross (const Vector& v) const
+{
+  Vector r;
+  
+  r.x = y * v.z - z * v.y;
+  r.y = z * v.x - x * v.z;
+  r.z = x * v.y - y * v.x;
+  
+  return r;
+}
+  
+/**
+   \brief normalizes the vector to lenght 1.0
+*/
+void Vector::normalize ()
+{
+  float l = len();
+  
+  if( l == 0.0)
+  {
+    // Prevent divide by zero
+    return;
+  }
+  
+  x = x / l;
+  y = y / l;
+  z = z / l;
+}
+
+
+/**
+   \bref returns the voctor normalized to length 1.0
+*/
+
+Vector* Vector::getNormalized()
+{
+  float l = len();
+  if(l != 1.0)
+    {
+      return this;
+    }
+  else if(l == 0.0)
+    {
+      return 0;
+    }
+  
+  Vector *normalizedVector = new Vector(x / l, y /l, z / l);
+  return normalizedVector;
+}
+
+
+void Vector::scale(const Vector& v)
+{
+  x *= v.x;
+  y *= v.y;
+  z *= v.z;
+}
+
+ 
+/**
+   \brief calculates the lenght of the vector
+   \return the lenght of the vector
+*/
+float Vector::len () const
+{
+  return sqrt (x*x+y*y+z*z);
+}
+
+
+
+Vector Vector::abs() 
+{
+  Vector v(fabs(x), fabs(y), fabs(z));
+  return v;
+}
+
+
+/**
+   \brief calculate the angle between two vectors in radiances
+   \param v1: a vector
+   \param v2: another vector
+   \return the angle between the vectors in radians
+*/
+float angleRad (const Vector& v1, const Vector& v2)
+{
+  return acos( v1 * v2 / (v1.len() * v2.len()));
+}
+
+
+/**
+   \brief calculate the angle between two vectors in degrees
+   \param v1: a vector
+   \param v2: another vector
+   \return the angle between the vectors in degrees
+*/
+float angleDeg (const Vector& v1, const Vector& v2)
+{
+  float f;
+  f = acos( v1 * v2 / (v1.len() * v2.len()));
+  return f * 180 / PI;
+}
+
+/**
+	\brief creates a multiplicational identity Quaternion
+*/
+Quaternion::Quaternion ()
+{
+	w = 1;
+	v = Vector(0,0,0);
+}
+
+/**
+	\brief turns a rotation along an axis into a Quaternion
+	\param angle: the amount of radians to rotate
+	\param axis: the axis to rotate around
+*/
+Quaternion::Quaternion (float angle, const Vector& axis)
+{
+	w = cos(angle/2);
+	v = axis * sin(angle/2);
+}
+
+/**
+   \brief calculates a lookAt rotation
+   \param dir: the direction you want to look
+   \param up: specify what direction up should be
+   
+   Mathematically this determines the rotation a (0,0,1)-Vector has to undergo to point
+   the same way as dir. If you want to use this with cameras, you'll have to reverse the
+   dir Vector (Vector(0,0,0) - your viewing direction) or you'll point the wrong way. You
+   can use this for meshes as well (then you do not have to reverse the vector), but keep 
+   in mind that if you do that, the model's front has to point in +z direction, and left 
+   and right should be -x or +x respectively or the mesh wont rotate correctly.
+*/
+Quaternion::Quaternion (const Vector& dir, const Vector& up)
+{
+  Vector z = dir;
+  z.normalize(); 
+  Vector x = up.cross(z);
+  x.normalize(); 
+  Vector y = z.cross(x);
+  
+  float m[4][4];
+  m[0][0] = x.x;
+  m[0][1] = x.y;
+  m[0][2] = x.z;
+  m[0][3] = 0;
+  m[1][0] = y.x;
+  m[1][1] = y.y;
+  m[1][2] = y.z;
+  m[1][3] = 0;
+  m[2][0] = z.x;
+  m[2][1] = z.y;
+  m[2][2] = z.z;
+  m[2][3] = 0;
+  m[3][0] = 0;
+  m[3][1] = 0;
+  m[3][2] = 0;
+  m[3][3] = 1;
+  
+  *this = Quaternion (m);
+}
+
+/**
+	\brief calculates a rotation from euler angles
+	\param roll: the roll in radians
+	\param pitch: the pitch in radians
+	\param yaw: the yaw in radians
+	
+	I DO HONESTLY NOT EXACTLY KNOW WHICH ANGLE REPRESENTS WHICH ROTATION. And I do not know 
+	in what order they are applied,	I just copy-pasted the code.
+*/
+Quaternion::Quaternion (float roll, float pitch, float yaw)
+{
+	float cr, cp, cy, sr, sp, sy, cpcy, spsy;
+	
+	// calculate trig identities
+	cr = cos(roll/2);
+	cp = cos(pitch/2);
+	cy = cos(yaw/2);
+	
+	sr = sin(roll/2);
+	sp = sin(pitch/2);
+	sy = sin(yaw/2);
+	
+	cpcy = cp * cy;
+	spsy = sp * sy;
+	
+	w = cr * cpcy + sr * spsy;
+	v.x = sr * cpcy - cr * spsy;
+	v.y = cr * sp * cy + sr * cp * sy;
+	v.z = cr * cp * sy - sr * sp * cy;
+}
+
+/**
+	\brief rotates one Quaternion by another
+	\param q: another Quaternion to rotate this by
+	\return a quaternion that represents the first one rotated by the second one (WARUNING: this operation is not commutative! e.g. (A*B) != (B*A))
+*/
+Quaternion Quaternion::operator*(const Quaternion& q) const
+{
+	float A, B, C, D, E, F, G, H;
+	Quaternion r;
+	
+	A = (w   + v.x)*(q.w   + q.v.x);
+	B = (v.z - v.y)*(q.v.y - q.v.z);
+	C = (w   - v.x)*(q.v.y + q.v.z); 
+	D = (v.y + v.z)*(q.w   - q.v.x);
+	E = (v.x + v.z)*(q.v.x + q.v.y);
+	F = (v.x - v.z)*(q.v.x - q.v.y);
+	G = (w   + v.y)*(q.w   - q.v.z);
+	H = (w   - v.y)*(q.w   + q.v.z);
+	
+	r.w = B +  (-E - F + G + H)/2;
+	r.v.x = A - (E + F + G + H)/2; 
+	r.v.y = C + (E - F + G - H)/2; 
+	r.v.z = D + (E - F - G + H)/2;
+	
+	return r;
+}
+
+/**
+	\brief add two Quaternions
+	\param q: another Quaternion
+	\return the sum of both Quaternions
+*/
+Quaternion Quaternion::operator+(const Quaternion& q) const
+{
+	Quaternion r(*this);
+	r.w = r.w + q.w;
+	r.v = r.v + q.v;
+	return r;
+}
+
+/**
+	\brief subtract two Quaternions
+	\param q: another Quaternion
+	\return the difference of both Quaternions
+*/
+Quaternion Quaternion::operator- (const Quaternion& q) const
+{
+	Quaternion r(*this);
+	r.w = r.w - q.w;
+	r.v = r.v - q.v;
+	return r;
+}
+
+/**
+	\brief rotate a Vector by a Quaternion
+	\param v: the Vector
+	\return a new Vector representing v rotated by the Quaternion
+*/
+Vector Quaternion::apply (Vector& v) const
+{
+	Quaternion q;
+	q.v = v;
+	q.w = 0;
+	q = *this * q * conjugate();
+	return q.v;
+}
+
+/**
+	\brief multiply a Quaternion with a real value
+	\param f: a real value
+	\return a new Quaternion containing the product
+*/
+Quaternion Quaternion::operator*(const float& f) const
+{
+	Quaternion r(*this);
+	r.w = r.w*f;
+	r.v = r.v*f;
+	return r;
+}
+
+/**
+	\brief divide a Quaternion by a real value
+	\param f: a real value
+	\return a new Quaternion containing the quotient
+*/
+Quaternion Quaternion::operator/(const float& f) const
+{
+	if( f == 0) return Quaternion();
+	Quaternion r(*this);
+	r.w = r.w/f;
+	r.v = r.v/f;
+	return r;
+}
+
+/**
+	\brief calculate the conjugate value of the Quaternion
+	\return the conjugate Quaternion
+*/
+Quaternion Quaternion::conjugate() const
+{
+	Quaternion r(*this);
+	r.v = Vector() - r.v;
+	return r;
+}
+
+/**
+	\brief calculate the norm of the Quaternion
+	\return the norm of The Quaternion
+*/
+float Quaternion::norm() const
+{
+	return w*w + v.x*v.x + v.y*v.y + v.z*v.z;
+}
+
+/**
+	\brief calculate the inverse value of the Quaternion
+	\return the inverse Quaternion
+	
+	Note that this is equal to conjugate() if the Quaternion's norm is 1
+*/
+Quaternion Quaternion::inverse() const
+{
+	float n = norm();
+	if (n != 0)
+	{
+		return conjugate() / norm();
+	}
+	else return Quaternion();
+}
+
+/**
+	\brief convert the Quaternion to a 4x4 rotational glMatrix
+	\param m: a buffer to store the Matrix in
+*/
+void Quaternion::matrix (float m[4][4]) const
+{
+  float wx, wy, wz, xx, yy, yz, xy, xz, zz, x2, y2, z2; 
+  
+  // calculate coefficients
+  x2 = v.x + v.x;
+  y2 = v.y + v.y; 
+  z2 = v.z + v.z;
+  xx = v.x * x2; xy = v.x * y2; xz = v.x * z2;
+  yy = v.y * y2; yz = v.y * z2; zz = v.z * z2;
+  wx = w * x2; wy = w * y2; wz = w * z2;
+  
+  m[0][0] = 1.0 - (yy + zz); m[1][0] = xy - wz;
+  m[2][0] = xz + wy; m[3][0] = 0.0;
+	
+  m[0][1] = xy + wz; m[1][1] = 1.0 - (xx + zz);
+  m[2][1] = yz - wx; m[3][1] = 0.0;
+  
+  m[0][2] = xz - wy; m[1][2] = yz + wx;
+  m[2][2] = 1.0 - (xx + yy); m[3][2] = 0.0;
+  
+  m[0][3] = 0; m[1][3] = 0;
+  m[2][3] = 0; m[3][3] = 1;
+}
+
+
+void Quaternion::quatSlerp(const Quaternion* from, const Quaternion* to, float t, Quaternion* res)
+{
+  float tol[4];
+  double omega, cosom, sinom, scale0, scale1;
+  DELTA = 0.2;
+
+  cosom = from->v.x * to->v.x + from->v.y * to->v.y + from->v.z * to->v.z + from->w * to->w;
+
+  if( cosom < 0.0 ) 
+    { 
+      cosom = -cosom; 
+      tol[0] = -to->v.x;
+      tol[1] = -to->v.y;
+      tol[2] = -to->v.z;
+      tol[3] = -to->w;
+    }
+  else
+    {
+      tol[0] = to->v.x;
+      tol[1] = to->v.y;
+      tol[2] = to->v.z;
+      tol[3] = to->w;
+    }
+  
+  //if( (1.0 - cosom) > DELTA )
+  //{
+      omega = acos(cosom);
+      sinom = sin(omega);
+      scale0 = sin((1.0 - t) * omega) / sinom;
+      scale1 = sin(t * omega) / sinom;
+      //}
+      /*
+  else
+    {
+      scale0 = 1.0 - t;
+      scale1 = t;
+    }
+      */
+  res->v.x = scale0 * from->v.x + scale1 * tol[0];
+  res->v.y = scale0 * from->v.y + scale1 * tol[1];
+  res->v.z = scale0 * from->v.z + scale1 * tol[2];
+  res->w = scale0 * from->w + scale1 * tol[3];
+}
+
+
+/**
+   \brief convert a rotational 4x4 glMatrix into a Quaternion
+   \param m: a 4x4 matrix in glMatrix order
+*/
+Quaternion::Quaternion (float m[4][4])
+{
+	
+  float  tr, s, q[4];
+  int    i, j, k;
+
+  int nxt[3] = {1, 2, 0};
+
+  tr = m[0][0] + m[1][1] + m[2][2];
+
+  	// check the diagonal
+  if (tr > 0.0) 
+  {
+    s = sqrt (tr + 1.0);
+    w = s / 2.0;
+    s = 0.5 / s;
+    v.x = (m[1][2] - m[2][1]) * s;
+    v.y = (m[2][0] - m[0][2]) * s;
+    v.z = (m[0][1] - m[1][0]) * s;
+	} 
+	else 
+	{
+ 		// diagonal is negative
+  	i = 0;
+  	if (m[1][1] > m[0][0]) i = 1;
+    if (m[2][2] > m[i][i]) i = 2;
+    j = nxt[i];
+    k = nxt[j];
+
+    s = sqrt ((m[i][i] - (m[j][j] + m[k][k])) + 1.0);
+      
+    q[i] = s * 0.5;
+            
+    if (s != 0.0) s = 0.5 / s;
+	
+	  q[3] = (m[j][k] - m[k][j]) * s;
+    q[j] = (m[i][j] + m[j][i]) * s;
+    q[k] = (m[i][k] + m[k][i]) * s;
+
+  	v.x = q[0];
+  	v.y = q[1];
+  	v.z = q[2];
+  	w = q[3];
+  }
+}
+
+/**
+   \brief create a rotation from a vector
+   \param v: a vector
+*/
+Rotation::Rotation (const Vector& v)
+{
+  Vector x = Vector( 1, 0, 0);
+  Vector axis = x.cross( v);
+  axis.normalize();
+  float angle = angleRad( x, v);
+  float ca = cos(angle);
+  float sa = sin(angle);
+  m[0] = 1.0f+(1.0f-ca)*(axis.x*axis.x-1.0f);
+  m[1] = -axis.z*sa+(1.0f-ca)*axis.x*axis.y;
+  m[2] = axis.y*sa+(1.0f-ca)*axis.x*axis.z;
+  m[3] = axis.z*sa+(1.0f-ca)*axis.x*axis.y;
+  m[4] = 1.0f+(1.0f-ca)*(axis.y*axis.y-1.0f);
+  m[5] = -axis.x*sa+(1.0f-ca)*axis.y*axis.z;
+  m[6] = -axis.y*sa+(1.0f-ca)*axis.x*axis.z;
+  m[7] = axis.x*sa+(1.0f-ca)*axis.y*axis.z;
+  m[8] = 1.0f+(1.0f-ca)*(axis.z*axis.z-1.0f);
+}
+
+/**
+   \brief creates a rotation from an axis and an angle (radians!)
+   \param axis: the rotational axis
+   \param angle: the angle in radians
+*/
+Rotation::Rotation (const Vector& axis, float angle)
+{
+  float ca, sa;
+  ca = cos(angle);
+  sa = sin(angle);
+  m[0] = 1.0f+(1.0f-ca)*(axis.x*axis.x-1.0f);
+  m[1] = -axis.z*sa+(1.0f-ca)*axis.x*axis.y;
+  m[2] = axis.y*sa+(1.0f-ca)*axis.x*axis.z;
+  m[3] = axis.z*sa+(1.0f-ca)*axis.x*axis.y;
+  m[4] = 1.0f+(1.0f-ca)*(axis.y*axis.y-1.0f);
+  m[5] = -axis.x*sa+(1.0f-ca)*axis.y*axis.z;
+  m[6] = -axis.y*sa+(1.0f-ca)*axis.x*axis.z;
+  m[7] = axis.x*sa+(1.0f-ca)*axis.y*axis.z;
+  m[8] = 1.0f+(1.0f-ca)*(axis.z*axis.z-1.0f);
+}
+
+/**
+   \brief creates a rotation from euler angles (pitch/yaw/roll)
+   \param pitch: rotation around z (in radians)
+   \param yaw: rotation around y (in radians)
+   \param roll: rotation around x (in radians)
+*/
+Rotation::Rotation ( float pitch, float yaw, float roll)
+{
+  float cy, sy, cr, sr, cp, sp;
+  cy = cos(yaw);
+  sy = sin(yaw);
+  cr = cos(roll);
+  sr = sin(roll);
+  cp = cos(pitch);
+  sp = sin(pitch);
+  m[0] = cy*cr;
+  m[1] = -cy*sr;
+  m[2] = sy;
+  m[3] = cp*sr+sp*sy*cr;
+  m[4] = cp*cr-sp*sr*sy;
+  m[5] = -sp*cy;
+  m[6] = sp*sr-cp*sy*cr;
+  m[7] = sp*cr+cp*sy*sr;
+  m[8] = cp*cy;
+}
+
+/**
+   \brief creates a nullrotation (an identity rotation)
+*/
+Rotation::Rotation ()
+{
+  m[0] = 1.0f;
+  m[1] = 0.0f;
+  m[2] = 0.0f;
+  m[3] = 0.0f;
+  m[4] = 1.0f;
+  m[5] = 0.0f;
+  m[6] = 0.0f;
+  m[7] = 0.0f;
+  m[8] = 1.0f;
+}
+
+/**
+   \brief fills the specified buffer with a 4x4 glmatrix
+   \param buffer: Pointer to an array of 16 floats
+   
+   Use this to get the rotation in a gl-compatible format
+*/
+void Rotation::glmatrix (float* buffer)
+{
+	buffer[0] = m[0];
+	buffer[1] = m[3];
+	buffer[2] = m[6];
+	buffer[3] = m[0];
+	buffer[4] = m[1];
+	buffer[5] = m[4];
+	buffer[6] = m[7];
+	buffer[7] = m[0];
+	buffer[8] = m[2];
+	buffer[9] = m[5];
+	buffer[10] = m[8];
+	buffer[11] = m[0];
+	buffer[12] = m[0];
+	buffer[13] = m[0];
+	buffer[14] = m[0];
+	buffer[15] = m[1];
+}
+
+/**
+   \brief multiplies two rotational matrices
+   \param r: another Rotation
+   \return the matrix product of the Rotations
+   
+   Use this to rotate one rotation by another
+*/
+Rotation Rotation::operator* (const Rotation& r)
+{
+	Rotation p;
+	
+	p.m[0] = m[0]*r.m[0] + m[1]*r.m[3] + m[2]*r.m[6];
+	p.m[1] = m[0]*r.m[1] + m[1]*r.m[4] + m[2]*r.m[7];
+	p.m[2] = m[0]*r.m[2] + m[1]*r.m[5] + m[2]*r.m[8];
+	
+	p.m[3] = m[3]*r.m[0] + m[4]*r.m[3] + m[5]*r.m[6];
+	p.m[4] = m[3]*r.m[1] + m[4]*r.m[4] + m[5]*r.m[7];
+	p.m[5] = m[3]*r.m[2] + m[4]*r.m[5] + m[5]*r.m[8];
+
+	p.m[6] = m[6]*r.m[0] + m[7]*r.m[3] + m[8]*r.m[6];
+	p.m[7] = m[6]*r.m[1] + m[7]*r.m[4] + m[8]*r.m[7];
+	p.m[8] = m[6]*r.m[2] + m[7]*r.m[5] + m[8]*r.m[8];
+	
+	return p;
+}
+
+
+/**
+   \brief rotates the vector by the given rotation
+   \param v: a vector
+   \param r: a rotation
+   \return the rotated vector
+*/
+Vector rotateVector( const Vector& v, const Rotation& r)
+{
+  Vector t;
+  
+  t.x = v.x * r.m[0] + v.y * r.m[1] + v.z * r.m[2];
+  t.y = v.x * r.m[3] + v.y * r.m[4] + v.z * r.m[5];
+  t.z = v.x * r.m[6] + v.y * r.m[7] + v.z * r.m[8];
+
+  return t;
+}
+
+/**
+   \brief calculate the distance between two lines
+   \param l: the other line
+   \return the distance between the lines
+*/
+float Line::distance (const Line& l) const
+{
+  float q, d;
+  Vector n = a.cross(l.a);
+  q = n.dot(r-l.r);
+  d = n.len();
+  if( d == 0.0) return 0.0;
+  return q/d;
+}
+
+/**
+   \brief calculate the distance between a line and a point
+   \param v: the point
+   \return the distance between the Line and the point
+*/
+float Line::distancePoint (const Vector& v) const
+{
+  Vector d = v-r;
+  Vector u = a * d.dot( a);
+  return (d - u).len();
+}
+
+/**
+   \brief calculate the two points of minimal distance of two lines
+   \param l: the other line
+   \return a Vector[2] (!has to be deleted after use!) containing the two points of minimal distance
+*/
+Vector* Line::footpoints (const Line& l) const
+{
+  Vector* fp = new Vector[2];
+  Plane p = Plane (r + a.cross(l.a), r, r + a);
+  fp[1] = p.intersectLine (l);
+  p = Plane (fp[1], l.a);
+  fp[0] = p.intersectLine (*this);
+  return fp;
+}
+
+/**
+  \brief calculate the length of a line
+  \return the lenght of the line 
+*/
+float Line::len() const
+{
+  return a.len();
+}
+
+/**
+   \brief rotate the line by given rotation
+   \param rot: a rotation
+*/
+void Line::rotate (const Rotation& rot)
+{
+  Vector t = a + r;
+  t = rotateVector( t, rot);
+  r = rotateVector( r, rot),
+  a = t - r;
+}
+
+/**
+   \brief create a plane from three points
+   \param a: first point
+   \param b: second point
+   \param c: third point
+*/
+Plane::Plane (Vector a, Vector b, Vector c)
+{
+  n = (a-b).cross(c-b);
+  k = -(n.x*b.x+n.y*b.y+n.z*b.z);
+}
+
+/**
+   \brief create a plane from anchor point and normal
+   \param n: normal vector
+   \param p: anchor point
+*/
+Plane::Plane (Vector norm, Vector p)
+{
+  n = norm;
+  k = -(n.x*p.x+n.y*p.y+n.z*p.z);
+}
+
+/**
+   \brief returns the intersection point between the plane and a line
+   \param l: a line
+*/
+Vector Plane::intersectLine (const Line& l) const
+{
+  if (n.x*l.a.x+n.y*l.a.y+n.z*l.a.z == 0.0) return Vector(0,0,0);
+  float t = (n.x*l.r.x+n.y*l.r.y+n.z*l.r.z+k) / (n.x*l.a.x+n.y*l.a.y+n.z*l.a.z);
+  return l.r + (l.a * t);
+}
+
+/**
+   \brief returns the distance between the plane and a point
+   \param p: a Point
+   \return the distance between the plane and the point (can be negative)
+*/
+float Plane::distancePoint (const Vector& p) const
+{
+  float l = n.len();
+  if( l == 0.0) return 0.0;
+  return (n.dot(p) + k) / n.len();
+}
+
+/**
+   \brief returns the side a point is located relative to a Plane
+   \param p: a Point
+   \return 0 if the point is contained within the Plane, positive(negative) if the point is in the positive(negative) semi-space of the Plane
+*/
+float Plane::locatePoint (const Vector& p) const
+{
+  return (n.dot(p) + k);
+}
+
+
+/**
+   \brief Creates a new BezierCurve
+*/
+BezierCurve::BezierCurve (void)
+{
+  nodeCount = 0;
+  firstNode = new PathNode;
+  currentNode = firstNode;
+
+  firstNode->position = Vector (.0, .0, .0);
+  firstNode->number = 0;
+  firstNode->next = 0; // not sure if this really points to NULL!!
+
+  return;
+}
+
+/**
+   \brief Deletes a BezierCurve.
+   It does this by freeing all the space taken over from the nodes
+*/
+BezierCurve::~BezierCurve (void)
+{
+  PathNode* tmpNode;
+  currentNode = firstNode;
+  while (tmpNode != 0)
+    {
+      tmpNode = currentNode;
+      currentNode = currentNode->next;
+      delete tmpNode;
+    }
+}
+
+/**
+   \brief adds a new Node to the bezier Curve
+   \param newNode a Vector to the position of the new node
+*/
+void BezierCurve::addNode(const Vector& newNode)
+{
+  PathNode* tmpNode;
+  if (nodeCount == 0 )
+    tmpNode = firstNode;
+  else
+    {
+      tmpNode = new PathNode;
+      currentNode = currentNode->next = tmpNode;
+    }
+  tmpNode->position = newNode;
+  tmpNode->next = 0; // not sure if this really points to NULL!!
+  tmpNode->number = (++nodeCount);
+  return;
+}
+
+/**
+   \brief calculates the Position on the curve
+   \param t The position on the Curve (0<=t<=1)
+   \return the Position on the Path
+*/
+Vector BezierCurve::calcPos(float t) 
+{
+  if (nodeCount <=4)
+    {
+      //      if (verbose >= 1)
+      //      printf ("Please define at least 4 nodes, until now you have only defined %i.\n", nodeCount);
+      curvePoint = Vector(0,0,0);
+    }
+  PathNode* tmpNode = firstNode;
+    
+  int k,kn,nn,nkn;
+  double blend,muk,munk;
+  Vector b = Vector(0.0,0.0,0.0);
+  
+  muk = 1;
+  munk = pow(1-t,(double)nodeCount);
+  
+  for (k=0; k<=nodeCount; k++) {
+    nn = nodeCount;
+    kn = k;
+    nkn = nodeCount - k;
+    blend = muk * munk;
+    muk *= t;
+    munk /= (1-t);
+    while (nn >= 1) {
+      blend *= nn;
+      nn--;
+      if (kn > 1) {
+	blend /= (double)kn;
+	kn--;
+      }
+      if (nkn > 1) {
+	blend /= (double)nkn;
+	nkn--;
+      }
+    }
+    b.x += tmpNode->position.x * blend;
+    b.y += tmpNode->position.y * blend;
+    b.z += tmpNode->position.z * blend;
+
+    tmpNode = tmpNode->next;
+  }
+  return b;
+}
+
+Vector BezierCurve::calcDirection (float t)
+{
+  double diff = .00000000001;
+  
+  Vector diffV = ((calcPos(t+diff) - calcPos(t))/diff);
+  diffV.normalize();
+  return diffV;
+}
+
+/**
+  \brief returns the Position of the point calculated on the Curve
+  \return a Vector to the calculated position
+*/
+Vector BezierCurve::getPos() const
+{
+  return curvePoint;
+}
Index: /orxonox/branches/levelloader/src/importer/vector.h
===================================================================
--- /orxonox/branches/levelloader/src/importer/vector.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/importer/vector.h	(revision 3417)
@@ -0,0 +1,187 @@
+/*! 
+    \file vector.h
+    \brief A basic 3D math framework
+    
+    Contains classes to handle vectors, lines, rotations and planes
+*/ 
+
+#ifndef _VECTOR_H
+#define _VECTOR_H
+
+#include <math.h>
+#define PI 3.14159265359f
+
+//! 3D Vector
+/**
+	Class to handle 3D Vectors
+*/
+class Vector {
+
+  public:
+ 
+  float x, y, z;
+
+  Vector (float x, float y, float z) : x(x), y(y), z(z) {}  //!< assignment constructor
+  Vector () : x(0), y(0), z(0) {}
+  ~Vector () {}
+
+  Vector operator+ (const Vector& v) const;
+  Vector operator- (const Vector& v) const;
+  float operator* (const Vector& v) const;
+  Vector operator* (float f) const;
+  Vector operator/ (float f) const;
+  float dot (const Vector& v) const;
+  Vector cross (const Vector& v) const;
+  void scale(const Vector& v);
+  float len() const;
+  void normalize();
+  Vector* getNormalized();
+  Vector abs();
+};
+
+float angleDeg (const Vector& v1, const Vector& v2);
+float angleRad (const Vector& v1, const Vector& v2);
+
+//! Quaternion
+/**
+	Class to handle 3-dimensional rotation efficiently
+*/
+class Quaternion
+{
+ public:
+	Vector v;	//!< Imaginary Vector
+	float w; //!< Real part of the number
+
+ 	Quaternion ();
+ 	Quaternion (float m[4][4]);
+ 	Quaternion (float angle, const Vector& axis);
+ 	Quaternion (const Vector& dir, const Vector& up);
+ 	Quaternion (float roll, float pitch, float yaw);
+ 	
+ 	Quaternion operator/ (const float& f) const;
+ 	Quaternion operator* (const float& f) const;
+ 	Quaternion operator* (const Quaternion& q) const;
+	Quaternion operator+ (const Quaternion& q) const;
+	Quaternion operator- (const Quaternion& q) const;
+	Quaternion conjugate () const;
+	Quaternion inverse () const;
+ 	Vector apply (Vector& f) const;
+	float norm () const;
+	void matrix (float m[4][4]) const;
+	void quatSlerp(const Quaternion* from, const Quaternion* to, const float t, Quaternion* res);
+
+ private:
+	float DELTA;
+
+};
+
+//! 3D rotation (OBSOLETE)
+/**
+  Class to handle 3-dimensional rotations.
+  Can create a rotation from several inputs, currently stores rotation using a 3x3 Matrix
+*/
+class Rotation {
+  public:
+  
+  float m[9]; //!< 3x3 Rotation Matrix
+  
+  Rotation ( const Vector& v);
+  Rotation ( const Vector& axis, float angle);
+  Rotation ( float pitch, float yaw, float roll);
+  Rotation ();
+  ~Rotation () {}
+  
+  Rotation operator* (const Rotation& r);
+  
+  void glmatrix (float* buffer);
+};
+
+//!< Apply a rotation to a vector
+Vector rotateVector( const Vector& v, const Rotation& r);
+
+//! 3D line
+/**
+  Class to store Lines in 3-dimensional space
+
+  Supports line-to-line distance measurements and rotation
+*/
+class Line
+{
+  public:
+  
+  Vector r;   //!< Offset
+  Vector a;   //!< Direction
+  
+  Line ( Vector r, Vector a) : r(r), a(a) {}  //!< assignment constructor
+  Line () : r(Vector(0,0,0)), a(Vector (1,1,1)) {}
+  ~Line () {}
+  
+  float distance (const Line& l) const;
+  float distancePoint (const Vector& v) const;
+  Vector* footpoints (const Line& l) const;
+  float len () const;
+  
+  void rotate(const Rotation& rot);
+};
+
+//! 3D plane
+/**
+  Class to handle planes in 3-dimensional space
+  
+  Critical for polygon-based collision detection
+*/
+class Plane
+{
+  public:
+  
+  Vector n;   //!< Normal vector
+  float k;    //!< Offset constant
+  
+  Plane (Vector a, Vector b, Vector c);
+  Plane (Vector norm, Vector p);
+  Plane (Vector n, float k) : n(n), k(k) {} //!< assignment constructor
+  Plane () : n(Vector(1,1,1)), k(0) {}
+  ~Plane () {}
+  
+  Vector intersectLine (const Line& l) const;
+  float distancePoint (const Vector& p) const;
+  float locatePoint (const Vector& p) const;
+};
+
+
+
+//! Bezier Curve
+/**
+   Class to handle bezier curves in 3-dimesnsional space
+   
+   needed for  the Tracking system in OrxOnoX.
+*/
+class BezierCurve
+{
+ private:
+  int nodeCount;
+  Vector curvePoint;
+  
+  struct PathNode
+  {
+    int number;
+    Vector position;
+    PathNode* next;
+  };
+
+  PathNode* firstNode; 
+  PathNode* currentNode; 
+
+ public:
+  BezierCurve (void);
+  ~BezierCurve (void);
+  void addNode (const Vector& newNode);
+  Vector calcPos (float t);
+  Vector calcDirection (float t);
+  
+  Vector getPos () const;
+};
+
+
+
+#endif /* _VECTOR_H */
Index: /orxonox/branches/levelloader/src/importer/windowHandler.cc
===================================================================
--- /orxonox/branches/levelloader/src/importer/windowHandler.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/importer/windowHandler.cc	(revision 3417)
@@ -0,0 +1,94 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Benjamin Grauer
+   co-programmer: ...
+*/
+
+#include "windowHandler.h"
+#include <stdio.h>
+void WindowHandler::ReSizeGLScene(GLsizei width, GLsizei height) // Resize And Initialize The GL Window
+{
+	if (height==0)	// Prevent A Divide By Zero By
+	{
+		height=1;// Making Height Equal One
+	}
+
+	glViewport(0,0,width,height); // Reset The Current Viewport
+
+	
+	glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
+	glLoadIdentity();	
+
+
+	// Calculate The Aspect Ratio Of The Window
+	gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);
+	gluLookAt (0,0,15, 0,0,0, 0,1,0);
+
+	glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
+	glLoadIdentity(); // Reset The Modelview Matrix
+
+}
+
+
+int WindowHandler::InitGL(GLvoid)										// All Setup For OpenGL Goes Here
+{
+	glEnable(GL_TEXTURE_2D); // Enable Texture Mapping
+	glShadeModel(GL_SMOOTH); // Enable Smooth Shading
+	glClearColor(0.00f, 0.00f, 0.00f, 0.0f); // Black Background
+	glClearDepth(1.0f);  // Depth Buffer Setup
+	glEnable(GL_DEPTH_TEST); // Enables Depth Testing
+	glDepthFunc(GL_LEQUAL);	// The Type Of Depth Testing To Do
+	glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);  // Really Nice Perspective Calculations
+
+    return TRUE;
+}
+
+
+GLvoid WindowHandler::KillGLWindow(GLvoid) // Properly Kill The Window
+{
+	SDL_Quit();
+}
+
+
+BOOL WindowHandler::CreateGLWindow(char* title, int width, int height, int bits, BOOL fullscreenflag)
+{
+	Uint32 flags;
+	int size;
+
+	/* Initialize SDL */
+	if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) {
+		fprintf(stderr, "Couldn't init SDL: %s\n", SDL_GetError());
+		return FALSE;
+	}
+
+	flags = SDL_OPENGL;
+	if ( fullscreenflag ) {
+		flags |= SDL_FULLSCREEN;
+	}
+	SDL_GL_SetAttribute( SDL_GL_STENCIL_SIZE, 1 );
+	if ( (screen = SDL_SetVideoMode(width, height, 0, flags)) == NULL ) {
+		return FALSE;
+	}
+	SDL_GL_GetAttribute( SDL_GL_STENCIL_SIZE, &size);
+
+	ReSizeGLScene(width, height); // Set Up Our Perspective GL Screen
+
+	if (!InitGL()) // Initialize Our Newly Created GL Window
+	{
+	  KillGLWindow();  // Reset The Display
+	  return FALSE;
+	}
+
+	return TRUE;
+}
+
+
Index: /orxonox/branches/levelloader/src/importer/windowHandler.h
===================================================================
--- /orxonox/branches/levelloader/src/importer/windowHandler.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/importer/windowHandler.h	(revision 3417)
@@ -0,0 +1,36 @@
+#ifndef _WINDOWHANDLER_H
+#define _WINDOWHANDLER_H
+
+extern int verbose;
+
+#include "../stdincl.h"
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <math.h>
+
+#ifdef __WIN32__
+#include <windows.h>
+#endif /* __WIN32__ */
+
+#define TRUE 1
+#define FALSE 0
+#define BOOL int
+
+class WindowHandler
+{
+  public:
+    WindowHandler() { };
+    ~WindowHandler() { };
+    GLvoid KillGLWindow(GLvoid);
+    BOOL CreateGLWindow(char* title, int width, int height, int bits, BOOL fullscreenflag);
+    SDL_Surface* screen;
+  private:
+    int InitGL(GLvoid);
+    void ReSizeGLScene(GLsizei width, GLsizei height);  
+};
+
+
+#endif
Index: /orxonox/branches/levelloader/src/ini_parser.cc
===================================================================
--- /orxonox/branches/levelloader/src/ini_parser.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/ini_parser.cc	(revision 3417)
@@ -0,0 +1,163 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Christian Meyer
+   co-programmer: ...
+*/
+
+
+#include "ini_parser.h"
+
+using namespace std;
+
+/**
+	\brief constructs an IniParser using a file
+	\param filename: the path and name of the file to parse
+*/
+IniParser::IniParser (char* filename)
+{
+  stream = NULL;
+  bInSection = false;
+  openFile(filename);
+}
+
+/**
+	\brief removes the IniParser from memory
+*/
+IniParser::~IniParser ()
+{
+  if( stream != NULL) fclose (stream);
+}
+
+/**
+   \brief opens another file to parse
+   \param filename: path and name of the new file to parse
+   \return zero on success or -1 if an error occured;
+*/
+int IniParser::openFile( char* filename)
+{
+  if( filename == NULL) return -1;
+  if( stream != NULL)	fclose (stream);
+  if( (stream = fopen (filename, "r")) == NULL)
+    {
+      printf("IniParser could not open %s\n", filename);
+      return -1;
+    }
+  bInSection = false;
+  return 0;
+}
+
+/**
+   \brief set the parsing cursor to the specified section
+   \param section: the name of the section to set the cursor to
+   \return zero on success or -1 if the section could not be found
+*/
+int IniParser::getSection( char* section)
+{
+  bInSection = false;
+  if( stream == NULL) return -1;
+  
+  char linebuffer[PARSELINELENGHT];
+  char secbuffer[PARSELINELENGHT];
+  char* ptr;
+  
+  rewind (stream);
+  while( !feof( stream))
+    {
+      // get next line
+      fgets (linebuffer, PARSELINELENGHT, stream);
+      // remove newline char
+      if( (ptr = strchr( linebuffer, '\n')) != NULL) *ptr = 0;
+      // check for section identifyer
+      if( sscanf (linebuffer, "[%s", secbuffer) == 1)
+	{
+	  if( (ptr = strchr( secbuffer, ']')) != NULL)
+	    {
+	      *ptr = 0;
+	      if( !strcmp( secbuffer, section))
+		{
+		  bInSection = true;
+		  return 0;
+		}
+	    }
+	}
+    }
+  return -1;
+}
+
+/**
+   \brief gets the next VarName=VarValue pair from the parsing stream
+   \param name: a pointer to a buffer to store the name of the entry
+   \param value: a pointer to a buffer to store the value of the entry
+   \return zero if the buffers have been filled with data or -1 if there are no entries left in the current section
+*/
+int IniParser::nextVar( char* name, char* value)
+{
+  if( stream == NULL)
+    {
+      bInSection = false;
+      return -1;
+    }
+  if( !bInSection) return -1;
+  
+  char linebuffer[PARSELINELENGHT];
+  char* ptr;
+  
+  while( !feof( stream))
+    {
+      // get next line
+      fgets (linebuffer, PARSELINELENGHT, stream);
+      // remove newline char
+      if( (ptr = strchr( linebuffer, '\n')) != NULL) *ptr = 0;
+      if( linebuffer[0] == '[')
+	{
+	  bInSection = false;
+	  return -1;
+	}
+      if( (ptr = strchr( linebuffer, '=')) != NULL)
+	{
+	  if( ptr == linebuffer) continue;
+	  strcpy (value, &ptr[1]);
+	  strncpy (name, linebuffer, strlen (linebuffer) - strlen (value) - 1);
+	  return 0;
+	}
+    }
+  return -1;	
+}
+
+/**
+   \brief directly acesses an entry in a section
+   \param name: the name of the entry to find
+   \param section: the section where the entry is to be found
+   \param defvalue: what should be returned in case the entry cannot be found
+   \return a pointer to a buffer conatining the value of the specified entry. This buffer will contain the data specified in defvalue in case the entry wasn't found
+   
+   The returned pointer points to an internal buffer, so do not free it on your own. Do not give a NULL pointer to defvalue, this will certainly
+   lead to unwanted behaviour.
+*/
+char* IniParser::getVar( char* name, char* section, char* defvalue = "")
+{
+  strcpy (internbuf, defvalue);
+  if( getSection (section) == -1) return internbuf;
+  
+  char namebuf[PARSELINELENGHT];
+  char valuebuf[PARSELINELENGHT];
+  
+  while( nextVar (namebuf, valuebuf) != -1)
+    {
+      if( !strcmp (name, namebuf))
+	{
+	  strcpy (internbuf, valuebuf);
+	  return internbuf;
+	}
+    }
+  return internbuf;
+}
Index: /orxonox/branches/levelloader/src/ini_parser.h
===================================================================
--- /orxonox/branches/levelloader/src/ini_parser.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/ini_parser.h	(revision 3417)
@@ -0,0 +1,37 @@
+/*!
+    \file ini_parser.h
+    \brief A small ini file parser
+    
+    Can be used to find a defined [Section] in an ini file and get the VarName=Value entries
+*/
+
+#ifndef _INI_PARSER_H
+#define _INI_PARSER_H
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#define PARSELINELENGHT 512
+
+//! ini-file parser
+/**
+	This class can be used to load an initializer file and parse it's contents for variablename=value pairs.
+*/
+class IniParser {
+ private:
+	FILE* stream;
+	bool bInSection;
+	char internbuf[PARSELINELENGHT];
+	
+ public:
+  IniParser (char* filename);
+  ~IniParser ();
+  
+  char* getVar( char* name, char* section, char* defvalue);
+	int openFile( char* name);
+  int getSection( char* section);
+  int nextVar( char* name, char* value);
+};
+
+#endif /* _INI_PARSER_H */
Index: /orxonox/branches/levelloader/src/keynames.cc
===================================================================
--- /orxonox/branches/levelloader/src/keynames.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/keynames.cc	(revision 3417)
@@ -0,0 +1,316 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Christian Meyer
+   co-programmer: ...
+*/
+
+#include "keynames.h"
+
+#include <string.h>
+
+using namespace std;
+
+int buttonnameToSDLB( char* name)
+{
+	if( !strcmp (name, "BUTTON_LEFT")) return SDL_BUTTON_LEFT;
+	if( !strcmp (name, "BUTTON_MIDDLE")) return SDL_BUTTON_MIDDLE;
+	if( !strcmp (name, "BUTTON_RIGHT")) return SDL_BUTTON_RIGHT;
+//	if( !strcmp (name, "BUTTON_WHEELUP")) return SDL_BUTTON_WHEELUP;
+//	if( !strcmp (name, "BUTTON_WHEELDOWN")) return SDL_BUTTON_WHEELDOWN;
+	return -1;
+}
+
+char* SDLBToButtonname( int button)
+{
+	if( button == SDL_BUTTON_LEFT) return "BUTTON_LEFT";
+	if( button == SDL_BUTTON_MIDDLE) return "BUTTON_MIDDLE";
+	if( button == SDL_BUTTON_RIGHT) return "BUTTON_RIGHT";
+//	if( button == SDL_BUTTON_WHEELUP) return "BUTTON_WHEELUP";
+//	if( button == SDL_BUTTON_WHEELDOWN) return "BUTTON_WHEELDOWN";
+	return "UNKNOWN";
+}
+
+int keynameToSDLK( char* name)
+{
+	if( !strcmp (name, "BACKSPACE")) return SDLK_BACKSPACE;
+	if( !strcmp (name, "TAB")) return SDLK_TAB;
+	if( !strcmp (name, "CLEAR")) return SDLK_CLEAR;
+	if( !strcmp (name, "RETURN")) return SDLK_RETURN;
+	if( !strcmp (name, "ESCAPE")) return SDLK_ESCAPE;
+	if( !strcmp (name, "SPACE")) return SDLK_SPACE;
+	if( !strcmp (name, "EXCLAIM")) return SDLK_EXCLAIM;
+	if( !strcmp (name, "QUOTEDBL")) return SDLK_QUOTEDBL;
+	if( !strcmp (name, "HASH")) return SDLK_HASH;
+	if( !strcmp (name, "PAUSE")) return SDLK_PAUSE;
+	if( !strcmp (name, "DOLLAR")) return SDLK_DOLLAR;
+	if( !strcmp (name, "AMPERSAND")) return SDLK_AMPERSAND;
+	if( !strcmp (name, "QUOTE")) return SDLK_QUOTE;
+	if( !strcmp (name, "LEFTPAREN")) return SDLK_LEFTPAREN;
+	if( !strcmp (name, "RIGHTPAREN")) return SDLK_RIGHTPAREN;
+	if( !strcmp (name, "ASTERISK")) return SDLK_ASTERISK;
+	if( !strcmp (name, "PLUS")) return SDLK_PLUS;
+	if( !strcmp (name, "COMMA")) return SDLK_COMMA;
+	if( !strcmp (name, "MINUS")) return SDLK_MINUS;
+	if( !strcmp (name, "PERIOD")) return SDLK_PERIOD;
+	if( !strcmp (name, "SLASH")) return SDLK_SLASH;
+	if( !strcmp (name, "0")) return SDLK_0;
+	if( !strcmp (name, "1")) return SDLK_1;
+	if( !strcmp (name, "2")) return SDLK_2;
+	if( !strcmp (name, "3")) return SDLK_3;
+	if( !strcmp (name, "4")) return SDLK_4;
+	if( !strcmp (name, "5")) return SDLK_5;
+	if( !strcmp (name, "6")) return SDLK_6;
+	if( !strcmp (name, "7")) return SDLK_7;
+	if( !strcmp (name, "8")) return SDLK_8;
+	if( !strcmp (name, "9")) return SDLK_9;
+	if( !strcmp (name, "COLON")) return SDLK_COLON;
+	if( !strcmp (name, "SEMICOLON")) return SDLK_SEMICOLON;
+	if( !strcmp (name, "LESS")) return SDLK_LESS;
+	if( !strcmp (name, "EQUALS")) return SDLK_EQUALS;
+	if( !strcmp (name, "GREATER")) return SDLK_GREATER;
+	if( !strcmp (name, "QUESTION")) return SDLK_QUESTION;
+	if( !strcmp (name, "AT")) return SDLK_AT;
+	if( !strcmp (name, "LEFTBRACKET")) return SDLK_LEFTBRACKET;
+	if( !strcmp (name, "BACKSLASH")) return SDLK_BACKSLASH;
+	if( !strcmp (name, "RIGHTBRACKET")) return SDLK_RIGHTBRACKET;
+	if( !strcmp (name, "CARET")) return SDLK_CARET;
+	if( !strcmp (name, "UNDERSCORE")) return SDLK_UNDERSCORE;
+	if( !strcmp (name, "BACKQUOTE")) return SDLK_BACKQUOTE;
+	if( !strcmp (name, "a")) return SDLK_a;
+	if( !strcmp (name, "b")) return SDLK_b;
+	if( !strcmp (name, "c")) return SDLK_c;
+	if( !strcmp (name, "d")) return SDLK_d;
+	if( !strcmp (name, "e")) return SDLK_e;
+	if( !strcmp (name, "f")) return SDLK_f;
+	if( !strcmp (name, "g")) return SDLK_g;
+	if( !strcmp (name, "h")) return SDLK_h;
+	if( !strcmp (name, "i")) return SDLK_i;
+	if( !strcmp (name, "j")) return SDLK_j;
+	if( !strcmp (name, "k")) return SDLK_k;
+	if( !strcmp (name, "l")) return SDLK_l;
+	if( !strcmp (name, "m")) return SDLK_m;
+	if( !strcmp (name, "n")) return SDLK_n;
+	if( !strcmp (name, "o")) return SDLK_o;
+	if( !strcmp (name, "p")) return SDLK_p;
+	if( !strcmp (name, "q")) return SDLK_q;
+	if( !strcmp (name, "r")) return SDLK_r;
+	if( !strcmp (name, "s")) return SDLK_s;
+	if( !strcmp (name, "t")) return SDLK_t;
+	if( !strcmp (name, "u")) return SDLK_u;
+	if( !strcmp (name, "v")) return SDLK_v;
+	if( !strcmp (name, "w")) return SDLK_w;
+	if( !strcmp (name, "x")) return SDLK_x;
+	if( !strcmp (name, "y")) return SDLK_y;
+	if( !strcmp (name, "z")) return SDLK_z;
+	if( !strcmp (name, "DELETE")) return SDLK_DELETE;
+	if( !strcmp (name, "KP0")) return SDLK_KP0;
+	if( !strcmp (name, "KP1")) return SDLK_KP1;
+	if( !strcmp (name, "KP2")) return SDLK_KP2;
+	if( !strcmp (name, "KP3")) return SDLK_KP3;
+	if( !strcmp (name, "KP4")) return SDLK_KP4;
+	if( !strcmp (name, "KP5")) return SDLK_KP5;
+	if( !strcmp (name, "KP6")) return SDLK_KP6;
+	if( !strcmp (name, "KP7")) return SDLK_KP7;
+	if( !strcmp (name, "KP8")) return SDLK_KP8;
+	if( !strcmp (name, "KP9")) return SDLK_KP9;
+	if( !strcmp (name, "KP_PERIOD")) return SDLK_KP_PERIOD;
+	if( !strcmp (name, "KP_DIVIDE")) return SDLK_KP_DIVIDE;
+	if( !strcmp (name, "KP_MULTIPLY")) return SDLK_KP_MULTIPLY;
+	if( !strcmp (name, "KP_MINUS")) return SDLK_KP_MINUS;
+	if( !strcmp (name, "KP_PLUS")) return SDLK_KP_PLUS;
+	if( !strcmp (name, "KP_ENTER")) return SDLK_KP_ENTER;
+	if( !strcmp (name, "KP_EQUALS")) return SDLK_KP_EQUALS;
+	if( !strcmp (name, "UP")) return SDLK_UP;
+	if( !strcmp (name, "DOWN")) return SDLK_DOWN;
+	if( !strcmp (name, "RIGHT")) return SDLK_RIGHT;
+	if( !strcmp (name, "LEFT")) return SDLK_LEFT;
+	if( !strcmp (name, "INSERT")) return SDLK_INSERT;
+	if( !strcmp (name, "HOME")) return SDLK_HOME;
+	if( !strcmp (name, "END")) return SDLK_END;
+	if( !strcmp (name, "PAGEUP")) return SDLK_PAGEUP;
+	if( !strcmp (name, "PAGEDOWN")) return SDLK_PAGEDOWN;
+	if( !strcmp (name, "F1")) return SDLK_F1;
+	if( !strcmp (name, "F2")) return SDLK_F2;
+	if( !strcmp (name, "F3")) return SDLK_F3;
+	if( !strcmp (name, "F4")) return SDLK_F4;
+	if( !strcmp (name, "F5")) return SDLK_F5;
+	if( !strcmp (name, "F6")) return SDLK_F6;
+	if( !strcmp (name, "F7")) return SDLK_F7;
+	if( !strcmp (name, "F8")) return SDLK_F8;
+	if( !strcmp (name, "F9")) return SDLK_F9;
+	if( !strcmp (name, "F10")) return SDLK_F10;
+	if( !strcmp (name, "F11")) return SDLK_F11;
+	if( !strcmp (name, "F12")) return SDLK_F12;
+	if( !strcmp (name, "F13")) return SDLK_F13;
+	if( !strcmp (name, "F14")) return SDLK_F14;
+	if( !strcmp (name, "F15")) return SDLK_F15;
+	if( !strcmp (name, "NUMLOCK")) return SDLK_NUMLOCK;
+	if( !strcmp (name, "CAPSLOCK")) return SDLK_CAPSLOCK;
+	if( !strcmp (name, "SCROLLOCK")) return SDLK_SCROLLOCK;
+	if( !strcmp (name, "RSHIFT")) return SDLK_RSHIFT;
+	if( !strcmp (name, "LSHIFT")) return SDLK_LSHIFT;
+	if( !strcmp (name, "RCTRL")) return SDLK_RCTRL;
+	if( !strcmp (name, "LCTRL")) return SDLK_LCTRL;
+	if( !strcmp (name, "RALT")) return SDLK_RALT;
+	if( !strcmp (name, "LALT")) return SDLK_LALT;
+	if( !strcmp (name, "RMETA")) return SDLK_RMETA;
+	if( !strcmp (name, "LMETA")) return SDLK_LMETA;
+	if( !strcmp (name, "LSUPER")) return SDLK_LSUPER;
+	if( !strcmp (name, "RSUPER")) return SDLK_RSUPER;
+	if( !strcmp (name, "MODE")) return SDLK_MODE;
+	if( !strcmp (name, "HELP")) return SDLK_HELP;
+	if( !strcmp (name, "PRINT")) return SDLK_PRINT;
+	if( !strcmp (name, "SYSREQ")) return SDLK_SYSREQ;
+	if( !strcmp (name, "BREAK")) return SDLK_BREAK;
+	if( !strcmp (name, "MENU")) return SDLK_MENU;
+	if( !strcmp (name, "POWER")) return SDLK_POWER;
+	if( !strcmp (name, "EURO")) return SDLK_EURO;
+	return -1;
+}
+
+char* SDLKToKeyname( int key)
+{
+	if( key == SDLK_BACKSPACE) return "BACKSPACE";
+	if( key == SDLK_TAB) return "TAB";
+	if( key == SDLK_CLEAR) return "CLEAR";
+	if( key == SDLK_RETURN) return "RETURN";
+	if( key == SDLK_SPACE) return "SPACE";
+	if( key == SDLK_ESCAPE) return "ESCAPE";
+	if( key == SDLK_EXCLAIM) return "EXCLAIM";
+	if( key == SDLK_QUOTEDBL) return "QUOTEDBL";
+	if( key == SDLK_HASH) return "HASH";
+	if( key == SDLK_PAUSE) return "PAUSE";
+	if( key == SDLK_DOLLAR) return "DOLLAR";
+	if( key == SDLK_AMPERSAND) return "AMPERSAND";
+	if( key == SDLK_QUOTE) return "QUOTE";
+	if( key == SDLK_LEFTPAREN) return "LEFTPAREN";
+	if( key == SDLK_RIGHTPAREN) return "RIGHTPAREN";
+	if( key == SDLK_ASTERISK) return "ASTERISK";
+	if( key == SDLK_PLUS) return "PLUS";
+	if( key == SDLK_COMMA) return "COMMA";
+	if( key == SDLK_MINUS) return "MINUS";
+	if( key == SDLK_PERIOD) return "PERIOD";
+	if( key == SDLK_SLASH) return "SLASH";
+	if( key == SDLK_0) return "0";
+	if( key == SDLK_1) return "1";
+	if( key == SDLK_2) return "2";
+	if( key == SDLK_3) return "3";
+	if( key == SDLK_4) return "4";
+	if( key == SDLK_5) return "5";
+	if( key == SDLK_6) return "6";
+	if( key == SDLK_7) return "7";
+	if( key == SDLK_8) return "8";
+	if( key == SDLK_9) return "9";
+	if( key == SDLK_COLON) return "COLON";
+	if( key == SDLK_SEMICOLON) return "SEMICOLON";
+	if( key == SDLK_LESS) return "LESS";
+	if( key == SDLK_EQUALS) return "EQUALS";
+	if( key == SDLK_GREATER) return "GREATER";
+	if( key == SDLK_QUESTION) return "QUESTION";
+	if( key == SDLK_AT) return "AT";
+	if( key == SDLK_LEFTBRACKET) return "LEFTBRACKET";
+	if( key == SDLK_BACKSLASH) return "BACKSLASH";
+	if( key == SDLK_RIGHTBRACKET) return "RIGHTBRACKET";
+	if( key == SDLK_CARET) return "CARET";
+	if( key == SDLK_UNDERSCORE) return "UNDERSCORE";
+	if( key == SDLK_BACKQUOTE) return "BACKQUOTE";
+	if( key == SDLK_a) return "a";
+	if( key == SDLK_b) return "b";
+	if( key == SDLK_c) return "c";
+	if( key == SDLK_d) return "d";
+	if( key == SDLK_e) return "e";
+	if( key == SDLK_f) return "f";
+	if( key == SDLK_g) return "g";
+	if( key == SDLK_h) return "h";
+	if( key == SDLK_i) return "i";
+	if( key == SDLK_j) return "j";
+	if( key == SDLK_k) return "k";
+	if( key == SDLK_l) return "l";
+	if( key == SDLK_m) return "m";
+	if( key == SDLK_n) return "n";
+	if( key == SDLK_o) return "o";
+	if( key == SDLK_p) return "p";
+	if( key == SDLK_q) return "q";
+	if( key == SDLK_r) return "r";
+	if( key == SDLK_s) return "s";
+	if( key == SDLK_t) return "t";
+	if( key == SDLK_u) return "u";
+	if( key == SDLK_v) return "v";
+	if( key == SDLK_w) return "w";
+	if( key == SDLK_x) return "x";
+	if( key == SDLK_y) return "y";
+	if( key == SDLK_z) return "z";
+	if( key == SDLK_DELETE) return "DELETE";
+	if( key == SDLK_KP0) return "KP0";
+	if( key == SDLK_KP1) return "KP1";
+	if( key == SDLK_KP2) return "KP2";
+	if( key == SDLK_KP3) return "KP3";
+	if( key == SDLK_KP4) return "KP4";
+	if( key == SDLK_KP5) return "KP5";
+	if( key == SDLK_KP6) return "KP6";
+	if( key == SDLK_KP7) return "KP7";
+	if( key == SDLK_KP8) return "KP8";
+	if( key == SDLK_KP9) return "KP9";
+	if( key == SDLK_KP_PERIOD) return "KP_PERIOD";
+	if( key == SDLK_KP_DIVIDE) return "KP_DIVIDE";
+	if( key == SDLK_KP_MULTIPLY) return "KP_MULTIPLY";
+	if( key == SDLK_KP_MINUS) return "KP_MINUS";
+	if( key == SDLK_KP_PLUS) return "KP_PLUS";
+	if( key == SDLK_KP_ENTER) return "KP_ENTER";
+	if( key == SDLK_KP_EQUALS) return "KP_EQUALS";
+	if( key == SDLK_UP) return "UP";
+	if( key == SDLK_DOWN) return "DOWN";
+	if( key == SDLK_RIGHT) return "RIGHT";
+	if( key == SDLK_LEFT) return "LEFT";
+	if( key == SDLK_INSERT) return "INSERT";
+	if( key == SDLK_HOME) return "HOME";
+	if( key == SDLK_END) return "END";
+	if( key == SDLK_PAGEUP) return "PAGEUP";
+	if( key == SDLK_PAGEDOWN) return "PAGEDOWN";
+	if( key == SDLK_F1) return "F1";
+	if( key == SDLK_F2) return "F2";
+	if( key == SDLK_F3) return "F3";
+	if( key == SDLK_F4) return "F4";
+	if( key == SDLK_F5) return "F5";
+	if( key == SDLK_F6) return "F6";
+	if( key == SDLK_F7) return "F7";
+	if( key == SDLK_F8) return "F8";
+	if( key == SDLK_F9) return "F9";
+	if( key == SDLK_F10) return "F10";
+	if( key == SDLK_F11) return "F11";
+	if( key == SDLK_F12) return "F12";
+	if( key == SDLK_F13) return "F13";
+	if( key == SDLK_F14) return "F14";
+	if( key == SDLK_F15) return "F15";
+	if( key == SDLK_NUMLOCK) return "NUMLOCK";
+	if( key == SDLK_CAPSLOCK) return "CAPSLOCK";
+	if( key == SDLK_SCROLLOCK) return "SCROLLOCK";
+	if( key == SDLK_RSHIFT) return "RSHIFT";
+	if( key == SDLK_LSHIFT) return "LSHIFT";
+	if( key == SDLK_RCTRL) return "RCTRL";
+	if( key == SDLK_LCTRL) return "LCTRL";
+	if( key == SDLK_RALT) return "RALT";
+	if( key == SDLK_LALT) return "LALT";
+	if( key == SDLK_RMETA) return "RMETA";
+	if( key == SDLK_LMETA) return "LMETA";
+	if( key == SDLK_LSUPER) return "LSUPER";
+	if( key == SDLK_RSUPER) return "RSUPER";
+	if( key == SDLK_MODE) return "MODE";
+	if( key == SDLK_HELP) return "HELP";
+	if( key == SDLK_PRINT) return "PRINT";
+	if( key == SDLK_SYSREQ) return "SYSREQ";
+	if( key == SDLK_BREAK) return "BREAK";
+	if( key == SDLK_MENU) return "MENU";
+	if( key == SDLK_POWER) return "POWER";
+	if( key == SDLK_EURO) return "EURO";
+	return "UNKNOWN";
+}
Index: /orxonox/branches/levelloader/src/keynames.h
===================================================================
--- /orxonox/branches/levelloader/src/keynames.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/keynames.h	(revision 3417)
@@ -0,0 +1,50 @@
+/*!
+    \file keynames.h
+    \brief Key/button naming functions
+    
+		Converts strings to SDLK/SDL_BUTTON values and vice versa
+*/
+#ifndef _KEYNAMES_H
+#define _KEYNAMES_H
+
+
+#ifdef __WIN32__
+#include <windows.h>
+#endif
+
+#ifndef __APPLE__
+#include <SDL/SDL.h>
+#else
+#include <SDL.h>
+#endif
+
+/**
+	\brief converts a button name string to a integer representing the corresponding SDL mouse button identifier
+	\param name: the name of the mouse button
+	\return an int containing the SDL identifier of the mouse button or -1 if the button name is not valid
+*/
+int buttonnameToSDLB( char* name);
+
+/**
+	\brief converst a SDL mouse button identifier to a name string
+	\param button: an SDL mouse button identifier
+	\return a pointer to a string containing the name of the mouse button
+*/
+char* SDLBToButtonname( int button);
+
+/**
+	\brief converts a key name string to a integer representing the corresponding SDLK sym
+	\param name: the name of the key
+	\return the SDLK sym of the named key or -1 if the key name is not valid
+*/
+int keynameToSDLK( char* name);
+
+/**
+	\brief converts an SDLK sym to a name string
+	\param key: the SDLK sym
+	\return a pointer to a string containig the name of the key
+*/
+char* SDLKToKeyname( int key);
+
+
+#endif /* _KEYNAMES_H */
Index: /orxonox/branches/levelloader/src/list.cc
===================================================================
--- /orxonox/branches/levelloader/src/list.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/list.cc	(revision 3417)
@@ -0,0 +1,148 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Patrick Boenzli
+   co-programmer: ...
+*/
+
+
+#include "list.h"
+#include "world_entity.h"
+
+using namespace std;
+
+
+
+List::List () 
+{
+  this->first = NULL;
+  this->last = NULL;
+  this->size = 0;
+}
+
+List::~List () 
+{}
+
+
+void List::add(WorldEntity* entity)
+{
+  printf("List::add() \n");
+  listElement* el = new listElement;
+  el->prev = this->last;
+  el->curr = entity;
+  el->next = NULL;
+
+  this->last = el;
+
+  if(this->size == 0) this->first = el;
+  else el->prev->next = el;
+  this->size++;
+}
+
+
+void List::remove(WorldEntity* entity)
+{
+  this->currentEl = this->first;
+  listElement* te;
+  while( this->currentEl != NULL)
+    {
+      if( this->currentEl->curr == entity)
+	{
+	  printf("List::remove() - object found\n");
+	  
+	  if( this->currentEl->prev  == NULL ) this->first = this->currentEl->next;
+	  else this->currentEl->prev->next = this->currentEl->next;
+
+	  if( this->currentEl->next == NULL) this->last = this->currentEl->prev;
+	  else this->currentEl->next->prev = this->currentEl->prev;
+
+	  te = this->currentEl->next;
+	  delete this->currentEl;
+	  this->currentEl = te;
+	  return;
+	}
+      this->currentEl = this->currentEl->next;
+    }
+}
+
+
+void List::destroy()
+{
+  printf("List::clear() - clearing all world objects, releasing mem\n");
+  this->currentEl = this->first;
+  listElement* le = NULL;
+  while(this->currentEl != NULL)
+    {
+      le = this->currentEl->next;
+      delete this->currentEl->curr;
+      delete this->currentEl;
+      this->currentEl = le;
+    }
+  this->first = NULL;
+  this->last = NULL;
+  this->size = 0;
+}
+
+
+WorldEntity* List::firstElement()
+{
+  return this->first->curr;
+}
+
+
+bool List::isEmpty()
+{
+  return (this->size==0)?true:false;
+}
+
+
+int List::getSize()
+{
+  return this->size;
+}
+
+
+WorldEntity* List::enumerate()
+{
+  if(this->size == 0) return NULL;
+  this->currentEl = this->first;
+  return this->currentEl->curr;
+}
+
+
+WorldEntity* List::nextElement()
+{
+  if(this->size == 0) return NULL;
+  this->currentEl = this->currentEl->next;
+  if(this->currentEl == NULL) return NULL;
+  return this->currentEl->curr;
+}
+
+
+WorldEntity* List::toArray()
+{}
+
+
+void List::debug()
+{
+  int counter = 1;
+  this->currentEl = this->first;
+  printf("List:debug() =====================\n");
+  while(this->currentEl != NULL)
+    {
+      printf("element: nr %d/%d\n", counter, size);
+      this->currentEl = this->currentEl->next;
+      counter++;
+    }
+  printf("List:debug()END =====================\n");
+}
Index: /orxonox/branches/levelloader/src/list.h
===================================================================
--- /orxonox/branches/levelloader/src/list.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/list.h	(revision 3417)
@@ -0,0 +1,207 @@
+
+#ifndef _LIST_H
+#define _LIST_H
+
+#include "stdincl.h"
+
+//! An enum to list all the modes available when adding an object to a List
+//enum ADDMODE {LIST_ADD_FIRST, LIST_ADD_LAST};
+//! An enum to list the two searching directions available when removing an object from a List
+//enum FINDMODE {LIST_FIND_BW, LIST_FIND_FW};
+
+
+
+class WorldEntity;
+
+class List {
+
+ public:
+  List ();
+  ~List ();
+
+  void add(WorldEntity* entity);
+  void remove(WorldEntity* entity);
+  void destroy();
+  WorldEntity* firstElement();
+  bool isEmpty();
+  int getSize();
+  WorldEntity* enumerate();
+  WorldEntity* nextElement();
+  WorldEntity* toArray();
+  void debug();
+
+ private:
+  struct listElement
+  {
+    listElement* prev;
+    WorldEntity* curr;
+    listElement* next;
+  };
+  Uint32 size;
+  listElement* first;
+  listElement* last;
+  listElement* currentEl;
+
+
+};
+
+class Iterator
+{
+
+ public:
+  bool hasNext();
+  WorldEntity* next();
+
+ private:
+
+};
+
+
+template<class T> class tList 
+{
+ private:
+  struct listElement
+  {
+    listElement* prev;
+    T* curr;
+    listElement* next;
+  };
+
+  Uint32 size;
+  listElement* first;
+  listElement* last;
+  listElement* currentEl;
+  
+ public:
+  tList ();
+  ~tList ();
+  
+
+  void add(T* entity);
+  void remove(T* entity);
+  void destroy();
+  T* firstElement();
+  bool isEmpty();
+  int getSize();
+  T* enumerate();
+  T* nextElement();
+  T* toArray();
+  void debug();
+};
+
+
+template<class T>
+tList<T>::tList () 
+{
+  this->first = NULL;
+  this->last = NULL;
+  this->size = 0;
+}
+
+template<class T>
+tList<T>::~tList () 
+{}
+
+template<class T>
+void tList<T>::add(T* entity)
+{
+  listElement* el = new listElement;
+  el->prev = this->last;
+  el->curr = entity;
+  el->next = NULL;
+
+  this->last = el;
+
+  if(this->size == 0) this->first = el;
+  else el->prev->next = el;
+  this->size++;
+}
+
+
+template<class T>
+void tList<T>::remove(T* entity)
+{
+  this->currentEl = this->first;
+  listElement* te;
+  while( this->currentEl != NULL)
+    {
+      if( this->currentEl->curr == entity)
+	{ 
+	  if( this->currentEl->prev  == NULL ) this->first = this->currentEl->next;
+	  else this->currentEl->prev->next = this->currentEl->next;
+
+	  if( this->currentEl->next == NULL) this->last = this->currentEl->prev;
+	  else this->currentEl->next->prev = this->currentEl->prev;
+
+	  te = this->currentEl->next;
+	  delete this->currentEl;
+	  this->currentEl = te;
+	  return;
+	}
+      this->currentEl = this->currentEl->next;
+    }
+}
+
+
+template<class T>
+void tList<T>::destroy()
+{
+  this->currentEl = this->first;
+  while(this->currentEl != NULL)
+    {
+      listElement* le = this->currentEl->next;
+      delete this->currentEl->curr;
+      delete this->currentEl;
+      this->currentEl = le;
+    }
+  this->first = NULL;
+  this->last = NULL;
+  this->size = 0;
+}
+
+
+template<class T>
+T* tList<T>::firstElement()
+{
+  return this->first->curr;
+}
+
+
+template<class T>
+bool tList<T>::isEmpty()
+{
+  return (this->size==0)?true:false;
+}
+
+
+template<class T>
+int tList<T>::getSize()
+{
+  return this->size;
+}
+
+
+template<class T>
+T* tList<T>::enumerate()
+{
+  if(this->size == 0) return NULL;
+  this->currentEl = this->first;
+  return this->currentEl->curr;
+}
+
+
+template<class T>
+T* tList<T>::nextElement()
+{
+  if(this->size == 0) return NULL;
+  this->currentEl = this->currentEl->next;
+  if(this->currentEl == NULL) return NULL;
+  return this->currentEl->curr;
+}
+
+
+template<class T>
+T* tList<T>::toArray()
+{}
+
+#endif /* _LIST_H */
Index: /orxonox/branches/levelloader/src/list_template.h
===================================================================
--- /orxonox/branches/levelloader/src/list_template.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/list_template.h	(revision 3417)
@@ -0,0 +1,308 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Christian Meyer
+
+   ADDONS/FIXES:
+  
+   Patrick Boenzli     :          Implemented getSize() function
+*/
+
+
+/*!
+  \file list.h
+  \brief Contains a template for a doubly linked list
+*/
+
+#ifndef _LIST_TEMPLATE_H
+#define _LIST_TEMPLATE_H
+
+#include "stdincl.h"
+
+//! An enum to list all the modes available when adding an object to a List
+enum ADDMODE {LIST_ADD_NEXT, LIST_ADD_PREV, LIST_ADD_FIRST, LIST_ADD_LAST};
+//! An enum to list the two searching directions available when removing an object from a List
+enum FINDMODE {LIST_FIND_BW, LIST_FIND_FW};
+
+//! A generic doubly linked list
+template<class T> class ListTemplate 
+{
+  T* object;
+  ListTemplate<T>* next;
+  ListTemplate<T>* prev;
+  bool bReference;
+  int size;
+  
+ public:
+  ListTemplate (T* obj, ListTemplate<T>* n, ListTemplate<T>* p, bool bRef);
+  ~ListTemplate ();
+  
+  int add(T* obj, ADDMODE mode, bool bRef);
+  T* getObject();
+  ListTemplate<T>* getNext();
+  ListTemplate<T>* getPrevious();
+  ListTemplate<T>* getLast();
+  ListTemplate<T>* getFirst();
+  void setNext(ListTemplate<T>* ptr);
+  void setPrev(ListTemplate<T>* ptr);
+  int remove (T* obj, FINDMODE mode);
+  int getSize();
+  void destroy();
+};
+
+
+/**
+  \brief Standard constructor
+  
+  Call this without any parameters to generate a new ListTemplate which can be filled with content.
+  DO NOT create a ListTemplate element that contains an object on your own, you'll lose the data
+  contained in that object and will have trouble removing the list from your memory.
+*/
+template<class T>
+ListTemplate<T>::ListTemplate (T* obj = NULL, ListTemplate<T>* n = NULL, ListTemplate<T>* p = NULL, bool bRef = false)
+{
+  object = obj;
+  next = n;
+  prev = p;
+  bReference = bRef;
+  if(obj != NULL)
+    ++size;
+}
+
+/**
+  \brief Standard destructor
+  
+  Call this on the initially generated base ListTemplate element to remove the whole ListTemplate from the memory.
+  You can safely do this to any ListTemplate element you want without messing up the rest of the ListTemplate, but keep in mind
+  that the contained object will be deleted as well when bRef had been set to false.
+*/
+template<class T>
+ListTemplate<T>::~ListTemplate ()
+{
+  if (object == NULL) // deleted foot node => disband the list
+  {
+    while( next != NULL)
+    {
+      delete next;
+    }
+    while( prev != NULL)
+    {
+      delete prev;
+    }
+  }
+  else
+  {
+    if (prev != NULL) prev->setNext (next);
+    if (next != NULL) next->setPrev (prev);
+    if (!bReference) delete object;
+  }
+}
+ 
+/**
+  \brief Add an object to the ListTemplate
+  \param obj: A pointer to an allocated object
+  \param mode: A Value of ADDMODE (default: LIST_ADD_NEXT)
+  \param bRef: Sets whether the element is serving as a storage point or a simple listing (default: false)
+  \return 0 if the operation succeded, -1 if the element could not be added
+  
+  This adds a new ListTemplate element to the chain. The mode parameter can be used to specify
+  the location where the element should be added. LIST_ADD_NEXT will add the new element directly
+  after the base element. LIST_ADD_PREV will add the new element directly before the base element.
+  LIST_ADD_FIRST will add the element at the beginning of the ListTemplate whereas LIST_ADD_LAST will add
+  it to the end of the chain. If the bRef parameter is set to true, the object pointer will not be deleted
+  when the element containing that object is deleted, thus the ListTemplate can be used for temporary listings as
+  well as permanent data storage.
+*/
+template<class T> 
+int ListTemplate<T>::add (T* obj, ADDMODE mode = LIST_ADD_NEXT, bool bRef = false)
+{
+  ListTemplate<T>* p;
+  if( obj == NULL) return -1;
+  switch (mode)
+  {
+    case LIST_ADD_NEXT:
+      p = new ListTemplate<T>( obj, next, this, bRef);
+      if( next != NULL) next->setPrev (p);
+      next = p;
+      break;
+    case LIST_ADD_PREV:
+      p = new ListTemplate<T>( obj, this, prev, bRef);
+      if( prev != NULL) prev->setNext (p);
+      prev = p;
+      break;
+    case LIST_ADD_FIRST:
+      if (prev == NULL) prev = new ListTemplate<T> (obj, this, NULL, bRef);
+      else return prev->add (obj, mode, bRef);
+      break;
+    case LIST_ADD_LAST:
+      if (next == NULL) next = new ListTemplate<T> (obj, NULL, this, bRef);
+      else return next->add (obj, mode, bRef);
+      break;
+    default:
+        return -1;
+      break;
+  }
+  ++size;
+  return 0;
+}
+
+/**
+  \brief Get the next element of the ListTemplate
+  \return The ListTemplate element after the current ListTemplate element
+*/
+template<class T>
+ListTemplate<T>* ListTemplate<T>::getNext ()
+{
+  return next;
+}
+ 
+/**
+  \brief Get the previous element of the ListTemplate
+  \return The ListTemplate element before the current ListTemplate element
+*/
+template<class T>
+ListTemplate<T>* ListTemplate<T>::getPrevious ()
+{
+  return prev;
+}
+
+/**
+  \brief Get the last element of the ListTemplate
+  \return The last ListTemplate element
+*/
+template<class T>
+ListTemplate<T>* ListTemplate<T>::getLast ()
+{
+  if (next == NULL) return this;
+  else return next->getLast();
+}
+
+/**
+  \brief Get the first element of the ListTemplate
+  \return The first ListTemplate element
+*/
+template<class T>
+ListTemplate<T>* ListTemplate<T>::getFirst ()
+{
+  if (prev == NULL) return this;
+  else return prev->getFirst();
+}
+
+/**
+  \brief Removes a certain element from the ListTemplate
+  \param obj: A pointer to the object that should be removed
+  \param mode: A value of FINDMODE
+  \return 0 if the element was found and removed, -1 if the element was not found
+  
+  This searches the part of the ListTemplate specified with mode for the object in question.
+  When the object is found it is deleted and the ListTemplate element is removed from the chain.
+  If mode is LIST_FIND_FW all elements AFTER the base element are searched, if mode is
+  LIST_FIND_BW all elements BEFORE the base element are searched. Note that the object
+  contained within the ListTemplate element is NOT deleted when bRef was set to true.
+*/
+template<class T>
+int ListTemplate<T>::remove (T* obj, FINDMODE mode = LIST_FIND_FW)
+{
+  if (obj == NULL) return -1;
+  else
+  {
+    switch (mode)
+    {
+      case LIST_FIND_BW:
+        if (prev == NULL) return -1;
+        else
+        {
+          if( prev->getObject() == obj)
+          {
+            delete prev;
+          }
+          else
+          {
+            return prev->remove( obj, mode);
+          }
+        }
+        break;
+      case LIST_FIND_FW:
+        if (next == NULL) return -1;
+        else
+        {
+          if( next->getObject() == obj)
+          {
+            delete next;
+          }
+          else
+          {
+            return next->remove( obj, mode);
+          }
+        }
+        break;
+      default:
+        return -1;
+    }
+  }
+  --size;
+  return 0;
+}
+
+/**
+  \brief Set the next element of a ListTemplate element
+  \param ptr: A pointer to the new next element
+    
+  Sets the next element of a ListTemplate element... Better not touch this, it can really mess up a ListTemplate.
+*/
+template<class T>
+void ListTemplate<T>::setNext (ListTemplate<T>* ptr)
+{
+  next = ptr;
+}
+
+/**
+  \brief Set the prev element of a ListTemplate element
+  \param ptr: A pointer to the new previous element
+    
+  Sets the previous element of a ListTemplate element... Better not touch this, it can really mess up a ListTemplate.
+*/
+template<class T>
+void ListTemplate<T>::setPrev (ListTemplate<T>* ptr)
+{
+  prev = ptr;
+}
+
+/**
+  \brief Get the pointer to the object the element is containing
+  \return The contained object (will be NULL if called on the base element).
+*/
+template<class T>
+T* ListTemplate<T>::getObject()
+{
+  return object;
+}
+
+
+/**
+  \brief Returns the current size of the ListTemplate
+  \return Size of ListTemplate
+*/
+template<class T>
+int ListTemplate<T>::getSize()
+{
+  return this->size;
+}
+
+
+template<class T>
+void ListTemplate<T>::destroy()
+{
+  /* \todo at the moment - doing nothing. should delete everything */
+}
+
+#endif /* _LIST_TENMPLATE_H */
+
Index: /orxonox/branches/levelloader/src/matrix.cc
===================================================================
--- /orxonox/branches/levelloader/src/matrix.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/matrix.cc	(revision 3417)
@@ -0,0 +1,746 @@
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Benjamin Grauer
+   co-programmer: ...
+
+   \todo Null-Parent => center of the coord system - singleton
+   \todo Smooth-Parent: delay, speed
+   \todo destroy the stuff again, delete...
+*/
+
+#include "matrix.h"
+
+Matrix::Matrix (size_t row, size_t col)
+{
+  _m = new base_mat( row, col, 0);
+}
+
+// copy constructor
+Matrix::Matrix (const Matrix& m)
+{
+    _m = m._m;
+    _m->Refcnt++;
+}
+
+// Internal copy constructor
+void Matrix::clone ()
+{
+    _m->Refcnt--;
+    _m = new base_mat( _m->Row, _m->Col, _m->Val);
+}
+
+// destructor
+Matrix::~Matrix ()
+{
+   if (--_m->Refcnt == 0) delete _m;
+}
+
+// assignment operator
+Matrix& Matrix::operator = (const Matrix& m) 
+{
+    m._m->Refcnt++;
+    if (--_m->Refcnt == 0) delete _m;
+    _m = m._m;
+    return *this;
+}
+
+//  reallocation method
+void Matrix::realloc (size_t row, size_t col)
+{
+   if (row == _m->RowSiz && col == _m->ColSiz)
+   {
+      _m->Row = _m->RowSiz;
+      _m->Col = _m->ColSiz;
+      return;
+   }
+
+   base_mat *m1 = new base_mat( row, col, NULL);
+   size_t colSize = min(_m->Col,col) * sizeof(float);
+   size_t minRow = min(_m->Row,row);
+
+   for (size_t i=0; i < minRow; i++)
+      memcpy( m1->Val[i], _m->Val[i], colSize);
+
+   if (--_m->Refcnt == 0) 
+       delete _m;
+   _m = m1;
+
+   return;
+}
+
+// public method for resizing Matrix
+void Matrix::SetSize (size_t row, size_t col) 
+{
+   size_t i,j;
+   size_t oldRow = _m->Row;
+   size_t oldCol = _m->Col;
+
+   if (row != _m->RowSiz || col != _m->ColSiz)
+      realloc( row, col);
+
+   for (i=oldRow; i < row; i++)
+      for (j=0; j < col; j++)
+	 _m->Val[i][j] = float(0);
+
+   for (i=0; i < row; i++)                      
+      for (j=oldCol; j < col; j++)
+	 _m->Val[i][j] = float(0);
+
+   return;
+}
+
+// subscript operator to get/set individual elements
+float& Matrix::operator () (size_t row, size_t col) 
+{
+   if (row >= _m->Row || col >= _m->Col)
+      printf( "Matrix::operator(): Index out of range!\n");
+   if (_m->Refcnt > 1) clone();
+   return _m->Val[row][col];
+}
+
+// subscript operator to get/set individual elements
+float Matrix::operator () (size_t row, size_t col) const 
+{
+   if (row >= _m->Row || col >= _m->Col)
+      printf( "Matrix::operator(): Index out of range!\n");
+   return _m->Val[row][col];
+}
+
+// input stream function
+istream& operator >> (istream& istrm, Matrix& m)
+{
+   for (size_t i=0; i < m.RowNo(); i++)
+      for (size_t j=0; j < m.ColNo(); j++)
+      {
+         float x;
+         istrm >> x;
+         m(i,j) = x;
+      }
+   return istrm;
+}
+
+// output stream function
+ostream& operator << (ostream& ostrm, const Matrix& m)
+{
+   for (size_t i=0; i < m.RowNo(); i++)
+   {
+      for (size_t j=0; j < m.ColNo(); j++)
+      {
+         float x = m(i,j);
+         ostrm << x << '\t';
+      }
+      ostrm << endl;
+   }
+   return ostrm;
+}
+
+
+// logical equal-to operator
+bool operator == (const Matrix& m1, const Matrix& m2) 
+{
+   if (m1.RowNo() != m2.RowNo() || m1.ColNo() != m2.ColNo())
+      return false;
+
+   for (size_t i=0; i < m1.RowNo(); i++)
+      for (size_t j=0; j < m1.ColNo(); j++)
+	      if (m1(i,j) != m2(i,j))
+	         return false;
+
+   return true;
+}
+
+// logical no-equal-to operator
+bool operator != (const Matrix& m1, const Matrix& m2) 
+{
+    return (m1 == m2) ? false : true;
+}
+
+// combined addition and assignment operator
+Matrix& Matrix::operator += (const Matrix& m) 
+{
+   if (_m->Row != m._m->Row || _m->Col != m._m->Col)
+     printf("Matrix::operator+= : Inconsistent Matrix sizes in addition!\n");
+   if (_m->Refcnt > 1) clone();
+   for (size_t i=0; i < m._m->Row; i++)
+      for (size_t j=0; j < m._m->Col; j++)
+	 _m->Val[i][j] += m._m->Val[i][j];
+   return *this;
+}
+
+// combined subtraction and assignment operator
+Matrix& Matrix::operator -= (const Matrix& m) 
+{
+   if (_m->Row != m._m->Row || _m->Col != m._m->Col)
+      printf( "Matrix::operator-= : Inconsistent Matrix sizes in subtraction!\n");
+   if (_m->Refcnt > 1) clone();
+   for (size_t i=0; i < m._m->Row; i++)
+      for (size_t j=0; j < m._m->Col; j++)
+	 _m->Val[i][j] -= m._m->Val[i][j];
+   return *this;
+}
+
+// combined scalar multiplication and assignment operator
+ Matrix&
+Matrix::operator *= (const float& c) 
+{
+    if (_m->Refcnt > 1) clone();
+    for (size_t i=0; i < _m->Row; i++)
+	for (size_t j=0; j < _m->Col; j++)
+	    _m->Val[i][j] *= c;
+    return *this;
+}
+
+// combined Matrix multiplication and assignment operator
+ Matrix&
+Matrix::operator *= (const Matrix& m) 
+{
+   if (_m->Col != m._m->Row)
+      printf( "Matrix::operator*= : Inconsistent Matrix sizes in multiplication!\n");
+
+   Matrix temp(_m->Row,m._m->Col);
+
+   for (size_t i=0; i < _m->Row; i++)
+      for (size_t j=0; j < m._m->Col; j++)
+      {
+         temp._m->Val[i][j] = float(0);
+         for (size_t k=0; k < _m->Col; k++)
+            temp._m->Val[i][j] += _m->Val[i][k] * m._m->Val[k][j];
+      }
+   *this = temp;
+
+   return *this;
+}
+
+// combined scalar division and assignment operator
+ Matrix&
+Matrix::operator /= (const float& c) 
+{
+    if (_m->Refcnt > 1) clone();
+    for (size_t i=0; i < _m->Row; i++)
+	for (size_t j=0; j < _m->Col; j++)
+	    _m->Val[i][j] /= c;
+
+    return *this;
+}
+
+// combined power and assignment operator
+ Matrix&
+Matrix::operator ^= (const size_t& pow) 
+{
+  Matrix temp(*this);
+
+  for (size_t i=2; i <= pow; i++)
+    *this *=  temp; // changed from *this = *this * temp;
+
+  return *this;
+}
+
+// unary negation operator
+ Matrix
+Matrix::operator - () 
+{
+   Matrix temp(_m->Row,_m->Col);
+
+   for (size_t i=0; i < _m->Row; i++)
+      for (size_t j=0; j < _m->Col; j++)
+	 temp._m->Val[i][j] = - _m->Val[i][j];
+
+   return temp;
+}
+
+// binary addition operator
+ Matrix
+operator + (const Matrix& m1, const Matrix& m2) 
+{
+   Matrix temp = m1;
+   temp += m2;
+   return temp;
+}
+
+// binary subtraction operator
+ Matrix
+operator - (const Matrix& m1, const Matrix& m2) 
+{
+   Matrix temp = m1;
+   temp -= m2;
+   return temp;
+}
+
+// binary scalar multiplication operator
+ Matrix
+operator * (const Matrix& m, const float& no) 
+{
+   Matrix temp = m;
+   temp *= no;
+   return temp;
+}
+
+
+// binary scalar multiplication operator
+ Matrix
+operator * (const float& no, const Matrix& m) 
+{
+   return (m * no);
+}
+
+// binary Matrix multiplication operator
+ Matrix
+operator * (const Matrix& m1, const Matrix& m2) 
+{
+   Matrix temp = m1;
+   temp *= m2;
+   return temp;
+}
+
+// binary scalar division operator
+ Matrix
+operator / (const Matrix& m, const float& no) 
+{
+    return (m * (float(1) / no));
+}
+
+
+// binary scalar division operator
+ Matrix
+operator / (const float& no, const Matrix& m) 
+{
+    return (!m * no);
+}
+
+// binary Matrix division operator
+ Matrix
+operator / (const Matrix& m1, const Matrix& m2) 
+{
+    return (m1 * !m2);
+}
+
+// binary power operator
+ Matrix
+operator ^ (const Matrix& m, const size_t& pow) 
+{
+   Matrix temp = m;
+   temp ^= pow;
+   return temp;
+}
+
+// unary transpose operator
+ Matrix
+operator ~ (const Matrix& m) 
+{
+   Matrix temp(m.ColNo(),m.RowNo());
+
+   for (size_t i=0; i < m.RowNo(); i++)
+      for (size_t j=0; j < m.ColNo(); j++)
+      {
+         float x = m(i,j);
+	      temp(j,i) = x;
+      }
+   return temp;
+}
+
+// unary inversion operator
+ Matrix
+operator ! (const Matrix m) 
+{
+   Matrix temp = m;
+   return temp.Inv();
+}
+
+// inversion function
+ Matrix
+Matrix::Inv () 
+{
+   size_t i,j,k;
+   float a1,a2,*rowptr;
+
+   if (_m->Row != _m->Col)
+      printf( "Matrix::operator!: Inversion of a non-square Matrix\n");
+
+   Matrix temp(_m->Row,_m->Col);
+   if (_m->Refcnt > 1) clone();
+
+
+   temp.Unit();
+   for (k=0; k < _m->Row; k++)
+   {
+      int indx = pivot(k);
+      if (indx == -1)
+	      printf( "Matrix::operator!: Inversion of a singular Matrix\n");
+
+      if (indx != 0)
+      {
+	      rowptr = temp._m->Val[k];
+	      temp._m->Val[k] = temp._m->Val[indx];
+	      temp._m->Val[indx] = rowptr;
+      }
+      a1 = _m->Val[k][k];
+      for (j=0; j < _m->Row; j++)
+      {
+	      _m->Val[k][j] /= a1;
+	      temp._m->Val[k][j] /= a1;
+      }
+      for (i=0; i < _m->Row; i++)
+	   if (i != k)
+	   {
+	      a2 = _m->Val[i][k];
+	      for (j=0; j < _m->Row; j++)
+	      {
+	         _m->Val[i][j] -= a2 * _m->Val[k][j];
+	         temp._m->Val[i][j] -= a2 * temp._m->Val[k][j];
+	      }
+	   }
+   }
+   return temp;
+}
+
+// solve simultaneous equation
+ Matrix
+Matrix::Solve (const Matrix& v) const 
+{
+   size_t i,j,k;
+   float a1;
+
+   if (!(_m->Row == _m->Col && _m->Col == v._m->Row))
+      printf( "Matrix::Solve():Inconsistent matrices!\n");
+
+   Matrix temp(_m->Row,_m->Col+v._m->Col);
+   for (i=0; i < _m->Row; i++)
+   {
+      for (j=0; j < _m->Col; j++)
+	 temp._m->Val[i][j] = _m->Val[i][j];
+      for (k=0; k < v._m->Col; k++)
+	 temp._m->Val[i][_m->Col+k] = v._m->Val[i][k];
+   }
+   for (k=0; k < _m->Row; k++)
+   {
+      int indx = temp.pivot(k);
+      if (indx == -1)
+	 printf( "Matrix::Solve(): Singular Matrix!\n");
+
+      a1 = temp._m->Val[k][k];
+      for (j=k; j < temp._m->Col; j++)
+	 temp._m->Val[k][j] /= a1;
+
+      for (i=k+1; i < _m->Row; i++)
+      {
+	 a1 = temp._m->Val[i][k];
+	 for (j=k; j < temp._m->Col; j++)
+	   temp._m->Val[i][j] -= a1 * temp._m->Val[k][j];
+      }
+   }
+   Matrix s(v._m->Row,v._m->Col);
+   for (k=0; k < v._m->Col; k++)
+      for (int m=int(_m->Row)-1; m >= 0; m--)
+      {
+	 s._m->Val[m][k] = temp._m->Val[m][_m->Col+k];
+	 for (j=m+1; j < _m->Col; j++)
+	    s._m->Val[m][k] -= temp._m->Val[m][j] * s._m->Val[j][k];
+      }
+   return s;
+}
+
+// set zero to all elements of this Matrix
+ void
+Matrix::Null (const size_t& row, const size_t& col) 
+{
+    if (row != _m->Row || col != _m->Col)
+	realloc( row,col);
+
+    if (_m->Refcnt > 1) 
+	clone();
+
+    for (size_t i=0; i < _m->Row; i++)
+	for (size_t j=0; j < _m->Col; j++)
+	    _m->Val[i][j] = float(0);
+    return;
+}
+
+// set zero to all elements of this Matrix
+ void
+Matrix::Null() 
+{
+    if (_m->Refcnt > 1) clone();   
+    for (size_t i=0; i < _m->Row; i++)
+	for (size_t j=0; j < _m->Col; j++)
+		_m->Val[i][j] = float(0);
+    return;
+}
+
+// set this Matrix to unity
+ void
+Matrix::Unit (const size_t& row) 
+{
+    if (row != _m->Row || row != _m->Col)
+	realloc( row, row);
+	
+    if (_m->Refcnt > 1) 
+	clone();
+
+    for (size_t i=0; i < _m->Row; i++)
+	for (size_t j=0; j < _m->Col; j++)
+	    _m->Val[i][j] = i == j ? float(1) : float(0);
+    return;
+}
+
+// set this Matrix to unity
+ void
+Matrix::Unit () 
+{
+    if (_m->Refcnt > 1) clone();   
+    size_t row = min(_m->Row,_m->Col);
+    _m->Row = _m->Col = row;
+
+    for (size_t i=0; i < _m->Row; i++)
+	for (size_t j=0; j < _m->Col; j++)
+	    _m->Val[i][j] = i == j ? float(1) : float(0);
+    return;
+}
+
+// private partial pivoting method
+ int
+Matrix::pivot (size_t row)
+{
+  int k = int(row);
+  double amax,temp;
+
+  amax = -1;
+  for (size_t i=row; i < _m->Row; i++)
+    if ( (temp = abs( _m->Val[i][row])) > amax && temp != 0.0)
+     {
+       amax = temp;
+       k = i;
+     }
+  if (_m->Val[k][row] == float(0))
+     return -1;
+  if (k != int(row))
+  {
+     float* rowptr = _m->Val[k];
+     _m->Val[k] = _m->Val[row];
+     _m->Val[row] = rowptr;
+     return k;
+  }
+  return 0;
+}
+
+// calculate the determinant of a Matrix
+ float
+Matrix::Det () const 
+{
+   size_t i,j,k;
+   float piv,detVal = float(1);
+
+   if (_m->Row != _m->Col)
+      printf( "Matrix::Det(): Determinant a non-squareMatrix!\n");
+   
+   Matrix temp(*this);
+   if (temp._m->Refcnt > 1) temp.clone();
+
+   for (k=0; k < _m->Row; k++)
+   {
+      int indx = temp.pivot(k);
+      if (indx == -1)
+	 return 0;
+      if (indx != 0)
+	 detVal = - detVal;
+      detVal = detVal * temp._m->Val[k][k];
+      for (i=k+1; i < _m->Row; i++)
+      {
+	 piv = temp._m->Val[i][k] / temp._m->Val[k][k];
+	 for (j=k+1; j < _m->Row; j++)
+	    temp._m->Val[i][j] -= piv * temp._m->Val[k][j];
+      }
+   }
+   return detVal;
+}
+
+// calculate the norm of a Matrix
+ float
+Matrix::Norm () 
+{
+   float retVal = float(0);
+
+   for (size_t i=0; i < _m->Row; i++)
+      for (size_t j=0; j < _m->Col; j++)
+	 retVal += _m->Val[i][j] * _m->Val[i][j];
+   retVal = sqrt( retVal);
+
+   return retVal;
+}
+
+// calculate the condition number of a Matrix
+ float
+Matrix::Cond () 
+{
+   Matrix inv = ! (*this);
+   return (Norm() * inv.Norm());
+}
+
+// calculate the cofactor of a Matrix for a given element
+ float
+Matrix::Cofact (size_t row, size_t col) 
+{
+   size_t i,i1,j,j1;
+
+   if (_m->Row != _m->Col)
+      printf( "Matrix::Cofact(): Cofactor of a non-square Matrix!\n");
+
+   if (row > _m->Row || col > _m->Col)
+      printf( "Matrix::Cofact(): Index out of range!\n");
+
+   Matrix temp (_m->Row-1,_m->Col-1);
+
+   for (i=i1=0; i < _m->Row; i++)
+   {
+      if (i == row)
+	continue;
+      for (j=j1=0; j < _m->Col; j++)
+      {
+	 if (j == col)
+	    continue;
+	 temp._m->Val[i1][j1] = _m->Val[i][j];
+	 j1++;
+      }
+      i1++;
+   }
+   float  cof = temp.Det();
+   if ((row+col)%2 == 1)
+      cof = -cof;
+
+   return cof;
+}
+
+
+// calculate adjoin of a Matrix
+ Matrix
+Matrix::Adj () 
+{
+   if (_m->Row != _m->Col)
+      printf( "Matrix::Adj(): Adjoin of a non-square Matrix.\n");
+
+   Matrix temp(_m->Row,_m->Col);
+
+   for (size_t i=0; i < _m->Row; i++)
+      for (size_t j=0; j < _m->Col; j++)
+	  temp._m->Val[j][i] = Cofact(i,j);
+   return temp;
+}
+
+// Determine if the Matrix is singular
+ bool
+Matrix::IsSingular () 
+{
+   if (_m->Row != _m->Col)
+      return false;
+   return (Det() == float(0));
+}
+
+// Determine if the Matrix is diagonal
+ bool
+Matrix::IsDiagonal () 
+{
+   if (_m->Row != _m->Col)
+      return false;
+   for (size_t i=0; i < _m->Row; i++)
+     for (size_t j=0; j < _m->Col; j++)
+	if (i != j && _m->Val[i][j] != float(0))
+	  return false;
+   return true;
+}
+
+// Determine if the Matrix is scalar
+ bool
+Matrix::IsScalar () 
+{
+   if (!IsDiagonal())
+     return false;
+   float v = _m->Val[0][0];
+   for (size_t i=1; i < _m->Row; i++)
+     if (_m->Val[i][i] != v)
+	return false;
+   return true;
+}
+
+// Determine if the Matrix is a unit Matrix
+ bool
+Matrix::IsUnit () 
+{
+   if (IsScalar() && _m->Val[0][0] == float(1))
+     return true;
+   return false;
+}
+
+// Determine if this is a null Matrix
+ bool
+Matrix::IsNull () 
+{
+   for (size_t i=0; i < _m->Row; i++)
+      for (size_t j=0; j < _m->Col; j++)
+	 if (_m->Val[i][j] != float(0))
+	    return false;
+   return true;
+}
+
+// Determine if the Matrix is symmetric
+ bool
+Matrix::IsSymmetric () 
+{
+   if (_m->Row != _m->Col)
+      return false;
+   for (size_t i=0; i < _m->Row; i++)
+      for (size_t j=0; j < _m->Col; j++)
+	 if (_m->Val[i][j] != _m->Val[j][i])
+	    return false;
+   return true;
+}
+	   
+// Determine if the Matrix is skew-symmetric
+ bool
+Matrix::IsSkewSymmetric () 
+{
+   if (_m->Row != _m->Col)
+      return false;
+   for (size_t i=0; i < _m->Row; i++)
+      for (size_t j=0; j < _m->Col; j++)
+	 if (_m->Val[i][j] != -_m->Val[j][i])
+	    return false;
+   return true;
+}
+   
+// Determine if the Matrix is upper triangular
+ bool
+Matrix::IsUpperTriangular () 
+{
+   if (_m->Row != _m->Col)
+      return false;
+   for (size_t i=1; i < _m->Row; i++)
+      for (size_t j=0; j < i-1; j++)
+	 if (_m->Val[i][j] != float(0))
+	    return false;
+   return true;
+}
+
+// Determine if the Matrix is lower triangular
+ bool
+Matrix::IsLowerTriangular () 
+{
+   if (_m->Row != _m->Col)
+      return false;
+
+   for (size_t j=1; j < _m->Col; j++)
+      for (size_t i=0; i < j-1; i++)
+	 if (_m->Val[i][j] != float(0))
+	    return false;
+
+   return true;
+}
+
Index: /orxonox/branches/levelloader/src/matrix.h
===================================================================
--- /orxonox/branches/levelloader/src/matrix.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/matrix.h	(revision 3417)
@@ -0,0 +1,110 @@
+#ifndef _MATRIX_H
+#define _MATRIX_H
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <iostream>
+
+using namespace std;
+
+class Matrix
+{
+public:
+  // Constructors
+  Matrix (const Matrix& m);
+  Matrix (size_t row, size_t col);
+  
+  // Destructor
+  ~Matrix ();
+  
+  // Assignment operators
+  Matrix& operator = (const Matrix& m) ;
+  
+  // Value extraction method
+  size_t RowNo () const { return _m->Row; }
+  size_t ColNo () const { return _m->Col; }
+  
+  // Subscript operator
+  float& operator () (size_t row, size_t col);
+   float  operator () (size_t row, size_t col) const;
+
+   // Unary operators
+   Matrix operator + ()  { return *this; }
+   Matrix operator - () ;
+
+   // Combined assignment - calculation operators
+   Matrix& operator += (const Matrix& m);
+   Matrix& operator -= (const Matrix& m);
+   Matrix& operator *= (const Matrix& m);
+   Matrix& operator *= (const float& c) ;
+   Matrix& operator /= (const float& c) ;
+   Matrix& operator ^= (const size_t& pow);
+
+   // Miscellaneous -methods
+   void Null (const size_t& row, const size_t& col) ;
+   void Null () ;
+   void Unit (const size_t& row) ;
+   void Unit () ;
+   void SetSize (size_t row, size_t col) ;
+
+   // Utility methods
+   Matrix Solve (const Matrix& v) const;
+   Matrix Adj ();
+   Matrix Inv ();
+   float Det () const;
+   float Norm () ;
+   float Cofact (size_t row, size_t col);
+   float Cond () ;
+
+   // Type of matrices
+   bool IsSquare ()  { return (_m->Row == _m->Col); } 
+   bool IsSingular ();
+   bool IsDiagonal ();
+   bool IsScalar ();
+   bool IsUnit ();
+   bool IsNull ();
+   bool IsSymmetric ();
+   bool IsSkewSymmetric ();
+   bool IsUpperTriangular ();
+   bool IsLowerTriangular ();
+
+private:
+   struct base_mat
+    {
+	float **Val;
+	size_t Row, Col, RowSiz, ColSiz;
+	int Refcnt;
+
+	base_mat (size_t row, size_t col, float** v)
+	{
+	    Row = row; RowSiz = row;
+	    Col = col; ColSiz = col;
+	    Refcnt = 1;
+
+	    Val = new float* [row];
+	    size_t rowlen = col * sizeof(float);
+
+	    for (size_t i=0; i < row; i++)
+	    {
+		Val[i] = new float [col];
+		if (v) memcpy( Val[i], v[i], rowlen);
+	    }
+	}
+	~base_mat ()
+	{
+	    for (size_t i=0; i < RowSiz; i++)
+		delete [] Val[i];
+	    delete [] Val;
+	}
+    };
+    base_mat *_m;
+
+    void clone ();
+    void realloc (size_t row, size_t col);
+    int pivot (size_t row);
+};
+
+Matrix operator ! (const Matrix m);
+
+#endif /*_MATRIX_H */
Index: /orxonox/branches/levelloader/src/message_structures.h
===================================================================
--- /orxonox/branches/levelloader/src/message_structures.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/message_structures.h	(revision 3417)
@@ -0,0 +1,28 @@
+/*!
+	\file message_structures.h
+	\brief contains defintitons of messages that can be passed between classes
+*/
+
+#ifndef _MESSAGE_STRUCTURES_H
+#define _MESSAGE_STRUCTURES_H
+
+#define CMD_LENGHT 16
+
+//! structure that contains a command message
+typedef struct
+{
+	char cmd[CMD_LENGHT];	//!< the command delivered
+	bool bUp;	//!< false = command was activated / true = command was deactivated
+	
+	//! if cmd is "cursor" the coordinates of the mouse cursor are stored here
+	//!@{
+	Uint16 x, y;
+	//!@}
+	
+	//! if cmd is "cursor" the relative motion of the mouse cursor is stored here
+	//!@{
+	Sint16 xrel, yrel; 
+	//!@}
+} Command;
+
+#endif /* _MESSAGE_STRUCTURES_H */
Index: /orxonox/branches/levelloader/src/npc.cc
===================================================================
--- /orxonox/branches/levelloader/src/npc.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/npc.cc	(revision 3417)
@@ -0,0 +1,94 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Patrick Boenzli
+   co-programmer:
+*/
+
+#include <iostream>
+#include <GL/glut.h>
+
+#include "ai.h"
+#include "data_tank.h"
+
+#include "npc.h"
+
+using namespace std;
+
+
+NPC::NPC()
+  : WorldEntity()
+{
+  hasDied = 0;
+}
+
+NPC::~NPC () {}
+
+
+void NPC::setPosition(float x, float y, float z)
+{
+  xCor = x; yCor = y; zCor = z;
+}
+
+void NPC::getPosition(float* x, float* y, float* z) 
+{
+  *x = xCor; 
+  *y = yCor; 
+  *z = zCor;
+}
+
+void NPC::setCollisionRadius(float r) 
+{
+  collisionRadius = r;
+}
+
+float NPC::getCollisionRadius() 
+{
+  return collisionRadius;
+}
+
+
+void NPC::addAI(AI* ai)
+{}
+
+void NPC::paint()
+{
+  //cout << "WorldEntity::WorldEntity();" << endl;  
+  /* fix: died flag approach is very stupid, just to show @ convention */
+  if( hasDied == 0 ) {
+    glPushMatrix();
+    glTranslatef(xCor, yCor, 3.0);
+    //glScalef(1.0, 3.0, 1.0);
+    glutWireSphere(1.0, 10, 10);
+    glPopMatrix();
+  }
+}
+
+void NPC::drawNPC() 
+{
+
+}
+
+
+/* define the reaction, if the ship is been hit */
+int NPC::hit()
+{
+  die();
+  return 0;
+}
+
+
+void NPC::die()
+{
+  hasDied = 1;
+}
Index: /orxonox/branches/levelloader/src/npc.h
===================================================================
--- /orxonox/branches/levelloader/src/npc.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/npc.h	(revision 3417)
@@ -0,0 +1,43 @@
+
+#ifndef _NPC_H
+#define _NPC_H
+
+#include "world_entity.h"
+
+class AI;
+
+class NPC : public WorldEntity {
+
+ public:
+  NPC ();
+  ~NPC ();
+
+  /* collision control */
+  float collisionRadius;
+
+  float xCor;
+  float yCor;
+  float zCor;
+
+  void drawNPC(void);
+  void paint(void);
+  void setPosition(float x, float y, float z);
+  void getPosition(float* x, float* y, float* z);
+  void addAI(AI* ai);
+  void setCollisionRadius(float r);
+  float getCollisionRadius(void);
+  int hit(void);
+  void die(void);
+
+ private:
+  /* position of the non player space craft */
+
+  int npcType;
+  int hasDied;
+
+
+;
+
+};
+
+#endif /* _NPC_H */
Index: /orxonox/branches/levelloader/src/null_parent.cc
===================================================================
--- /orxonox/branches/levelloader/src/null_parent.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/null_parent.cc	(revision 3417)
@@ -0,0 +1,96 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Patrick Boenzli
+   co-programmer: ...
+*/
+
+
+#include "null_parent.h"
+
+
+using namespace std;
+
+NullParent* NullParent::singletonRef = 0;
+
+NullParent* NullParent::getInstance ()
+{
+  if( singletonRef == NULL)
+    singletonRef = new NullParent ();
+  return singletonRef;
+}
+
+/**
+   \brief standard constructor
+
+   \todo this constructor is not jet implemented - do it
+*/
+NullParent::NullParent () 
+{
+  this->parent = this;
+  this->mode = ALL;
+}
+
+
+NullParent::NullParent (Vector* absCoordinate)
+{
+  this->parent = this;
+  this->mode = ALL;
+  this->absCoordinate = *absCoordinate;
+}
+
+
+/**
+   \brief standard deconstructor
+
+   \todo this deconstructor is not jet implemented - do it
+*/
+NullParent::~NullParent () 
+{
+  delete singletonRef;
+  singletonRef = NULL;
+}
+
+
+
+
+/**
+   \brief updates the absCoordinate/absDirection
+
+   this is used to go through the parent-tree to update all the absolute coordinates
+   and directions. this update should be done by the engine, so you don't have to 
+   worry, normaly...
+*/
+void NullParent::update (float timeStamp)
+{
+  this->absCoordinate = this->relCoordinate;
+  this->absDirection = parent->getAbsDir () * this->relDirection;
+  
+  PNode* pn = this->children->enumerate ();
+  while( pn != NULL) 
+    { 
+      /* if this node has changed, make sure, that all children are updated also */
+      if( this->bRelCoorChanged || this->bAbsCoorChanged)
+	pn->parentCoorChanged ();
+      if( this->bRelDirChanged || this->bAbsDirChanged)
+	pn->parentDirChanged ();
+      pn->update (timeStamp);
+      pn = this->children->nextElement ();
+    }
+
+  this->timeStamp = timeStamp;
+  this->bRelCoorChanged = false;
+  this->bAbsCoorChanged = false;
+  this->bRelDirChanged = false;
+  this->bAbsDirChanged = false;
+}
Index: /orxonox/branches/levelloader/src/null_parent.h
===================================================================
--- /orxonox/branches/levelloader/src/null_parent.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/null_parent.h	(revision 3417)
@@ -0,0 +1,30 @@
+/*! 
+    \file proto_class.h
+    \brief Definition of the proto class template, used quickly start work
+*/
+
+
+#ifndef _NULL_PARENT_H
+#define _NULL_PARENT_H
+
+#include "stdincl.h"
+#include "p_node.h"
+
+
+class NullParent : public PNode {
+
+ public:
+  static NullParent* getInstance ();
+  ~NullParent ();
+  
+  static NullParent* singletonRef;
+
+  virtual void update (float timeStamp);
+
+ private:
+  NullParent ();
+  NullParent (Vector* absCoordinate);
+
+};
+
+#endif /* _NULL_PARENT_H */
Index: /orxonox/branches/levelloader/src/orxonox.cc
===================================================================
--- /orxonox/branches/levelloader/src/orxonox.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/orxonox.cc	(revision 3417)
@@ -0,0 +1,367 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, 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.  
+
+
+   ### File Specific:
+   main-programmer: Patrick Boenzli
+   co-programmer: Christian Meyer
+*/
+
+#include "orxonox.h"
+#include "world.h"
+#include "camera.h"
+#include "data_tank.h"
+#include "command_node.h"
+#include "game_loader.h"
+#include <string.h>
+int verbose;
+
+using namespace std;
+
+/**
+   \brief create a new Orxonox
+*/
+Orxonox::Orxonox ()
+{
+  pause = false;
+}
+
+/**
+   \brief remove Orxonox from memory
+*/
+Orxonox::~Orxonox () 
+{
+  Orxonox::singletonRef = NULL;
+  if( world != NULL) delete world;
+  if( localinput != NULL) delete world;
+  if( localcamera != NULL) delete localcamera;
+  if( resources != NULL) delete resources;
+}
+
+
+/* this is a singleton class to prevent duplicates */
+Orxonox* Orxonox::singletonRef = 0;
+
+Orxonox* Orxonox::getInstance (void)
+{
+  if (singletonRef == NULL)
+    singletonRef = new Orxonox();
+  return singletonRef;
+}
+
+/**
+   \brief this finds the config file
+   
+   Since the config file varies from user to user and since one may want to specify different config files
+   for certain occasions or platforms this function finds the right config file for every occasion and stores
+   it's path and name into configfilename
+*/
+void Orxonox::getConfigFile (int argc, char** argv)
+{
+  strcpy (configfilename, "orxonox.conf");
+}
+
+/**
+   \brief initialize Orxonox with command line
+*/
+int Orxonox::init (int argc, char** argv)
+{
+  // parse command line
+  // config file
+  
+  getConfigFile (argc, argv);
+  SDL_Init (SDL_INIT_TIMER);
+  // initialize everything
+  if( initVideo() == -1) return -1;
+  if( initSound() == -1) return -1;
+  printf("> Initializing input\n");
+  if( initInput() == -1) return -1;
+  printf("> Initializing networking\n");
+  if( initNetworking () == -1) return -1;
+  printf("> Initializing resources\n");
+  if( initResources () == -1) return -1;
+  //printf("> Initializing world\n");
+  //if( init_world () == -1) return -1; PB: world will be initialized when started
+  
+  return 0;
+}
+
+/**
+   \brief initializes SDL and OpenGL
+*/
+int Orxonox::initVideo() 
+{
+  printf("> Initializing video\n");
+  if (SDL_Init(SDL_INIT_VIDEO) == -1)
+    {
+      printf ("could not initialize SDL Video\n");
+      return -1;
+    }
+  // Set video mode
+  // TO DO: parse arguments for settings
+  //SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);
+  //SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5);
+  //SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5);
+  //SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
+  
+
+  SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );   
+  SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 16);    
+  SDL_GL_SetAttribute( SDL_GL_STENCIL_SIZE, 0);  
+  SDL_GL_SetAttribute( SDL_GL_ACCUM_RED_SIZE, 0);
+  SDL_GL_SetAttribute( SDL_GL_ACCUM_GREEN_SIZE, 0);
+  SDL_GL_SetAttribute( SDL_GL_ACCUM_BLUE_SIZE, 0);
+  SDL_GL_SetAttribute( SDL_GL_ACCUM_ALPHA_SIZE, 0);
+
+
+
+  int bpp = 16;
+  int width = 640;
+  int height = 480;
+  //Uint32 flags = SDL_HWSURFACE | SDL_OPENGL | SDL_GL_DOUBLEBUFFER; /* \todo: SDL_OPENGL doen't permit to load images*/
+  //Uint32 flags = SDL_HWSURFACE | SDL_GL_DOUBLEBUFFER;
+
+  Uint32 videoFlags = SDL_OPENGL | SDL_HWPALETTE | SDL_RESIZABLE;
+
+  /* query SDL for information about our video hardware */
+  const SDL_VideoInfo* videoInfo = SDL_GetVideoInfo ();
+  
+  if( videoInfo == NULL)
+    {
+      printf ("Orxonox::initVideo() - Failed getting Video Info :%s\n", SDL_GetError()); 
+      SDL_Quit ();
+    }
+  if( videoInfo->hw_available)
+    videoFlags |= SDL_HWSURFACE;
+  else 
+    videoFlags |= SDL_SWSURFACE;
+  /*
+  if(VideoInfo -> blit_hw)                            
+    VideoFlags |= SDL_HWACCEL;
+  */
+  
+  if((this->screen = SDL_SetVideoMode (width, height, bpp, videoFlags)) == NULL)
+  {
+    printf("Could not SDL_SetVideoMode(%d, %d, %d, %d): %s\n", width, height, bpp, videoFlags, SDL_GetError());
+    SDL_Quit();
+    return -1;
+  }
+  
+  // Set window labeling
+  SDL_WM_SetCaption ("Orxonox " PACKAGE_VERSION, "Orxonox " PACKAGE_VERSION);
+  
+  // TO DO: Create a cool icon and use it here
+  // SDL_WM_SetIcon(SDL_Surface *icon, Uint8 *mask);  
+
+  // OpenGL stuff
+  glClearColor (0.0, 0.0, 0.0, 0.0);
+  glEnable (GL_DEPTH_TEST);
+ 
+  // LIGHTING
+  GLfloat lmodelAmbient[] = {.1, .1, .1, 1.0};
+  GLfloat whiteLight[] = {1.0, 1.0, 1.0,1.0};
+  GLfloat lightPosition[] = {10.0, 10, 19.0, 0.0};
+
+  glLightfv (GL_LIGHT0, GL_DIFFUSE, whiteLight);
+  glLightfv (GL_LIGHT0, GL_SPECULAR, whiteLight);
+  glEnable (GL_LIGHTING);
+  glEnable (GL_LIGHT0);
+  glEnable (GL_DEPTH_TEST);
+  glLightfv (GL_LIGHT0, GL_POSITION, lightPosition);
+  glLightfv (GL_LIGHT0, GL_DIFFUSE, whiteLight);
+   
+  //glEnable (GL_TEXTURE_2D); 
+  //  glEnable(GL_COLOR);
+  //  glShadeModel(GL_SMOOTH);
+  
+  // create camera
+  //localcamera = new Camera(world); /* \todo camera/input node not used anymore*/
+  
+  return 0;
+}
+
+
+/**
+   \brief initializes the sound engine
+*/
+int Orxonox::initSound() 
+{
+  printf("> Initializing sound\n");
+  // SDL_Init(SDL_INIT_AUDIO);
+  printf("Not yet implemented\n");
+  return 0;
+}
+
+
+/**
+   \brief initializes input functions
+*/
+int Orxonox::initInput() 
+{
+  // create localinput
+  localinput = new CommandNode( configfilename);
+  
+  return 0;
+}
+
+
+/**
+   \brief initializes network system
+*/
+int Orxonox::initNetworking() 
+{
+  printf("Not yet implemented\n");
+  return 0;
+}
+
+
+/**
+   \brief initializes and loads resource files
+*/
+int Orxonox::initResources() 
+{
+  printf("Not yet implemented\n");
+  return 0;
+}
+
+
+/**
+   \brief initializes the world
+*/
+int Orxonox::initWorld() 
+{
+  //world = new World();
+  
+  // TO DO: replace this with a menu/intro
+  //world->load_debug_level();
+  
+  return 0;
+}
+
+
+/**
+   \brief starts the orxonox game or menu
+
+   here is the central orxonox state manager. There are currently two states
+   - menu
+   - game-play
+   both states manage their states themselfs again.
+*/
+void Orxonox::start()
+{
+  
+  this->gameLoader = GameLoader::getInstance();
+  this->gameLoader->loadDebugCampaign(DEBUG_CAMPAIGN_0);
+  this->gameLoader->init();
+  this->gameLoader->start();
+}
+
+
+/**
+   \brief exits Orxonox
+*/
+void Orxonox::quitGame() 
+{
+  bQuitOrxonox = true;
+}
+
+
+
+/**
+   \brief handles sprecial events from localinput
+   \param event: an event not handled by the CommandNode 
+*/
+void Orxonox::eventHandler(SDL_Event* event)
+{
+  // Handle special events such as reshape, quit, focus changes
+}
+ 
+
+/**
+   \brief handle keyboard commands that are not meant for WorldEntities
+   \param cmd: the command to handle
+   \return true if the command was handled by the system or false if it may be passed to the WorldEntities
+*/
+bool Orxonox::systemCommand(Command* cmd)
+{
+  /*
+  if( !strcmp( cmd->cmd, "quit"))
+    {
+      if( !cmd->bUp) this->gameLoader->stop();
+      return true;
+    }
+  return false;
+  */
+  return false;
+}
+
+
+/**
+   \brief retrieve a pointer to the local Camera
+   \return a pointer to localcamera
+*/
+Camera* Orxonox::getCamera()
+{
+  return localcamera;
+}
+
+
+/**
+   \brief retrieve a pointer to the local CommandNode
+   \return a pointer to localinput
+*/
+CommandNode* Orxonox::getLocalInput()
+{
+  return localinput;
+}
+
+
+/**
+   \brief retrieve a pointer to the local World
+   \return a pointer to world
+*/
+World* Orxonox::getWorld()
+{
+  return world;
+}
+
+
+SDL_Surface* Orxonox::getScreen ()
+{
+  return this->screen;
+}
+
+
+int main(int argc, char** argv) 
+{  
+  printf(">>> Starting Orxonox <<<\n");
+  Orxonox *orx = Orxonox::getInstance();
+  
+  if((*orx).init(argc, argv) == -1)
+    {
+      printf("! Orxonox initialization failed\n");
+      return -1;
+    }
+  
+  orx->start();
+  
+  //delete orx;
+  
+  return 0;
+}
Index: /orxonox/branches/levelloader/src/orxonox.conf
===================================================================
--- /orxonox/branches/levelloader/src/orxonox.conf	(revision 3417)
+++ /orxonox/branches/levelloader/src/orxonox.conf	(revision 3417)
@@ -0,0 +1,15 @@
+[Bindings]
+UP=up
+DOWN=down
+LEFT=left
+RIGHT=right
+SPACE=fire
+ESCAPE=quit
+p=pause
+q=quit
+BUTTON_LEFT=fire
+BUTTON_RIGHT=altfire
+b=benscho
+x=up_world
+z=down_world
+
Index: /orxonox/branches/levelloader/src/orxonox.h
===================================================================
--- /orxonox/branches/levelloader/src/orxonox.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/orxonox.h	(revision 3417)
@@ -0,0 +1,76 @@
+/*! 
+    \file orxonox.h
+    \brief Orxonox core functions
+*/ 
+
+#ifndef _ORXONOX_H
+#define _ORXONOX_H
+
+#include "stdincl.h"
+
+class CommandNode;
+class WorldEntity;
+class DataTank;
+class World;
+class Camera;
+class GameLoader;
+
+//! Orxonox core singleton class
+/**
+*/
+class Orxonox {
+
+ private:
+  static Orxonox* singletonRef;
+  Orxonox ();
+  ~Orxonox ();
+  
+  char configfilename[256];
+  World* world;
+  DataTank* resources;
+  CommandNode* localinput;
+  Camera* localcamera;
+  SDL_Surface* screen;
+  GameLoader* gameLoader;
+  
+  bool bQuitOrxonox;
+  bool pause;
+  Uint32 lastframe;
+  
+  void getConfigFile (int argc, char** argv);
+  
+  // main loop functions
+  //  void synchronize ();
+  //void handle_input ();
+  //void time_slice ();
+  //void collision ();
+  //void display ();
+  
+  	// subsystem initialization
+  int initVideo ();
+  int initSound ();
+  int initInput ();
+  int initNetworking ();
+  int initResources ();
+  int initWorld ();
+  
+ public:
+  static Orxonox* getInstance ();
+  void start();
+  void quitGame();
+
+  void eventHandler (SDL_Event* event);
+  bool systemCommand (Command* cmd);
+
+  int init (int argc, char** argv);
+  
+  CommandNode* getLocalInput();
+  Camera* getCamera();
+  World* getWorld();
+  SDL_Surface* getScreen ();
+  
+  //void mainLoop();
+};
+
+#endif /* _ORXONOX_H */
+
Index: /orxonox/branches/levelloader/src/p_node.cc
===================================================================
--- /orxonox/branches/levelloader/src/p_node.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/p_node.cc	(revision 3417)
@@ -0,0 +1,445 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Patrick Boenzli
+   co-programmer: ...
+
+   \todo Null-Parent => center of the coord system - singleton
+   \todo Smooth-Parent: delay, speed
+   \todo destroy the stuff again, delete...
+*/
+
+
+#include "p_node.h"
+
+
+using namespace std;
+
+
+/**
+   \brief standard constructor
+
+   \todo this constructor is not jet implemented - do it
+*/
+PNode::PNode () 
+{
+  this->children = new tList<PNode>();
+  this->bRelCoorChanged = true;
+  this->bAbsCoorChanged = false;
+  this->bRelDirChanged = true;
+  this->bAbsDirChanged = false;
+  this->parent = NULL;
+}
+
+
+/**
+   \brief constructor with coodinates
+*/
+PNode::PNode (Vector* absCoordinate, PNode* parent )
+{
+  this->absCoordinate = *absCoordinate;
+  this->relCoordinate = this->absCoordinate - parent->getAbsCoor ();
+  
+  this->children = new tList<PNode>();
+  this->bRelCoorChanged = true;
+  this->bAbsCoorChanged = false;
+  this->bRelDirChanged = true;
+  this->bAbsDirChanged = false;
+  this->parent = parent;
+
+  parent->addChild (this);
+}
+
+
+/**
+   \brief standard deconstructor
+
+   \todo this deconstructor is not jet implemented - do it
+*/
+PNode::~PNode () 
+{
+  /*
+  delete &this->children;
+  delete &this->relCoordinate;
+  delete &this->absCoordinate;
+  delete &this->relDirection;
+  delete &this->absDirection;
+  */
+  this->parent = NULL;
+  /* there is currently a problem with cleaning up - fix*/
+}
+
+
+/**
+   \brief deletes the hole pnode tree
+
+   cleans up all pnodes
+*/
+void PNode::destroy ()
+{
+  PNode* pn = this->children->enumerate();
+  while( pn != NULL) 
+    { 
+      pn->destroy ();
+      pn = this->children->nextElement();
+    } 
+  this->children->destroy ();
+}
+
+
+/**
+   \brief get relative coordinates
+   \returns relative coordinates to its parent
+*/
+Vector PNode::getRelCoor ()
+{
+  Vector r = this->relCoordinate; /* return a copy, so it can't be modified */
+  return r;
+}
+
+
+/**
+   \brief set relative coordinates
+   \param relative coordinates to its parent
+
+   it is very importand, that you use this function, if you want to update the
+   relCoordinates. If you don't use this, the PNode won't recognize, that something
+   has changed and won't update the children Nodes.
+*/
+void PNode::setRelCoor (Vector* relCoord)
+{
+  this->bRelCoorChanged = true;
+  this->relCoordinate = *relCoord;
+}
+
+
+/**
+   \brief get absolute coordinates
+   \returns absolute coordinates from (0,0,0)
+*/
+Vector PNode::getAbsCoor ()
+{
+  return this->absCoordinate;
+}
+
+
+/**
+   \brief get relative coordinates
+   \returns relative coordinates to its parent
+
+   it is very importand, that you use this function, if you want to update the
+   absCoordinates. If you don't use this, the PNode won't recognize, that something
+   has changed and won't update the children Nodes.
+*/
+void PNode::setAbsCoor (Vector* absCoord)
+{
+  this->bAbsCoorChanged = true;
+  this->absCoordinate = *absCoord;
+}
+
+
+/**
+   \brief shift coordinate (abs and rel)
+   \param shift vector
+
+   this function shifts the current coordinates about the vector shift. this is
+   usefull because from some place else you can:
+   PNode* someNode = ...;
+   Vector objectMovement = calculateShift();
+   someNode->shiftCoor(objectMovement);
+
+   elsewhere you would have to:
+   PNode* someNode = ...;
+   Vector objectMovement = calculateShift();
+   Vector currentCoor = someNode->getRelCoor();
+   Vector newCoor = currentCoor + objectMovement;
+   someNode->setRelCoor(newCoor);
+   
+   yea right... shorter...
+
+*/
+void PNode::shiftCoor (Vector* shift)
+{
+  if( this->bAbsCoorChanged)
+    {
+      this->absCoordinate = this->absCoordinate + *shift;
+    }
+  else 
+    {
+      this->relCoordinate = this->relCoordinate + *shift;
+      this->bRelCoorChanged = true;
+    }
+}
+
+
+
+/**
+   \brief get relative direction
+   \returns relative direction to its parent
+*/
+Quaternion PNode::getRelDir ()
+{
+  return this->relDirection;
+}
+
+
+/**
+   \brief set relative direction
+   \param relative direction to its parent
+
+   it is very importand, that you use this function, if you want to update the
+   relDirection. If you don't use this, the PNode won't recognize, that something
+   has changed and won't update the children Nodes.
+*/
+void PNode::setRelDir (Quaternion* relDir)
+{
+  this->bRelCoorChanged = true;
+  this->relDirection = *relDir;
+}
+
+
+/**
+   \brief gets the absolute direction (0,0,1)
+   \returns absolute coordinates
+*/
+Quaternion PNode::getAbsDir ()
+{}
+
+
+/**
+   \brief sets the absolute direction (0,0,1)
+   \param absolute coordinates
+
+   it is very importand, that you use this function, if you want to update the
+   absDirection. If you don't use this, the PNode won't recognize, that something
+   has changed and won't update the children Nodes.
+*/
+void PNode::setAbsDir (Quaternion* absDir)
+{
+  this->bAbsDirChanged = true;
+  this->absDirection = *absDir;
+}
+
+
+/**
+   \brief shift coordinate (abs and rel)
+   \param shift vector
+
+   this function shifts the current coordinates about the vector shift. this is
+   usefull because from some place else you can:
+   PNode* someNode = ...;
+   Quaternion objectMovement = calculateShift();
+   someNode->shiftCoor(objectMovement);
+
+   elsewhere you would have to:
+   PNode* someNode = ...;
+   Quaternion objectMovement = calculateShift();
+   Quaternion currentCoor = someNode->getRelCoor();
+   Quaternion newCoor = currentCoor + objectMovement;
+   someNode->setRelCoor(newCoor);
+   
+   yea right... shorter...
+
+*/
+void PNode::shiftDir (Quaternion* shift)
+{}
+
+
+
+/**
+   \brief adds a child and makes this node to a parent
+   \param child reference
+
+   use this to add a child to this node.
+*/
+void PNode::addChild (PNode* pNode)
+{
+  this->addChild(pNode, DEFAULT_MODE);
+}
+
+
+/**
+   \brief adds a child and makes this node to a parent
+   \param child reference
+   \param on which changes the child should also change ist state
+
+   use this to add a child to this node.
+*/
+void PNode::addChild (PNode* pNode, parentingMode mode)
+{
+  pNode->mode = mode;
+  pNode->parent = this;
+  this->children->add (pNode);
+}
+
+
+/**
+   /brief removes a child from the node
+*/
+void PNode::removeChild (PNode* pNode)
+{
+  this->children->remove (pNode);
+}
+
+
+/**
+   \brief sets the parent of this PNode
+*/
+void PNode::setParent (PNode* parent)
+{
+  this->parent = parent;
+}
+
+/**
+   \brief set the mode of this parent manualy
+*/
+void PNode::setMode (parentingMode mode)
+{
+  this->mode = mode;
+}
+
+/**
+   \brief has to be called, if the parent coordinate has changed
+   
+   normaly this will be done by the parent itself automaticaly. If you call this, you
+   will force an update of the coordinated of the node.
+*/
+void PNode::parentCoorChanged ()
+{
+  this->bRelCoorChanged = true;
+}
+
+
+/**
+   \brief has to be called, if the parent direction has changed
+   
+   normaly this will be done by the parent itself automaticaly. If you call this, you
+   will force an update of the direction of the node.
+*/
+void PNode::parentDirChanged ()
+{
+  this->bRelDirChanged = true;
+}
+
+
+/**
+   \brief updates the absCoordinate/absDirection
+
+   this is used to go through the parent-tree to update all the absolute coordinates
+   and directions. this update should be done by the engine, so you don't have to 
+   worry, normaly...
+*/
+void PNode::update (float timeStamp)
+{
+  printf ("PNode::update - %s - (%f, %f, %f)\n", this->objectName, this->absCoordinate.x, this->absCoordinate.y, this->absCoordinate.z);
+
+      if( this->mode == MOVEMENT || this->mode == ALL)
+	{
+	  if( this->bAbsCoorChanged /*&& this->timeStamp != DataTank::timeStamp*/)
+	    {
+	      printf("PNode::update () - this->bAbsCoorChanged = true\n");
+	      /* if you have set the absolute coordinates this overrides all other changes */
+	      this->relCoordinate = this->absCoordinate - parent->getAbsCoor ();
+	    }
+	  else if( this->bRelCoorChanged /*&& this->timeStamp != DataTank::timeStamp*/)
+	    {
+	      /*this is bad style... must be deleted later - just for testing*/
+	      if( this->parent == NULL)
+		{
+		this->absCoordinate = this->relCoordinate;
+		}
+	      else
+		this->absCoordinate = parent->getAbsCoor () + this->relCoordinate;	      /* update the current absCoordinate */
+	    }
+	}
+      
+      if( this->mode == ROTATION && this->mode == ALL)
+	{
+	  if( this->bAbsDirChanged /*&& this->timeStamp != DataTank::timeStamp*/)
+	    {
+	      /* if you have set the absolute coordinates this overrides all other changes */
+	      this->relDirection = this->absDirection - parent->getAbsDir ();
+	    }
+	  else if( this->bRelDirChanged /*&& this->timeStamp != DataTank::timeStamp*/)
+	    {
+	      /* update the current absDirection - remember * means rotation around sth.*/
+	      this->absDirection = parent->getAbsDir () * this->relDirection;
+	    }
+	}    
+      // }
+  PNode* pn = this->children->enumerate();
+  while( pn != NULL) 
+    { 
+      /* if this node has changed, make sure, that all children are updated also */
+      if( this->bRelCoorChanged || this->bAbsCoorChanged)
+	pn->parentCoorChanged ();
+      if( this->bRelDirChanged || this->bAbsDirChanged)
+	pn->parentDirChanged ();
+      pn->update(timeStamp);
+      pn = this->children->nextElement();
+    }
+
+  this->timeStamp = timeStamp;
+  this->bRelCoorChanged = false;
+  this->bAbsCoorChanged = false;
+  this->bRelDirChanged = false;
+  this->bAbsDirChanged = false;
+}
+
+
+/*
+  \brief tick
+*/
+void PNode::processTick (float dt)
+{
+  this->tick (dt);
+  PNode* pn = this->children->enumerate();
+  while( pn != NULL) 
+    { 
+      pn->processTick (dt);
+      pn = this->children->nextElement();
+    } 
+}
+
+
+void PNode::tick (float dt)
+{}
+
+
+void PNode::debug()
+{
+  printf("PNode::debug() - absCoord: (%f, %f, %f)\n", 
+	 this->absCoordinate.x, 
+	 this->absCoordinate.y,
+	 this->absCoordinate.z);
+}
+
+
+/*
+  \brief set the name of the node
+
+  for debug purposes realy usefull, not used to work properly
+*/
+void PNode::setName (char* newName)
+{
+  this->objectName = newName;
+}
+
+
+/*
+  \brief gets the name of the node
+*/
+char* PNode::getName ()
+{
+  return this->objectName;
+}
Index: /orxonox/branches/levelloader/src/p_node.h
===================================================================
--- /orxonox/branches/levelloader/src/p_node.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/p_node.h	(revision 3417)
@@ -0,0 +1,92 @@
+/*! 
+    \file p_node.h
+    \brief Definition of a parenting node
+
+    parenting is how coordinates are handled in orxonox, meaning, that all coordinates
+    are representet relative to another parent node. this nodes build a parenting
+    tree of one-sided references (from up to down referenced).
+    Every node manages itself a list of childrens (of whos it is parent - easy...)
+
+    absCoordinate, absDirection have to be recalculated as soon as there was a change in
+    place or ortientation. this is only the case if 
+    o bDirChanged is true (so changed) AND timeStamp != now
+    o bCoorChanged is true (so moved) AND timeStamp != now
+    this conditions make it cheaper to recalculate the tree (reduces redundant work).
+
+    remember: if you have to change the coordinates or the directions, use the functions
+    that are defined to execute this operation - otherwhise there will be big problems...
+*/
+
+
+#ifndef _P_NODE_H
+#define _P_NODE_H
+
+#include "stdincl.h"
+
+class PNode; /* forward decleration, so that parentEntry has access to PNode */
+
+typedef enum parentingMode {MOVEMENT = 0, ROTATION, ALL};
+#define DEFAULT_MODE ALL
+
+class PNode : public BaseObject {
+
+ public:
+  PNode ();
+  PNode (Vector* absCoordinate, PNode* pNode);
+  virtual ~PNode ();
+
+  void destroy ();
+
+  PNode* parent; //! a pointer to the parent node
+  tList<PNode>* children; //! list of the children
+
+  parentingMode mode;
+
+  Vector getRelCoor ();
+  void setRelCoor (Vector* relCoord);
+  //void setRelCoor (Vector relCoord);
+  Vector getAbsCoor ();
+  void setAbsCoor (Vector* absCoord);
+  //void setAbsCoor (Vector absCoord);
+  void shiftCoor (Vector* shift);
+  //void shiftCoor (Vector shift);
+
+  Quaternion getRelDir ();
+  void setRelDir (Quaternion* relDir);
+  Quaternion getAbsDir ();
+  void setAbsDir (Quaternion* absDir);
+  void shiftDir (Quaternion* shift);
+
+  void addChild (PNode* pNode);
+  void addChild (PNode* pNode, parentingMode mode);
+  void removeChild (PNode* pNode);
+  void setParent (PNode* parent);
+  void parentCoorChanged ();
+  void parentDirChanged ();
+  void setMode (parentingMode mode);
+
+  virtual void update (float timeStamp);
+  void processTick (float dt);
+  virtual void tick (float dt);
+
+  void setName (char* newName);
+  char* getName ();
+
+
+  void debug ();
+
+  float timeStamp;   //! this the timeStamp of when the abs{Coordinat, Direction} has been calculated
+  char* objectName;
+  bool bAbsCoorChanged;
+  bool bRelCoorChanged;
+  bool bRelDirChanged;
+  bool bAbsDirChanged;
+
+  Vector relCoordinate;  //! coordinates relative to the parent
+  Vector absCoordinate; //! absolute coordinates in the world ( from (0,0,0) )
+  Quaternion relDirection; //! direction relative to the parent
+  Quaternion absDirection; //! absolute direvtion in the world ( from (0,0,1) )
+
+};
+
+#endif /* _P_NODE_H */
Index: /orxonox/branches/levelloader/src/player.cc
===================================================================
--- /orxonox/branches/levelloader/src/player.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/player.cc	(revision 3417)
@@ -0,0 +1,168 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Patrick Boenzli
+   co-programmer: Christian Meyer
+*/
+
+#include "player.h"
+#include "stdincl.h"
+#include "collision.h"
+#include "importer/objModel.h"
+
+using namespace std;
+
+
+Player::Player(bool isFree) : WorldEntity(isFree)
+{
+
+  this->model = new OBJModel("../data/models/reaplow.obj");
+  /*
+  objectList = glGenLists(1);
+  glNewList (objectList, GL_COMPILE);
+
+  glBegin(GL_TRIANGLES);
+  glColor3f(1,1,1);
+  glVertex3f(0,0,0.5);
+  glVertex3f(-0.5,0,-1);
+  glVertex3f(0.5,0,-1);
+
+  glVertex3f(0,0,0.5);
+  glVertex3f(0,0.5,-1);
+  glVertex3f(0,-0.5,-1);
+  glEnd();
+    
+  glBegin(GL_QUADS);
+  glColor3f(0,0,1);
+  glVertex3f(0.5,0.5,-1);
+  glVertex3f(0.5,-0.5,-1);
+  glVertex3f(-0.5,-0.5,-1);
+  glVertex3f(-0.5,0.5,-1);
+  glEnd();
+  
+  glEndList ();
+  */
+}
+
+Player::~Player ()
+{
+  delete this->model;
+}
+
+void Player::postSpawn ()
+{
+  travelSpeed = 15.0;
+  velocity = Vector();
+  bUp = bDown = bLeft = bRight = bAscend = bDescend = false;
+  bFire = false;
+  acceleration = 10.0;
+  setCollision(new CollisionCluster(1.0, Vector(0,0,0)));
+}
+
+void Player::tick (float time)
+{
+  // movement
+  this->move (time);
+}
+
+void Player::hit (WorldEntity* weapon, Vector loc)
+{
+}
+
+void Player::destroy ()
+{
+}
+
+void Player::collide (WorldEntity* other, Uint32 ownhitflags, Uint32 otherhitflags)
+{
+}
+
+void Player::command (Command* cmd)
+{
+  //printf("Player|recieved command [%s]\n", cmd->cmd);
+  if( !strcmp( cmd->cmd, "up")) bUp = !cmd->bUp;
+  else if( !strcmp( cmd->cmd, "down")) bDown = !cmd->bUp;
+  else if( !strcmp( cmd->cmd, "left")) bLeft = !cmd->bUp;
+  else if( !strcmp( cmd->cmd, "right")) bRight = !cmd->bUp;
+  else if( !strcmp( cmd->cmd, "fire")) bFire = !cmd->bUp;
+}
+
+void Player::draw ()
+{ 
+  glMatrixMode(GL_MODELVIEW);
+  glLoadIdentity();
+  float matrix[4][4];
+  
+  /* translate */
+  glTranslatef (this->getAbsCoor ().x, 
+		this->getAbsCoor ().y, 
+		this->getAbsCoor ().z);
+  /* rotate */
+  this->getAbsDir ().matrix (matrix);
+  glMultMatrixf((float*)matrix);
+  
+  glMatrixMode(GL_MODELVIEW);
+  this->model->draw();
+  // glCallList(objectList);
+}
+
+
+/*PN
+void Player::getLookat(Location* locbuf)
+{
+  *locbuf = *getLocation();
+  //locbuf->dist += 5.0;
+}
+*/
+
+void Player::leftWorld ()
+{
+}
+
+void Player::move (float time)
+{
+  Vector accel(0.0, 0.0, 0.0);
+  /* FIXME: calculating the direction and orthDirection every timeSlice is redundant! save it somewhere */
+  //Placement *pos = getPlacement();
+  
+  /* calculate the direction in which the craft is heading  */
+  Vector direction (1.0, 0.0, 0.0);
+  //direction = this->absDirection.apply (direction);
+  Vector orthDirection (0.0, 0.0, 1.0);
+  //orthDirection = orthDirection.cross (direction);
+
+  if( bUp) { accel = accel+(direction*acceleration); }
+  if( bDown) { accel = accel-(direction*acceleration); }
+  if( bLeft ) { accel = accel - (orthDirection*acceleration); }
+  if( bRight ) { accel = accel + (orthDirection*acceleration); }
+  if( bAscend ) { /* not yet implemented but just: (0,0,1)*acceleration */}
+  if( bDescend) {/* FIXME */} /* \todo up and down player movement */
+
+  //Location* l = getLocation();
+  
+  // r(t) = r(0) + v(0)*t + 1/2*a*t^2
+  // r = position
+  // v = velocity
+  // a = acceleration
+
+  /* this the base-speed of the player: determines how fast and how the player follows the track*/
+  //l->dist = l->dist + travelSpeed * time;
+  
+  Vector* shift = new Vector (this->travelSpeed * time, 0, 0);
+  this->shiftCoor (shift);
+  
+  /* this updates the player position on the track - user interaction */
+  //l->pos = l->pos + accel*time;
+  Vector move = accel * time;
+  this->shiftCoor (&move);
+}
Index: /orxonox/branches/levelloader/src/player.h
===================================================================
--- /orxonox/branches/levelloader/src/player.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/player.h	(revision 3417)
@@ -0,0 +1,46 @@
+/*! 
+    \file player.h
+    \brief Implements a basic controllable WorldEntity
+*/
+
+#ifndef _PLAYER_H
+#define _PLAYER_H
+
+#include "world_entity.h"
+
+class OBJModel;
+
+//! Basic controllable WorldEntity
+class Player : public WorldEntity 
+{
+  friend class World;
+  
+ public:
+  Player(bool isFree = false);
+  ~Player();
+  
+  virtual void postSpawn();
+  virtual void tick(float time);
+  virtual void hit(WorldEntity* weapon, Vector loc);
+  virtual void destroy();
+  virtual void collide(WorldEntity* other, Uint32 ownhitflags, Uint32 otherhitflags);
+  virtual void command(Command* cmd);
+  
+  virtual void draw();
+  // virtual void getLookat(Location* locbuf);
+  
+  virtual void leftWorld();
+  
+ private:
+  bool bUp, bDown, bLeft, bRight, bAscend, bDescend;
+  bool bFire;
+  Vector velocity;
+  float travelSpeed;
+  float acceleration;
+  GLuint objectList;
+  
+  void move(float time);
+  
+};
+
+#endif /* _PLAYER_H */
Index: /orxonox/branches/levelloader/src/power_up.cc
===================================================================
--- /orxonox/branches/levelloader/src/power_up.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/power_up.cc	(revision 3417)
@@ -0,0 +1,32 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: ...
+   co-programmer: ...
+*/
+
+
+#include "power_up.h"
+
+
+using namespace std;
+
+
+
+PowerUp::PowerUp () {}
+
+
+
+PowerUp::~PowerUp () {}
+
+
Index: /orxonox/branches/levelloader/src/power_up.h
===================================================================
--- /orxonox/branches/levelloader/src/power_up.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/power_up.h	(revision 3417)
@@ -0,0 +1,21 @@
+/*! 
+    \file power_up.h
+    \brief A class representing a PowerUp in the world.
+*/ 
+
+#ifndef _POWER_UP_H
+#define _POWER_UP_H
+
+#include "data_tank.h"
+#include "ability.h"
+#include "world_entity.h"
+
+class PowerUp : Ability, WorldEntity { 
+
+ public:
+  PowerUp ();
+  ~PowerUp ();
+  
+};
+
+#endif /* _POWER_UP_H */
Index: /orxonox/branches/levelloader/src/proto_class.cc
===================================================================
--- /orxonox/branches/levelloader/src/proto_class.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/proto_class.cc	(revision 3417)
@@ -0,0 +1,50 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: ...
+   co-programmer: ...
+*/
+
+
+#include "proto_class.h"
+
+
+using namespace std;
+
+
+/**
+   \brief standard constructor
+   \todo this constructor is not jet implemented - do it
+*/
+ProtoClass::ProtoClass () 
+{
+   this->setClassName ("ProtoClass");
+}
+
+
+/**
+   \brief standard deconstructor
+   \todo this deconstructor is not jet implemented - do it
+
+*/
+ProtoClass::~ProtoClass () {}
+
+
+/**
+   \brief nonsense - delete this method
+   \param realy nothing to give
+   \returns true or false - probably nothing?
+
+   this is just to show the doxygen abilities (this for example is an extension for a long comment)
+*/
+bool ProtoClass::doNonSense (int nothing) {}
Index: /orxonox/branches/levelloader/src/proto_class.h
===================================================================
--- /orxonox/branches/levelloader/src/proto_class.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/proto_class.h	(revision 3417)
@@ -0,0 +1,34 @@
+/*! 
+    \file proto_class.h
+    \brief Definition of the proto class template, used quickly start work
+    \todo Example: this shows how to use simply add a Marker that here has to be done something.
+
+    The Protoclass exists, to help you quikly getting the run for how to develop in orxonox.
+    It is an example for the CODING-CONVENTION, and a starting-point for every class.
+*/
+
+#ifndef _PROTO_CLASS_H
+#define _PROTO_CLASS_H
+
+#include "stdincl.h"
+
+/*class Test;*/ /* forward definition of class Test (without including it here!)*/
+
+//! A default class that aids you to start creating a new class
+/**
+   here can be some longer description of this class
+*/
+class ProtoClass : public BaseObject {
+
+ public:
+  ProtoClass ();
+  ~ProtoClass ();
+
+  bool doNonSense (int nothing);
+
+ private:
+  int nonSense;  //!< doxygen tag here like this for all the variables - delete this variable if you use this
+
+};
+
+#endif /* _PROTO_CLASS_H */
Index: /orxonox/branches/levelloader/src/sfont/font.cc
===================================================================
--- /orxonox/branches/levelloader/src/sfont/font.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/sfont/font.cc	(revision 3417)
@@ -0,0 +1,59 @@
+/*
+Copyright (C) 2004 Lion Vollnhals
+Copyright (C) 2003 Matthias Braun
+
+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
+*/
+#ifndef __LIB_2D_FONT_HPP__
+#define __LIB_2D_FONT_HPP__
+
+#include <string>
+#include <stdexcept>
+#include "SFont.h"
+
+/** A thin c++ wrapper around my custom SFont version */
+class SFont
+{
+public:
+	int getHeight() const
+	{ return SFont_TextHeight(font); }
+
+	int getTextWidth(const char* text) const
+	{ return SFont_TextWidth(font, text); }
+	int getTextWidth(const std::string& text) const
+	{ return getTextWidth(text.c_str()); }
+
+	void write(SDL_Surface* surface, const char* text, int x, int y) const
+	{ SFont_Write(surface, font, x, y, text); }
+	
+	void write(SDL_Surface* surface, const std::string& text, int x, int y) const
+	{ Write(surface, text.c_str(), x, y); }
+
+	Font(SDL_Surface* surface)
+	{
+		font = SFont_InitFont(surface);
+		if(!font)
+			throw std::runtime_error("Couldn't initialize font.");
+	}
+	~Font()
+	{ SFont_FreeFont(font); }
+	
+private:
+	SFont_Font* font;
+};
+
+#endif
+
+
Index: /orxonox/branches/levelloader/src/sfont/sfont.c
===================================================================
--- /orxonox/branches/levelloader/src/sfont/sfont.c	(revision 3417)
+++ /orxonox/branches/levelloader/src/sfont/sfont.c	(revision 3417)
@@ -0,0 +1,178 @@
+/*  SFont: a simple font-library that uses special .pngs as fonts
+    Copyright (C) 2003 Karl Bartel
+
+    License: GPL or LGPL (at your choice)
+    WWW: http://www.linux-games.com/sfont/
+
+    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   
+                                                                                
+    Karl Bartel
+    Cecilienstr. 14                                                    
+    12307 Berlin
+    GERMANY
+    karlb@gmx.net                                                      
+*/                                                                            
+#include <SDL.h>
+
+#include <assert.h>
+#include <stdlib.h>
+#include "SFont.h"
+
+static Uint32 GetPixel(SDL_Surface *Surface, Sint32 X, Sint32 Y)
+{
+   Uint8  *bits;
+   Uint32 Bpp;
+
+   assert(X>=0);
+   assert(X<Surface->w);
+   
+   Bpp = Surface->format->BytesPerPixel;
+   bits = ((Uint8 *)Surface->pixels)+Y*Surface->pitch+X*Bpp;
+
+   // Get the pixel
+   switch(Bpp) {
+      case 1:
+         return *((Uint8 *)Surface->pixels + Y * Surface->pitch + X);
+         break;
+      case 2:
+         return *((Uint16 *)Surface->pixels + Y * Surface->pitch/2 + X);
+         break;
+      case 3: { // Format/endian independent 
+         Uint8 r, g, b;
+         r = *((bits)+Surface->format->Rshift/8);
+         g = *((bits)+Surface->format->Gshift/8);
+         b = *((bits)+Surface->format->Bshift/8);
+         return SDL_MapRGB(Surface->format, r, g, b);
+         }
+         break;
+      case 4:
+         return *((Uint32 *)Surface->pixels + Y * Surface->pitch/4 + X);
+         break;
+   }
+
+   return -1;
+}
+
+SFont_Font* SFont_InitFont(SDL_Surface* Surface)
+{
+    int x = 0, i = 0;
+    Uint32 pixel;
+    SFont_Font* Font;
+    Uint32 pink;
+
+    if (Surface == NULL)
+	return NULL;
+
+    Font = (SFont_Font *) malloc(sizeof(SFont_Font));
+    Font->Surface = Surface;
+
+    SDL_LockSurface(Surface);
+
+    pink = SDL_MapRGB(Surface->format, 255, 0, 255);
+    while (x < Surface->w) {
+	if (GetPixel(Surface, x, 0) == pink) { 
+    	    Font->CharPos[i++]=x;
+    	    while((x < Surface->w) && (GetPixel(Surface, x, 0)== pink))
+		x++;
+	    Font->CharPos[i++]=x;
+	}
+	x++;
+    }
+    Font->MaxPos = x-1;
+    
+    pixel = GetPixel(Surface, 0, Surface->h-1);
+    SDL_UnlockSurface(Surface);
+    SDL_SetColorKey(Surface, SDL_SRCCOLORKEY, pixel);
+
+    return Font;
+}
+
+void SFont_FreeFont(SFont_Font* FontInfo)
+{
+    SDL_FreeSurface(FontInfo->Surface);
+    free(FontInfo);
+}
+
+void SFont_Write(SDL_Surface *Surface, const SFont_Font *Font,
+		 int x, int y, const char *text)
+{
+    const char* c;
+    int charoffset;
+    SDL_Rect srcrect, dstrect;
+
+    if(text == NULL)
+	return;
+
+    // these values won't change in the loop
+    srcrect.y = 1;
+    dstrect.y = y;
+    srcrect.h = dstrect.h = Font->Surface->h - 1;
+
+    for(c = text; *c != '\0' && x <= Surface->w ; c++) {
+	charoffset = ((int) (*c - 33)) * 2 + 1;
+	// skip spaces and nonprintable characters
+	if (*c == ' ' || charoffset < 0 || charoffset > Font->MaxPos) {
+	    x += Font->CharPos[2]-Font->CharPos[1];
+	    continue;
+	}
+
+	srcrect.w = dstrect.w = 
+	    (Font->CharPos[charoffset+2] + Font->CharPos[charoffset+1])/2 -
+	    (Font->CharPos[charoffset] + Font->CharPos[charoffset-1])/2;
+	srcrect.x = (Font->CharPos[charoffset]+Font->CharPos[charoffset-1])/2;
+	dstrect.x = x - (float)(Font->CharPos[charoffset]
+			      - Font->CharPos[charoffset-1])/2;
+
+	SDL_BlitSurface(Font->Surface, &srcrect, Surface, &dstrect); 
+
+	x += Font->CharPos[charoffset+1] - Font->CharPos[charoffset];
+    }
+}
+
+int SFont_TextWidth(const SFont_Font *Font, const char *text)
+{
+    const char* c;
+    int charoffset=0;
+    int width = 0;
+
+    if(text == NULL)
+	return 0;
+
+    for(c = text; *c != '\0'; c++) {
+	charoffset = ((int) *c - 33) * 2 + 1;
+	// skip spaces and nonprintable characters
+        if (*c == ' ' || charoffset < 0 || charoffset > Font->MaxPos) {
+            width += Font->CharPos[2]-Font->CharPos[1];
+	    continue;
+	}
+	
+	width += Font->CharPos[charoffset+1] - Font->CharPos[charoffset];
+    }
+
+    return width;
+}
+
+int SFont_TextHeight(const SFont_Font* Font)
+{
+    return Font->Surface->h - 1;
+}
+
+void SFont_WriteCenter(SDL_Surface *Surface, const SFont_Font *Font,
+		       int y, const char *text)
+{
+    SFont_Write(Surface, Font, Surface->w/2 - SFont_TextWidth(Font, text)/2,
+	    	y, text);
+}
+
Index: /orxonox/branches/levelloader/src/sfont/sfont.h
===================================================================
--- /orxonox/branches/levelloader/src/sfont/sfont.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/sfont/sfont.h	(revision 3417)
@@ -0,0 +1,83 @@
+/*  SFont: a simple font-library that uses special bitmaps as fonts
+    Copyright (C) 2003 Karl Bartel
+
+    License: GPL or LGPL (at your choice)
+    WWW: http://www.linux-games.com/sfont/
+
+    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   
+                                                                                
+    Karl Bartel
+    Cecilienstr. 14                                                    
+    12307 Berlin
+    GERMANY
+    karlb@gmx.net                                                      
+*/                                                                            
+
+/************************************************************************ 
+*    SFONT - SDL Font Library by Karl Bartel <karlb@gmx.net>            *
+*                                                                       *
+*  All functions are explained below. For further information, take a   *
+*  look at the example files, the links at the SFont web site, or       *
+*  contact me, if you problem isn' addressed anywhere.                  *
+*                                                                       *
+************************************************************************/
+#ifndef SFONT_H
+#define SFONT_H
+
+#include <SDL.h>
+
+#ifdef __cplusplus 
+extern "C" {
+#endif
+
+// Delcare one variable of this type for each font you are using.
+// To load the fonts, load the font image into YourFont->Surface
+// and call InitFont( YourFont );
+typedef struct {
+	SDL_Surface *Surface;	
+	int CharPos[512];
+	int MaxPos;
+} SFont_Font;
+
+// Initializes the font
+// Font: this contains the suface with the font.
+//       The Surface must be loaded before calling this function
+SFont_Font* SFont_InitFont (SDL_Surface *Font);
+
+// Frees the font
+// Font: The font to free
+//       The font must be loaded before using this function.
+void SFont_FreeFont(SFont_Font* Font);
+
+// Blits a string to a surface
+// Destination: the suface you want to blit to
+// text: a string containing the text you want to blit.
+void SFont_Write(SDL_Surface *Surface, const SFont_Font *Font, int x, int y,
+				 const char *text);
+
+// Returns the width of "text" in pixels
+int SFont_TextWidth(const SFont_Font* Font, const char *text);
+// Returns the height of "text" in pixels (which is always equal to Font->Surface->h)
+int SFont_TextHeight(const SFont_Font* Font);
+
+// Blits a string to Surface with centered x position
+void SFont_WriteCenter(SDL_Surface *Surface, const SFont_Font* Font, int y,
+					   const char *text);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* SFONT_H */
Index: /orxonox/branches/levelloader/src/shoot_laser.cc
===================================================================
--- /orxonox/branches/levelloader/src/shoot_laser.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/shoot_laser.cc	(revision 3417)
@@ -0,0 +1,153 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Patrick Boenzli
+   co-programmer: 
+*/
+
+
+
+
+#include <GL/glut.h>
+#include <iostream>
+
+#include "stdincl.h"
+#include "data_tank.h"
+
+#include "shoot_laser.h"
+
+using namespace std;
+
+
+
+ShootLaser::ShootLaser () 
+{
+  lastShoot = null;
+  step = 1.0;
+  inhibitor = 0;
+}
+
+
+ShootLaser::~ShootLaser () {}
+
+
+void ShootLaser::drawShoot() 
+{
+
+  //cout << "ShootLaser::drawShoot" << endl;
+  /* now draw all the shoots (many) */
+  shoot* tmpShoot = lastShoot;
+  shoot* lastRef = null;
+  while( tmpShoot != null )
+    {
+      glPushMatrix(); 
+      glTranslatef(tmpShoot->xCor, tmpShoot->yCor, tmpShoot->zCor);
+      tmpShoot->xCor+=tmpShoot->xVel;
+      tmpShoot->yCor+=tmpShoot->yVel;
+      glScalef(0.1, 0.1, 0.1);
+      glutWireCube(1.0);
+      glPopMatrix();
+
+      /* garbage collection: look if shoot is outside world */
+      /* fix1: weak boundaries check all four sides */
+      /* fix2: conditions, that a struct tree can be cut off */
+      /* fix3: more efficent and nicer please */
+      if (tmpShoot->yCor - DataTank::yOffset > 20) 
+	{
+	  /* normal case: delete one element, link the others */
+	  if (lastRef != null) 
+	    {
+	      //cout << "garbage collection" << endl;
+	      lastRef->next = tmpShoot->next;
+	      delete tmpShoot;
+	      tmpShoot = lastRef->next;
+	      //cout << "garbage collection left" << endl;
+	    }
+	  else
+	    {
+	      /* special case: first element to be processed */
+	      //cout << "garbage collecton: first el in queue" << endl;
+	      lastRef = tmpShoot->next;
+	      delete tmpShoot;
+	      tmpShoot = lastRef;
+	      lastShoot = tmpShoot;
+	      if (tmpShoot != null) 
+		{
+		  tmpShoot = tmpShoot->next;
+		  //cout << "noch nich null" << endl;
+		}
+	      else 
+		{
+		  lastRef = null;
+		  tmpShoot = null;
+		  lastShoot = null;
+		  //cout << "endl null" << endl;
+		}
+	      
+	      //cout << "garbage collection: firtst el in queue left" << endl;
+	    }
+	}
+      else 
+	{
+	  lastRef = tmpShoot;
+	  tmpShoot = tmpShoot->next;
+	}
+    }
+  //cout << "ShootLaser::drawShoot - finished" << endl;
+}
+
+
+void ShootLaser::addShoot(shoot* sh) 
+{
+  sh->next = null;
+  lastShoot = sh;
+}
+
+void ShootLaser::addShoot(float x, float y, float z)
+{
+  //cout << "ShootLaser::addShoot" << endl;
+  shoot* sh = new shoot;
+  sh->xCor = x; sh->yCor = y; sh->zCor = z;
+  sh->xVel = 0; sh->yVel = .4/step; sh->zVel = 0;
+  sh->next = lastShoot;
+  lastShoot = sh;
+}
+
+void ShootLaser::addShootExt(float x, float y, float z, 
+			     float xVel, float yVel, float zVel)
+{
+  //cout << "ShootLaser::addShootExtended" << endl;
+  shoot* sh = new shoot;
+  sh->xCor = x; sh->yCor = y; sh->zCor = z;
+  sh->xVel = xVel/step; sh->yVel = yVel/step; sh->zVel = zVel/step;
+  sh->next = lastShoot;
+  lastShoot = sh;
+}
+
+void ShootLaser::setShootStep(float step) 
+{
+  cout << "ShootLaser::setShootStep to " << step << endl;
+  this->step = step;
+  cout << "ShootLaser::setShootStep end " << step << endl;
+}
+
+
+/* Exterminate shoot from game, implement this method  */
+/* if you like to add animatiion */
+void ShootLaser::removeShoot(shoot* sh)
+{
+  glPushMatrix(); 
+  glTranslatef(sh->xCor, sh->yCor, sh->zCor);
+  glutWireCube(1.0);
+  glPopMatrix();
+}
Index: /orxonox/branches/levelloader/src/shoot_laser.h
===================================================================
--- /orxonox/branches/levelloader/src/shoot_laser.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/shoot_laser.h	(revision 3417)
@@ -0,0 +1,42 @@
+
+#ifndef _SHOOT_LASER_H
+#define _SHOOT_LASER_H
+
+
+class ShootLaser {
+
+ public:
+  
+  /* a list of all shoot-amental objects */
+  struct shoot {
+    shoot *next;
+    float xCor;
+    float yCor;
+    float zCor;    
+    float xVel;
+    float yVel;
+    float zVel;
+    float collisionRadius;
+  };
+  shoot* lastShoot;
+
+  ShootLaser ();
+  ~ShootLaser ();
+
+  int inhibitor;
+
+  void drawShoot(void);
+  void addShoot(shoot* sh);
+  void addShoot(float x, float y, float z);
+  void addShootExt(float x, float y, float z, float xVel, float yVel, float zVel);
+  void setShootStep(float step);
+  void removeShoot(shoot* sh);
+
+
+ private:
+
+  float step;
+
+};
+
+#endif /* _SHOOT_LASER_H */
Index: /orxonox/branches/levelloader/src/shoot_rocket.cc
===================================================================
--- /orxonox/branches/levelloader/src/shoot_rocket.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/shoot_rocket.cc	(revision 3417)
@@ -0,0 +1,220 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Patrick Boenzli
+   co-programmer:  Benjamin Grauer
+*/
+
+
+#include <iostream>
+#include <math.h>
+#include <GL/glut.h>
+
+#include "stdincl.h"
+#include "data_tank.h"
+#include "npc.h"
+
+#include "shoot_rocket.h"
+
+using namespace std;
+
+
+
+ShootRocket::ShootRocket ()
+{
+  lastShoot = null;
+  step = 1.0;
+  inhibitor =0;
+  rotateAngle = 0.0;
+}
+
+
+ShootRocket::~ShootRocket () {}
+
+
+void ShootRocket::drawShoot() 
+{
+
+  //cout << "ShootRocket::drawShoot" << endl;
+  /* now draw all the shoots (many) */
+  shoot* tmpShoot = lastShoot;
+  shoot* lastRef = null;
+  while( tmpShoot != null )
+    {
+      glPushMatrix(); 
+      glTranslatef(tmpShoot->xCor, tmpShoot->yCor, tmpShoot->zCor);
+      tmpShoot->age+=step;
+      switch (tmpShoot->type)
+	{
+	case BACKPARABLE:
+	  tmpShoot->xCor+=tmpShoot->xVel;
+	  tmpShoot->yCor+=tmpShoot->yVel;
+	  tmpShoot->xVel+=tmpShoot->xAcc;
+	  tmpShoot->yVel+=tmpShoot->yAcc;
+	  break;
+	
+	case SIDEACC:
+	  if (tmpShoot->xVel >= .01 || tmpShoot->xVel <= -.01)
+	    {
+	      tmpShoot->xCor+=tmpShoot->xVel;
+	      tmpShoot->yCor+=tmpShoot->yVel;
+	      tmpShoot->xVel*=tmpShoot->xAcc;
+	    }
+	  else
+	    {
+	      tmpShoot->xCor+=tmpShoot->xVel;
+	      tmpShoot->yCor+=tmpShoot->yVel;
+	      tmpShoot->yVel+=tmpShoot->yVel*tmpShoot->yAcc;
+	    }
+	  break;
+	
+	case ROTATER:
+	  tmpShoot->xCor+=tmpShoot->xVel;
+	  tmpShoot->yCor+=tmpShoot->yVel;
+	  tmpShoot->zCor+=tmpShoot->zVel;
+	  break;
+	
+	}
+      
+      glScalef(0.1, 0.1, 0.1);
+      glutWireCube(1.0);
+      glPopMatrix();
+
+      /* garbage collection: look if shoot is outside world */
+      /* fix1: weak boundaries check all four sides */
+      /* fix2: conditions, that a struct tree can be cut off */
+      /* fix3: more efficent and nicer please */
+      if (tmpShoot->age > tmpShoot->lifetime) 
+	{
+	  /* normal case: delete one element, link the others */
+	  if (lastRef != null) 
+	    {
+	      //cout << "garbage collection" << endl;
+	      lastRef->next = tmpShoot->next;
+	      delete tmpShoot;
+	      tmpShoot = lastRef->next;
+	      //cout << "garbage collection left" << endl;
+	    }
+	  else
+	    {
+	      /* special case: first element to be processed */
+	      //cout << "garbage collecton: first el in queue" << endl;
+	      lastRef = tmpShoot->next;
+	      delete tmpShoot;
+	      tmpShoot = lastRef;
+	      lastShoot = tmpShoot;
+	      if (tmpShoot != null) 
+		{
+		  tmpShoot = tmpShoot->next;
+		  //cout << "noch nich null" << endl;
+		}
+	      else 
+		{
+		  lastRef = null;
+		  tmpShoot = null;
+		  lastShoot = null;
+		  //cout << "endl null" << endl;
+		}
+	      
+	      //cout << "garbage collection: firtst el in queue left" << endl;
+	    }
+	}
+      else 
+	{
+	  lastRef = tmpShoot;
+	  tmpShoot = tmpShoot->next;
+	}
+    }
+  //cout << "ShootRocket::drawShoot - finished" << endl;
+}
+
+
+void ShootRocket::addShoot(shoot* sh) 
+{
+  sh->next = null;
+  lastShoot = sh;
+}
+
+void ShootRocket::addBackParable(float x, float y, float z)
+{
+  
+  //cout << "ShootRocket::addShoot" << endl;
+  shoot* sh = new shoot;
+  sh->type = BACKPARABLE;
+  sh->xCor = x; sh->yCor = y; sh->zCor = z;
+  sh->xVel = (-1+(float)rand() / 1000000000/step)/5; 
+  sh->yVel = -.3;
+  sh->zVel = (1-(float)rand() / 1000000000/step)/5;
+  sh->xAcc = 0; sh->yAcc = .01/step; sh->zAcc = 0;
+  sh->age=0;
+  sh->lifetime=5; 
+  sh->next = lastShoot;
+  lastShoot = sh;
+  }
+void ShootRocket::addSideAcc(float x, float y, float z, enum RocketDirection direction)
+{
+  //cout << "ShootRocket::addShoot" << endl;
+  shoot* sh = new shoot;
+  sh->type = SIDEACC;
+  sh->xCor = x; sh->yCor = y; sh->zCor = z;
+  switch (direction)
+    {
+    case LEFT:
+      sh->xVel = -.5; sh->yVel = .05; sh->zVel = 0;
+      break;
+    case RIGHT:
+      sh->xVel = .5; sh->yVel = .05; sh->zVel = 0;
+      break;
+    }
+  sh->xAcc = .9; sh->yAcc = .02; sh->zAcc = 0;
+  sh->age=0;
+  sh->lifetime=10; 
+  sh->next = lastShoot;
+  lastShoot = sh;
+}
+
+void ShootRocket::addRotater(float x, float y, float z)
+{
+  
+  static float radius = 2;
+  rotateAngle+=.1;
+  //cout << "ShootRocket::addShoot" << endl;
+  shoot* sh = new shoot;
+  sh->type = ROTATER;
+  sh->xCor = x+radius*sin(rotateAngle); sh->yCor = y; sh->zCor = z+radius*cos(rotateAngle);
+  sh->xVel = 1*cos(rotateAngle)*step;
+  sh->yVel = 4*step;
+  sh->zVel = 1*sin(rotateAngle)*step;
+  sh->xAcc = 1.01; sh->yAcc = 1- step; sh->zAcc = 1.01;
+  sh->age=0;
+  sh->lifetime=10; 
+  sh->next = lastShoot;
+  lastShoot = sh;
+}
+
+void ShootRocket::setShootStep(float step) 
+{
+  cout << "ShootRocket::setShootStep to " << step << endl;
+  this->step = step;
+}
+
+
+/* Exterminate shoot from game, implement this method  */
+/* if you like to add animatiion */
+void ShootRocket::removeShoot(shoot* sh)
+{
+  glPushMatrix(); 
+  glTranslatef(sh->xCor, sh->yCor, sh->zCor);
+  glutWireCube(1.0);
+  glPopMatrix();
+}
Index: /orxonox/branches/levelloader/src/shoot_rocket.h
===================================================================
--- /orxonox/branches/levelloader/src/shoot_rocket.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/shoot_rocket.h	(revision 3417)
@@ -0,0 +1,56 @@
+
+#ifndef _SHOOT_ROCKET_H
+#define _SHOOT_ROCKET_H
+
+
+
+enum RocketType { HOMING, SIDEACC, BACKPARABLE, ROTATER};
+enum RocketDirection {LEFT, RIGHT, UP, DOWN};
+
+
+class ShootRocket {
+
+ public:
+  
+  /* a list of all shoot-amental objects */
+  struct shoot {
+    enum RocketType type;
+    shoot *next;
+    float xCor;
+    float yCor;
+    float zCor;    
+    float xVel;
+    float yVel;
+    float zVel;
+    float xAcc;
+    float yAcc;
+    float zAcc;
+    float age;
+    float lifetime;
+    float collisionRadius;
+  };
+  shoot* lastShoot;
+  
+  ShootRocket ();
+  ~ShootRocket ();
+  
+  int inhibitor;
+  float rotateAngle;
+
+  void drawShoot(void);
+  void addShoot(shoot* sh);
+  void addBackParable(float x, float y, float z);
+  void addSideAcc(float x, float y, float z, enum RocketDirection direction);
+  void addRotater(float x, float y, float z);
+
+  void setShootStep(float step);
+  void removeShoot(shoot* sh);
+
+
+ private:
+
+  float step;
+
+};
+
+#endif /* _SHOOT_ROCKET_H */
Index: /orxonox/branches/levelloader/src/stdincl.h
===================================================================
--- /orxonox/branches/levelloader/src/stdincl.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/stdincl.h	(revision 3417)
@@ -0,0 +1,47 @@
+/*!
+  \file stdincl.h
+  \brief This file includes default headers that nearly every Class needs.
+  
+  no Class is defined here, but many headers to classes, and more general Headers like the openGL-header.
+*/
+
+#ifndef _STDINCL_H
+#define _STDINCL_H
+
+#define null 0   //!< null
+
+typedef unsigned char byte;
+
+// this includes the information from configure/makefiles
+#if HAVE_CONFIG_H 
+#include <config.h> 
+#endif
+
+#ifdef __WIN32__
+#include <windows.h>
+#endif
+
+#ifndef __APPLE__
+#include <SDL/SDL.h>
+#include <GL/gl.h>
+#include <GL/glu.h>
+#else
+#include <SDL.h>
+#include <OpenGL/gl.h>
+#include <OpenGL/glu.h>
+#endif
+
+#include "vector.h"
+#include "matrix.h"
+#include "curve.h"
+//#include "coordinates.h"
+#include "list.h"
+#include "list_template.h"
+#include "error.h"
+#include "debug.h"
+#include "message_structures.h"
+#include "orxonox.h"
+#include "data_tank.h"
+#include "base_object.h"
+
+#endif /* _STDINCL_H */
Index: /orxonox/branches/levelloader/src/story_def.h
===================================================================
--- /orxonox/branches/levelloader/src/story_def.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/story_def.h	(revision 3417)
@@ -0,0 +1,24 @@
+
+#ifndef _STORY_DEF_H
+#define _STORY_DEF_H
+
+
+#define DEBUG_CAMPAIGN_0 1000
+#define DEBUG_CAMPAIGN_1 1001
+#define DEBUG_CAMPAIGN_2 1002
+
+#define DEBUG_WORLD_0 100
+#define DEBUG_WORLD_1 101
+#define DEBUG_WORLD_2 102
+
+#define WORLD_ID_0 0
+#define WORLD_ID_1 1
+#define WORLD_ID_2 2
+#define WORLD_ID_3 3
+#define WORLD_ID_4 4
+#define WORLD_ID_5 5
+#define WORLD_ID_GAMEEND 999
+
+#define MAX_STORY_ENTITIES 99 //!> maximal StoryEntities in a Campaign
+
+#endif /* _STORY_DEF_H */
Index: /orxonox/branches/levelloader/src/story_entity.cc
===================================================================
--- /orxonox/branches/levelloader/src/story_entity.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/story_entity.cc	(revision 3417)
@@ -0,0 +1,178 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Patrick Boenzli
+   co-programmer: 
+*/
+
+
+#include "story_entity.h"
+
+
+using namespace std;
+
+
+
+StoryEntity::StoryEntity () {}
+StoryEntity::~StoryEntity () {}
+
+
+/** 
+    \brief initialize the entity before use. 
+    \returns an error code if not able to apply.
+
+    After execution of this function, the Entity is ready to be played/executed, 
+    this shifts the initialisation work before the execution - very important...
+*/
+ErrorMessage StoryEntity::init()
+{}
+
+
+/** 
+    \brief sets the story ID
+
+    sets the story id of the current entity, this enables it to be identified in a 
+    global context.
+*/
+void StoryEntity::setStoryID(int storyID)
+{
+  this->storyID = storyID;
+}
+
+
+/** 
+    \brief this reads the story id of the current entity
+    \returns the story entity id
+*/
+int StoryEntity::getStoryID()
+{
+  return this->storyID;
+}
+
+
+/** 
+    \brief sets the id of the next story entity
+    
+    StoryEntities can choose their following entity themselfs. the entity id defined here
+    will be startet after this entity ends. this can be convenient if you want to have a
+    non linear story with switches.
+*/
+void StoryEntity::setNextStoryID(int nextStoryID)
+{
+  this->nextStoryID = nextStoryID;
+}
+
+/** 
+    \brief gets the story id of the current entity
+    \returns story id
+*/
+int StoryEntity::getNextStoryID()
+{
+  return this->nextStoryID;
+}
+
+
+/** 
+    \brief starts the entity with the choosen id. only for entities with lists.
+    \param story id
+    \returns error code if this action has caused a error
+
+    this simply starts the story with the id storyID. the story with the choosen id has
+    to be part of the current entity else, this doesn't make sense. this is used for
+    campaigns or the GameLoader, they have lists of Campaigns/Worlds with their own
+    storyID.
+*/
+ErrorMessage StoryEntity::start(int storyID)
+{}
+
+
+/** 
+    \brief starts the current entity
+    \returns error code if this action has caused a error    
+*/
+ErrorMessage StoryEntity::start()
+{}
+
+
+/** 
+    \brief stops the current entity
+    \returns error code if this action has caused a error
+
+    ATTENTION: this function shouldn't call other functions, or if so, they must return
+    after finishing. If you ignore or forget to do so, the current entity is not able to
+    terminate and it will run in the background or the ressources can't be freed or even
+    worse: are freed and the program will end in a segmentation fault!
+    hehehe, all seen... :)
+*/
+ErrorMessage StoryEntity::stop()
+{}
+
+
+/** 
+    \brief pause the current entity
+    \returns error code if this action has caused a error
+
+    this pauses the current entity or passes this call forth to the running entity.
+*/
+ErrorMessage StoryEntity::pause()
+{}
+
+
+/** 
+    \brief resumes a pause
+    \returns error code if this action has caused a error
+
+    this resumess the current entity or passes this call forth to the running entity.
+*/
+ErrorMessage StoryEntity::resume()
+{}
+
+
+/** 
+    \brief loads the current entity
+
+    this is here to enable you loading maps into the entities. for all other actions you
+    should take the init() function.
+*/
+void StoryEntity::load()
+{}
+
+
+/** 
+    \brief destroys and cleans up the current entity. 
+
+    this cleans up ressources before the deconstructor is called. for terminating 
+    the entity please use the stop() function.
+*/
+void StoryEntity::destroy()
+{}
+
+
+/** 
+    \brief this displays the load screen
+
+    it will need some time to load maps or things like that. to inform the user about 
+    progress and to just show him/her something for the eyes, put here this stuff
+*/
+void StoryEntity::displayLoadScreen()
+{}
+
+
+/** 
+    \brief undisplay the load screen
+
+    the load process has terminated, you now can release the load screen and start this
+    entity.
+*/
+void StoryEntity::releaseLoadScreen()
+{}
Index: /orxonox/branches/levelloader/src/story_entity.h
===================================================================
--- /orxonox/branches/levelloader/src/story_entity.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/story_entity.h	(revision 3417)
@@ -0,0 +1,48 @@
+/*! 
+    \file story_entity.h
+    \brief holds the base class of everything that is playable - that is part of the story
+*/ 
+
+
+#ifndef _STORY_ENTITY_H
+#define _STORY_ENTITY_H
+
+#include "stdincl.h"
+#include "story_def.h"
+
+//! A class that represents something to play in orxonox. it is a container for worlds, movies, mission briefings, etc...
+class StoryEntity : public BaseObject {
+
+ public:
+  StoryEntity ();
+  virtual ~StoryEntity ();
+
+  bool isInit;  //! if the entity is initialized, this has to be true
+  bool isPaused; //! is true if the entity is paused
+
+  virtual ErrorMessage init();
+  virtual ErrorMessage start(int storyID);
+  virtual ErrorMessage start();
+  virtual ErrorMessage stop();
+  virtual ErrorMessage pause();
+  virtual ErrorMessage resume();
+
+  virtual void load();
+  virtual void destroy();
+
+  virtual void displayLoadScreen();
+  virtual void releaseLoadScreen();
+
+  void setStoryID(int storyID);
+  int getStoryID();
+
+  void setNextStoryID(int nextStoryID);
+  int getNextStoryID();
+
+
+ private:
+  int storyID; //! this is the number of this entity, identifying it in a list/tree...
+  int nextStoryID; //! if this entity has finished, this entity shall be called
+};
+
+#endif /* _STORY_ENTITY_H */
Index: /orxonox/branches/levelloader/src/synchronisable.cc
===================================================================
--- /orxonox/branches/levelloader/src/synchronisable.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/synchronisable.cc	(revision 3417)
@@ -0,0 +1,32 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Patrick Boenzli
+   co-programmer: ...
+*/
+
+
+#include "synchronisable.h"
+
+
+using namespace std;
+
+
+
+Synchronisable::Synchronisable () {}
+
+
+
+Synchronisable::~Synchronisable () {}
+
+
Index: /orxonox/branches/levelloader/src/synchronisable.h
===================================================================
--- /orxonox/branches/levelloader/src/synchronisable.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/synchronisable.h	(revision 3417)
@@ -0,0 +1,24 @@
+
+#ifndef _SYNCHRONISABLE_H
+#define _SYNCHRONISABLE_H
+
+#include "data_tank.h"
+
+
+class Synchronisable {
+
+ public:
+  Synchronisable ();
+  ~Synchronisable ();
+
+  struct worldEntityState {
+    /*Vector position; */
+    /*Vector orientation; */
+  };
+
+  worldEntityState* getState();
+  void setState(worldEntityState*);
+
+};
+
+#endif /* _SYNCHRONISABLE_H */
Index: /orxonox/branches/levelloader/src/track.cc
===================================================================
--- /orxonox/branches/levelloader/src/track.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/track.cc	(revision 3417)
@@ -0,0 +1,103 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Christian Meyer
+   co-programmer: ...
+*/
+
+#include "track.h"
+
+using namespace std;
+
+/**
+   \brief creates a null Track part
+*/
+Track::Track ()
+{
+  this->ID = 0;
+  this->offset = NULL;
+  this->end = NULL;
+  this->nextID = 0;
+  this->setClassName ("Track");
+}
+
+/**
+   \brief creates a functional base Track part
+   \param number: the ID if this Track part
+   \param next: the ID of the next Track part
+   \param start: pointer to an anchor point (Vector) representing the offset of this part
+   \param finish: pointer to an anchor point (Vector) representing the end of this part
+*/
+Track::Track (Uint32 number, Uint32 next, Vector* start, Vector* finish)
+{
+  this->ID = number;
+  this->offset = start;
+  this->end = finish;
+  this->nextID = next;
+  this->setClassName ("Track");
+}
+
+/**
+   \brief removes the Track part from memory
+*/
+Track::~Track ()
+{
+}
+
+void Track::init()
+{
+  
+}
+
+
+
+
+
+/**
+   \brief this is called when a WorldEntity enters a Track part
+   \param entity: pointer to the WorldEntity in question
+   
+   You can do stuff like add or remove effects, do some coordinate finetuning 
+   or whatever in here.
+*/
+void Track::postEnter (WorldEntity* entity)
+{
+}
+
+
+/**
+   \brief this is called when a WorldEntity leaves a Track part
+   \param entity: pointer to the WorldEntity in question
+   
+   You can do stuff like add or remove effects, do some coordinate finetuning 
+   or whatever in here.
+*/
+void Track::postLeave (WorldEntity* entity)
+{
+}
+
+
+/**
+   \brief this is called every frame
+   \param deltaT: amount of time passed since the last frame in seconds
+   
+   Do time based or polling scripts here. 
+*/
+void Track::tick (float deltaT)
+{
+}
+
+
+
+
+
Index: /orxonox/branches/levelloader/src/track.h
===================================================================
--- /orxonox/branches/levelloader/src/track.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/track.h	(revision 3417)
@@ -0,0 +1,39 @@
+/*! 
+    \file track.h
+    \brief Basic level architecture
+*/ 
+
+#ifndef _TRACK_H
+#define _TRACK_H
+
+#include "stdincl.h"
+
+//!	The Red Line through a level
+/**
+   Handles level boundaries, bound movement mapping, camera placement and scripting.
+   To create special levels with special camera movement, rules or whatever, derive from this base class.
+*/
+class Track : public BaseObject
+{
+ private:
+  Uint32 ID;
+  Vector* offset;
+  Vector* end;
+  // Vector* direction; // unity direction vector: it is costy to always recalculate it
+  //Vector* up; // direction where up is ment to be - diffuse in space, eh?
+  //Vector* traverse; // right-left 
+  Uint32 nextID;
+  
+  
+ public:
+  Track ();
+  Track (Uint32 number, Uint32 next, Vector* start, Vector* finish);
+  ~Track ();
+  virtual void init();
+  
+  virtual void postEnter (WorldEntity* entity);	// handle coordinate transition in here !!! (when dist < 0 or dist > lasttracklenght)
+  virtual void postLeave (WorldEntity* entity);
+  virtual void tick (float deltaT);
+};
+
+#endif /* _TRACK_H */
Index: /orxonox/branches/levelloader/src/track_manager.cc
===================================================================
--- /orxonox/branches/levelloader/src/track_manager.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/track_manager.cc	(revision 3417)
@@ -0,0 +1,544 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Patrick Boenzli
+   co-programmer: ...
+*/
+
+
+#include "track_manager.h"
+#include <stdarg.h>
+
+
+using namespace std;
+
+/**
+   \brief initializes a TrackElement (sets the default values)
+*/
+TrackElement::TrackElement(void)
+{
+  this->isFresh = true;
+  this->isHotPoint = false;
+  this->isSavePoint = false;
+  this->isFork = false;
+  this->isJoined = false;
+  this->mainJoin = false;
+  this->cond; //!< todo think!!
+  this->ID = -1;
+  this->startingTime = 0; //!< \todo eventually set this to the max time of TrackManager.
+  this->duration = 1;
+  this->curveType = BEZIERCURVE;
+  this->nodeCount = 0;
+  this->childCount = 0;
+  this->name = NULL;
+  this->startPoint = Vector(0,0,0);
+  this->startTangentPoint = Vector(0,0,0);
+  this->curve = NULL;
+  this->children = NULL;
+}
+
+/** 
+    \brief destroys all alocated memory)
+    \todo eventually when deleting a TrackElement you would not like to delete all its preceding TrackElements
+*/
+TrackElement::~TrackElement(void)
+{
+  if (this->name)
+    delete []name;
+  if (this->curve)
+    delete this->curve;
+  if ((!this->isJoined &&this->childCount > 0) || (this->isJoined && this->mainJoin))
+    {
+      for (int i=0; i < this->childCount; i++)
+	delete this->children[i];
+      delete this->children;
+    }
+}
+
+/**
+   \brief Searches through all the TrackElements for trackID.
+   \param trackID The ID to search for.
+   \returns The TrackElement if Found, NULL otherwise.
+   
+   \todo make this more modular, to search for different things
+*/
+TrackElement* TrackElement::findByID(unsigned int trackID)
+{
+  // return if Found.
+  if (this->ID == trackID)
+    return this;
+  // search on.
+  if (this->childCount > 0)
+    for (int i=0; i < this->childCount; i++)
+      {
+	TrackElement* tmpElem;
+	if ((tmpElem = this->children[i]->findByID(trackID)))
+	  return tmpElem;
+      }
+  else return NULL;
+}
+
+
+
+
+
+/////////////////////////////////////
+///// TRACKMANAGER //////////////////
+/////////////////////////////////////
+/**
+   \brief standard constructor
+
+*/
+TrackManager::TrackManager(void)
+{
+  this->setClassName ("TrackManager");
+
+  PRINTF(3)("Initializing the TrackManager\n");
+  this->firstTrackElem = new TrackElement();
+  this->firstTrackElem->ID = 1;
+  this->currentTrackElem = firstTrackElem;
+  this->localTime = 0;
+  this->maxTime = 0;
+  this->trackElemCount = 1;
+}
+
+
+/**
+   \brief standard destructor
+
+*/
+TrackManager::~TrackManager(void)
+{
+  PRINTF(3)("Destruct TrackManager\n");
+
+  PRINTF(3)("Deleting all the TrackElements\n");
+  delete this->firstTrackElem;
+
+  // we do not have a TrackManager anymore
+  singletonRef = NULL;
+}
+
+TrackManager* TrackManager::singletonRef = NULL;
+
+/**
+   \returns The reference on the TrackManager.
+
+   If the TrackManager does not exist, it will be created.
+*/
+TrackManager* TrackManager::getInstance(void) 
+{
+  if (singletonRef)
+    return singletonRef;
+  else
+    return singletonRef = new TrackManager();
+}
+
+/**
+   \brief reserves Space for childCount children
+   \param childCount The Count of children to make space for.
+*/
+void TrackManager::initChildren(unsigned int childCount)
+{
+  this->currentTrackElem->childCount = childCount;
+  this->currentTrackElem->children = new TrackElement*[childCount];
+  for (int i=0; i<childCount; i++)
+    {
+      this->currentTrackElem->children[i] = new TrackElement();
+      this->currentTrackElem->children[i]->ID = ++trackElemCount;
+      this->currentTrackElem->children[i]->startingTime = this->currentTrackElem->startingTime+this->currentTrackElem->duration;
+      this->currentTrackElem->children[i]->startPoint = this->currentTrackElem->curve->getNode(this->currentTrackElem->curve->getNodeCount());
+      this->currentTrackElem->children[i]->startTangentPoint = (this->currentTrackElem->children[i]->startPoint *2) - this->currentTrackElem->curve->getNode(this->currentTrackElem->curve->getNodeCount()-1);
+    }
+}
+
+/**
+   \brief Searches for a given trackID.
+   \param trackID the trackID to search for.
+   \returns The TrackElement #trackID if found, NULL otherwise.
+*/
+TrackElement* TrackManager::findTrackElementByID(unsigned int trackID) const
+{
+  return firstTrackElem->findByID(trackID);
+}
+
+// INITIALIZE //
+
+/**
+   \brief Sets the trackID we are working on.
+   \param trackID the trackID we are working on
+*/
+void TrackManager::workOn(unsigned int trackID)
+{
+  TrackElement* tmpElem = findTrackElementByID(trackID);
+  if (tmpElem)
+    this->currentTrackElem = tmpElem;
+  else
+    printf("TrackElement not Found, leaving unchanged\n");
+  printf("now Working on %d\n", this->currentTrackElem->ID);
+
+}
+
+/**
+   \brief Sets the Type of the Curve
+   \brief curveType The Type to set
+*/
+void TrackManager::setCurveType(CurveType curveType)
+{
+  if (!this->currentTrackElem->isFresh)
+    {
+      PRINTF(2)("It is not possible to change the type of a Curve after you have have appended some points to it\n");
+      return;
+    }
+  this->currentTrackElem->curveType = curveType;
+  switch (curveType)
+    {
+    case BEZIERCURVE:
+      this->currentTrackElem->curve = new BezierCurve();
+      break;
+    case UPOINTCURVE:
+      this->currentTrackElem->curve = new UPointCurve();
+      break;
+    }
+}
+
+/**
+   \brief Sets the duration of the current path in seconds.
+   \param time The duration in seconds.
+*/
+
+void TrackManager::setDuration(float time)
+{
+  this->currentTrackElem->duration = time;
+}
+
+/**
+   \brief adds a point to the current TrackElement
+   \param newPoint The point to add.
+*/
+bool TrackManager::addPoint(Vector newPoint)
+{
+  return this->addPoint(newPoint, this->currentTrackElem);
+}
+
+/**
+   \brief adds a point to trackElem
+   \param newPoint The point to add.
+   \param trackElem The TrackElement to add the Point to
+*/
+bool TrackManager::addPoint(Vector newPoint, TrackElement* trackElem)
+{
+  if (trackElem->isFresh)
+    {
+      this->setCurveType(BEZIERCURVE);
+      trackElem->isFresh = false;
+      if(trackElem != this->firstTrackElem)
+	{
+	  this->addPoint(trackElem->startPoint);
+	  this->addPoint(trackElem->startTangentPoint);
+	}
+    }
+  trackElem->curve->addNode(newPoint);
+  trackElem->nodeCount++;
+}
+
+/**
+   \brief adds save/splitpoint.
+   \param newPoint The point to add.
+   \returns A Pointer to a newly appended Curve
+*/
+int TrackManager::addHotPoint(Vector newPoint)
+{
+  printf("setting up a HotPoint\n");
+  if (this->currentTrackElem->isFresh)
+    {
+      this->setCurveType(BEZIERCURVE);
+      this->currentTrackElem->isFresh = false;
+    }
+
+  // \todo HotPoint Handling.
+  this->currentTrackElem->curve->addNode(newPoint);
+  this->currentTrackElem->nodeCount++;
+  this->initChildren(1);
+  this->currentTrackElem = this->currentTrackElem->children[0];
+}
+
+/**
+   \brief Sets the last HotPoint into a savePoint.
+   \returns A Pointer to a newly appended Curve
+   
+   If no HotPoint was defined the last added Point will be rendered into a savePoint. \n
+   If the HotPoint was defined as a fork the Point will \b not be set into a savePoint.
+*/
+int TrackManager::setSavePoint(void)
+{
+  printf("setting up a SavePoint.\n");
+  if (this->currentTrackElem->isFork || this->currentTrackElem->isSavePoint)
+    return this->currentTrackElem->children[1]->ID;
+  this->currentTrackElem->isSavePoint = true;
+  this->currentTrackElem->isHotPoint = true;
+
+  this->initChildren(1);
+  this->currentTrackElem = this->currentTrackElem->children[0];
+}
+
+/**
+   \brief adds some interessting non-linear movments through the level.
+   \param count The Count of childrens the current HotPoint will have.
+
+   If no HotPoint was defined the last added Point will be rendered into a fork. \n
+   If the HotPoint was defined as a savePoint the Point will \b not be set into a fork.
+*/
+void TrackManager::fork(unsigned int count, ...)
+{
+  int* trackIDs = new int[count];
+  this->forkV(count, trackIDs);
+  va_list ID;
+  va_start (ID, count);
+  for(int i = 0; i < count; i++)
+    {
+      *va_arg (ID, int*) = trackIDs[i];
+    }
+  va_end(ID);  
+  delete []trackIDs;
+}
+
+/**
+   \brief adds some interessting non-linear movments through the level.
+   \param count The Count of childrens the current HotPoint will have.
+   \param trackIDs A Pointer to an Array of ints which will hold the trackID's (the user will have to reserve space for this).
+
+   \see void TrackManager::fork(int count, ...)
+
+   \todo initialisation is wrong!! also in setSavePoint.
+*/
+void TrackManager::forkV(unsigned int count, int* trackIDs)
+{
+  printf("Forking with %d children\n", count);
+  if (this->currentTrackElem->isSavePoint)
+    return;
+  this->currentTrackElem->isFork = true;
+  this->currentTrackElem->isHotPoint = true;
+  for(int i = 0; i < count; i++)
+    trackIDs[i]=this->trackElemCount+1+i;
+  this->initChildren(count);
+}
+
+/**
+   \brief decides under what condition a certain Path will be chosen.
+   \param groupID the ID on which to choose the preceding move
+   \param cond \todo think about this
+*/
+void TrackManager::condition(unsigned int groupID, PathCondition cond)
+{
+  
+}
+
+/**
+   \brief joins some tracks together again. 
+   \param count The count of Paths to join.
+
+   Join will set the localTime to the longest time a Path has to get to this Point. \n
+   Join will join all curves to the first curve, meaning that all the tangents will be matched.
+*/
+void TrackManager::join(unsigned int count, ...)
+{
+  int* trackIDs = new int [count];
+  va_list ID;
+  va_start (ID, count);
+  for(int i = 0; i < count; i++)
+    {
+      trackIDs[i] = va_arg (ID, int);
+    }
+  va_end(ID);
+  this->joinV(count, trackIDs);
+  delete []trackIDs;
+}
+
+/**
+   \brief joins some tracks together again. 
+   \param count The count of Paths to join.
+   \param trackIDs an Array with the trackID's to join
+
+   \see void TrackManager::join(int count, ...)
+*/
+void TrackManager::joinV(unsigned int count, int* trackIDs)
+{
+  printf("Joining %d tracks to Track %d\n", count, trackIDs[0]);
+
+  // chanching work-on to temporary value. going back at the end.
+  int tmpCurrentWorkingID = this->currentTrackElem->ID;
+  this->workOn(trackIDs[0]);
+
+  TrackElement* firstJoint = this->currentTrackElem;
+  Vector tmpEndPoint = firstJoint->curve->getNode(firstJoint->curve->getNodeCount());
+  Vector tmpTangentPoint = firstJoint->curve->getNode(firstJoint->curve->getNodeCount()-1); 
+  firstJoint->isJoined = true;
+  firstJoint->mainJoin = true;
+  if(!firstJoint->isHotPoint)
+    this->setSavePoint();
+
+  for (int i = 1; i < count; i++)
+    {
+      TrackElement* tmpJoinElem = this->findTrackElementByID(trackIDs[i]);
+      if (tmpJoinElem->childCount > 0)
+	printf("!!This Curve has children, and as such will not be joined!!\n You can try joining other childless TrackElements to this one!");
+      else
+	{
+	  this->addPoint(tmpTangentPoint, tmpJoinElem);
+	  this->addPoint(tmpEndPoint, tmpJoinElem);
+	  
+	  //Copying Joint-Info
+	  tmpJoinElem->children = firstJoint->children;
+	  tmpJoinElem->childCount = firstJoint->childCount;
+	  tmpJoinElem->isSavePoint = firstJoint->isSavePoint;
+	  tmpJoinElem->isFork = firstJoint->isFork;
+	  
+	  tmpJoinElem->isJoined = true;
+	}
+    }
+  // returning to the TrackElement we were working on.
+  this->workOn(tmpCurrentWorkingID);
+}
+
+// RUNTIME //
+
+/**
+   \brief calculates the Position for the localTime of the Track.
+   \returns the calculated Position
+*/
+Vector TrackManager::calcPos() const
+{
+  //  PRINTF(0)("TrackElement:%d, localTime: %f\n",this->currentTrackElem->ID, this->localTime);
+  return this->currentTrackElem->curve->calcPos((this->localTime-this->currentTrackElem->startingTime)/this->currentTrackElem->duration);
+}
+
+/**
+   \brief calculates the Rotation for the localTime of the Track.
+   \returns the calculated Rotation
+*/
+Vector TrackManager::calcDir() const
+{
+  return this->currentTrackElem->curve->calcDir((this->localTime-this->currentTrackElem->startingTime)/this->currentTrackElem->duration);
+}
+
+/**
+   \brief Advances the local-time of the Track around dt
+   \param dt The time about which to advance.
+
+   This function also checks, if the TrackElement has to be changed.
+*/
+void TrackManager::tick(float dt)
+{
+  if (this->localTime <= this->firstTrackElem->duration)
+    this->jumpTo(this->localTime);
+  this->localTime += dt;
+  if (this->localTime > this->currentTrackElem->startingTime + this->currentTrackElem->duration && this->currentTrackElem->childCount > 0)
+    this->currentTrackElem = this->currentTrackElem->children[0];
+}
+
+/**
+   \brief Jumps to a certain point on the Track.
+   \param time The time on the Track to jump to.
+
+   This should be used to Jump backwards on a Track, because moving forward means to change between the Path. (it then tries to choose the default.)
+   Max is trackLengthMax.
+*/
+void TrackManager::jumpTo(float time)
+{
+  if (time == 0)
+    this->currentTrackElem = this->firstTrackElem;
+  this->localTime = time;
+}
+
+/**
+   \brief a Function that decides which Path we should follow.
+   \param graphID The Path to choose.
+   
+*/
+void TrackManager::choosePath(int graphID)
+{
+
+}
+
+
+
+// DEBUG //
+
+/**
+   \brief Imports a model of the Graph into the OpenGL-environment.
+   \param dt The Iterator used in seconds for Painting the Graph.
+
+   This is for testing facility only. Do this if you want to see the Path inside the Level.
+   eventually this will all be packed into a gl-list.
+*/
+void TrackManager::drawGraph(float dt) const
+{
+
+  for (int i = 1; i <= trackElemCount; i++)
+    {
+      glBegin(GL_LINE_STRIP);
+      TrackElement* tmpElem = this->findTrackElementByID(i);
+      if (tmpElem->curve)
+	for(float f = 0.0; f < 1.0; f+=dt)
+	  {
+	    //      printf("%f, %f, %f\n",trackManager->calcPos().x, trackManager->calcPos().y, trackManager->calcPos().z);
+	    Vector tmpVector = tmpElem->curve->calcPos(f);
+	    glVertex3f(tmpVector.x, tmpVector.y, tmpVector.z);
+	  }
+  glEnd();
+    }
+}
+
+void TrackManager::debug(unsigned int level) const
+{
+  printf("::CLASS TRACKMANAGER::debug information::\n");
+  //  printf("Status is: %
+  printf(" Consists of %d elements\n", this->trackElemCount);
+  printf(" localTime is: %f\n", this->localTime);
+  if (level >= 2)
+    {
+      for (int i = 1; i <= trackElemCount; i++)
+	{
+	  TrackElement* tmpElem = this->findTrackElementByID(i);
+	  printf("  ::TrackElement:%i::", tmpElem->ID);
+	  if(tmpElem->name)
+	    printf("name:%s::", tmpElem->name);
+	  if(tmpElem->isFresh)
+	    printf("   has not jet eddited in any way\n");
+	  printf("\n   TimeTable: starting at = %f; ends at = %f; duration = %f\n", tmpElem->startingTime, tmpElem->startingTime+tmpElem->duration, tmpElem->duration);
+	  printf("   consists of %d Points\n", tmpElem->nodeCount);
+	  if (tmpElem->childCount == 0)
+	    printf("   has no child\n");	    
+	  else if (tmpElem->childCount == 1)
+	    printf("   has 1 child: ==%d==\n", tmpElem->children[0]->ID);
+	  else if (tmpElem->childCount > 1)
+	    {
+	      printf("   has %d children: ", tmpElem->childCount);
+	      for(int i = 0; i < tmpElem->childCount; i++)
+		printf("=%d= ", tmpElem->children[i]->ID);
+	      printf("\n");
+	    }
+
+	  if(tmpElem->isHotPoint)
+	    printf("   is a special Point:\n");
+	  if(tmpElem->isSavePoint)
+	    printf("    is a SavePoint\n");
+	  if(tmpElem->isFork)
+	    {
+	      printf("    is A Fork with with %d children.", tmpElem->childCount);
+	    }
+	  if(tmpElem->isJoined)
+	    printf("   is Joined at the End\n");
+	}
+    }
+}
Index: /orxonox/branches/levelloader/src/track_manager.h
===================================================================
--- /orxonox/branches/levelloader/src/track_manager.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/track_manager.h	(revision 3417)
@@ -0,0 +1,141 @@
+/*! 
+    \file track_manager.h
+    \brief manages all tracks defined in the world and the path the player takes
+
+    it is a container for all tracks and all track-nodes. it manages the movement of
+    the track helper-parent (that drives the player). it is responsable for calculating
+    smooth curves etc.
+*/
+
+
+#ifndef _TRACK_MANAGER_H
+#define _TRACK_MANAGER_H
+
+#include "stdincl.h"
+
+
+//! condition for choosing a certain Path. \todo implement a useful way.
+struct PathCondition
+{
+  
+};
+  
+
+//! A Graph-Element, that holds the curve-structure of a Level.
+/**
+   A TrackElement is used, to define the structure of the Track itself.
+   It is a graph and not a tree, because paths can fork and join again.
+*/
+class TrackElement
+{
+ public:
+  TrackElement(void);
+  ~TrackElement(void);
+
+  TrackElement* findByID(unsigned int trackID);
+
+  bool isFresh;              //!< If no Points where added until now
+  bool isHotPoint;           //!< If the first node is a specialPoint;
+  bool isSavePoint;          //!< If the first node is a savePoint
+  bool isFork;               //!< If the first node is a Fork
+  bool isJoined;             //!< If the End of the Curve is joined.
+  bool mainJoin;             //!< If the End of the Curve is joined, and this is the one Curve the others join to.
+  PathCondition cond;        //!< The Split Condition;
+  int ID;                    //!< The ID of this TrackElement
+  float startingTime;        //!< The time at which this Track begins.
+  float duration;            //!< The time used to cross this TrackElement (curve).
+  CurveType curveType;       //!< The CurveType this will have.
+  int nodeCount;             //!< The count of points this TrackElement has.
+  char* name;                //!< A name for the Trac.
+  Vector startPoint;         //!< A Vector that Points to the first point of the containing Curve. (for c1-steadiness)
+  Vector startTangentPoint;  //!< A Vector that points into the direction of the previous Curve. (for c1-steadiness)
+  Curve* curve;              //!< The Curve of this TrackElement
+  int childCount;            //!< The number of Children This TrackElement has.
+  TrackElement** children;   //!< A TrackElement can have a Tree of following TrackElements.
+};
+
+
+
+//! The TrackManager handles the flow of the Players through the game.
+/**
+   \todo write the methodes
+
+   <b>The TrackManager works as followed:</b> \n
+     \n
+   <b>1. Initialize it, by setting up the Graph. You can do this by using the following Commands.</b>
+    \li workOn(): changes the ID that will be altered through the changes.
+    \li setCurveType(): lets you set the CurveType of the Curve we are Working on. (default is BezierCurve, set this as early as possible, for this uses resources).
+    \li setDuration(): sets the length of the current path in seconds.
+    \li addPoint(): adds a point to the Curve.
+    \li addHotPoint(): adds save/splitpoint.\n
+    \li fork(): adds some interessting non-linear movments through the level (fork will force addHotPoint if not done then).
+    \li condition(): decides under what condition a certain Path will be chosen.
+    \li join(): joins some tracks together again. Join will set the localTime to the longest time a Path has to get to this Point)
+    \li setSavePoint(): Sets a HotPoint into a savePoint. A Savepoint can be used as a rollbackpoint if a Player gets shot.
+
+    HotPoints and Joins are at the beginning of a TrackElement. \n
+    SavePoints and Forks are at the end of a TrackElement \n
+    look out: <b>SAVEPOINTS CAN NOT BE FORKS</b> (but joins), because the condition is really hard to guess if you do not give some impuls. \n
+\n
+   <b> 2. Runtime knows the following: </b>
+    \li calcPos(): returns the current position on the track
+    \li calcDir(): returns the current Direction the track is flying on.
+    \li tick(): makes a Step on the Path. increases localTime by dt.
+    \li choosePath(): a Function that decides which Path we should follow.
+   
+   TrackManager can be handled as a StateMachine.
+   \n\n
+    Names: 
+    \li TrackManager: handles Tracks
+    \li Track:        The Track that the ship can follow
+    \li Path:         one way through the Level, that is dependent on conditionals.
+    \li Conditional:  A decition making device, that chooses betwen different TrackElements for the Path.
+    \li TrackElement: A Part of A whole Track
+*/
+class TrackManager : public BaseObject
+{
+ private:
+  TrackManager(void);
+
+  static TrackManager* singletonRef;  //!< There may only be one TrackManager existing.
+  TrackElement* firstTrackElem;       //!< The first TrackElement that exists.
+  TrackElement* currentTrackElem;     //!< The TrackElement we are working on.
+  float localTime;                    //!< The time that has been passed since the traveling the Track.
+  float maxTime;                      //!< The maximal time the track has.
+  int trackElemCount;                 //!< The count of TrackElements that exist.
+  
+  void initChildren(unsigned int childCount);
+
+  TrackElement* findTrackElementByID(unsigned int trackID) const;
+  
+ public:
+  ~TrackManager(void);
+  static TrackManager* getInstance(void);
+
+  // Methods to change the Path (initialisation)
+  void workOn(unsigned int trackID);
+  void setCurveType(CurveType curveType);
+  void setDuration(float time);
+  bool addPoint(Vector newPoint);
+  bool addPoint(Vector newPoint, TrackElement* trackElem);
+  int addHotPoint(Vector newPoint);
+  int setSavePoint(void);
+  void fork(unsigned int count, ...);
+  void forkV(unsigned int count, int* trackIDs);
+  void condition(unsigned int groupID, PathCondition cond); //!< \todo really do this!!
+  void join(unsigned int count, ...);
+  void joinV(unsigned int count, int* trackIDs);
+
+  // Methods to calculate the position on the Path (runtime)
+  Vector calcPos(void) const;
+  Vector calcDir(void) const;
+  void tick(float dt);
+  void jumpTo(float time);
+  void choosePath(int graphID);
+
+  // DEBUG //
+  void drawGraph(float dt) const;
+  void debug(unsigned int level) const;
+};
+
+#endif /* _TRACK_MANAGER_H */
Index: /orxonox/branches/levelloader/src/vector.cc
===================================================================
--- /orxonox/branches/levelloader/src/vector.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/vector.cc	(revision 3417)
@@ -0,0 +1,845 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Christian Meyer 
+   co-programmer: Patrick Boenzli : Vector::scale()
+                                    Vector::abs()
+   
+   Quaternion code borrowed from an Gamasutra article by Nick Bobick and Ken Shoemake
+*/
+
+
+#include "vector.h"
+
+
+using namespace std;
+
+/**
+   \brief add two vectors
+   \param v: the other vector
+   \return the sum of both vectors
+*/
+Vector Vector::operator+ (const Vector& v) const
+{
+  Vector r;
+
+  r.x = x + v.x;
+  r.y = y + v.y;
+  r.z = z + v.z;
+  
+  return r;
+}
+
+/**
+   \brief subtract a vector from another
+   \param v: the other vector
+   \return the difference between the vectors
+*/
+Vector Vector::operator- (const Vector& v) const
+{
+  Vector r;
+  
+  r.x = x - v.x;
+  r.y = y - v.y;
+  r.z = z - v.z;
+  
+  return r;
+}
+
+/**
+   \brief calculate the dot product of two vectors
+   \param v: the other vector
+   \return the dot product of the vectors
+*/
+float Vector::operator* (const Vector& v) const
+{
+  return x*v.x+y*v.y+z*v.z;
+}
+
+/**
+   \brief multiply a vector with a float
+   \param f: the factor
+   \return the vector multipied by f
+*/
+Vector Vector::operator* (float f) const
+{  
+  Vector r;
+  
+  r.x = x * f;
+  r.y = y * f;
+  r.z = z * f;
+  
+  return r;
+}
+
+/**
+   \brief divide a vector with a float
+   \param f: the divisor
+   \return the vector divided by f   
+*/
+Vector Vector::operator/ (float f) const
+{
+  Vector r;
+  
+  if( f == 0.0)
+  {
+    // Prevent divide by zero
+    return Vector (0,0,0);
+  }
+  
+  r.x = x / f;
+  r.y = y / f;
+  r.z = z / f;
+  
+  return r;
+}
+
+/**
+   \brief calculate the dot product of two vectors
+   \param v: the other vector
+   \return the dot product of the vectors
+*/
+float Vector::dot (const Vector& v) const
+{
+  return x*v.x+y*v.y+z*v.z;
+}
+
+/**
+  \brief calculate the cross product of two vectors
+  \param v: the other vector
+	\return the cross product of the vectors
+*/
+Vector Vector::cross (const Vector& v) const
+{
+  Vector r;
+  
+  r.x = y * v.z - z * v.y;
+  r.y = z * v.x - x * v.z;
+  r.z = x * v.y - y * v.x;
+  
+  return r;
+}
+  
+/**
+   \brief normalizes the vector to lenght 1.0
+*/
+void Vector::normalize ()
+{
+  float l = len();
+  
+  if( l == 0.0)
+  {
+    // Prevent divide by zero
+    return;
+  }
+  
+  x = x / l;
+  y = y / l;
+  z = z / l;
+}
+
+
+/**
+   \bref returns the voctor normalized to length 1.0
+*/
+
+Vector* Vector::getNormalized()
+{
+  float l = len();
+  if(l != 1.0)
+    {
+      return this;
+    }
+  else if(l == 0.0)
+    {
+      return 0;
+    }
+  
+  Vector *normalizedVector = new Vector(x / l, y /l, z / l);
+  return normalizedVector;
+}
+
+
+void Vector::scale(const Vector& v)
+{
+  x *= v.x;
+  y *= v.y;
+  z *= v.z;
+}
+
+ 
+/**
+   \brief calculates the lenght of the vector
+   \return the lenght of the vector
+*/
+float Vector::len () const
+{
+  return sqrt (x*x+y*y+z*z);
+}
+
+
+
+Vector Vector::abs() 
+{
+  Vector v(fabs(x), fabs(y), fabs(z));
+  return v;
+}
+
+
+/**
+   \brief calculate the angle between two vectors in radiances
+   \param v1: a vector
+   \param v2: another vector
+   \return the angle between the vectors in radians
+*/
+float angleRad (const Vector& v1, const Vector& v2)
+{
+  return acos( v1 * v2 / (v1.len() * v2.len()));
+}
+
+
+/**
+   \brief calculate the angle between two vectors in degrees
+   \param v1: a vector
+   \param v2: another vector
+   \return the angle between the vectors in degrees
+*/
+float angleDeg (const Vector& v1, const Vector& v2)
+{
+  float f;
+  f = acos( v1 * v2 / (v1.len() * v2.len()));
+  return f * 180 / PI;
+}
+
+/**
+	\brief creates a multiplicational identity Quaternion
+*/
+Quaternion::Quaternion ()
+{
+	w = 1;
+	v = Vector(0,0,0);
+}
+
+/**
+	\brief turns a rotation along an axis into a Quaternion
+	\param angle: the amount of radians to rotate
+	\param axis: the axis to rotate around
+*/
+Quaternion::Quaternion (float angle, const Vector& axis)
+{
+	w = cos(angle/2);
+	v = axis * sin(angle/2);
+}
+
+/**
+   \brief calculates a lookAt rotation
+   \param dir: the direction you want to look
+   \param up: specify what direction up should be
+   
+   Mathematically this determines the rotation a (0,0,1)-Vector has to undergo to point
+   the same way as dir. If you want to use this with cameras, you'll have to reverse the
+   dir Vector (Vector(0,0,0) - your viewing direction) or you'll point the wrong way. You
+   can use this for meshes as well (then you do not have to reverse the vector), but keep 
+   in mind that if you do that, the model's front has to point in +z direction, and left 
+   and right should be -x or +x respectively or the mesh wont rotate correctly.
+*/
+Quaternion::Quaternion (const Vector& dir, const Vector& up)
+{
+  Vector z = dir;
+  z.normalize(); 
+  Vector x = up.cross(z);
+  x.normalize(); 
+  Vector y = z.cross(x);
+  
+  float m[4][4];
+  m[0][0] = x.x;
+  m[0][1] = x.y;
+  m[0][2] = x.z;
+  m[0][3] = 0;
+  m[1][0] = y.x;
+  m[1][1] = y.y;
+  m[1][2] = y.z;
+  m[1][3] = 0;
+  m[2][0] = z.x;
+  m[2][1] = z.y;
+  m[2][2] = z.z;
+  m[2][3] = 0;
+  m[3][0] = 0;
+  m[3][1] = 0;
+  m[3][2] = 0;
+  m[3][3] = 1;
+  
+  *this = Quaternion (m);
+}
+
+/**
+	\brief calculates a rotation from euler angles
+	\param roll: the roll in radians
+	\param pitch: the pitch in radians
+	\param yaw: the yaw in radians
+	
+	I DO HONESTLY NOT EXACTLY KNOW WHICH ANGLE REPRESENTS WHICH ROTATION. And I do not know 
+	in what order they are applied,	I just copy-pasted the code.
+*/
+Quaternion::Quaternion (float roll, float pitch, float yaw)
+{
+	float cr, cp, cy, sr, sp, sy, cpcy, spsy;
+	
+	// calculate trig identities
+	cr = cos(roll/2);
+	cp = cos(pitch/2);
+	cy = cos(yaw/2);
+	
+	sr = sin(roll/2);
+	sp = sin(pitch/2);
+	sy = sin(yaw/2);
+	
+	cpcy = cp * cy;
+	spsy = sp * sy;
+	
+	w = cr * cpcy + sr * spsy;
+	v.x = sr * cpcy - cr * spsy;
+	v.y = cr * sp * cy + sr * cp * sy;
+	v.z = cr * cp * sy - sr * sp * cy;
+}
+
+/**
+	\brief rotates one Quaternion by another
+	\param q: another Quaternion to rotate this by
+	\return a quaternion that represents the first one rotated by the second one (WARUNING: this operation is not commutative! e.g. (A*B) != (B*A))
+*/
+Quaternion Quaternion::operator*(const Quaternion& q) const
+{
+	float A, B, C, D, E, F, G, H;
+	Quaternion r;
+	
+	A = (w   + v.x)*(q.w   + q.v.x);
+	B = (v.z - v.y)*(q.v.y - q.v.z);
+	C = (w   - v.x)*(q.v.y + q.v.z); 
+	D = (v.y + v.z)*(q.w   - q.v.x);
+	E = (v.x + v.z)*(q.v.x + q.v.y);
+	F = (v.x - v.z)*(q.v.x - q.v.y);
+	G = (w   + v.y)*(q.w   - q.v.z);
+	H = (w   - v.y)*(q.w   + q.v.z);
+	
+	r.w = B +  (-E - F + G + H)/2;
+	r.v.x = A - (E + F + G + H)/2; 
+	r.v.y = C + (E - F + G - H)/2; 
+	r.v.z = D + (E - F - G + H)/2;
+	
+	return r;
+}
+
+/**
+	\brief add two Quaternions
+	\param q: another Quaternion
+	\return the sum of both Quaternions
+*/
+Quaternion Quaternion::operator+(const Quaternion& q) const
+{
+	Quaternion r(*this);
+	r.w = r.w + q.w;
+	r.v = r.v + q.v;
+	return r;
+}
+
+/**
+	\brief subtract two Quaternions
+	\param q: another Quaternion
+	\return the difference of both Quaternions
+*/
+Quaternion Quaternion::operator- (const Quaternion& q) const
+{
+	Quaternion r(*this);
+	r.w = r.w - q.w;
+	r.v = r.v - q.v;
+	return r;
+}
+
+/**
+	\brief rotate a Vector by a Quaternion
+	\param v: the Vector
+	\return a new Vector representing v rotated by the Quaternion
+*/
+Vector Quaternion::apply (Vector& v) const
+{
+	Quaternion q;
+	q.v = v;
+	q.w = 0;
+	q = *this * q * conjugate();
+	return q.v;
+}
+
+/**
+	\brief multiply a Quaternion with a real value
+	\param f: a real value
+	\return a new Quaternion containing the product
+*/
+Quaternion Quaternion::operator*(const float& f) const
+{
+	Quaternion r(*this);
+	r.w = r.w*f;
+	r.v = r.v*f;
+	return r;
+}
+
+/**
+	\brief divide a Quaternion by a real value
+	\param f: a real value
+	\return a new Quaternion containing the quotient
+*/
+Quaternion Quaternion::operator/(const float& f) const
+{
+	if( f == 0) return Quaternion();
+	Quaternion r(*this);
+	r.w = r.w/f;
+	r.v = r.v/f;
+	return r;
+}
+
+/**
+	\brief calculate the conjugate value of the Quaternion
+	\return the conjugate Quaternion
+*/
+Quaternion Quaternion::conjugate() const
+{
+	Quaternion r(*this);
+	r.v = Vector() - r.v;
+	return r;
+}
+
+/**
+	\brief calculate the norm of the Quaternion
+	\return the norm of The Quaternion
+*/
+float Quaternion::norm() const
+{
+	return w*w + v.x*v.x + v.y*v.y + v.z*v.z;
+}
+
+/**
+	\brief calculate the inverse value of the Quaternion
+	\return the inverse Quaternion
+	
+	Note that this is equal to conjugate() if the Quaternion's norm is 1
+*/
+Quaternion Quaternion::inverse() const
+{
+	float n = norm();
+	if (n != 0)
+	{
+		return conjugate() / norm();
+	}
+	else return Quaternion();
+}
+
+/**
+	\brief convert the Quaternion to a 4x4 rotational glMatrix
+	\param m: a buffer to store the Matrix in
+*/
+void Quaternion::matrix (float m[4][4]) const
+{
+  float wx, wy, wz, xx, yy, yz, xy, xz, zz, x2, y2, z2; 
+  
+  // calculate coefficients
+  x2 = v.x + v.x;
+  y2 = v.y + v.y; 
+  z2 = v.z + v.z;
+  xx = v.x * x2; xy = v.x * y2; xz = v.x * z2;
+  yy = v.y * y2; yz = v.y * z2; zz = v.z * z2;
+  wx = w * x2; wy = w * y2; wz = w * z2;
+  
+  m[0][0] = 1.0 - (yy + zz); m[1][0] = xy - wz;
+  m[2][0] = xz + wy; m[3][0] = 0.0;
+	
+  m[0][1] = xy + wz; m[1][1] = 1.0 - (xx + zz);
+  m[2][1] = yz - wx; m[3][1] = 0.0;
+  
+  m[0][2] = xz - wy; m[1][2] = yz + wx;
+  m[2][2] = 1.0 - (xx + yy); m[3][2] = 0.0;
+  
+  m[0][3] = 0; m[1][3] = 0;
+  m[2][3] = 0; m[3][3] = 1;
+}
+
+
+void Quaternion::quatSlerp(const Quaternion* from, const Quaternion* to, float t, Quaternion* res)
+{
+  float tol[4];
+  double omega, cosom, sinom, scale0, scale1;
+  DELTA = 0.2;
+
+  cosom = from->v.x * to->v.x + from->v.y * to->v.y + from->v.z * to->v.z + from->w * to->w;
+
+  if( cosom < 0.0 ) 
+    { 
+      cosom = -cosom; 
+      tol[0] = -to->v.x;
+      tol[1] = -to->v.y;
+      tol[2] = -to->v.z;
+      tol[3] = -to->w;
+    }
+  else
+    {
+      tol[0] = to->v.x;
+      tol[1] = to->v.y;
+      tol[2] = to->v.z;
+      tol[3] = to->w;
+    }
+  
+  //if( (1.0 - cosom) > DELTA )
+  //{
+      omega = acos(cosom);
+      sinom = sin(omega);
+      scale0 = sin((1.0 - t) * omega) / sinom;
+      scale1 = sin(t * omega) / sinom;
+      //}
+      /*
+  else
+    {
+      scale0 = 1.0 - t;
+      scale1 = t;
+    }
+      */
+  res->v.x = scale0 * from->v.x + scale1 * tol[0];
+  res->v.y = scale0 * from->v.y + scale1 * tol[1];
+  res->v.z = scale0 * from->v.z + scale1 * tol[2];
+  res->w = scale0 * from->w + scale1 * tol[3];
+}
+
+
+/**
+   \brief convert a rotational 4x4 glMatrix into a Quaternion
+   \param m: a 4x4 matrix in glMatrix order
+*/
+Quaternion::Quaternion (float m[4][4])
+{
+	
+  float  tr, s, q[4];
+  int    i, j, k;
+
+  int nxt[3] = {1, 2, 0};
+
+  tr = m[0][0] + m[1][1] + m[2][2];
+
+  	// check the diagonal
+  if (tr > 0.0) 
+  {
+    s = sqrt (tr + 1.0);
+    w = s / 2.0;
+    s = 0.5 / s;
+    v.x = (m[1][2] - m[2][1]) * s;
+    v.y = (m[2][0] - m[0][2]) * s;
+    v.z = (m[0][1] - m[1][0]) * s;
+	} 
+	else 
+	{
+ 		// diagonal is negative
+  	i = 0;
+  	if (m[1][1] > m[0][0]) i = 1;
+    if (m[2][2] > m[i][i]) i = 2;
+    j = nxt[i];
+    k = nxt[j];
+
+    s = sqrt ((m[i][i] - (m[j][j] + m[k][k])) + 1.0);
+      
+    q[i] = s * 0.5;
+            
+    if (s != 0.0) s = 0.5 / s;
+	
+	  q[3] = (m[j][k] - m[k][j]) * s;
+    q[j] = (m[i][j] + m[j][i]) * s;
+    q[k] = (m[i][k] + m[k][i]) * s;
+
+  	v.x = q[0];
+  	v.y = q[1];
+  	v.z = q[2];
+  	w = q[3];
+  }
+}
+
+/**
+   \brief create a rotation from a vector
+   \param v: a vector
+*/
+Rotation::Rotation (const Vector& v)
+{
+  Vector x = Vector( 1, 0, 0);
+  Vector axis = x.cross( v);
+  axis.normalize();
+  float angle = angleRad( x, v);
+  float ca = cos(angle);
+  float sa = sin(angle);
+  m[0] = 1.0f+(1.0f-ca)*(axis.x*axis.x-1.0f);
+  m[1] = -axis.z*sa+(1.0f-ca)*axis.x*axis.y;
+  m[2] = axis.y*sa+(1.0f-ca)*axis.x*axis.z;
+  m[3] = axis.z*sa+(1.0f-ca)*axis.x*axis.y;
+  m[4] = 1.0f+(1.0f-ca)*(axis.y*axis.y-1.0f);
+  m[5] = -axis.x*sa+(1.0f-ca)*axis.y*axis.z;
+  m[6] = -axis.y*sa+(1.0f-ca)*axis.x*axis.z;
+  m[7] = axis.x*sa+(1.0f-ca)*axis.y*axis.z;
+  m[8] = 1.0f+(1.0f-ca)*(axis.z*axis.z-1.0f);
+}
+
+/**
+   \brief creates a rotation from an axis and an angle (radians!)
+   \param axis: the rotational axis
+   \param angle: the angle in radians
+*/
+Rotation::Rotation (const Vector& axis, float angle)
+{
+  float ca, sa;
+  ca = cos(angle);
+  sa = sin(angle);
+  m[0] = 1.0f+(1.0f-ca)*(axis.x*axis.x-1.0f);
+  m[1] = -axis.z*sa+(1.0f-ca)*axis.x*axis.y;
+  m[2] = axis.y*sa+(1.0f-ca)*axis.x*axis.z;
+  m[3] = axis.z*sa+(1.0f-ca)*axis.x*axis.y;
+  m[4] = 1.0f+(1.0f-ca)*(axis.y*axis.y-1.0f);
+  m[5] = -axis.x*sa+(1.0f-ca)*axis.y*axis.z;
+  m[6] = -axis.y*sa+(1.0f-ca)*axis.x*axis.z;
+  m[7] = axis.x*sa+(1.0f-ca)*axis.y*axis.z;
+  m[8] = 1.0f+(1.0f-ca)*(axis.z*axis.z-1.0f);
+}
+
+/**
+   \brief creates a rotation from euler angles (pitch/yaw/roll)
+   \param pitch: rotation around z (in radians)
+   \param yaw: rotation around y (in radians)
+   \param roll: rotation around x (in radians)
+*/
+Rotation::Rotation ( float pitch, float yaw, float roll)
+{
+  float cy, sy, cr, sr, cp, sp;
+  cy = cos(yaw);
+  sy = sin(yaw);
+  cr = cos(roll);
+  sr = sin(roll);
+  cp = cos(pitch);
+  sp = sin(pitch);
+  m[0] = cy*cr;
+  m[1] = -cy*sr;
+  m[2] = sy;
+  m[3] = cp*sr+sp*sy*cr;
+  m[4] = cp*cr-sp*sr*sy;
+  m[5] = -sp*cy;
+  m[6] = sp*sr-cp*sy*cr;
+  m[7] = sp*cr+cp*sy*sr;
+  m[8] = cp*cy;
+}
+
+/**
+   \brief creates a nullrotation (an identity rotation)
+*/
+Rotation::Rotation ()
+{
+  m[0] = 1.0f;
+  m[1] = 0.0f;
+  m[2] = 0.0f;
+  m[3] = 0.0f;
+  m[4] = 1.0f;
+  m[5] = 0.0f;
+  m[6] = 0.0f;
+  m[7] = 0.0f;
+  m[8] = 1.0f;
+}
+
+/**
+   \brief fills the specified buffer with a 4x4 glmatrix
+   \param buffer: Pointer to an array of 16 floats
+   
+   Use this to get the rotation in a gl-compatible format
+*/
+void Rotation::glmatrix (float* buffer)
+{
+	buffer[0] = m[0];
+	buffer[1] = m[3];
+	buffer[2] = m[6];
+	buffer[3] = m[0];
+	buffer[4] = m[1];
+	buffer[5] = m[4];
+	buffer[6] = m[7];
+	buffer[7] = m[0];
+	buffer[8] = m[2];
+	buffer[9] = m[5];
+	buffer[10] = m[8];
+	buffer[11] = m[0];
+	buffer[12] = m[0];
+	buffer[13] = m[0];
+	buffer[14] = m[0];
+	buffer[15] = m[1];
+}
+
+/**
+   \brief multiplies two rotational matrices
+   \param r: another Rotation
+   \return the matrix product of the Rotations
+   
+   Use this to rotate one rotation by another
+*/
+Rotation Rotation::operator* (const Rotation& r)
+{
+	Rotation p;
+	
+	p.m[0] = m[0]*r.m[0] + m[1]*r.m[3] + m[2]*r.m[6];
+	p.m[1] = m[0]*r.m[1] + m[1]*r.m[4] + m[2]*r.m[7];
+	p.m[2] = m[0]*r.m[2] + m[1]*r.m[5] + m[2]*r.m[8];
+	
+	p.m[3] = m[3]*r.m[0] + m[4]*r.m[3] + m[5]*r.m[6];
+	p.m[4] = m[3]*r.m[1] + m[4]*r.m[4] + m[5]*r.m[7];
+	p.m[5] = m[3]*r.m[2] + m[4]*r.m[5] + m[5]*r.m[8];
+
+	p.m[6] = m[6]*r.m[0] + m[7]*r.m[3] + m[8]*r.m[6];
+	p.m[7] = m[6]*r.m[1] + m[7]*r.m[4] + m[8]*r.m[7];
+	p.m[8] = m[6]*r.m[2] + m[7]*r.m[5] + m[8]*r.m[8];
+	
+	return p;
+}
+
+
+/**
+   \brief rotates the vector by the given rotation
+   \param v: a vector
+   \param r: a rotation
+   \return the rotated vector
+*/
+Vector rotateVector( const Vector& v, const Rotation& r)
+{
+  Vector t;
+  
+  t.x = v.x * r.m[0] + v.y * r.m[1] + v.z * r.m[2];
+  t.y = v.x * r.m[3] + v.y * r.m[4] + v.z * r.m[5];
+  t.z = v.x * r.m[6] + v.y * r.m[7] + v.z * r.m[8];
+
+  return t;
+}
+
+/**
+   \brief calculate the distance between two lines
+   \param l: the other line
+   \return the distance between the lines
+*/
+float Line::distance (const Line& l) const
+{
+  float q, d;
+  Vector n = a.cross(l.a);
+  q = n.dot(r-l.r);
+  d = n.len();
+  if( d == 0.0) return 0.0;
+  return q/d;
+}
+
+/**
+   \brief calculate the distance between a line and a point
+   \param v: the point
+   \return the distance between the Line and the point
+*/
+float Line::distancePoint (const Vector& v) const
+{
+  Vector d = v-r;
+  Vector u = a * d.dot( a);
+  return (d - u).len();
+}
+
+/**
+   \brief calculate the two points of minimal distance of two lines
+   \param l: the other line
+   \return a Vector[2] (!has to be deleted after use!) containing the two points of minimal distance
+*/
+Vector* Line::footpoints (const Line& l) const
+{
+  Vector* fp = new Vector[2];
+  Plane p = Plane (r + a.cross(l.a), r, r + a);
+  fp[1] = p.intersectLine (l);
+  p = Plane (fp[1], l.a);
+  fp[0] = p.intersectLine (*this);
+  return fp;
+}
+
+/**
+  \brief calculate the length of a line
+  \return the lenght of the line 
+*/
+float Line::len() const
+{
+  return a.len();
+}
+
+/**
+   \brief rotate the line by given rotation
+   \param rot: a rotation
+*/
+void Line::rotate (const Rotation& rot)
+{
+  Vector t = a + r;
+  t = rotateVector( t, rot);
+  r = rotateVector( r, rot),
+  a = t - r;
+}
+
+/**
+   \brief create a plane from three points
+   \param a: first point
+   \param b: second point
+   \param c: third point
+*/
+Plane::Plane (Vector a, Vector b, Vector c)
+{
+  n = (a-b).cross(c-b);
+  k = -(n.x*b.x+n.y*b.y+n.z*b.z);
+}
+
+/**
+   \brief create a plane from anchor point and normal
+   \param n: normal vector
+   \param p: anchor point
+*/
+Plane::Plane (Vector norm, Vector p)
+{
+  n = norm;
+  k = -(n.x*p.x+n.y*p.y+n.z*p.z);
+}
+
+/**
+   \brief returns the intersection point between the plane and a line
+   \param l: a line
+*/
+Vector Plane::intersectLine (const Line& l) const
+{
+  if (n.x*l.a.x+n.y*l.a.y+n.z*l.a.z == 0.0) return Vector(0,0,0);
+  float t = (n.x*l.r.x+n.y*l.r.y+n.z*l.r.z+k) / (n.x*l.a.x+n.y*l.a.y+n.z*l.a.z);
+  return l.r + (l.a * t);
+}
+
+/**
+   \brief returns the distance between the plane and a point
+   \param p: a Point
+   \return the distance between the plane and the point (can be negative)
+*/
+float Plane::distancePoint (const Vector& p) const
+{
+  float l = n.len();
+  if( l == 0.0) return 0.0;
+  return (n.dot(p) + k) / n.len();
+}
+
+/**
+   \brief returns the side a point is located relative to a Plane
+   \param p: a Point
+   \return 0 if the point is contained within the Plane, positive(negative) if the point is in the positive(negative) semi-space of the Plane
+*/
+float Plane::locatePoint (const Vector& p) const
+{
+  return (n.dot(p) + k);
+}
+
Index: /orxonox/branches/levelloader/src/vector.h
===================================================================
--- /orxonox/branches/levelloader/src/vector.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/vector.h	(revision 3417)
@@ -0,0 +1,151 @@
+/*! 
+    \file vector.h
+    \brief A basic 3D math framework
+    
+    Contains classes to handle vectors, lines, rotations and planes
+*/ 
+
+#ifndef _VECTOR_H
+#define _VECTOR_H
+
+#include <math.h>
+#define PI 3.14159265359f
+
+//! 3D Vector
+/**
+	Class to handle 3D Vectors
+*/
+class Vector {
+
+  public:
+ 
+  float x, y, z;
+
+  Vector (float x, float y, float z) : x(x), y(y), z(z) {}  //!< assignment constructor
+  Vector () : x(0), y(0), z(0) {}
+  ~Vector () {}
+
+  Vector operator+ (const Vector& v) const;
+  Vector operator- (const Vector& v) const;
+  float operator* (const Vector& v) const;
+  Vector operator* (float f) const;
+  Vector operator/ (float f) const;
+  float dot (const Vector& v) const;
+  Vector cross (const Vector& v) const;
+  void scale(const Vector& v);
+  float len() const;
+  void normalize();
+  Vector* getNormalized();
+  Vector abs();
+};
+
+float angleDeg (const Vector& v1, const Vector& v2);
+float angleRad (const Vector& v1, const Vector& v2);
+
+//! Quaternion
+/**
+	Class to handle 3-dimensional rotation efficiently
+*/
+class Quaternion
+{
+ public:
+	Vector v;	//!< Imaginary Vector
+	float w; //!< Real part of the number
+
+ 	Quaternion ();
+ 	Quaternion (float m[4][4]);
+ 	Quaternion (float angle, const Vector& axis);
+ 	Quaternion (const Vector& dir, const Vector& up);
+ 	Quaternion (float roll, float pitch, float yaw);
+ 	
+ 	Quaternion operator/ (const float& f) const;
+ 	Quaternion operator* (const float& f) const;
+ 	Quaternion operator* (const Quaternion& q) const;
+	Quaternion operator+ (const Quaternion& q) const;
+	Quaternion operator- (const Quaternion& q) const;
+	Quaternion conjugate () const;
+	Quaternion inverse () const;
+ 	Vector apply (Vector& f) const;
+	float norm () const;
+	void matrix (float m[4][4]) const;
+	void quatSlerp(const Quaternion* from, const Quaternion* to, const float t, Quaternion* res);
+
+ private:
+	float DELTA;
+
+};
+
+//! 3D rotation (OBSOLETE)
+/**
+  Class to handle 3-dimensional rotations.
+  Can create a rotation from several inputs, currently stores rotation using a 3x3 Matrix
+*/
+class Rotation {
+  public:
+  
+  float m[9]; //!< 3x3 Rotation Matrix
+  
+  Rotation ( const Vector& v);
+  Rotation ( const Vector& axis, float angle);
+  Rotation ( float pitch, float yaw, float roll);
+  Rotation ();
+  ~Rotation () {}
+  
+  Rotation operator* (const Rotation& r);
+  
+  void glmatrix (float* buffer);
+};
+
+//!< Apply a rotation to a vector
+Vector rotateVector( const Vector& v, const Rotation& r);
+
+//! 3D line
+/**
+  Class to store Lines in 3-dimensional space
+
+  Supports line-to-line distance measurements and rotation
+*/
+class Line
+{
+  public:
+  
+  Vector r;   //!< Offset
+  Vector a;   //!< Direction
+  
+  Line ( Vector r, Vector a) : r(r), a(a) {}  //!< assignment constructor
+  Line () : r(Vector(0,0,0)), a(Vector (1,1,1)) {}
+  ~Line () {}
+  
+  float distance (const Line& l) const;
+  float distancePoint (const Vector& v) const;
+  Vector* footpoints (const Line& l) const;
+  float len () const;
+  
+  void rotate(const Rotation& rot);
+};
+
+//! 3D plane
+/**
+  Class to handle planes in 3-dimensional space
+  
+  Critical for polygon-based collision detection
+*/
+class Plane
+{
+  public:
+  
+  Vector n;   //!< Normal vector
+  float k;    //!< Offset constant
+  
+  Plane (Vector a, Vector b, Vector c);
+  Plane (Vector norm, Vector p);
+  Plane (Vector n, float k) : n(n), k(k) {} //!< assignment constructor
+  Plane () : n(Vector(1,1,1)), k(0) {}
+  ~Plane () {}
+  
+  Vector intersectLine (const Line& l) const;
+  float distancePoint (const Vector& p) const;
+  float locatePoint (const Vector& p) const;
+};
+
+#endif /* _VECTOR_H */
Index: /orxonox/branches/levelloader/src/world.cc
===================================================================
--- /orxonox/branches/levelloader/src/world.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/world.cc	(revision 3417)
@@ -0,0 +1,996 @@
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Patrick Boenzli
+   co-programmer: Christian Meyer
+*/
+
+#include "world.h"
+#include "world_entity.h"
+#include "collision.h"
+#include "track_manager.h"
+#include "track.h"
+#include "player.h"
+#include "command_node.h"
+#include "camera.h"
+#include "environment.h"
+#include "p_node.h"
+#include "null_parent.h"
+#include "helper_parent.h"
+#include "glmenu_imagescreen.h"
+
+using namespace std;
+
+
+/** 
+    \brief create a new World
+    
+    This creates a new empty world!
+*/
+World::World (char* name)
+{
+  this->setClassName ("World");
+  this->worldName = name;
+  this->debugWorldNr = -1;
+  this->entities = new tList<WorldEntity>();
+}
+
+World::World (int worldID)
+{
+  this->debugWorldNr = worldID;
+  this->worldName = NULL;
+  this->entities = new tList<WorldEntity>();
+}
+
+/** 
+    \brief remove the World from memory
+    
+    delete everything explicitly, that isn't contained in the parenting tree!
+    things contained in the tree are deleted automaticaly
+*/
+World::~World ()
+{
+  printf("World::~World() - deleting current world\n");
+  CommandNode* cn = Orxonox::getInstance()->getLocalInput();
+  cn->unbind(this->localPlayer);
+  cn->reset();
+  this->localCamera->destroy();
+
+  this->nullParent->destroy ();
+
+  //delete this->trackManager;
+
+  /*
+  WorldEntity* entity = entities->enumerate();  
+  while( entity != NULL ) 
+    { 
+      entity->destroy();
+      entity = entities->nextElement();
+    }
+  this->entities->destroy();
+  */
+
+  /* FIX the parent list has to be cleared - not possible if we got the old list also*/
+
+
+  //delete this->entities;
+  //delete this->localCamera;
+  /* this->localPlayer hasn't to be deleted explicitly, it is 
+     contained in entities*/
+}
+
+GLfloat ctrlpoints[4][3] = {
+  {20.0, 10.0, 5.0}, {40.0, -10.0, 0.0},
+  {60.0, -10.0, 5.0}, {80.0, 10.0, 5.0}};
+
+
+ErrorMessage World::init()
+{
+  this->bPause = false;
+  CommandNode* cn = Orxonox::getInstance()->getLocalInput();
+  cn->addToWorld(this);
+  cn->enable(true);
+
+  //glMap1f (GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ctrlpoints[0][0]);
+  //glEnable (GL_MAP1_VERTEX_3);
+  
+  //theNurb = gluNewNurbsRenderer ();
+  //gluNurbsProperty (theNurb, GLU_NURBS_MODE, GLU_NURBS_TESSELLATOR);
+  //gluNurbsProperty (theNurb, GLU_NURBS_VERTEX, vertexCallback );
+
+}
+
+
+
+ErrorMessage World::start()
+{
+  printf("World::start() - starting current World: nr %i\n", this->debugWorldNr);
+  this->bQuitOrxonox = false;
+  this->bQuitCurrentGame = false;
+  this->mainLoop();
+}
+
+ErrorMessage World::stop()
+{
+  printf("World::stop() - got stop signal\n");
+  this->bQuitCurrentGame = true;
+}
+
+ErrorMessage World::pause()
+{
+  this->isPaused = true;
+}
+
+
+ErrorMessage World::resume()
+{
+  this->isPaused = false;
+}
+
+
+void World::destroy()
+{
+}
+
+
+void World::displayLoadScreen ()
+{
+  printf ("World::displayLoadScreen - start\n"); 
+  
+  //GLMenuImageScreen* 
+  this->glmis = new GLMenuImageScreen();
+  this->glmis->init();
+  this->glmis->setMaximum(10);
+  this->glmis->draw();
+ 
+  printf ("World::displayLoadScreen - end\n"); 
+}
+
+
+void World::releaseLoadScreen ()
+{
+  printf ("World::releaseLoadScreen - start\n"); 
+  this->glmis->setValue(this->glmis->getMaximum());
+  SDL_Delay(500);
+  printf ("World::releaseLoadScreen - end\n"); 
+}
+
+
+void World::load()
+{
+  //  BezierCurve* tmpCurve = new BezierCurve();
+  if(this->debugWorldNr != -1)
+    {
+      trackManager = TrackManager::getInstance();
+      trackManager->addPoint(Vector(0,-5,0));
+      trackManager->addPoint(Vector(10,0,5));
+      trackManager->addPoint(Vector(20,0,-5));
+      trackManager->addPoint(Vector(30,0,5));
+      trackManager->addPoint(Vector(40,0,5));
+      trackManager->setDuration(.5);
+      trackManager->setSavePoint();
+      trackManager->addPoint(Vector(50,10,10));
+      trackManager->addPoint(Vector(60,0, 10));
+      trackManager->addPoint(Vector(70,0, 10));
+      trackManager->addPoint(Vector(80,0,-10));
+      trackManager->addPoint(Vector(90,0,-10));
+      trackManager->setDuration(.5);
+      trackManager->setSavePoint();
+      trackManager->addPoint(Vector(110,0,5));
+      trackManager->addPoint(Vector(120,0, 10));
+      trackManager->addPoint(Vector(130,0, 10));
+      trackManager->addPoint(Vector(140,0,-10));
+      trackManager->addPoint(Vector(150,0,-10));
+      trackManager->setDuration(.5);
+      int fork11, fork12, fork13, fork14;
+      trackManager->fork(4, &fork11, &fork12, &fork13, &fork14);
+      trackManager->workOn(fork11);
+      trackManager->addPoint(Vector(170, 0, -15));
+      trackManager->addPoint(Vector(180, 0, -15));
+      trackManager->workOn(fork12);
+      trackManager->addPoint(Vector(170, 0, 10));
+      trackManager->addPoint(Vector(180, 0, 10));
+      trackManager->addPoint(Vector(190,2,5));
+      trackManager->addPoint(Vector(200,2,5));
+      int fork21, fork22;
+      trackManager->fork(2, &fork21, &fork22);
+      trackManager->workOn(fork21);
+      trackManager->addPoint(Vector(220, 10,-10));
+      trackManager->addPoint(Vector(230, 0,-10));
+      trackManager->addPoint(Vector(240, 0, 2));
+      trackManager->addPoint(Vector(250, 0, 0));
+      trackManager->addPoint(Vector(260, 0, 5));
+      trackManager->join(2, fork12, fork11);
+      trackManager->workOn(fork22);
+      trackManager->addPoint(Vector(220, -10,10));
+      trackManager->addPoint(Vector(230, 0, 10));
+      trackManager->addPoint(Vector(240, 0, 10));
+      trackManager->addPoint(Vector(250, 0, 5));
+      trackManager->workOn(fork13);
+      trackManager->addPoint(Vector(200,-10,5));
+      trackManager->addPoint(Vector(250,-10,5));
+      printf("fork14: %d\n", fork14);
+      trackManager->workOn(fork14);
+      trackManager->addPoint(Vector(200,15,0));
+      trackManager->addPoint(Vector(210,0,10));
+
+
+
+      trackManager->join(4, fork21, fork22, fork13, fork14);
+
+      /*monitor progress*/
+      this->glmis->step();
+
+      /*
+      tmpCurve->addNode(Vector(10,0,-10));
+      //tmpCurve->addNode(Vector(10,2,5));
+      //tmpCurve->addNode(Vector(10,3,-5));
+      //      tmpCurve->addNode(Vector(10,1,5));
+      tmpCurve->addNode(Vector(10,0,5));
+      */
+      switch(this->debugWorldNr)
+	{
+	  /*
+	    this loads the hard-coded debug world. this only for simplicity and will be 
+	    removed by a reald world-loader, which interprets a world-file.
+	    if you want to add an own debug world, just add a case DEBUG_WORLD_[nr] and
+	    make whatever you want...
+	   */
+	case DEBUG_WORLD_0:
+	  {
+	    this->nullParent = NullParent::getInstance ();
+	    this->nullParent->setName ("NullParent");
+
+	    // create some path nodes
+	    this->pathnodes = new Vector[6];
+	    this->pathnodes[0] = Vector(0, 0, 0);
+	    this->pathnodes[1] = Vector(1000, 0, 0);
+	    //	    this->pathnodes[2] = Vector(-100, 140, 0);
+	    //	    this->pathnodes[3] = Vector(0, 180, 0);
+	    //	    this->pathnodes[4] = Vector(100, 140, 0);
+	    //	    this->pathnodes[5] = Vector(100, 40, 0);
+	    
+	    // create the tracks
+	    this->tracklen = 2;
+	    this->track = new Track[2];
+	    for( int i = 0; i < this->tracklen; i++)
+	      {
+		this->track[i] = Track( i, (i+1)%this->tracklen, &this->pathnodes[i], &this->pathnodes[(i+1)%this->tracklen]);
+	      }
+	    // !\todo old track-system has to be removed
+
+	    //create helper for player
+	    HelperParent* hp = new HelperParent ();
+	    /* the player has to be added to this helper */
+
+	    // create a player
+	    WorldEntity* myPlayer = new Player ();
+	    myPlayer->setName ("player");
+	    this->spawn (myPlayer);
+	    this->localPlayer = myPlayer;
+
+	    /*monitor progress*/
+	    this->glmis->step();	    
+
+	    // bind input
+	    Orxonox *orx = Orxonox::getInstance ();
+	    orx->getLocalInput()->bind (myPlayer);
+	    
+	    // bind camera
+	    this->localCamera = new Camera(this);
+	    this->localCamera->setName ("camera");
+	    this->getCamera()->bind (myPlayer);
+	    this->localPlayer->addChild (this->localCamera);
+
+	    /*monitor progress*/
+	    this->glmis->step();
+
+	    Vector* es = new Vector (50, 2, 0);
+	    Quaternion* qs = new Quaternion ();
+	    WorldEntity* env = new Environment();
+	    env->setName ("env");
+	    this->spawn(env, es, qs);
+	   
+	    /*monitor progress*/
+	    this->glmis->step();
+
+	    break;
+	  }
+	case DEBUG_WORLD_1:
+	  {
+	    /*
+	    this->testCurve = new UPointCurve();
+	    this->testCurve->addNode(Vector( 0, 0, 0));
+	    this->testCurve->addNode(Vector(10, 0, 5));
+	    this->testCurve->addNode(Vector(20, -5,-5));
+	    this->testCurve->addNode(Vector(30, 5, 10));
+	    this->testCurve->addNode(Vector(40, 0,-10));
+	    this->testCurve->addNode(Vector(50, 0,-10));
+	    */
+
+	    this->nullParent = NullParent::getInstance ();
+	    this->nullParent->setName ("NullParent");
+
+	    // create some path nodes
+	    this->pathnodes = new Vector[6];
+	    this->pathnodes[0] = Vector(0, 0, 0);
+	    this->pathnodes[1] = Vector(20, 10, 10);
+	    this->pathnodes[2] = Vector(40, 0, 10);
+	    this->pathnodes[3] = Vector(60, 10, 0);
+	    this->pathnodes[4] = Vector(80, 20, 10);
+	    this->pathnodes[5] = Vector(30, 50, 0);
+	    
+
+
+
+	    // create the tracks
+	    this->tracklen = 6;
+	    this->track = new Track[6];
+	    for( int i = 0; i < this->tracklen; i++)
+	      {
+		this->track[i] = Track( i, (i+1)%this->tracklen, &this->pathnodes[i], &this->pathnodes[(i+1)%this->tracklen]);
+	      }
+
+	    // create a player
+	    WorldEntity* myPlayer = new Player();
+	    myPlayer->setName ("player");
+	    this->spawn(myPlayer);
+	    this->localPlayer = myPlayer;	    
+	    
+	    // bind input
+	    Orxonox *orx = Orxonox::getInstance();
+	    orx->getLocalInput()->bind (myPlayer);
+	    
+	    // bind camera
+	    this->localCamera = new Camera (this);
+	    this->localCamera->setName ("camera");
+	    this->getCamera()->bind (myPlayer);	
+	    this->localPlayer->addChild (this->localCamera);
+	    break;
+	  }
+	default:
+	  printf("World::load() - no world with ID %i found", this->debugWorldNr );
+	}
+    }
+  else if(this->worldName != NULL)
+    {
+
+    }
+
+  // initialize debug coord system
+  objectList = glGenLists(1);
+  glNewList (objectList, GL_COMPILE);
+  glLoadIdentity();
+  glColor3f(1.0,0,0);
+  glBegin(GL_QUADS);
+
+  int sizeX = 100;
+  int sizeZ = 80;
+  float length = 1000;
+  float width = 200;
+  float widthX = float (length /sizeX);
+  float widthZ = float (width /sizeZ);
+  
+  float height [sizeX][sizeZ];
+  Vector normal_vectors[sizeX][sizeZ];
+  
+  
+  for ( int i = 0; i<sizeX-1; i+=1)
+    for (int j = 0; j<sizeZ-1;j+=1)
+      //height[i][j] = rand()/20046 + (j-25)*(j-25)/30;
+#ifdef __WIN32__
+      height[i][j]=(sin((float)j/3)*rand()*i/182400)*.5;
+#else
+      height[i][j]=(sin((float)j/3)*rand()*(long)i/6282450500.0)*.5;
+#endif
+
+  //Die Huegel ein wenig glaetten
+  for (int h=1; h<2;h++)
+    for (int i=1;i<sizeX-2 ;i+=1 )
+      for(int j=1;j<sizeZ-2;j+=1)
+	height[i][j]=(height[i+1][j]+height[i][j+1]+height[i-1][j]+height[i][j-1])/4;
+  
+  //Berechnung von normalen Vektoren
+  for(int i=1;i<sizeX-2;i+=1)
+    for(int j=1;j<sizeZ-2 ;j+=1)
+      {
+	Vector v1 = Vector (widthX*(1),      height[i][j],      widthZ*(j) );
+	Vector v2 = Vector (widthX*(i-1),    height[i-1][j],    widthZ*(j));
+	Vector v3 = Vector (widthX*(i),      height[i][j+1],    widthZ*(j+1));
+	Vector v4 = Vector (widthX*(i+1),    height[i+1][j],    widthZ*(j));
+	Vector v5 = Vector (widthX*(i),      height[i][j-1],    widthZ*(j-1));
+	
+	Vector c1 = v2 - v1;
+	Vector c2 = v3 - v1;
+	Vector c3=  v4 - v1;
+	Vector c4 = v5 - v1;
+	Vector zero = Vector (0,0,0);
+	normal_vectors[i][j]=c1.cross(v3-v5)+c2.cross(v4-v2)+c3.cross(v5-v3)+c4.cross(v2-v4);
+	normal_vectors[i][j].normalize();
+      }
+
+  int snowheight=3;
+  for ( int i = 0; i<sizeX; i+=1)
+    for (int j = 0; j<sizeZ;j+=1)
+      {	  
+	Vector v1 = Vector (widthX*(i),      height[i][j]-20,       widthZ*(j)  -width/2);
+	Vector v2 = Vector (widthX*(i+1),    height[i+1][j]-20,     widthZ*(j)  -width/2);
+	Vector v3 = Vector (widthX*(i+1),    height[i+1][j+1]-20,   widthZ*(j+1)-width/2);
+	Vector v4 = Vector (widthX*(i),      height[i][j+1]-20,     widthZ*(j+1)-width/2);
+	float a[3];
+	if(height[i][j]<snowheight){
+	  a[0]=0;
+	  a[1]=1.0-height[i][j]/10-.3;
+	  a[2]=0;
+	  glMaterialfv(GL_FRONT,GL_DIFFUSE,a);
+	}
+	else{
+	    a[0]=1.0;
+	    a[1]=1.0;
+	    a[2]=1.0;
+	    glMaterialfv(GL_FRONT,GL_DIFFUSE,a);
+	    
+	}
+	glNormal3f(normal_vectors[i][j].x, normal_vectors[i][j].y, normal_vectors[i][j].z);
+	glVertex3f(v1.x, v1.y, v1.z);
+	if(height[i+1][j]<snowheight){
+	  a[0]=0;
+	  a[1] =1.0-height[i+1][j]/10-.3;
+	  a[2]=0;
+	  glMaterialfv(GL_FRONT,GL_DIFFUSE,a);
+	}
+	else{
+	  a[0]=1.0;
+	  a[1]=1.0;
+	  a[2]=1.0;
+	  glMaterialfv(GL_FRONT,GL_DIFFUSE,a);
+	  
+	}
+	glNormal3f(normal_vectors[i+1][j].x, normal_vectors[i+1][j].y, normal_vectors[i+1][j].z);
+	glVertex3f(v2.x, v2.y, v2.z);
+	if(height[i+1][j+1]<snowheight){
+	  a[0]=0;
+	  a[1] =1.0-height[i+1][j+1]/10-.3;
+	  a[2]=0;
+	  glMaterialfv(GL_FRONT,GL_DIFFUSE,a);
+	}
+	else{
+	  a[0]=1.0;
+	  a[1]=1.0;
+	  a[2]=1.0;
+	  glMaterialfv(GL_FRONT,GL_DIFFUSE,a);
+	  
+	  
+	}
+	glNormal3f(normal_vectors[i+1][j+1].x, normal_vectors[i+1][j+1].y, normal_vectors[i+1][j+1].z);
+	glVertex3f(v3.x, v3.y, v3.z);
+	if(height[i][j+1]<snowheight){
+	  a[0]=0;
+	  a[1] =1.0-height[i+1][j+1]/10-.3;
+	  a[2]=0;
+	  glMaterialfv(GL_FRONT,GL_DIFFUSE,a);
+	}
+	else{
+	  a[0]=1.0;
+	  a[1]=1.0;
+	  a[2]=1.0;
+	  glMaterialfv(GL_FRONT,GL_DIFFUSE,a);
+	}
+	glNormal3f(normal_vectors[i][j+1].x, normal_vectors[i][j+1].y, normal_vectors[i][j+1].z);
+	glVertex3f(v4.x, v4.y, v4.z);
+	
+      }
+  glEnd();
+  /*  
+  glBegin(GL_LINES);
+  for( float x = -128.0; x < 128.0; x += 25.0)
+    {
+      for( float y = -128.0; y < 128.0; y += 25.0)
+	{
+	  glColor3f(1,0,0);
+	  glVertex3f(x,y,-128.0);
+	  glVertex3f(x,y,0.0);
+	  glColor3f(0.5,0,0);
+	  glVertex3f(x,y,0.0);
+	  glVertex3f(x,y,128.0);
+	}
+    }
+  for( float y = -128.0; y < 128.0; y += 25.0)
+    {
+      for( float z = -128.0; z < 128.0; z += 25.0)
+	{
+	  glColor3f(0,1,0);
+	  glVertex3f(-128.0,y,z);
+	  glVertex3f(0.0,y,z);
+	  glColor3f(0,0.5,0);
+	  glVertex3f(0.0,y,z);
+	  glVertex3f(128.0,y,z);
+	}
+    }
+  for( float x = -128.0; x < 128.0; x += 25.0)
+    {
+      for( float z = -128.0; z < 128.0; z += 25.0)
+	{
+	  glColor3f(0,0,1);
+	  glVertex3f(x,-128.0,z);
+	  glVertex3f(x,0.0,z);
+	  glColor3f(0,0,0.5);
+	  glVertex3f(x,0.0,z);
+	  glVertex3f(x,128.0,z);
+	}
+      
+    }
+  */  
+  //draw track
+  glBegin(GL_LINES);
+  glColor3f(0.0, 1.0, 1.0);
+  for( int i = 0; i < tracklen; i++)
+    {
+      glVertex3f(pathnodes[i].x,pathnodes[i].y,pathnodes[i].z);
+      glVertex3f(pathnodes[(i+1)%tracklen].x,pathnodes[(i+1)%tracklen].y,pathnodes[(i+1)%tracklen].z);
+    }
+  glEnd();
+  
+  /*
+  glBegin(GL_LINE_STRIP);
+  glColor3f(1.0, 5.0, 1.0);
+  for( int i = 0; i <= 30; i++)
+    {
+      glEvalCoord1f ((GLfloat) i/30.0);
+    }
+  glEnd();
+  */
+
+  trackManager->drawGraph(.01);
+  trackManager->debug(2);
+  delete trackManager;
+  
+  /*
+  glBegin(GL_LINES);
+  float i;
+  for(i = 0.0; i<1; i+=.01)
+    {
+      printf("%f, %f, %f\n",tmpCurve->calcPos(i).x, tmpCurve->calcPos(i).y, tmpCurve->calcPos(i).z);
+      glVertex3f(tmpCurve->calcPos(i).x, tmpCurve->calcPos(i).y, tmpCurve->calcPos(i).z);
+    }
+  glEnd();
+  */
+  glEndList();
+}
+
+
+/** 
+    \brief checks for collisions
+    
+    This method runs through all WorldEntities known to the world and checks for collisions 
+    between them. In case of collisions the collide() method of the corresponding entities 
+    is called.
+*/
+void World::collide ()
+{
+  /*
+  List *a, *b;
+  WorldEntity *aobj, *bobj;
+   
+  a = entities;
+  
+  while( a != NULL)
+    {
+      aobj = a->nextElement();
+      if( aobj->bCollide && aobj->collisioncluster != NULL)
+	{
+	  b = a->nextElement();
+	  while( b != NULL )
+	    {
+	      bobj = b->nextElement();
+	      if( bobj->bCollide && bobj->collisioncluster != NULL )
+		{
+		  unsigned long ahitflg, bhitflg;
+		  if( check_collision ( &aobj->place, aobj->collisioncluster, 
+					&ahitflg, &bobj->place, bobj->collisioncluster, 
+					&bhitflg) );
+		  {
+		    aobj->collide (bobj, ahitflg, bhitflg);
+		    bobj->collide (aobj, bhitflg, ahitflg);
+		  }
+		}
+	      b = b->nextElement();
+	    }
+	}
+      a = a->enumerate();
+    }
+  */
+}
+
+/** 
+    \brief runs through all entities calling their draw() methods
+*/
+void World::draw ()
+{
+  // draw entities
+  WorldEntity* entity;
+  entity = this->entities->enumerate();
+  while( entity != NULL ) 
+    { 
+      if( entity->bDraw ) entity->draw();
+      entity = this->entities->nextElement();
+    } 
+  
+  //glmis = new GLMenuImageScreen();
+  ///glmis->init();
+
+  // draw debug coord system
+  glCallList (objectList);
+
+}
+
+/** 
+    \brief updates Placements and notifies entities when they left the 
+    world
+    
+    This runs trough all WorldEntities and maps Locations to Placements 
+    if they are bound, checks whether they left the level boundaries 
+    and calls appropriate functions.
+*/
+void World::update ()
+{
+  /*
+  //List<WorldEntity> *l;
+  WorldEntity* entity;
+  Location* loc;
+  Placement* plc;
+  Uint32 t;
+  
+  //  l = entities->enumerate(); 
+  entity = this->entities->enumerate();
+  while( entity != NULL ) 
+    { 
+
+      
+      if( !entity->isFree() )
+	{
+	  loc = entity->getLocation();
+	  plc = entity->getPlacement();
+	  t = loc->part;
+	  
+	  if( t >= tracklen )
+	    {
+	      printf("An entity is out of the game area\n");
+	      entity->leftWorld ();
+	    }
+	  else
+	    {
+	      while( track[t].mapCoords( loc, plc) )
+		{
+		  track[t].postLeave (entity);
+		  if( loc->part >= tracklen )
+		    {
+		      printf("An entity has left the game area\n");
+		      entity->leftWorld ();
+		      break;
+		    }
+		  track[loc->part].postEnter (entity);
+		}
+	    }
+	}
+      else
+	{
+	}
+      
+      entity = entities->nextElement();
+    }
+  */  
+}
+
+/** 
+    \brief relays the passed time since the last frame to entities and Track parts
+    \param deltaT: the time passed since the last frame in milliseconds
+*/
+void World::timeSlice (Uint32 deltaT)
+{
+  //List<WorldEntity> *l;
+  WorldEntity* entity;
+  float seconds = deltaT / 1000.0;
+  
+  this->nullParent->update (seconds);
+  //this->nullParent->processTick (seconds);
+
+  entity = entities->enumerate(); 
+  while( entity != NULL) 
+    { 
+      entity->tick (seconds);
+      entity = entities->nextElement();
+    }
+
+  //for( int i = 0; i < tracklen; i++) track[i].tick (seconds);
+}
+
+/**
+   \brief removes level data from memory
+*/
+void World::unload()
+{
+  if( pathnodes) delete []pathnodes;
+  if( track) delete []pathnodes;
+}
+
+
+void World::setTrackLen(Uint32 len)
+{
+  this->tracklen = len;
+}
+
+int World::getTrackLen()
+{
+  return this->tracklen;
+}
+
+
+
+/**
+   \brief function to put your own debug stuff into it. it can display informations about
+   the current class/procedure
+*/
+void World::debug()
+{
+  printf ("World::debug() - starting debug\n");
+  PNode* p1 = NullParent::getInstance ();
+  PNode* p2 = new PNode (new Vector(2, 2, 2), p1);
+  PNode* p3 = new PNode (new Vector(4, 4, 4), p1);
+  PNode* p4 = new PNode (new Vector(6, 6, 6), p2);
+
+  p1->debug ();
+  p2->debug ();
+  p3->debug ();
+  p4->debug ();
+
+  p1->shiftCoor (new Vector(-1, -1, -1));
+
+  printf("World::debug() - shift\n");
+  p1->debug ();
+  p2->debug ();
+  p3->debug ();
+  p4->debug ();
+  
+  p1->update (1);
+
+  printf ("World::debug() - update\n");
+  p1->debug ();
+  p2->debug ();
+  p3->debug ();
+  p4->debug ();
+
+  p2->shiftCoor (new Vector(-1, -1, -1));
+  p1->update (2);
+
+  p1->debug ();
+  p2->debug ();
+  p3->debug ();
+  p4->debug ();
+
+  p2->setAbsCoor (new Vector(1,2,3));
+
+
+ p1->update (2);
+
+  p1->debug ();
+  p2->debug ();
+  p3->debug ();
+  p4->debug ();
+
+  p1->destroy ();
+  
+  
+  /*
+  WorldEntity* entity;
+  printf("counting all entities\n");
+  printf("World::debug() - enumerate()\n");
+  entity = entities->enumerate();  
+  while( entity != NULL ) 
+    { 
+      if( entity->bDraw ) printf("got an entity\n");
+      entity = entities->nextElement();
+    }
+  */
+}
+
+
+/*
+  \brief main loop of the world: executing all world relevant function
+
+  in this loop we synchronize (if networked), handle input events, give the heart-beat to
+  all other member-entities of the world (tick to player, enemies etc.), checking for
+  collisions drawing everything to the screen.
+*/
+void World::mainLoop()
+{
+  this->lastFrame = SDL_GetTicks ();
+  printf("World::mainLoop() - Entering main loop\n");
+  while( !this->bQuitOrxonox && !this->bQuitCurrentGame) /* \todo implement pause */
+    {
+      // Network
+      this->synchronize ();
+      // Process input
+      this->handleInput ();
+      if( this->bQuitCurrentGame || this->bQuitOrxonox)
+	{
+	  printf("World::mainLoop() - leaving loop earlier...\n");
+	  break;
+	}
+      // Process time
+      this->timeSlice ();
+      // Process collision
+      this->collision ();
+      // Draw
+      this->display ();
+  
+      for( int i = 0; i < 5000000; i++) {}
+      /* \todo this is to slow down the program for openGl Software emulator computers, reimplement*/
+    }
+  printf("World::mainLoop() - Exiting the main loop\n");
+}
+
+/**
+   \brief synchronize local data with remote data
+*/
+void World::synchronize ()
+{
+  // Get remote input
+  // Update synchronizables
+}
+
+/**
+   \brief run all input processing
+
+   the command node is the central input event dispatcher. the node uses the even-queue from
+   sdl and has its own event-passing-queue.
+*/
+void World::handleInput ()
+{
+  // localinput
+  CommandNode* cn = Orxonox::getInstance()->getLocalInput();
+  cn->process();
+  // remoteinput
+}
+
+/**
+   \brief advance the timeline
+
+   this calculates the time used to process one frame (with all input handling, drawing, etc)
+   the time is mesured in ms and passed to all world-entities and other classes that need
+   a heart-beat.
+*/
+void World::timeSlice ()
+{
+  Uint32 currentFrame = SDL_GetTicks();
+  if(!this->bPause)
+    {
+      Uint32 dt = currentFrame - this->lastFrame;
+      
+      if(dt > 0)
+	{
+	  float fps = 1000/dt;
+	  printf("fps = %f\n", fps);
+	}
+      else
+	{
+	  /* the frame-rate is limited to 100 frames per second, all other things are for
+	     nothing.
+	  */
+	  printf("fps = 1000 - frame rate is adjusted\n");
+	  SDL_Delay(10);
+	  dt = 10;
+	}
+      this->timeSlice (dt);
+      this->update ();
+      this->localCamera->timeSlice(dt);
+    }
+  this->lastFrame = currentFrame;
+}
+
+
+/**
+   \brief compute collision detection
+*/
+void World::collision ()
+{
+  this->collide ();
+}
+
+
+/**
+   \brief render the current frame
+   
+   clear all buffers and draw the world
+*/
+void World::display ()
+{
+  // clear buffer
+  glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
+  // set camera
+  this->localCamera->apply ();
+  // draw world
+  this->draw();
+  // draw HUD
+  /* \todo draw HUD */
+  // flip buffers
+  SDL_GL_SwapBuffers();
+  //SDL_Surface* screen = Orxonox::getInstance()->getScreen ();
+  //SDL_Flip (screen);
+}
+
+/**
+   \brief give back active camera
+   
+   this passes back the actualy active camera
+   \todo ability to define more than one camera or camera-places
+*/
+Camera* World::getCamera()
+{
+  return this->localCamera;
+}
+
+
+/**
+   \brief add and spawn a new entity to this world
+   \param entity to be added
+*/
+void World::spawn(WorldEntity* entity)
+{
+  if( this->nullParent != NULL && entity->parent == NULL)
+    this->nullParent->addChild (entity);
+
+  this->entities->add (entity);
+
+  entity->postSpawn ();
+}
+
+
+/**
+   \brief add and spawn a new entity to this world
+   \param entity to be added
+   \param location where to add
+*/
+void World::spawn(WorldEntity* entity, Vector* absCoor, Quaternion* absDir)
+{
+  entity->setAbsCoor (absCoor);
+  entity->setAbsDir (absDir);
+  
+  if( this->nullParent != NULL && entity->parent == NULL)
+    this->nullParent->addChild (entity);
+
+  this->entities->add (entity);
+
+  entity->postSpawn ();
+}
+
+
+
+/*
+  \brief commands that the world must catch
+  \returns false if not used by the world
+*/
+bool World::command(Command* cmd)
+{
+  return false;
+}
+
+
+
+
+void World::swap (unsigned char &a, unsigned char &b)
+{
+  unsigned char temp;
+  temp = a;
+  a    = b;
+  b    = temp;
+}
Index: /orxonox/branches/levelloader/src/world.h
===================================================================
--- /orxonox/branches/levelloader/src/world.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/world.h	(revision 3417)
@@ -0,0 +1,97 @@
+/*! 
+    \file world.h
+    \brief Holds and manages all game data
+*/ 
+
+#ifndef _WORLD_H
+#define _WORLD_H
+
+#include "stdincl.h"
+#include "story_entity.h"
+
+
+class TrackManager;
+class Track;
+class WorldEntity;
+class Camera;
+class PNode;
+class GLMenuImageScreen;
+
+//! The game environment
+class World : public StoryEntity {
+
+ public:
+  World (char* name);
+  World (int worldID);
+  virtual ~World ();
+  
+  virtual ErrorMessage init ();
+  virtual ErrorMessage start ();
+  virtual ErrorMessage stop ();
+  virtual ErrorMessage pause ();
+  virtual ErrorMessage resume ();
+
+  virtual void load ();
+  virtual void destroy ();
+
+  //static void vertexCallback (GLfloat* vertex);
+
+  void timeSlice (Uint32 deltaT);
+  void collide ();
+  void draw ();
+  void update ();	// maps Locations to Placements
+  //void calcCameraPos (Location* loc, Placement* plc);
+	
+  void unload ();
+  bool command (Command* cmd);
+  virtual void displayLoadScreen();
+  virtual void releaseLoadScreen();
+  
+  void setTrackLen (Uint32 tracklen);
+  int getTrackLen ();
+  //bool system_command (Command* cmd);
+  Camera* getCamera ();
+
+  void spawn (WorldEntity* entity);
+  void spawn (WorldEntity* entity, Vector* absCoor, Quaternion* absDir);
+
+  tList<WorldEntity>* entities;
+  
+  // base level data
+  TrackManager* trackManager;
+  Track* track;
+  Uint32 tracklen;   // number of Tracks the World consist of
+  Vector* pathnodes;
+  Camera* localCamera;  
+
+
+  UPointCurve* testCurve;
+ private:
+  Uint32 lastFrame; //!> last time of frame
+  bool bQuitOrxonox; //!> quit this application
+  bool bQuitCurrentGame; //!> quit only the current game and return to menu
+  bool bPause;
+
+  GLMenuImageScreen* glmis;
+
+  char* worldName;
+  int debugWorldNr;
+  GLuint objectList;
+  SDL_Surface *loadImage;
+
+  WorldEntity* localPlayer;
+ 
+  PNode* nullParent;
+ 
+  void mainLoop ();
+  void synchronize ();
+  void handleInput ();
+  void timeSlice ();
+  void collision ();
+  void display ();
+  void debug ();
+
+  void swap (unsigned char &a, unsigned char &b); /* \todo: this function doesn't belong here, this should be part of a image class*/
+};
+
+#endif /* _WORLD_H */
Index: /orxonox/branches/levelloader/src/world_entity.cc
===================================================================
--- /orxonox/branches/levelloader/src/world_entity.cc	(revision 3417)
+++ /orxonox/branches/levelloader/src/world_entity.cc	(revision 3417)
@@ -0,0 +1,204 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Patrick Boenzli
+   co-programmer: Christian Meyer
+*/
+
+#include <iostream>
+
+#include "world_entity.h"
+#include "stdincl.h"
+#include "collision.h"
+
+using namespace std;
+
+/**
+   \brief standard constructor
+   
+   Every derived contructor HAS to call the previous one supplying the isFree parameter. This is necessary to distunguish
+   between free and bound entities. The difference between them is simply the fact that the movement of a free entity is
+   not bound to the track of a world. Use this to implement projectile or effect classes that do not have to travel along the track.
+   To specify an entity to be free or bound set the default parameter in the declaration of the constructor.
+   Theoretically you should never have to call the constructor of an Entity directly, for it is called by the spawn() function of the World
+   class. So if you want to create a new entity at any time, call World::spawn(). It will handle everything that is necessary.
+*/
+WorldEntity::WorldEntity (bool isFree) : bFree(isFree)
+{
+  this->setClassName ("WorldEntity");
+  this->bDraw = true;
+  collisioncluster = NULL;
+}
+
+/**
+   \brief standard destructor
+*/
+WorldEntity::~WorldEntity ()
+{
+  if( collisioncluster != NULL) delete collisioncluster;
+}
+
+/**
+   \brief get the Location of the WorldEntity
+   \return a pointer to location
+*/
+/*PN
+Location* WorldEntity::getLocation ()
+{
+  return &loc;
+}
+*/
+
+/**
+   \brief get the Placement of the WorldEntity
+   \return a pointer to placement
+*/
+ /*PN
+Placement* WorldEntity::getPlacement ()
+{
+  return &place;
+}
+ */
+/**
+   \brief query whether the WorldEntity in question is free
+   \return true if the WorldEntity is free or false if it isn't
+*/
+bool WorldEntity::isFree ()
+{
+  return bFree;
+}
+
+/**
+   \brief set the WorldEntity's collision hull
+   \param newhull: a pointer to a completely assembled CollisionCluster
+   
+   Any previously assigned collision hull will be deleted on reassignment
+*/
+void WorldEntity::setCollision (CollisionCluster* newhull)
+{
+  if( newhull == NULL) return;
+  if( collisioncluster != NULL) delete collisioncluster;
+  collisioncluster = newhull;
+}
+
+
+/**
+   \brief this method is called every frame
+   \param time: the time in seconds that has passed since the last tick
+   
+   Handle all stuff that should update with time inside this method (movement, animation, etc.)
+*/
+void WorldEntity::tick(float time) 
+{
+}
+
+
+/** 
+    \brief process draw function 
+*/
+void WorldEntity::processDraw ()
+{
+  this->draw ();
+  PNode* pn = this->children->enumerate ();
+  while( pn != NULL) 
+    { 
+      ((WorldEntity*)pn)->processDraw ();
+      pn = this->children->nextElement();
+    } 
+}
+
+
+void WorldEntity::setDrawable (bool bDraw)
+{
+  this->bDraw = bDraw;
+}
+
+
+/**
+   \brief the entity is drawn onto the screen with this function
+   
+   This is a central function of an entity: call it to let the entity painted to the screen. Just override this function with whatever you want to be drawn.
+*/
+void WorldEntity::draw() 
+{}
+
+/**
+   \brief this function is called, when two entities collide
+   \param other: the world entity with whom it collides
+   \param ownhitflags: flags to the CollisionCluster subsections that registered an impact
+   \param otherhitflags: flags to the CollisionCluster subsections of the other entity that registered an impact
+
+   Implement behaviour like damage application or other miscellaneous collision stuff in this function
+*/
+void WorldEntity::collide(WorldEntity* other, Uint32 ownhitflags, Uint32 otherhitflags) {}
+
+/**
+   \brief this function is called, when the ship is hit by a waepon
+   \param weapon: the laser/rocket/shoot that hits.
+   \param loc: place where it is hit
+
+   calculate the damage depending
+*/
+void WorldEntity::hit(WorldEntity* weapon, Vector loc) {}
+
+/**
+   \brief this function is called when the entity is to be destroied
+   
+   This can be called, if eg. something realy bad happens :)
+*/
+void WorldEntity::destroy() {}
+
+
+/**
+   \brief this is called immediately after the Entity has been constructed and initialized
+   
+   Put any initialisation code that requires knowledge of location (placement if the Entity is free) and owner of the entity here.
+   DO NOT place such code in the constructor, those variables are set AFTER the entity is constucted.
+*/
+void WorldEntity::postSpawn ()
+{
+}
+
+/**
+   \brief this handles incoming command messages
+   \param cmd: a pointer to the incoming Command structure
+   
+   Put all code that handles Command messages here, this will mainly be called by the assigned CommandNode but can also be used
+   to send commands from one WorldEntity to another.
+*/
+void WorldEntity::command (Command* cmd)
+{
+}
+
+/**
+   \brief this is called by the local Camera to determine the point it should look at on the WorldEntity
+   \param locbuf: a pointer to the buffer to fill with a location to look at
+	
+   You may put any Location you want into locbuf, the Camera will determine via the corresponding Track how
+   to look at the location you return with this.
+*/
+/*PN
+void WorldEntity::getLookat (Location* locbuf)
+{
+}
+*/
+
+/**
+   \brief this method is called by the world if the WorldEntity leaves valid gamespace
+   
+   For free entities this means it left the Track boundaries. With bound entities it means its Location adresses a
+   place that is not in the world anymore. In both cases you might have to take extreme measures (a.k.a. call destroy).
+*/
+void WorldEntity::leftWorld ()
+{
+}
Index: /orxonox/branches/levelloader/src/world_entity.h
===================================================================
--- /orxonox/branches/levelloader/src/world_entity.h	(revision 3417)
+++ /orxonox/branches/levelloader/src/world_entity.h	(revision 3417)
@@ -0,0 +1,54 @@
+/*! 
+    \file world_entity.h
+    \brief Definition of the basic WorldEntity
+*/
+
+#ifndef _WORLD_ENTITY_H
+#define _WORLD_ENTITY_H
+
+#include "stdincl.h"
+#include "p_node.h"
+
+class CollisionCluster;
+class OBJModel;
+
+//! Basic class from which all interactive stuff in the world is derived from
+class WorldEntity : public PNode
+{	
+  friend class World;
+
+ public:
+  WorldEntity (bool isFree = false);
+  virtual ~WorldEntity ();
+
+  OBJModel* model;
+  
+  void setCollision (CollisionCluster* newhull);
+  
+  bool isFree ();
+  
+  //void addAbility(Ability* ability);
+  //void removeAbility(Ability* ability);
+  
+  virtual void postSpawn ();
+  virtual void tick (float time);
+  virtual void hit (WorldEntity* weapon, Vector loc);
+  virtual void destroy ();
+  virtual void collide (WorldEntity* other,  Uint32 ownhitflags, Uint32 otherhitflags);
+  virtual void command (Command* cmd);
+
+  void processDraw ();
+  virtual void draw ();
+  void setDrawable (bool bDraw);
+  
+  virtual void leftWorld ();
+  
+ private:
+  const bool bFree;	
+  bool bCollide;
+  bool bDraw;
+
+  CollisionCluster* collisioncluster;
+};
+
+#endif /* _WORLD_ENTITY_H */
