diff --git a/.gitattributes b/.gitattributes index 8e948c5..d6564fa 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,65 @@ * text=auto !eol +freeglut/freeglut/AUTHORS svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/COPYING svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/ChangeLog svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/INSTALL svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/Makefile.am svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/NEWS svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/README svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/TODO svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/acconfig.h svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/aclocal.m4 svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/configure svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/configure.in svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/freeglut-1.3/Makefile.am svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/freeglut-1.3/freeglut_callbacks.c svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/freeglut-1.3/freeglut_cursor.c svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/freeglut-1.3/freeglut_display.c svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/freeglut-1.3/freeglut_font.c svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/freeglut-1.3/freeglut_font_data.c svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/freeglut-1.3/freeglut_gamemode.c svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/freeglut-1.3/freeglut_geometry.c svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/freeglut-1.3/freeglut_init.c svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/freeglut-1.3/freeglut_joystick.c svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/freeglut-1.3/freeglut_main.c svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/freeglut-1.3/freeglut_menu.c svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/freeglut-1.3/freeglut_misc.c svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/freeglut-1.3/freeglut_overlay.c svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/freeglut-1.3/freeglut_state.c svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/freeglut-1.3/freeglut_structure.c svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/freeglut-1.3/freeglut_teapot.c svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/freeglut-1.3/freeglut_videoresize.c svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/freeglut-1.3/freeglut_window.c svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/freeglut-1.3/templates/cpp_template svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/freeglut-1.3/templates/header_template svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/freeglut.dsw svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/freeglut.kdevprj svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/freeglut.lsm svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/freeglut13.dsp svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/freeglut13.plg svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/genfonts/.deps/genfonts.P svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/genfonts/.deps/genstroke.P svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/genfonts/Makefile svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/genfonts/Makefile.am svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/genfonts/Makefile.in svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/genfonts/Roman.src svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/genfonts/Roman_M.src svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/genfonts/genfonts.c svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/genfonts/genstroke.c svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/include/GL/Makefile svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/include/GL/Makefile.am svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/include/GL/Makefile.in svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/include/GL/freeglut.h svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/include/GL/freeglut_internal.h svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/include/Makefile svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/include/Makefile.am svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/include/Makefile.in svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/install-sh svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/mkinstalldirs svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/stamp-h svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/stamp-h.in svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/tests/.deps/one.P svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/tests/Makefile svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/tests/Makefile.am svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/tests/Makefile.in svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/tests/one.c svn_keywords=Author+Date+Id+Revision diff --git a/freeglut/freeglut/AUTHORS b/freeglut/freeglut/AUTHORS new file mode 100644 index 0000000..8ec7c08 --- /dev/null +++ b/freeglut/freeglut/AUTHORS @@ -0,0 +1,13 @@ + +Pawel W. Olszta + the person to be blamed for freeglut + +Andreas Umbach + the first person to contribute to the freeglut project, + contributed the cube and sphere geometry code + +Steve Baker + joystick code (from his great PLIB), numerous hints + and tips on the freeglut usability + +...and all the opengl-gamedev-l people that made me to start this project :) diff --git a/freeglut/freeglut/COPYING b/freeglut/freeglut/COPYING new file mode 100644 index 0000000..fc36ad9 --- /dev/null +++ b/freeglut/freeglut/COPYING @@ -0,0 +1,27 @@ + + Freeglut Copyright + ------------------ + + Freeglut code without an explicit copyright is covered by the following + copyright: + + Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved. + 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 or substantial portions of the Software. + + 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 + PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + Except as contained in this notice, the name of Pawel W. Olszta shall not be + used in advertising or otherwise to promote the sale, use or other dealings + in this Software without prior written authorization from Pawel W. Olszta. diff --git a/freeglut/freeglut/ChangeLog b/freeglut/freeglut/ChangeLog new file mode 100644 index 0000000..e69de29 diff --git a/freeglut/freeglut/INSTALL b/freeglut/freeglut/INSTALL new file mode 100644 index 0000000..02a4a07 --- /dev/null +++ b/freeglut/freeglut/INSTALL @@ -0,0 +1,167 @@ +Basic Installation +================== + + These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, a file +`config.cache' that saves the results of its tests to speed up +reconfiguring, and a file `config.log' containing compiler output +(useful mainly for debugging `configure'). + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If at some point `config.cache' +contains results you don't want to keep, you may remove or edit it. + + The file `configure.in' is used to create `configure' by a program +called `autoconf'. You only need `configure.in' if you want to change +it or regenerate `configure' using a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes a while. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Type `make install' to install the programs and any data files and + documentation. + + 4. You can remove the program binaries and object files from the + source code directory by typing `make clean'. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. You can give `configure' +initial values for variables by setting them in the environment. Using +a Bourne-compatible shell, you can do that on the command line like +this: + CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure + +Or on systems that have the `env' program, you can do it like this: + env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not supports the `VPATH' +variable, you have to compile the package for one architecture at a time +in the source code directory. After you have installed the package for +one architecture, use `make distclean' before reconfiguring for another +architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' can not figure out +automatically, but needs to determine by the type of host the package +will run on. Usually `configure' can figure that out, but if it prints +a message saying it can not guess the host type, give it the +`--host=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name with three fields: + CPU-COMPANY-SYSTEM + +See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the host type. + + If you are building compiler tools for cross-compiling, you can also +use the `--target=TYPE' option to select the type of system they will +produce code for and the `--build=TYPE' option to select the type of +system on which you are compiling the package. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Operation Controls +================== + + `configure' recognizes the following options to control how it +operates. + +`--cache-file=FILE' + Use and save the results of the tests in FILE instead of + `./config.cache'. Set FILE to `/dev/null' to disable caching, for + debugging `configure'. + +`--help' + Print a summary of the options to `configure', and exit. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--version' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`configure' also accepts some other, not widely useful, options. + diff --git a/freeglut/freeglut/Makefile.am b/freeglut/freeglut/Makefile.am new file mode 100644 index 0000000..2c25549 --- /dev/null +++ b/freeglut/freeglut/Makefile.am @@ -0,0 +1,7 @@ +## Process this file with automake to produce makefile.im + +SUBDIRS = freeglut-1.3 include genfonts tests +AUTOMAKE_OPTIONS = gnu + +EXTRA_DIST = AUTHORS COPYING ChangeLog INSTALL NEWS README TODO freeglut.lsm \ + freeglut.kdevprj diff --git a/freeglut/freeglut/NEWS b/freeglut/freeglut/NEWS new file mode 100644 index 0000000..a6054fd --- /dev/null +++ b/freeglut/freeglut/NEWS @@ -0,0 +1,11 @@ + +Jan 16th 2000: + + First really functional release of freeglut. + + +Jan 13th 2001: + + Steve Baker takes over as maintainer of freeglut. + + diff --git a/freeglut/freeglut/README b/freeglut/freeglut/README new file mode 100644 index 0000000..268201e --- /dev/null +++ b/freeglut/freeglut/README @@ -0,0 +1,80 @@ + + BRIEF OVERVIEW + ============== + + This is an alpha release of the freeglut package. Currently only + the alpha version of freeglut-1.3 library is available. + + Freeglut, the Free openGL Utility Toolkit, is meant to be a free alter- + native to Mark Kilgard's GLUT library. It is distributed under an X-Consor- + tium style license (see COPYING for details), to offer you a chance to use + and/or modify the source. + + It makes use of OpenGL, GLU, GLib and pthreads-win32 libraries. GLib is + LGPL'ed and I hope I do not violate it's license by using it. In case this + is true, please notify me so that I remove GLib usage from the project. + + The library does not make use of any GLUT code and is not 100% compatible. + Code recompilation and/or slight modifications might be required for your + applications to work with freeglut. + + + PORTS + ===== + + Both X11 and Win32 ports are in an advanced alpha stage, which means that + they provide limited functionality of GLUT API 3. There is an investigation + en course to check if the BeOS port could be easily done using the current + freeglut structure. + + + INSTALLATION + ============ + + See the INSTALL file. + + + CONTRIBUTING + ============ + + Bug and missing features patches are certainly welcome. Just as comments + and FREEGLUT API 1 propositions are. + + Just please to make the fixes look visually just as the rest of the code + does (tabs converted 4 white spaces). Comments are really welcome, as I + believe it would be nice for people fresh new to OpenGL see how the things + are done... + + + WEB SITE AND CONTACTING THE AUTHOR + ================================== + + Freeglut project has moved to the SourceForge: + http://freeglut.sourceforge.net + + + THE HOPE + ======== + + Hope you find my work somehow useful. + Pawel W. Olszta, + + + PASSING THE BATON + ================= + + In late December 2000, Pawel decided that he no longer + wished to maintain freeglut because he has moved out of + the graphics field. I volunteered to take over from him + and have been running the project since Jan 13th 2001. + + I'm also the author and maintainer of the PLIB library suite + and 'freeglut' really fits in well with that work. + + I just hope I can live up to Pawel's high standards. Pawel + remains on the active developers list. + + Steve Baker + http://plib.sourceforge.net + + diff --git a/freeglut/freeglut/TODO b/freeglut/freeglut/TODO new file mode 100644 index 0000000..78c15b4 --- /dev/null +++ b/freeglut/freeglut/TODO @@ -0,0 +1,3 @@ + + The up-to-date TODO list can be found under following URL: + http://freeglut.sourceforge.net/progress.html diff --git a/freeglut/freeglut/acconfig.h b/freeglut/freeglut/acconfig.h new file mode 100644 index 0000000..0a38b07 --- /dev/null +++ b/freeglut/freeglut/acconfig.h @@ -0,0 +1,9 @@ +/* Define if the C compiler supports BOOL */ +#undef HAVE_BOOL + +#undef VERSION + +#undef PACKAGE + +/* Define if you need the GNU extensions to compile */ +#undef _GNU_SOURCE diff --git a/freeglut/freeglut/aclocal.m4 b/freeglut/freeglut/aclocal.m4 new file mode 100644 index 0000000..228d0f5 --- /dev/null +++ b/freeglut/freeglut/aclocal.m4 @@ -0,0 +1,536 @@ +dnl aclocal.m4 generated automatically by aclocal 1.4 + +dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without +dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A +dnl PARTICULAR PURPOSE. + +# Do all the work for Automake. This macro actually does too much -- +# some checks are only needed if your package does certain things. +# But this isn't really a big deal. + +# serial 1 + +dnl Usage: +dnl AM_INIT_AUTOMAKE(package,version, [no-define]) + +AC_DEFUN(AM_INIT_AUTOMAKE, +[AC_REQUIRE([AC_PROG_INSTALL]) +PACKAGE=[$1] +AC_SUBST(PACKAGE) +VERSION=[$2] +AC_SUBST(VERSION) +dnl test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +fi +ifelse([$3],, +AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) +AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])) +AC_REQUIRE([AM_SANITY_CHECK]) +AC_REQUIRE([AC_ARG_PROGRAM]) +dnl FIXME This is truly gross. +missing_dir=`cd $ac_aux_dir && pwd` +AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir) +AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir) +AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir) +AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir) +AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir) +AC_REQUIRE([AC_PROG_MAKE_SET])]) + +# +# Check to make sure that the build environment is sane. +# + +AC_DEFUN(AM_SANITY_CHECK, +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftestfile +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` + if test "[$]*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftestfile` + fi + if test "[$]*" != "X $srcdir/configure conftestfile" \ + && test "[$]*" != "X conftestfile $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "[$]2" = conftestfile + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +rm -f conftest* +AC_MSG_RESULT(yes)]) + +dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY) +dnl The program must properly implement --version. +AC_DEFUN(AM_MISSING_PROG, +[AC_MSG_CHECKING(for working $2) +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if ($2 --version) < /dev/null > /dev/null 2>&1; then + $1=$2 + AC_MSG_RESULT(found) +else + $1="$3/missing $2" + AC_MSG_RESULT(missing) +fi +AC_SUBST($1)]) + +# Like AC_CONFIG_HEADER, but automatically create stamp file. + +AC_DEFUN(AM_CONFIG_HEADER, +[AC_PREREQ([2.12]) +AC_CONFIG_HEADER([$1]) +dnl When config.status generates a header, we must update the stamp-h file. +dnl This file resides in the same directory as the config header +dnl that is generated. We must strip everything past the first ":", +dnl and everything past the last "/". +AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl +ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>, +<>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>, +<>; do + case " <<$>>CONFIG_HEADERS " in + *" <<$>>am_file "*<<)>> + echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx + ;; + esac + am_indx=`expr "<<$>>am_indx" + 1` +done<<>>dnl>>) +changequote([,]))]) + + +# serial 40 AC_PROG_LIBTOOL +AC_DEFUN(AC_PROG_LIBTOOL, +[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl + +# Save cache, so that ltconfig can load it +AC_CACHE_SAVE + +# Actually configure libtool. ac_aux_dir is where install-sh is found. +CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \ +LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \ +LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \ +DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \ +${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \ +$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $lt_target \ +|| AC_MSG_ERROR([libtool configure failed]) + +# Reload cache, that may have been modified by ltconfig +AC_CACHE_LOAD + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +# Redirect the config.log output again, so that the ltconfig log is not +# clobbered by the next message. +exec 5>>./config.log +]) + +AC_DEFUN(AC_LIBTOOL_SETUP, +[AC_PREREQ(2.13)dnl +AC_REQUIRE([AC_ENABLE_SHARED])dnl +AC_REQUIRE([AC_ENABLE_STATIC])dnl +AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([AC_PROG_RANLIB])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_LD])dnl +AC_REQUIRE([AC_PROG_NM])dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +dnl + +case "$target" in +NONE) lt_target="$host" ;; +*) lt_target="$target" ;; +esac + +# Check for any special flags to pass to ltconfig. +libtool_flags="--cache-file=$cache_file" +test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared" +test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static" +test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install" +test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc" +test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" +ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN], +[libtool_flags="$libtool_flags --enable-dlopen"]) +ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL], +[libtool_flags="$libtool_flags --enable-win32-dll"]) +AC_ARG_ENABLE(libtool-lock, + [ --disable-libtool-lock avoid locking (might break parallel builds)]) +test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock" +test x"$silent" = xyes && libtool_flags="$libtool_flags --silent" + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case "$lt_target" in +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line __oline__ "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case "`/usr/bin/file conftest.o`" in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; + +ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL], +[*-*-cygwin* | *-*-mingw*) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +]) +esac +]) + +# AC_LIBTOOL_DLOPEN - enable checks for dlopen support +AC_DEFUN(AC_LIBTOOL_DLOPEN, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])]) + +# AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's +AC_DEFUN(AC_LIBTOOL_WIN32_DLL, [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])]) + +# AC_ENABLE_SHARED - implement the --enable-shared flag +# Usage: AC_ENABLE_SHARED[(DEFAULT)] +# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to +# `yes'. +AC_DEFUN(AC_ENABLE_SHARED, [dnl +define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE(shared, +changequote(<<, >>)dnl +<< --enable-shared[=PKGS] build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT], +changequote([, ])dnl +[p=${PACKAGE-default} +case "$enableval" in +yes) enable_shared=yes ;; +no) enable_shared=no ;; +*) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," + for pkg in $enableval; do + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$ac_save_ifs" + ;; +esac], +enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl +]) + +# AC_DISABLE_SHARED - set the default shared flag to --disable-shared +AC_DEFUN(AC_DISABLE_SHARED, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_SHARED(no)]) + +# AC_ENABLE_STATIC - implement the --enable-static flag +# Usage: AC_ENABLE_STATIC[(DEFAULT)] +# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to +# `yes'. +AC_DEFUN(AC_ENABLE_STATIC, [dnl +define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE(static, +changequote(<<, >>)dnl +<< --enable-static[=PKGS] build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT], +changequote([, ])dnl +[p=${PACKAGE-default} +case "$enableval" in +yes) enable_static=yes ;; +no) enable_static=no ;; +*) + enable_static=no + # Look at the argument we got. We use all the common list separators. + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," + for pkg in $enableval; do + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$ac_save_ifs" + ;; +esac], +enable_static=AC_ENABLE_STATIC_DEFAULT)dnl +]) + +# AC_DISABLE_STATIC - set the default static flag to --disable-static +AC_DEFUN(AC_DISABLE_STATIC, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_STATIC(no)]) + + +# AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag +# Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)] +# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to +# `yes'. +AC_DEFUN(AC_ENABLE_FAST_INSTALL, [dnl +define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE(fast-install, +changequote(<<, >>)dnl +<< --enable-fast-install[=PKGS] optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT], +changequote([, ])dnl +[p=${PACKAGE-default} +case "$enableval" in +yes) enable_fast_install=yes ;; +no) enable_fast_install=no ;; +*) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," + for pkg in $enableval; do + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$ac_save_ifs" + ;; +esac], +enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl +]) + +# AC_ENABLE_FAST_INSTALL - set the default to --disable-fast-install +AC_DEFUN(AC_DISABLE_FAST_INSTALL, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_FAST_INSTALL(no)]) + +# AC_PROG_LD - find the path to the GNU or non-GNU linker +AC_DEFUN(AC_PROG_LD, +[AC_ARG_WITH(gnu-ld, +[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], +test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +ac_prog=ld +if test "$ac_cv_prog_gcc" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by GCC]) + ac_prog=`($CC -print-prog-name=ld) 2>&5` + case "$ac_prog" in + # Accept absolute paths. +changequote(,)dnl + [\\/]* | [A-Za-z]:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' +changequote([,])dnl + # Canonicalize the path of ld + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(ac_cv_path_LD, +[if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + ac_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then + test "$with_gnu_ld" != no && break + else + test "$with_gnu_ld" != yes && break + fi + fi + done + IFS="$ac_save_ifs" +else + ac_cv_path_LD="$LD" # Let the user override the test with a path. +fi]) +LD="$ac_cv_path_LD" +if test -n "$LD"; then + AC_MSG_RESULT($LD) +else + AC_MSG_RESULT(no) +fi +test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) +AC_PROG_LD_GNU +]) + +AC_DEFUN(AC_PROG_LD_GNU, +[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], ac_cv_prog_gnu_ld, +[# I'd rather use --version here, but apparently some GNU ld's only accept -v. +if $LD -v 2>&1 &5; then + ac_cv_prog_gnu_ld=yes +else + ac_cv_prog_gnu_ld=no +fi]) +]) + +# AC_PROG_NM - find the path to a BSD-compatible name lister +AC_DEFUN(AC_PROG_NM, +[AC_MSG_CHECKING([for BSD-compatible nm]) +AC_CACHE_VAL(ac_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + ac_cv_path_NM="$NM" +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + ac_cv_path_NM="$ac_dir/nm -B" + break + elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + ac_cv_path_NM="$ac_dir/nm -p" + break + else + ac_cv_path_NM=${ac_cv_path_NM="$ac_dir/nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm +fi]) +NM="$ac_cv_path_NM" +AC_MSG_RESULT([$NM]) +]) + +# AC_CHECK_LIBM - check for math library +AC_DEFUN(AC_CHECK_LIBM, +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case "$lt_target" in +*-*-beos* | *-*-cygwin*) + # These system don't have libm + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, main, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, main, LIBM="-lm") + ;; +esac +]) + +# AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for +# the libltdl convenience library, adds --enable-ltdl-convenience to +# the configure arguments. Note that LIBLTDL is not AC_SUBSTed, nor +# is AC_CONFIG_SUBDIRS called. If DIR is not provided, it is assumed +# to be `${top_builddir}/libltdl'. Make sure you start DIR with +# '${top_builddir}/' (note the single quotes!) if your package is not +# flat, and, if you're not using automake, define top_builddir as +# appropriate in the Makefiles. +AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + case "$enable_ltdl_convenience" in + no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; + "") enable_ltdl_convenience=yes + ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; + esac + LIBLTDL=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdlc.la + INCLTDL=ifelse($#,1,-I$1,['-I${top_builddir}/libltdl']) +]) + +# AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for +# the libltdl installable library, and adds --enable-ltdl-install to +# the configure arguments. Note that LIBLTDL is not AC_SUBSTed, nor +# is AC_CONFIG_SUBDIRS called. If DIR is not provided, it is assumed +# to be `${top_builddir}/libltdl'. Make sure you start DIR with +# '${top_builddir}/' (note the single quotes!) if your package is not +# flat, and, if you're not using automake, define top_builddir as +# appropriate in the Makefiles. +# In the future, this macro may have to be called after AC_PROG_LIBTOOL. +AC_DEFUN(AC_LIBLTDL_INSTALLABLE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + AC_CHECK_LIB(ltdl, main, + [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], + [if test x"$enable_ltdl_install" = xno; then + AC_MSG_WARN([libltdl not installed, but installation disabled]) + else + enable_ltdl_install=yes + fi + ]) + if test x"$enable_ltdl_install" = x"yes"; then + ac_configure_args="$ac_configure_args --enable-ltdl-install" + LIBLTDL=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdl.la + INCLTDL=ifelse($#,1,-I$1,['-I${top_builddir}/libltdl']) + else + ac_configure_args="$ac_configure_args --enable-ltdl-install=no" + LIBLTDL="-lltdl" + INCLTDL= + fi +]) + +dnl old names +AC_DEFUN(AM_PROG_LIBTOOL, [indir([AC_PROG_LIBTOOL])])dnl +AC_DEFUN(AM_ENABLE_SHARED, [indir([AC_ENABLE_SHARED], $@)])dnl +AC_DEFUN(AM_ENABLE_STATIC, [indir([AC_ENABLE_STATIC], $@)])dnl +AC_DEFUN(AM_DISABLE_SHARED, [indir([AC_DISABLE_SHARED], $@)])dnl +AC_DEFUN(AM_DISABLE_STATIC, [indir([AC_DISABLE_STATIC], $@)])dnl +AC_DEFUN(AM_PROG_LD, [indir([AC_PROG_LD])])dnl +AC_DEFUN(AM_PROG_NM, [indir([AC_PROG_NM])])dnl + +dnl This is just to silence aclocal about the macro not being used +ifelse([AC_DISABLE_FAST_INSTALL])dnl + diff --git a/freeglut/freeglut/configure b/freeglut/freeglut/configure new file mode 100755 index 0000000..138edc4 --- /dev/null +++ b/freeglut/freeglut/configure @@ -0,0 +1,2375 @@ +#! /bin/sh + +# Guess values for system-dependent variables and create Makefiles. +# Generated automatically using autoconf version 2.13 +# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. + +# Defaults: +ac_help= +ac_default_prefix=/usr/local +# Any additions from configure.in: +ac_help="$ac_help + --enable-shared[=PKGS] build shared libraries [default=yes]" +ac_help="$ac_help + --enable-static[=PKGS] build static libraries [default=yes]" +ac_help="$ac_help + --enable-fast-install[=PKGS] optimize for fast installation [default=yes]" +ac_help="$ac_help + --with-gnu-ld assume the C compiler uses GNU ld [default=no]" +ac_help="$ac_help + --disable-libtool-lock avoid locking (might break parallel builds)" + +# Initialize some variables set by options. +# The variables have the same names as the options, with +# dashes changed to underlines. +build=NONE +cache_file=./config.cache +exec_prefix=NONE +host=NONE +no_create= +nonopt=NONE +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +target=NONE +verbose= +x_includes=NONE +x_libraries=NONE +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +# Initialize some other variables. +subdirs= +MFLAGS= MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} +# Maximum number of lines to put in a shell here document. +ac_max_here_lines=12 + +ac_prev= +for ac_option +do + + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + case "$ac_option" in + -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) ac_optarg= ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case "$ac_option" in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir="$ac_optarg" ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build="$ac_optarg" ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file="$ac_optarg" ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir="$ac_optarg" ;; + + -disable-* | --disable-*) + ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + eval "enable_${ac_feature}=no" ;; + + -enable-* | --enable-*) + ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "enable_${ac_feature}='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix="$ac_optarg" ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he) + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat << EOF +Usage: configure [options] [host] +Options: [defaults in brackets after descriptions] +Configuration: + --cache-file=FILE cache test results in FILE + --help print this message + --no-create do not create output files + --quiet, --silent do not print \`checking...' messages + --version print the version of autoconf that created configure +Directory and file names: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [same as prefix] + --bindir=DIR user executables in DIR [EPREFIX/bin] + --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] + --libexecdir=DIR program executables in DIR [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data in DIR + [PREFIX/share] + --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data in DIR + [PREFIX/com] + --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] + --libdir=DIR object code libraries in DIR [EPREFIX/lib] + --includedir=DIR C header files in DIR [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] + --infodir=DIR info documentation in DIR [PREFIX/info] + --mandir=DIR man documentation in DIR [PREFIX/man] + --srcdir=DIR find the sources in DIR [configure dir or ..] + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM + run sed PROGRAM on installed program names +EOF + cat << EOF +Host type: + --build=BUILD configure for building on BUILD [BUILD=HOST] + --host=HOST configure for HOST [guessed] + --target=TARGET configure for TARGET [TARGET=HOST] +Features and packages: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR +EOF + if test -n "$ac_help"; then + echo "--enable and --with options recognized:$ac_help" + fi + exit 0 ;; + + -host | --host | --hos | --ho) + ac_prev=host ;; + -host=* | --host=* | --hos=* | --ho=*) + host="$ac_optarg" ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir="$ac_optarg" ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir="$ac_optarg" ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir="$ac_optarg" ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir="$ac_optarg" ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir="$ac_optarg" ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir="$ac_optarg" ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir="$ac_optarg" ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix="$ac_optarg" ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix="$ac_optarg" ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix="$ac_optarg" ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name="$ac_optarg" ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir="$ac_optarg" ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir="$ac_optarg" ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site="$ac_optarg" ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir="$ac_optarg" ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir="$ac_optarg" ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target="$ac_optarg" ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers) + echo "configure generated by autoconf version 2.13" + exit 0 ;; + + -with-* | --with-*) + ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "with_${ac_package}='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`echo $ac_option|sed -e 's/-*without-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + eval "with_${ac_package}=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes="$ac_optarg" ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries="$ac_optarg" ;; + + -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } + ;; + + *) + if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then + echo "configure: warning: $ac_option: invalid host type" 1>&2 + fi + if test "x$nonopt" != xNONE; then + { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } + fi + nonopt="$ac_option" + ;; + + esac +done + +if test -n "$ac_prev"; then + { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } +fi + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 6 checking for... messages and results +# 5 compiler messages saved in config.log +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>./config.log + +echo "\ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. +" 1>&5 + +# Strip out --no-create and --no-recursion so they do not pile up. +# Also quote any args containing shell metacharacters. +ac_configure_args= +for ac_arg +do + case "$ac_arg" in + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) ;; + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) ac_configure_args="$ac_configure_args $ac_arg" ;; + esac +done + +# NLS nuisances. +# Only set these to C if already set. These must not be set unconditionally +# because not all systems understand e.g. LANG=C (notably SCO). +# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! +# Non-C LC_CTYPE values break the ctype check. +if test "${LANG+set}" = set; then LANG=C; export LANG; fi +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi +if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo > confdefs.h + +# A filename unique to this package, relative to the directory that +# configure is in, which we can look for to find out if srcdir is correct. +ac_unique_file=Makefile.am + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_prog=$0 + ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` + test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } + else + { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } + fi +fi +srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` + +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + echo "loading site script $ac_site_file" + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + echo "loading cache $cache_file" + . $cache_file +else + echo "creating cache $cache_file" + > $cache_file +fi + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +ac_exeext= +ac_objext=o +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + + + +ac_aux_dir= +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } +fi +ac_config_guess=$ac_aux_dir/config.guess +ac_config_sub=$ac_aux_dir/config.sub +ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# ./install, which can be erroneously created by make from ./install.sh. +echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 +echo "configure:567: checking for a BSD compatible install" >&5 +if test -z "$INSTALL"; then +if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" + for ac_dir in $PATH; do + # Account for people who put trailing slashes in PATH elements. + case "$ac_dir/" in + /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + if test -f $ac_dir/$ac_prog; then + if test $ac_prog = install && + grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + else + ac_cv_path_install="$ac_dir/$ac_prog -c" + break 2 + fi + fi + done + ;; + esac + done + IFS="$ac_save_IFS" + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL="$ac_cv_path_install" + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL="$ac_install_sh" + fi +fi +echo "$ac_t""$INSTALL" 1>&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6 +echo "configure:620: checking whether build environment is sane" >&5 +# Just in case +sleep 1 +echo timestamp > conftestfile +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftestfile` + fi + if test "$*" != "X $srcdir/configure conftestfile" \ + && test "$*" != "X conftestfile $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + { echo "configure: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" 1>&2; exit 1; } + fi + + test "$2" = conftestfile + ) +then + # Ok. + : +else + { echo "configure: error: newly created file is older than distributed files! +Check your system clock" 1>&2; exit 1; } +fi +rm -f conftest* +echo "$ac_t""yes" 1>&6 +if test "$program_transform_name" = s,x,x,; then + program_transform_name= +else + # Double any \ or $. echo might interpret backslashes. + cat <<\EOF_SED > conftestsed +s,\\,\\\\,g; s,\$,$$,g +EOF_SED + program_transform_name="`echo $program_transform_name|sed -f conftestsed`" + rm -f conftestsed +fi +test "$program_prefix" != NONE && + program_transform_name="s,^,${program_prefix},; $program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s,\$\$,${program_suffix},; $program_transform_name" + +# sed with no file args requires a program. +test "$program_transform_name" = "" && program_transform_name="s,x,x," + +echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 +echo "configure:677: checking whether ${MAKE-make} sets \${MAKE}" >&5 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftestmake <<\EOF +all: + @echo 'ac_maketemp="${MAKE}"' +EOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftestmake +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$ac_t""yes" 1>&6 + SET_MAKE= +else + echo "$ac_t""no" 1>&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + + +PACKAGE=freeglut + +VERSION=0.1 + +if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then + { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } +fi +cat >> confdefs.h <> confdefs.h <&6 +echo "configure:723: checking for working aclocal" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (aclocal --version) < /dev/null > /dev/null 2>&1; then + ACLOCAL=aclocal + echo "$ac_t""found" 1>&6 +else + ACLOCAL="$missing_dir/missing aclocal" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working autoconf""... $ac_c" 1>&6 +echo "configure:736: checking for working autoconf" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (autoconf --version) < /dev/null > /dev/null 2>&1; then + AUTOCONF=autoconf + echo "$ac_t""found" 1>&6 +else + AUTOCONF="$missing_dir/missing autoconf" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working automake""... $ac_c" 1>&6 +echo "configure:749: checking for working automake" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (automake --version) < /dev/null > /dev/null 2>&1; then + AUTOMAKE=automake + echo "$ac_t""found" 1>&6 +else + AUTOMAKE="$missing_dir/missing automake" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working autoheader""... $ac_c" 1>&6 +echo "configure:762: checking for working autoheader" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (autoheader --version) < /dev/null > /dev/null 2>&1; then + AUTOHEADER=autoheader + echo "$ac_t""found" 1>&6 +else + AUTOHEADER="$missing_dir/missing autoheader" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6 +echo "configure:775: checking for working makeinfo" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (makeinfo --version) < /dev/null > /dev/null 2>&1; then + MAKEINFO=makeinfo + echo "$ac_t""found" 1>&6 +else + MAKEINFO="$missing_dir/missing makeinfo" + echo "$ac_t""missing" 1>&6 +fi + + + + + + +# Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:795: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="gcc" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:825: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_prog_rejected=no + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + break + fi + done + IFS="$ac_save_ifs" +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# -gt 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + set dummy "$ac_dir/$ac_word" "$@" + shift + ac_cv_prog_CC="$@" + fi +fi +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + if test -z "$CC"; then + case "`uname -s`" in + *win32* | *WIN32*) + # Extract the first word of "cl", so it can be a program name with args. +set dummy cl; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:876: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="cl" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + ;; + esac + fi + test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } +fi + +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 +echo "configure:908: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +cat > conftest.$ac_ext << EOF + +#line 919 "configure" +#include "confdefs.h" + +main(){return(0);} +EOF +if { (eval echo configure:924: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + ac_cv_prog_cc_works=yes + # If we can't run a trivial program, we are probably using a cross compiler. + if (./conftest; exit) 2>/dev/null; then + ac_cv_prog_cc_cross=no + else + ac_cv_prog_cc_cross=yes + fi +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_prog_cc_works=no +fi +rm -fr conftest* +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 +if test $ac_cv_prog_cc_works = no; then + { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } +fi +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 +echo "configure:950: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 +cross_compiling=$ac_cv_prog_cc_cross + +echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 +echo "configure:955: checking whether we are using GNU C" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gcc=yes +else + ac_cv_prog_gcc=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gcc" 1>&6 + +if test $ac_cv_prog_gcc = yes; then + GCC=yes +else + GCC= +fi + +ac_test_CFLAGS="${CFLAGS+set}" +ac_save_CFLAGS="$CFLAGS" +CFLAGS= +echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 +echo "configure:983: checking whether ${CC-cc} accepts -g" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + echo 'void f(){}' > conftest.c +if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then + ac_cv_prog_cc_g=yes +else + ac_cv_prog_cc_g=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 +if test "$ac_test_CFLAGS" = set; then + CFLAGS="$ac_save_CFLAGS" +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi + +echo $ac_n "checking for working const""... $ac_c" 1>&6 +echo "configure:1015: checking for working const" >&5 +if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <j = 5; +} +{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; +} + +; return 0; } +EOF +if { (eval echo configure:1069: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_c_const=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_c_const=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_c_const" 1>&6 +if test $ac_cv_c_const = no; then + cat >> confdefs.h <<\EOF +#define const +EOF + +fi + +echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6 +echo "configure:1090: checking for Cygwin environment" >&5 +if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_cygwin=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_cygwin=no +fi +rm -f conftest* +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_cygwin" 1>&6 +CYGWIN= +test "$ac_cv_cygwin" = yes && CYGWIN=yes +echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6 +echo "configure:1123: checking for mingw32 environment" >&5 +if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_mingw32=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_mingw32=no +fi +rm -f conftest* +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_mingw32" 1>&6 +MINGW32= +test "$ac_cv_mingw32" = yes && MINGW32=yes + + +echo $ac_n "checking for executable suffix""... $ac_c" 1>&6 +echo "configure:1154: checking for executable suffix" >&5 +if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$CYGWIN" = yes || test "$MINGW32" = yes; then + ac_cv_exeext=.exe +else + rm -f conftest* + echo 'int main () { return 0; }' > conftest.$ac_ext + ac_cv_exeext= + if { (eval echo configure:1164: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then + for file in conftest.*; do + case $file in + *.c | *.o | *.obj) ;; + *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;; + esac + done + else + { echo "configure: error: installation or configuration problem: compiler cannot create executables." 1>&2; exit 1; } + fi + rm -f conftest* + test x"${ac_cv_exeext}" = x && ac_cv_exeext=no +fi +fi + +EXEEXT="" +test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext} +echo "$ac_t""${ac_cv_exeext}" 1>&6 +ac_exeext=$EXEEXT + +# Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1187: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_RANLIB="ranlib" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" +fi +fi +RANLIB="$ac_cv_prog_RANLIB" +if test -n "$RANLIB"; then + echo "$ac_t""$RANLIB" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + +# Check whether --enable-shared or --disable-shared was given. +if test "${enable_shared+set}" = set; then + enableval="$enable_shared" + p=${PACKAGE-default} +case "$enableval" in +yes) enable_shared=yes ;; +no) enable_shared=no ;; +*) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," + for pkg in $enableval; do + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$ac_save_ifs" + ;; +esac +else + enable_shared=yes +fi + +# Check whether --enable-static or --disable-static was given. +if test "${enable_static+set}" = set; then + enableval="$enable_static" + p=${PACKAGE-default} +case "$enableval" in +yes) enable_static=yes ;; +no) enable_static=no ;; +*) + enable_static=no + # Look at the argument we got. We use all the common list separators. + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," + for pkg in $enableval; do + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$ac_save_ifs" + ;; +esac +else + enable_static=yes +fi + +# Check whether --enable-fast-install or --disable-fast-install was given. +if test "${enable_fast_install+set}" = set; then + enableval="$enable_fast_install" + p=${PACKAGE-default} +case "$enableval" in +yes) enable_fast_install=yes ;; +no) enable_fast_install=no ;; +*) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," + for pkg in $enableval; do + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$ac_save_ifs" + ;; +esac +else + enable_fast_install=yes +fi + + +# Make sure we can run config.sub. +if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : +else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } +fi + +echo $ac_n "checking host system type""... $ac_c" 1>&6 +echo "configure:1291: checking host system type" >&5 + +host_alias=$host +case "$host_alias" in +NONE) + case $nonopt in + NONE) + if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : + else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } + fi ;; + *) host_alias=$nonopt ;; + esac ;; +esac + +host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` +host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +echo "$ac_t""$host" 1>&6 + +echo $ac_n "checking build system type""... $ac_c" 1>&6 +echo "configure:1312: checking build system type" >&5 + +build_alias=$build +case "$build_alias" in +NONE) + case $nonopt in + NONE) build_alias=$host_alias ;; + *) build_alias=$nonopt ;; + esac ;; +esac + +build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias` +build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +echo "$ac_t""$build" 1>&6 + +# Check whether --with-gnu-ld or --without-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval="$with_gnu_ld" + test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$ac_cv_prog_gcc" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6 +echo "configure:1341: checking for ld used by GCC" >&5 + ac_prog=`($CC -print-prog-name=ld) 2>&5` + case "$ac_prog" in + # Accept absolute paths. + [\\/]* | [A-Za-z]:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the path of ld + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + echo $ac_n "checking for GNU ld""... $ac_c" 1>&6 +echo "configure:1365: checking for GNU ld" >&5 +else + echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 +echo "configure:1368: checking for non-GNU ld" >&5 +fi +if eval "test \"`echo '$''{'ac_cv_path_LD'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + ac_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then + test "$with_gnu_ld" != no && break + else + test "$with_gnu_ld" != yes && break + fi + fi + done + IFS="$ac_save_ifs" +else + ac_cv_path_LD="$LD" # Let the user override the test with a path. +fi +fi + +LD="$ac_cv_path_LD" +if test -n "$LD"; then + echo "$ac_t""$LD" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi +test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; } +echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 +echo "configure:1403: checking if the linker ($LD) is GNU ld" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + # I'd rather use --version here, but apparently some GNU ld's only accept -v. +if $LD -v 2>&1 &5; then + ac_cv_prog_gnu_ld=yes +else + ac_cv_prog_gnu_ld=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6 + + +echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6 +echo "configure:1419: checking for BSD-compatible nm" >&5 +if eval "test \"`echo '$''{'ac_cv_path_NM'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$NM"; then + # Let the user override the test. + ac_cv_path_NM="$NM" +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + ac_cv_path_NM="$ac_dir/nm -B" + break + elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + ac_cv_path_NM="$ac_dir/nm -p" + break + else + ac_cv_path_NM=${ac_cv_path_NM="$ac_dir/nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm +fi +fi + +NM="$ac_cv_path_NM" +echo "$ac_t""$NM" 1>&6 + +echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 +echo "configure:1455: checking whether ln -s works" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + rm -f conftestdata +if ln -s X conftestdata 2>/dev/null +then + rm -f conftestdata + ac_cv_prog_LN_S="ln -s" +else + ac_cv_prog_LN_S=ln +fi +fi +LN_S="$ac_cv_prog_LN_S" +if test "$ac_cv_prog_LN_S" = "ln -s"; then + echo "$ac_t""yes" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + +case "$target" in +NONE) lt_target="$host" ;; +*) lt_target="$target" ;; +esac + +# Check for any special flags to pass to ltconfig. +libtool_flags="--cache-file=$cache_file" +test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared" +test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static" +test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install" +test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc" +test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" +libtool_flags="$libtool_flags --enable-dlopen" + +# Check whether --enable-libtool-lock or --disable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then + enableval="$enable_libtool_lock" + : +fi + +test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock" +test x"$silent" = xyes && libtool_flags="$libtool_flags --silent" + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case "$lt_target" in +*-*-irix6*) + # Find out which ABI we are using. + echo '#line 1504 "configure"' > conftest.$ac_ext + if { (eval echo configure:1505: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + case "`/usr/bin/file conftest.o`" in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6 +echo "configure:1526: checking whether the C compiler needs -belf" >&5 +if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + lt_cv_cc_needs_belf=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + lt_cv_cc_needs_belf=no +fi +rm -f conftest* +fi + +echo "$ac_t""$lt_cv_cc_needs_belf" 1>&6 + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; + + +esac + + +# Save cache, so that ltconfig can load it +cat > confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + + +# Actually configure libtool. ac_aux_dir is where install-sh is found. +CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \ +LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \ +LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \ +DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \ +${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \ +$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $lt_target \ +|| { echo "configure: error: libtool configure failed" 1>&2; exit 1; } + +# Reload cache, that may have been modified by ltconfig +if test -r "$cache_file"; then + echo "loading cache $cache_file" + . $cache_file +else + echo "creating cache $cache_file" + > $cache_file +fi + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + +# Redirect the config.log output again, so that the ltconfig log is not +# clobbered by the next message. +exec 5>>./config.log + + + + +echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 +echo "configure:1643: checking how to run the C preprocessor" >&5 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then +if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + # This must be in double quotes, not single quotes, because CPP may get + # substituted into the Makefile and "${CC-cc}" will confuse make. + CPP="${CC-cc} -E" + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1664: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP="${CC-cc} -E -traditional-cpp" + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1681: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP="${CC-cc} -nologo -E" + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1698: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP=/lib/cpp +fi +rm -f conftest* +fi +rm -f conftest* +fi +rm -f conftest* + ac_cv_prog_CPP="$CPP" +fi + CPP="$ac_cv_prog_CPP" +else + ac_cv_prog_CPP="$CPP" +fi +echo "$ac_t""$CPP" 1>&6 + +echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 +echo "configure:1723: checking for ANSI C header files" >&5 +if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +#include +#include +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1736: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + ac_cv_header_stdc=yes +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. +cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "memchr" >/dev/null 2>&1; then + : +else + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. +cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "free" >/dev/null 2>&1; then + : +else + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. +if test "$cross_compiling" = yes; then + : +else + cat > conftest.$ac_ext < +#define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int main () { int i; for (i = 0; i < 256; i++) +if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); +exit (0); } + +EOF +if { (eval echo configure:1803: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + : +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_header_stdc=no +fi +rm -fr conftest* +fi + +fi +fi + +echo "$ac_t""$ac_cv_header_stdc" 1>&6 +if test $ac_cv_header_stdc = yes; then + cat >> confdefs.h <<\EOF +#define STDC_HEADERS 1 +EOF + +fi + +for ac_hdr in GL/gl.h GL/glu.h GL/glx.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:1830: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1840: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + + + + +LIBM= +case "$lt_target" in +*-*-beos* | *-*-cygwin*) + # These system don't have libm + ;; +*-ncr-sysv4.3*) + echo $ac_n "checking for _mwvalidcheckl in -lmw""... $ac_c" 1>&6 +echo "configure:1876: checking for _mwvalidcheckl in -lmw" >&5 +ac_lib_var=`echo mw'_'_mwvalidcheckl | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lmw $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + LIBM="-lmw" +else + echo "$ac_t""no" 1>&6 +fi + + echo $ac_n "checking for main in -lm""... $ac_c" 1>&6 +echo "configure:1916: checking for main in -lm" >&5 +ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lm $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + LIBM="$LIBM -lm" +else + echo "$ac_t""no" 1>&6 +fi + + ;; +*) + echo $ac_n "checking for main in -lm""... $ac_c" 1>&6 +echo "configure:1954: checking for main in -lm" >&5 +ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lm $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + LIBM="-lm" +else + echo "$ac_t""no" 1>&6 +fi + + ;; +esac + + + +trap '' 1 2 15 +cat > confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Any assignment to VPATH causes Sun make to only execute +# the first set of double-colon rules, so remove it if not needed. +# If there is a colon in the path, we need to keep it. +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' +fi + +trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 + +DEFS=-DHAVE_CONFIG_H + +# Without the "./", some shells look in PATH for config.status. +: ${CONFIG_STATUS=./config.status} + +echo creating $CONFIG_STATUS +rm -f $CONFIG_STATUS +cat > $CONFIG_STATUS </dev/null | sed 1q`: +# +# $0 $ac_configure_args +# +# Compiler output produced by configure, useful for debugging +# configure, is in ./config.log if it exists. + +ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" +for ac_option +do + case "\$ac_option" in + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" + exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; + -version | --version | --versio | --versi | --vers | --ver | --ve | --v) + echo "$CONFIG_STATUS generated by autoconf version 2.13" + exit 0 ;; + -help | --help | --hel | --he | --h) + echo "\$ac_cs_usage"; exit 0 ;; + *) echo "\$ac_cs_usage"; exit 1 ;; + esac +done + +ac_given_srcdir=$srcdir +ac_given_INSTALL="$INSTALL" + +trap 'rm -fr `echo "Makefile freeglut-1.3/Makefile include/Makefile include/GL/Makefile genfonts/Makefile tests/Makefile config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +EOF +cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF +$ac_vpsub +$extrasub +s%@SHELL@%$SHELL%g +s%@CFLAGS@%$CFLAGS%g +s%@CPPFLAGS@%$CPPFLAGS%g +s%@CXXFLAGS@%$CXXFLAGS%g +s%@FFLAGS@%$FFLAGS%g +s%@DEFS@%$DEFS%g +s%@LDFLAGS@%$LDFLAGS%g +s%@LIBS@%$LIBS%g +s%@exec_prefix@%$exec_prefix%g +s%@prefix@%$prefix%g +s%@program_transform_name@%$program_transform_name%g +s%@bindir@%$bindir%g +s%@sbindir@%$sbindir%g +s%@libexecdir@%$libexecdir%g +s%@datadir@%$datadir%g +s%@sysconfdir@%$sysconfdir%g +s%@sharedstatedir@%$sharedstatedir%g +s%@localstatedir@%$localstatedir%g +s%@libdir@%$libdir%g +s%@includedir@%$includedir%g +s%@oldincludedir@%$oldincludedir%g +s%@infodir@%$infodir%g +s%@mandir@%$mandir%g +s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g +s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g +s%@INSTALL_DATA@%$INSTALL_DATA%g +s%@PACKAGE@%$PACKAGE%g +s%@VERSION@%$VERSION%g +s%@ACLOCAL@%$ACLOCAL%g +s%@AUTOCONF@%$AUTOCONF%g +s%@AUTOMAKE@%$AUTOMAKE%g +s%@AUTOHEADER@%$AUTOHEADER%g +s%@MAKEINFO@%$MAKEINFO%g +s%@SET_MAKE@%$SET_MAKE%g +s%@CC@%$CC%g +s%@EXEEXT@%$EXEEXT%g +s%@RANLIB@%$RANLIB%g +s%@host@%$host%g +s%@host_alias@%$host_alias%g +s%@host_cpu@%$host_cpu%g +s%@host_vendor@%$host_vendor%g +s%@host_os@%$host_os%g +s%@build@%$build%g +s%@build_alias@%$build_alias%g +s%@build_cpu@%$build_cpu%g +s%@build_vendor@%$build_vendor%g +s%@build_os@%$build_os%g +s%@LN_S@%$LN_S%g +s%@LIBTOOL@%$LIBTOOL%g +s%@LIBTOOL_DEPS@%$LIBTOOL_DEPS%g +s%@CPP@%$CPP%g +s%@LIBM@%$LIBM%g + +CEOF +EOF + +cat >> $CONFIG_STATUS <<\EOF + +# Split the substitutions into bite-sized pieces for seds with +# small command number limits, like on Digital OSF/1 and HP-UX. +ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. +ac_file=1 # Number of current file. +ac_beg=1 # First line for current file. +ac_end=$ac_max_sed_cmds # Line after last line for current file. +ac_more_lines=: +ac_sed_cmds="" +while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file + else + sed "${ac_end}q" conftest.subs > conftest.s$ac_file + fi + if test ! -s conftest.s$ac_file; then + ac_more_lines=false + rm -f conftest.s$ac_file + else + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f conftest.s$ac_file" + else + ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" + fi + ac_file=`expr $ac_file + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_cmds` + fi +done +if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat +fi +EOF + +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. + + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" + # A "../" for each directory in $ac_dir_suffix. + ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` + else + ac_dir_suffix= ac_dots= + fi + + case "$ac_given_srcdir" in + .) srcdir=. + if test -z "$ac_dots"; then top_srcdir=. + else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; + /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; + *) # Relative path. + srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" + top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + case "$ac_given_INSTALL" in + [/$]*) INSTALL="$ac_given_INSTALL" ;; + *) INSTALL="$ac_dots$ac_given_INSTALL" ;; + esac + + echo creating "$ac_file" + rm -f "$ac_file" + configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." + case "$ac_file" in + *Makefile*) ac_comsub="1i\\ +# $configure_input" ;; + *) ac_comsub= ;; + esac + + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + sed -e "$ac_comsub +s%@configure_input@%$configure_input%g +s%@srcdir@%$srcdir%g +s%@top_srcdir@%$top_srcdir%g +s%@INSTALL@%$INSTALL%g +" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file +fi; done +rm -f conftest.s* + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' +ac_dC='\3' +ac_dD='%g' +# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". +ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='\([ ]\)%\1#\2define\3' +ac_uC=' ' +ac_uD='\4%g' +# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_eB='$%\1#\2define\3' +ac_eC=' ' +ac_eD='%g' + +if test "${CONFIG_HEADERS+set}" != set; then +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +fi +for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + echo creating $ac_file + + rm -f conftest.frag conftest.in conftest.out + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + cat $ac_file_inputs > conftest.in + +EOF + +# Transform confdefs.h into a sed script conftest.vals that substitutes +# the proper values into config.h.in to produce config.h. And first: +# Protect against being on the right side of a sed subst in config.status. +# Protect against being in an unquoted here document in config.status. +rm -f conftest.vals +cat > conftest.hdr <<\EOF +s/[\\&%]/\\&/g +s%[\\$`]%\\&%g +s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp +s%ac_d%ac_u%gp +s%ac_u%ac_e%gp +EOF +sed -n -f conftest.hdr confdefs.h > conftest.vals +rm -f conftest.hdr + +# This sed command replaces #undef with comments. This is necessary, for +# example, in the case of _POSIX_SOURCE, which is predefined and required +# on some systems where configure will not decide to define it. +cat >> conftest.vals <<\EOF +s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% +EOF + +# Break up conftest.vals because some shells have a limit on +# the size of here documents, and old seds have small limits too. + +rm -f conftest.tail +while : +do + ac_lines=`grep -c . conftest.vals` + # grep -c gives empty output for an empty file on some AIX systems. + if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi + # Write a limited-size here document to conftest.frag. + echo ' cat > conftest.frag <> $CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS + echo 'CEOF + sed -f conftest.frag conftest.in > conftest.out + rm -f conftest.in + mv conftest.out conftest.in +' >> $CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail + rm -f conftest.vals + mv conftest.tail conftest.vals +done +rm -f conftest.vals + +cat >> $CONFIG_STATUS <<\EOF + rm -f conftest.frag conftest.h + echo "/* $ac_file. Generated automatically by configure. */" > conftest.h + cat conftest.in >> conftest.h + rm -f conftest.in + if cmp -s $ac_file conftest.h 2>/dev/null; then + echo "$ac_file is unchanged" + rm -f conftest.h + else + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + fi + rm -f $ac_file + mv conftest.h $ac_file + fi +fi; done + +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h + +exit 0 +EOF +chmod +x $CONFIG_STATUS +rm -fr confdefs* $ac_clean_files +test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 + diff --git a/freeglut/freeglut/configure.in b/freeglut/freeglut/configure.in new file mode 100644 index 0000000..a899288 --- /dev/null +++ b/freeglut/freeglut/configure.in @@ -0,0 +1,29 @@ +dnl Process this file with autoconf to produce a configure script. +AC_INIT(Makefile.am) + +AM_INIT_AUTOMAKE(freeglut,0.1) +AM_CONFIG_HEADER(config.h) + +dnl Checks for programs. +AC_PROG_CC +AC_C_CONST +AC_EXEEXT +AC_PROG_RANLIB +AC_LIBTOOL_DLOPEN +AM_PROG_LIBTOOL +AC_SUBST(LIBTOOL_DEPS) + +dnl Checks for libraries. + +dnl Checks for header files. +AC_STDC_HEADERS +AC_HAVE_HEADERS( GL/gl.h GL/glu.h GL/glx.h ) + +dnl Checks for typedefs, structures, and compiler characteristics. + +dnl Checks for library functions. + +AC_CHECK_LIBM +AC_SUBST(LIBM) + +AC_OUTPUT(Makefile freeglut-1.3/Makefile include/Makefile include/GL/Makefile genfonts/Makefile tests/Makefile ) diff --git a/freeglut/freeglut/freeglut-1.3/Makefile.am b/freeglut/freeglut/freeglut-1.3/Makefile.am new file mode 100644 index 0000000..afab6e1 --- /dev/null +++ b/freeglut/freeglut/freeglut-1.3/Makefile.am @@ -0,0 +1,39 @@ +## Process this file with automake to produce Makefile.im + +# +# The library we want to build +# +lib_LTLIBRARIES = libfreeglut-1.3.la + +# +# Those source files build the freeglut library +# +libfreeglut_1_3_la_SOURCES = freeglut_callbacks.c \ + freeglut_cursor.c \ + freeglut_display.c \ + freeglut_font.c \ + freeglut_font_data.c \ + freeglut_gamemode.c \ + freeglut_geometry.c \ + freeglut_init.c \ + freeglut_joystick.c \ + freeglut_main.c \ + freeglut_menu.c \ + freeglut_misc.c \ + freeglut_overlay.c \ + freeglut_state.c \ + freeglut_structure.c \ + freeglut_teapot.c \ + freeglut_videoresize.c \ + freeglut_window.c + + +# +# Additional linker flags +# +libfreeglut_1_3_la_LIBADD = $(LIBM) -L/usr/X11R6/lib -lGL -lGLU -lXext -lX11 -lXxf86vm -lglib +libfreeglut_1_3_la_LDFLAGS = -version-info 0:0:0 + +# +# End of file +# diff --git a/freeglut/freeglut/freeglut-1.3/freeglut_callbacks.c b/freeglut/freeglut/freeglut-1.3/freeglut_callbacks.c new file mode 100644 index 0000000..f61bfb8 --- /dev/null +++ b/freeglut/freeglut/freeglut-1.3/freeglut_callbacks.c @@ -0,0 +1,310 @@ +/* + * freeglut_callbacks.c + * + * The callbacks setting methods. + * + * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved. + * Written by Pawel W. Olszta, + * Creation date: Fri Dec 3 1999 + * + * 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 + * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#define G_LOG_DOMAIN "freeglut-callbacks" + +#include "../include/GL/freeglut.h" +#include "../include/GL/freeglut_internal.h" + + +/* -- INTERFACE FUNCTIONS -------------------------------------------------- */ + +/* + * All of the callbacks setting methods can be generalized to this: + */ +#define SET_CALLBACK(a) if( fgStructure.Window == NULL ) return;\ + fgStructure.Window->Callbacks.a = callback; + +/* + * Sets the Display callback for the current window + */ +void FGAPIENTRY glutDisplayFunc( void (* callback)( void ) ) +{ + SET_CALLBACK( Display ); +} + +/* + * Sets the Reshape callback for the current window + */ +void FGAPIENTRY glutReshapeFunc( void (* callback)( int, int ) ) +{ + SET_CALLBACK( Reshape ); +} + +/* + * Sets the Keyboard callback for the current window + */ +void FGAPIENTRY glutKeyboardFunc( void (* callback)( unsigned char, int, int ) ) +{ + SET_CALLBACK( Keyboard ); +} + +/* + * Sets the Special callback for the current window + */ +void FGAPIENTRY glutSpecialFunc( void (* callback)( int, int, int ) ) +{ + SET_CALLBACK( Special ); +} + +/* + * Sets the global idle callback + */ +void FGAPIENTRY glutIdleFunc( void (* callback)( void ) ) +{ + freeglut_assert_ready; + + /* + * The global idle callback pointer is stored in fgState structure + */ + fgState.IdleCallback = callback; +} + +/* + * Sets the Timer callback for the current window + */ +void FGAPIENTRY glutTimerFunc( unsigned int timeOut, void (* callback)( int ), int timerID ) +{ + SFG_Timer* timer; + + freeglut_assert_ready; + + /* + * Create a new freeglut timer hook structure + */ + timer = g_new0( SFG_Timer, 1 ); + + /* + * Remember the callback address and timer hook's ID + */ + timer->Callback = callback; + timer->ID = timerID; + + /* + * When will the time out happen (in terms of window's timer) + */ + timer->TriggerTime = + g_timer_elapsed( fgState.Timer, NULL ) + (((double) timeOut) / 1000.0); + + /* + * Have the new hook attached to the current window + */ + fgState.Timers = g_list_append( fgState.Timers, timer ); +} + +/* + * Sets the Visibility callback for the current window. + * + * I had to peer to GLUT sources to clean up the mess. + * Can anyone please explain me what is going on here?!? + */ +static void fghVisibility( gint status ) +{ + freeglut_assert_ready; freeglut_return_if_fail( fgStructure.Window != NULL ); + freeglut_return_if_fail( fgStructure.Window->Callbacks.Visibility != NULL ); + + if( status == GLUT_HIDDEN || status == GLUT_FULLY_COVERED ) + fgStructure.Window->Callbacks.Visibility( GLUT_NOT_VISIBLE ); + else + fgStructure.Window->Callbacks.Visibility( GLUT_VISIBLE ); +} + +void FGAPIENTRY glutVisibilityFunc( void (* callback)( int ) ) +{ + SET_CALLBACK( Visibility ); + + if( callback ) + glutWindowStatusFunc( fghVisibility ); + else + glutWindowStatusFunc( NULL ); +} + +/* + * Sets the keyboard key release callback for the current window + */ +void FGAPIENTRY glutKeyboardUpFunc( void (* callback)( unsigned char, int, int ) ) +{ + SET_CALLBACK( KeyboardUp ); +} + +/* + * Sets the special key release callback for the current window + */ +void FGAPIENTRY glutSpecialUpFunc( void (* callback)( int, int, int ) ) +{ + SET_CALLBACK( SpecialUp ); +} + +/* + * Sets the joystick callback and polling rate for the current window + */ +void FGAPIENTRY glutJoystickFunc( void (* callback)( unsigned int, int, int, int ), int pollInterval ) +{ + SET_CALLBACK( Joystick ); + + freeglut_return_if_fail( fgStructure.Window != NULL ); + + /* + * Do not forget setting the joystick poll rate + */ + fgStructure.Window->State.JoystickPollRate = ((double) pollInterval) / 1000.0; + + /* + * Make sure the joystick polling routine gets called as early as possible: + */ + fgStructure.Window->State.JoystickLastPoll = + g_timer_elapsed( fgState.Timer, NULL ) - fgStructure.Window->State.JoystickPollRate; + + if( fgStructure.Window->State.JoystickLastPoll < 0.0 ) + fgStructure.Window->State.JoystickLastPoll = 0.0; +} + +/* + * Sets the mouse callback for the current window + */ +void FGAPIENTRY glutMouseFunc( void (* callback)( int, int, int, int ) ) +{ + SET_CALLBACK( Mouse ); +} + +/* + * Sets the mouse motion callback for the current window (one or more buttons are pressed) + */ +void FGAPIENTRY glutMotionFunc( void (* callback)( int, int ) ) +{ + SET_CALLBACK( Motion ); +} + +/* + * Sets the passive mouse motion callback for the current window (no mouse buttons are pressed) + */ +void FGAPIENTRY glutPassiveMotionFunc( void (* callback)( int, int ) ) +{ + SET_CALLBACK( Passive ); +} + +/* + * Window mouse entry/leave callback + */ +void FGAPIENTRY glutEntryFunc( void (* callback)( int ) ) +{ + SET_CALLBACK( Entry ); +} + +/* + * Deprecated version of glutMenuStatusFunc callback setting method + */ +void FGAPIENTRY glutMenuStateFunc( void (* callback)( int ) ) +{ + SET_CALLBACK( MenuState ); +} + +/* + * Sets the global menu status callback for the current window + */ +void FGAPIENTRY glutMenuStatusFunc( void (* callback)( int, int, int ) ) +{ + SET_CALLBACK( MenuStatus ); +} + +/* + * Sets the overlay display callback for the current window + */ +void FGAPIENTRY glutOverlayDisplayFunc( void (* callback)( void ) ) +{ + SET_CALLBACK( OverlayDisplay ); +} + +/* + * Sets the window status callback for the current window + */ +void FGAPIENTRY glutWindowStatusFunc( void (* callback)( int ) ) +{ + SET_CALLBACK( WindowStatus ); +} + +/* + * Sets the spaceball motion callback for the current window + */ +void FGAPIENTRY glutSpaceballMotionFunc( void (* callback)( int, int, int ) ) +{ + SET_CALLBACK( SpaceMotion ); +} + +/* + * Sets the spaceball rotate callback for the current window + */ +void FGAPIENTRY glutSpaceballRotateFunc( void (* callback)( int, int, int ) ) +{ + SET_CALLBACK( SpaceRotation ); +} + +/* + * Sets the spaceball button callback for the current window + */ +void FGAPIENTRY glutSpaceballButtonFunc( void (* callback)( int, int ) ) +{ + SET_CALLBACK( SpaceButton ); +} + +/* + * Sets the button box callback for the current window + */ +void FGAPIENTRY glutButtonBoxFunc( void (* callback)( int, int ) ) +{ + SET_CALLBACK( ButtonBox ); +} + +/* + * Sets the dials box callback for the current window + */ +void FGAPIENTRY glutDialsFunc( void (* callback)( int, int ) ) +{ + SET_CALLBACK( Dials ); +} + +/* + * Sets the tablet motion callback for the current window + */ +void FGAPIENTRY glutTabletMotionFunc( void (* callback)( int, int ) ) +{ + SET_CALLBACK( TabletMotion ); +} + +/* + * Sets the tablet buttons callback for the current window + */ +void FGAPIENTRY glutTabletButtonFunc( void (* callback)( int, int, int, int ) ) +{ + SET_CALLBACK( TabletButton ); +} + +/*** END OF FILE ***/ diff --git a/freeglut/freeglut/freeglut-1.3/freeglut_cursor.c b/freeglut/freeglut/freeglut-1.3/freeglut_cursor.c new file mode 100644 index 0000000..900e1c9 --- /dev/null +++ b/freeglut/freeglut/freeglut-1.3/freeglut_cursor.c @@ -0,0 +1,182 @@ +/* + * freeglut_cursor.c + * + * The mouse cursor related stuff. + * + * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved. + * Written by Pawel W. Olszta, + * Creation date: Thu Dec 16 1999 + * + * 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 + * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#define G_LOG_DOMAIN "freeglut-cursor" + +#include "../include/GL/freeglut.h" +#include "../include/GL/freeglut_internal.h" + +#if TARGET_HOST_UNIX_X11 + #include +#endif + +/* + * TODO BEFORE THE STABLE RELEASE: + * + * fgDisplayCursor() -- this waits for better times + * glutSetCursor() -- both X and Win32 mappings are incomplete + * glutWarpPointer() -- check the Win32 version + * + * It would be good to use custom mouse cursor shapes, and introduce + * an option to display them using glBitmap() and/or texture mapping, + * apart from the windowing system version. + */ + +/* -- INTERNAL FUNCTIONS --------------------------------------------------- */ + +/* + * Display the mouse cursor using OpenGL calls + */ +void fgDisplayCursor( void ) +{ + /* + * Do nothing for the moment + */ +} + + +/* -- INTERFACE FUNCTIONS -------------------------------------------------- */ + +/* + * Set the cursor image to be used for the current window + */ +void FGAPIENTRY glutSetCursor( int cursorID ) +{ + /* + * Make sure freeglut is ready and there is a current window set + */ + freeglut_assert_ready; freeglut_assert_window; + +#if TARGET_HOST_UNIX_X11 + { + Cursor cursor; + + /* + * For now we'll limit ourselves to the X cursor fonts... + */ +# define MAP_CURSOR(a,b) case a: cursor = XCreateFontCursor( fgDisplay.Display, b ); break; + + switch( cursorID ) + { + MAP_CURSOR( GLUT_CURSOR_RIGHT_ARROW, XC_left_ptr ); + MAP_CURSOR( GLUT_CURSOR_LEFT_ARROW, XC_right_ptr ); + MAP_CURSOR( GLUT_CURSOR_INFO, XC_question_arrow ); + MAP_CURSOR( GLUT_CURSOR_DESTROY, XC_target ); + MAP_CURSOR( GLUT_CURSOR_HELP, XC_question_arrow ); + MAP_CURSOR( GLUT_CURSOR_CYCLE, XC_circle ); + MAP_CURSOR( GLUT_CURSOR_SPRAY, XC_spraycan ); + MAP_CURSOR( GLUT_CURSOR_WAIT, XC_watch ); + MAP_CURSOR( GLUT_CURSOR_TEXT, XC_draft_large ); + MAP_CURSOR( GLUT_CURSOR_CROSSHAIR, XC_crosshair ); + MAP_CURSOR( GLUT_CURSOR_NONE, XC_trek ); + + default: + MAP_CURSOR( GLUT_CURSOR_UP_DOWN, XC_arrow ); + } + + /* + * Define a window's cursor now + */ + XDefineCursor( fgDisplay.Display, fgStructure.Window->Window.Handle, cursor ); + } + +#elif TARGET_HOST_WIN32 + /* + * This is a temporary solution only... + */ +# define MAP_CURSOR(a,b) case a: SetCursor( LoadCursor( NULL, b ) ); break; + + switch( cursorID ) + { + MAP_CURSOR( GLUT_CURSOR_RIGHT_ARROW, IDC_ARROW ); + MAP_CURSOR( GLUT_CURSOR_LEFT_ARROW, IDC_ARROW ); + MAP_CURSOR( GLUT_CURSOR_INFO, IDC_HELP ); + MAP_CURSOR( GLUT_CURSOR_DESTROY, IDC_CROSS ); + MAP_CURSOR( GLUT_CURSOR_HELP, IDC_HELP ); + MAP_CURSOR( GLUT_CURSOR_CYCLE, IDC_SIZEALL ); + MAP_CURSOR( GLUT_CURSOR_SPRAY, IDC_CROSS ); + MAP_CURSOR( GLUT_CURSOR_WAIT, IDC_WAIT ); + MAP_CURSOR( GLUT_CURSOR_TEXT, IDC_UPARROW ); + MAP_CURSOR( GLUT_CURSOR_CROSSHAIR, IDC_CROSS ); + MAP_CURSOR( GLUT_CURSOR_NONE, IDC_NO ); + + default: + MAP_CURSOR( GLUT_CURSOR_UP_DOWN, IDC_UPARROW ); + } + +#endif + + /* + * Remember the currently selected cursor + */ + fgStructure.Window->State.Cursor = cursorID; +} + +/* + * Moves the mouse pointer to given window coordinates + */ +void FGAPIENTRY glutWarpPointer( int x, int y ) +{ + freeglut_assert_ready; freeglut_assert_window; + +#if TARGET_HOST_UNIX_X11 + /* + * Move the mouse pointer to given window coordinates + */ + XWarpPointer( + fgDisplay.Display, + None, + fgStructure.Window->Window.Handle, + 0, 0, 0, 0, + x, y + ); + + XFlush( fgDisplay.Display ); + +#elif TARGET_HOST_WIN32 + { + POINT coords = { x, y }; + + /* + * First of all, we need to find the new screen-relative coordinates of the mouse cursor + */ + ClientToScreen( fgStructure.Window->Window.Handle, &coords ); + + /* + * Now set the new mouse cursor position... + */ + SetCursorPos( coords.x, coords.y ); + } + +#endif +} + +/*** END OF FILE ***/ diff --git a/freeglut/freeglut/freeglut-1.3/freeglut_display.c b/freeglut/freeglut/freeglut-1.3/freeglut_display.c new file mode 100644 index 0000000..0b1f672 --- /dev/null +++ b/freeglut/freeglut/freeglut-1.3/freeglut_display.c @@ -0,0 +1,121 @@ +/* + * freeglut_display.c + * + * Display message posting, context buffer swapping. + * + * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved. + * Written by Pawel W. Olszta, + * Creation date: Fri Dec 3 1999 + * + * 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. + * 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 + * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#define G_LOG_DOMAIN "freeglut-display" + +#include "../include/GL/freeglut.h" +#include "../include/GL/freeglut_internal.h" + + +/* -- INTERFACE FUNCTIONS -------------------------------------------------- */ + +/* + * Marks the current window to have the redisplay performed when possible... + */ +void FGAPIENTRY glutPostRedisplay( void ) +{ + /* + * Is there a current window set? + */ + freeglut_assert_ready; freeglut_assert_window; + + /* + * Just mark the window as one that we need to redisplay... + */ + fgStructure.Window->State.Redisplay = TRUE; +} + +/* + * Swaps the buffers for the current window (if any) + */ +void FGAPIENTRY glutSwapBuffers( void ) +{ + /* + * As long as we've got a current window set... + */ + freeglut_assert_ready; freeglut_assert_window; + + /* + * Have the mouse cursor and/or the menus drawn for the current window + */ + fgDisplayMenu(); + fgDisplayCursor(); + + /* + * Make sure the current context is flushed + */ + glFlush(); + +#if TARGET_HOST_UNIX_X11 + /* + * Issue the glXSwapBuffers call and be done with it + */ + glXSwapBuffers( fgDisplay.Display, fgStructure.Window->Window.Handle ); + +#elif TARGET_HOST_WIN32 + /* + * Swap the window's buffers + */ + SwapBuffers( fgStructure.Window->Window.Device ); + +#endif +} + +/* + * Mark appropriate window to be displayed + */ +void FGAPIENTRY glutPostWindowRedisplay( int windowID ) +{ + SFG_Window* window; + + freeglut_assert_ready; + + /* + * Try looking for the window + */ + window = fgWindowByID( windowID ); + + /* + * If failed, return + */ + freeglut_return_if_fail( window != NULL ); + + /* + * Otherwise mark the window for being redisplayed + */ + window->State.Redisplay = TRUE; +} + +/*** END OF FILE ***/ diff --git a/freeglut/freeglut/freeglut-1.3/freeglut_font.c b/freeglut/freeglut/freeglut-1.3/freeglut_font.c new file mode 100644 index 0000000..26f7d63 --- /dev/null +++ b/freeglut/freeglut/freeglut-1.3/freeglut_font.c @@ -0,0 +1,263 @@ +/* + * freeglut_font.c + * + * Bitmap and stroke fonts displaying. + * + * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved. + * Written by Pawel W. Olszta, + * Creation date: Thu Dec 16 1999 + * + * 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 + * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#define G_LOG_DOMAIN "freeglut-font" + +#include "../include/GL/freeglut.h" +#include "../include/GL/freeglut_internal.h" + +/* + * TODO BEFORE THE STABLE RELEASE: + * + * glutStrokeCharacter() -- stroke fonts not implemented, uses a bitmap font instead + * glutStrokeWidth() -- stroke fonts not implemented, uses a bitmap font instead + */ + +/* -- IMPORT DECLARATIONS -------------------------------------------------- */ + +/* + * These are the font faces defined in freeglut_font_data.c file: + */ +extern SFG_Font fgFontFixed8x13; +extern SFG_Font fgFontFixed9x15; +extern SFG_Font fgFontHelvetica10; +extern SFG_Font fgFontHelvetica12; +extern SFG_Font fgFontHelvetica18; +extern SFG_Font fgFontTimesRoman10; +extern SFG_Font fgFontTimesRoman24; + +/* + * This is for GLUT binary compatibility, as suggested by Steve Baker + */ +#if TARGET_HOST_UNIX_X11 + void* glutStrokeRoman; + void* glutStrokeMonoRoman; + void* glutBitmap9By15; + void* glutBitmap8By13; + void* glutBitmapTimesRoman10; + void* glutBitmapTimesRoman24; + void* glutBitmapHelvetica10; + void* glutBitmapHelvetica12; + void* glutBitmapHelvetica18; +#endif + + +/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */ + +/* + * Matches a font ID with a SFG_Font structure pointer. + * This was changed to match the GLUT header style. + */ +static SFG_Font* fghFontByID( void* font ) +{ + /* + * Try matching the font ID and the font data structure + */ + if( font == GLUT_BITMAP_8_BY_13 ) return( &fgFontFixed8x13 ); + if( font == GLUT_BITMAP_9_BY_15 ) return( &fgFontFixed9x15 ); + if( font == GLUT_BITMAP_HELVETICA_10 ) return( &fgFontHelvetica10 ); + if( font == GLUT_BITMAP_HELVETICA_12 ) return( &fgFontHelvetica12 ); + if( font == GLUT_BITMAP_HELVETICA_18 ) return( &fgFontHelvetica18 ); + if( font == GLUT_BITMAP_TIMES_ROMAN_10 ) return( &fgFontTimesRoman10 ); + if( font == GLUT_BITMAP_TIMES_ROMAN_24 ) return( &fgFontTimesRoman24 ); + + /* + * This probably is the library user's fault + */ + g_error( "font 0x%08x not found", font ); +} + + +/* -- INTERFACE FUNCTIONS -------------------------------------------------- */ + +/* + * Draw a bitmap character + */ +void FGAPIENTRY glutBitmapCharacter( void* fontID, int character ) +{ + const guchar* face; + + /* + * First of all we'll need a font to use + */ + SFG_Font* font = fghFontByID( fontID ); + + /* + * Make sure the character we want to output is valid + */ + freeglut_return_if_fail( character > 0 && character < 256 ); + + /* + * Then find the character we want to draw + */ + face = font->Characters[ character - 1 ]; + + /* + * Save the old pixel store settings + */ + glPushClientAttrib( GL_CLIENT_PIXEL_STORE_BIT ); + + /* + * Set up the pixel unpacking ways + */ + glPixelStorei( GL_UNPACK_SWAP_BYTES, GL_FALSE ); + glPixelStorei( GL_UNPACK_LSB_FIRST, GL_FALSE ); + glPixelStorei( GL_UNPACK_ROW_LENGTH, 0 ); + glPixelStorei( GL_UNPACK_SKIP_ROWS, 0 ); + glPixelStorei( GL_UNPACK_SKIP_PIXELS, 0 ); + glPixelStorei( GL_UNPACK_ALIGNMENT, 1 ); + + /* + * We'll use a glBitmap call to draw the font. + */ + glBitmap( + face[ 0 ], font->Height, /* The bitmap's width and height */ + 0, 0, /* The origin -- what the hell? */ + face[ 0 ] + 1, 0, /* The raster advance -- inc. x */ + (face + 1) /* The packed bitmap data... */ + ); + + /* + * Restore the old pixel store settings + */ + glPopClientAttrib(); +} + +/* + * Returns the width in pixels of a font's character + */ +int FGAPIENTRY glutBitmapWidth( void* fontID, int character ) +{ + /* + * First of all, grab the font we need + */ + SFG_Font* font = fghFontByID( fontID ); + + /* + * Make sure the character we want to output is valid + */ + freeglut_return_val_if_fail( character > 0 && character < 256, 0 ); + + /* + * Scan the font looking for the specified character + */ + return( *(font->Characters[ character - 1 ]) + 1 ); +} + +/* + * Draw a stroke character + */ +void FGAPIENTRY glutStrokeCharacter( void* fontID, int character ) +{ + /* + * Stroke fonts are not supported yet, use a bitmap font instead + */ + glutBitmapCharacter( GLUT_BITMAP_8_BY_13, character ); +} + +/* + * Return the width in pixels of a stroke character + */ +int FGAPIENTRY glutStrokeWidth( void* fontID, int character ) +{ + /* + * Stroke fonts are not supported yet, use a bitmap font instead + */ + return( glutBitmapWidth( GLUT_BITMAP_8_BY_13, character ) ); +} + +/* + * Return the width of a string drawn using a bitmap font + */ +int FGAPIENTRY glutBitmapLength( void* fontID, const char* string ) +{ + gint i, length = 0; + + /* + * Using glutBitmapWidth() function to calculate the result + */ + for( i=0; i<(gint) strlen( string ); i++ ) + length += glutBitmapWidth( fontID, string[ i ] ); + + /* + * Return the result now + */ + return( length ); +} + +/* + * Return the width of a string drawn using a stroke font + */ +int FGAPIENTRY glutStrokeLength( void* fontID, const char* string ) +{ + gint i, length = 0; + + /* + * Using glutStrokeWidth() function to calculate the result + */ + for( i=0; i<(gint) strlen( string ); i++ ) + length += glutStrokeWidth( fontID, string[ i ] ); + + /* + * Return the result now + */ + return( length ); +} + +/* + * Returns the height of a bitmap font + */ +int FGAPIENTRY glutBitmapHeight( void* fontID ) +{ + /* + * See which font are we queried about + */ + SFG_Font* font = fghFontByID( fontID ); + + /* + * Return the character set's height + */ + return( font->Height ); +} + +/* + * Returns the height of a stroke font + */ +int FGAPIENTRY glutStrokeHeight( void* font ) +{ + /* + * Stroke fonts are currently not implemented. + * Using GLUT_BITMAP_8_BY_13 bitmap font instead + */ + return( glutBitmapHeight( GLUT_BITMAP_8_BY_13 ) ); +} + +/*** END OF FILE ***/ diff --git a/freeglut/freeglut/freeglut-1.3/freeglut_font_data.c b/freeglut/freeglut/freeglut-1.3/freeglut_font_data.c new file mode 100644 index 0000000..2796db8 --- /dev/null +++ b/freeglut/freeglut/freeglut-1.3/freeglut_font_data.c @@ -0,0 +1,747 @@ +/* + * freeglut_font_data.c + * + * This file has been automatically generated by the genfonts utility. + * + * Copyright (c) 1999-2000 by Pawel W. Olszta + * Written by Pawel W. Olszta, + * + * 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 Sotware. + * + * 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 + * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "../include/GL/freeglut.h" +#include "../include/GL/freeglut_internal.h" + +/* + * Following fonts are defined in this file: + * + * 1. fgFontFixed8x13 <-misc-fixed-medium-r-normal--13-120-75-75-C-80-iso8859-1> + * 2. fgFontFixed9x15 <-misc-fixed-medium-r-normal--15-140-75-75-C-90-iso8859-1> + * 3. fgFontHelvetica10 <-adobe-helvetica-medium-r-normal--10-100-75-75-p-56-iso8859-1> + * 4. fgFontHelvetica12 <-adobe-helvetica-medium-r-normal--12-120-75-75-p-67-iso8859-1> + * 5. fgFontHelvetica18 <-adobe-helvetica-medium-r-normal--18-180-75-75-p-98-iso8859-1> + * 6. fgFontTimesRoman10 <-adobe-times-medium-r-normal--10-100-75-75-p-54-iso8859-1> + * 7. fgFontTimesRoman24 <-adobe-times-medium-r-normal--24-240-75-75-p-124-iso8859-1> + */ + +static const guchar Fixed8x13_Character_032[] = { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Fixed8x13_Character_097[] = { 6, 0, 0,116,140,132,124, 4,120, 0, 0, 0, 0, 0}; +static const guchar Fixed8x13_Character_098[] = { 6, 0, 0,184,196,132,132,196,184,128,128,128, 0, 0}; +static const guchar Fixed8x13_Character_099[] = { 6, 0, 0,120,132,128,128,132,120, 0, 0, 0, 0, 0}; +static const guchar Fixed8x13_Character_100[] = { 6, 0, 0,116,140,132,132,140,116, 4, 4, 4, 0, 0}; +static const guchar Fixed8x13_Character_101[] = { 6, 0, 0,120,132,128,252,132,120, 0, 0, 0, 0, 0}; +static const guchar Fixed8x13_Character_102[] = { 6, 0, 0, 64, 64, 64, 64,248, 64, 64, 68, 56, 0, 0}; +static const guchar Fixed8x13_Character_103[] = { 6,120,132,120,128,112,136,136,116, 0, 0, 0, 0, 0}; +static const guchar Fixed8x13_Character_104[] = { 6, 0, 0,132,132,132,132,196,184,128,128,128, 0, 0}; +static const guchar Fixed8x13_Character_105[] = { 5, 0, 0,248, 32, 32, 32, 32, 96, 0, 32, 0, 0, 0}; +static const guchar Fixed8x13_Character_106[] = { 5,112,136,136, 8, 8, 8, 8, 24, 0, 8, 0, 0, 0}; +static const guchar Fixed8x13_Character_107[] = { 6, 0, 0,132,136,144,224,144,136,128,128,128, 0, 0}; +static const guchar Fixed8x13_Character_108[] = { 5, 0, 0,248, 32, 32, 32, 32, 32, 32, 32, 96, 0, 0}; +static const guchar Fixed8x13_Character_109[] = { 7, 0, 0,130,146,146,146,146,236, 0, 0, 0, 0, 0}; +static const guchar Fixed8x13_Character_110[] = { 6, 0, 0,132,132,132,132,196,184, 0, 0, 0, 0, 0}; +static const guchar Fixed8x13_Character_111[] = { 6, 0, 0,120,132,132,132,132,120, 0, 0, 0, 0, 0}; +static const guchar Fixed8x13_Character_112[] = { 6,128,128,128,184,196,132,196,184, 0, 0, 0, 0, 0}; +static const guchar Fixed8x13_Character_113[] = { 6, 4, 4, 4,116,140,132,140,116, 0, 0, 0, 0, 0}; +static const guchar Fixed8x13_Character_114[] = { 6, 0, 0, 64, 64, 64, 64, 68,184, 0, 0, 0, 0, 0}; +static const guchar Fixed8x13_Character_115[] = { 6, 0, 0,120,132, 24, 96,132,120, 0, 0, 0, 0, 0}; +static const guchar Fixed8x13_Character_116[] = { 6, 0, 0, 56, 68, 64, 64, 64,248, 64, 64, 0, 0, 0}; +static const guchar Fixed8x13_Character_117[] = { 6, 0, 0,116,136,136,136,136,136, 0, 0, 0, 0, 0}; +static const guchar Fixed8x13_Character_119[] = { 7, 0, 0, 68,170,146,146,130,130, 0, 0, 0, 0, 0}; +static const guchar Fixed8x13_Character_118[] = { 5, 0, 0, 32, 80, 80,136,136,136, 0, 0, 0, 0, 0}; +static const guchar Fixed8x13_Character_120[] = { 6, 0, 0,132, 72, 48, 48, 72,132, 0, 0, 0, 0, 0}; +static const guchar Fixed8x13_Character_121[] = { 6,120,132, 4,116,140,132,132,132, 0, 0, 0, 0, 0}; +static const guchar Fixed8x13_Character_122[] = { 6, 0, 0,252, 64, 32, 16, 8,252, 0, 0, 0, 0, 0}; +static const guchar Fixed8x13_Character_065[] = { 6, 0, 0,132,132,132,252,132,132,132, 72, 48, 0, 0}; +static const guchar Fixed8x13_Character_066[] = { 7, 0, 0,252, 66, 66, 66,124, 66, 66, 66,252, 0, 0}; +static const guchar Fixed8x13_Character_067[] = { 6, 0, 0,120,132,128,128,128,128,128,132,120, 0, 0}; +static const guchar Fixed8x13_Character_068[] = { 7, 0, 0,252, 66, 66, 66, 66, 66, 66, 66,252, 0, 0}; +static const guchar Fixed8x13_Character_069[] = { 6, 0, 0,252,128,128,128,240,128,128,128,252, 0, 0}; +static const guchar Fixed8x13_Character_070[] = { 6, 0, 0,128,128,128,128,240,128,128,128,252, 0, 0}; +static const guchar Fixed8x13_Character_071[] = { 6, 0, 0,116,140,132,156,128,128,128,132,120, 0, 0}; +static const guchar Fixed8x13_Character_072[] = { 6, 0, 0,132,132,132,132,252,132,132,132,132, 0, 0}; +static const guchar Fixed8x13_Character_073[] = { 5, 0, 0,248, 32, 32, 32, 32, 32, 32, 32,248, 0, 0}; +static const guchar Fixed8x13_Character_074[] = { 6, 0, 0,112,136, 8, 8, 8, 8, 8, 8, 60, 0, 0}; +static const guchar Fixed8x13_Character_075[] = { 6, 0, 0,132,136,144,160,192,160,144,136,132, 0, 0}; +static const guchar Fixed8x13_Character_076[] = { 6, 0, 0,252,128,128,128,128,128,128,128,128, 0, 0}; +static const guchar Fixed8x13_Character_077[] = { 7, 0, 0,130,130,130,146,146,170,198,130,130, 0, 0}; +static const guchar Fixed8x13_Character_078[] = { 6, 0, 0,132,132,132,140,148,164,196,132,132, 0, 0}; +static const guchar Fixed8x13_Character_079[] = { 6, 0, 0,120,132,132,132,132,132,132,132,120, 0, 0}; +static const guchar Fixed8x13_Character_080[] = { 6, 0, 0,128,128,128,128,248,132,132,132,248, 0, 0}; +static const guchar Fixed8x13_Character_081[] = { 6, 0, 4,120,148,164,132,132,132,132,132,120, 0, 0}; +static const guchar Fixed8x13_Character_082[] = { 6, 0, 0,132,136,144,160,248,132,132,132,248, 0, 0}; +static const guchar Fixed8x13_Character_083[] = { 6, 0, 0,120,132, 4, 4,120,128,128,132,120, 0, 0}; +static const guchar Fixed8x13_Character_084[] = { 7, 0, 0, 16, 16, 16, 16, 16, 16, 16, 16,254, 0, 0}; +static const guchar Fixed8x13_Character_085[] = { 6, 0, 0,120,132,132,132,132,132,132,132,132, 0, 0}; +static const guchar Fixed8x13_Character_087[] = { 7, 0, 0, 68,170,146,146,146,130,130,130,130, 0, 0}; +static const guchar Fixed8x13_Character_086[] = { 7, 0, 0, 16, 40, 40, 40, 68, 68, 68,130,130, 0, 0}; +static const guchar Fixed8x13_Character_088[] = { 7, 0, 0,130,130, 68, 40, 16, 40, 68,130,130, 0, 0}; +static const guchar Fixed8x13_Character_089[] = { 7, 0, 0, 16, 16, 16, 16, 16, 40, 68,130,130, 0, 0}; +static const guchar Fixed8x13_Character_090[] = { 6, 0, 0,252,128,128, 64, 32, 16, 8, 4,252, 0, 0}; +static const guchar Fixed8x13_Character_048[] = { 6, 0, 0, 48, 72,132,132,132,132,132, 72, 48, 0, 0}; +static const guchar Fixed8x13_Character_049[] = { 5, 0, 0,248, 32, 32, 32, 32, 32,160, 96, 32, 0, 0}; +static const guchar Fixed8x13_Character_050[] = { 6, 0, 0,252,128, 64, 48, 8, 4,132,132,120, 0, 0}; +static const guchar Fixed8x13_Character_051[] = { 6, 0, 0,120,132, 4, 4, 56, 16, 8, 4,252, 0, 0}; +static const guchar Fixed8x13_Character_052[] = { 6, 0, 0, 8, 8,252,136,136, 72, 40, 24, 8, 0, 0}; +static const guchar Fixed8x13_Character_053[] = { 6, 0, 0,120,132, 4, 4,196,184,128,128,252, 0, 0}; +static const guchar Fixed8x13_Character_054[] = { 6, 0, 0,120,132,132,196,184,128,128, 64, 56, 0, 0}; +static const guchar Fixed8x13_Character_055[] = { 6, 0, 0, 64, 64, 32, 32, 16, 16, 8, 4,252, 0, 0}; +static const guchar Fixed8x13_Character_056[] = { 6, 0, 0,120,132,132,132,120,132,132,132,120, 0, 0}; +static const guchar Fixed8x13_Character_057[] = { 6, 0, 0,112, 8, 4, 4,116,140,132,132,120, 0, 0}; +static const guchar Fixed8x13_Character_096[] = { 4, 0, 0, 0, 0, 0, 0, 0, 0, 16, 96,224, 0, 0}; +static const guchar Fixed8x13_Character_126[] = { 5, 0, 0, 0, 0, 0, 0, 0, 0,144,168, 72, 0, 0}; +static const guchar Fixed8x13_Character_033[] = { 1, 0, 0,128, 0,128,128,128,128,128,128,128, 0, 0}; +static const guchar Fixed8x13_Character_064[] = { 6, 0, 0,120,128,148,172,164,156,132,132,120, 0, 0}; +static const guchar Fixed8x13_Character_035[] = { 6, 0, 0, 0, 72, 72,252, 72,252, 72, 72, 0, 0, 0}; +static const guchar Fixed8x13_Character_036[] = { 5, 0, 0, 0, 32,240, 40,112,160,120, 32, 0, 0, 0}; +static const guchar Fixed8x13_Character_037[] = { 6, 0, 0,136, 84, 72, 32, 16, 16, 72,164, 68, 0, 0}; +static const guchar Fixed8x13_Character_094[] = { 5, 0, 0, 0, 0, 0, 0, 0, 0,136, 80, 32, 0, 0}; +static const guchar Fixed8x13_Character_038[] = { 6, 0, 0,116,136,148, 96,144,144, 96, 0, 0, 0, 0}; +static const guchar Fixed8x13_Character_042[] = { 6, 0, 0, 0, 0, 72, 48,252, 48, 72, 0, 0, 0, 0}; +static const guchar Fixed8x13_Character_040[] = { 3, 0, 0, 32, 64, 64,128,128,128, 64, 64, 32, 0, 0}; +static const guchar Fixed8x13_Character_041[] = { 3, 0, 0,128, 64, 64, 32, 32, 32, 64, 64,128, 0, 0}; +static const guchar Fixed8x13_Character_045[] = { 6, 0, 0, 0, 0, 0, 0,252, 0, 0, 0, 0, 0, 0}; +static const guchar Fixed8x13_Character_095[] = { 7, 0,254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Fixed8x13_Character_061[] = { 6, 0, 0, 0, 0,252, 0, 0,252, 0, 0, 0, 0, 0}; +static const guchar Fixed8x13_Character_043[] = { 5, 0, 0, 0, 0, 32, 32,248, 32, 32, 0, 0, 0, 0}; +static const guchar Fixed8x13_Character_091[] = { 4, 0, 0,240,128,128,128,128,128,128,128,240, 0, 0}; +static const guchar Fixed8x13_Character_123[] = { 5, 0, 0, 56, 64, 64, 32,192, 32, 64, 64, 56, 0, 0}; +static const guchar Fixed8x13_Character_125[] = { 5, 0, 0,224, 16, 16, 32, 24, 32, 16, 16,224, 0, 0}; +static const guchar Fixed8x13_Character_093[] = { 4, 0, 0,240, 16, 16, 16, 16, 16, 16, 16,240, 0, 0}; +static const guchar Fixed8x13_Character_059[] = { 4, 0,128, 96,112, 0, 0, 32,112, 32, 0, 0, 0, 0}; +static const guchar Fixed8x13_Character_058[] = { 3, 0, 64,224, 64, 0, 0, 64,224, 64, 0, 0, 0, 0}; +static const guchar Fixed8x13_Character_044[] = { 4, 0,128, 96,112, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Fixed8x13_Character_046[] = { 3, 0, 64,224, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Fixed8x13_Character_060[] = { 5, 0, 0, 8, 16, 32, 64,128, 64, 32, 16, 8, 0, 0}; +static const guchar Fixed8x13_Character_062[] = { 5, 0, 0,128, 64, 32, 16, 8, 16, 32, 64,128, 0, 0}; +static const guchar Fixed8x13_Character_047[] = { 7, 0, 0,128,128, 64, 32, 16, 8, 4, 2, 2, 0, 0}; +static const guchar Fixed8x13_Character_063[] = { 6, 0, 0, 16, 0, 16, 16, 8, 4,132,132,120, 0, 0}; +static const guchar Fixed8x13_Character_092[] = { 7, 0, 0, 2, 2, 4, 8, 16, 32, 64,128,128, 0, 0}; +static const guchar Fixed8x13_Character_034[] = { 4, 0, 0, 0, 0, 0, 0, 0, 0,144,144,144, 0, 0}; + +/* The font characters mapping: */ +static const guchar* Fixed8x13_Character_Map[] = {Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_032,Fixed8x13_Character_033,Fixed8x13_Character_034,Fixed8x13_Character_035,Fixed8x13_Character_036,Fixed8x13_Character_037,Fixed8x13_Character_038,Fixed8x13_Character_042,Fixed8x13_Character_040,Fixed8x13_Character_041,Fixed8x13_Character_042,Fixed8x13_Character_043,Fixed8x13_Character_044,Fixed8x13_Character_045,Fixed8x13_Character_046,Fixed8x13_Character_047,Fixed8x13_Character_048,Fixed8x13_Character_049,Fixed8x13_Character_050,Fixed8x13_Character_051,Fixed8x13_Character_052,Fixed8x13_Character_053,Fixed8x13_Character_054,Fixed8x13_Character_055,Fixed8x13_Character_056,Fixed8x13_Character_057,Fixed8x13_Character_058,Fixed8x13_Character_059,Fixed8x13_Character_060,Fixed8x13_Character_061,Fixed8x13_Character_062,Fixed8x13_Character_063,Fixed8x13_Character_064,Fixed8x13_Character_065,Fixed8x13_Character_066,Fixed8x13_Character_067,Fixed8x13_Character_068,Fixed8x13_Character_069,Fixed8x13_Character_070,Fixed8x13_Character_071,Fixed8x13_Character_072,Fixed8x13_Character_073,Fixed8x13_Character_074,Fixed8x13_Character_075,Fixed8x13_Character_076,Fixed8x13_Character_077,Fixed8x13_Character_078,Fixed8x13_Character_079,Fixed8x13_Character_080,Fixed8x13_Character_081,Fixed8x13_Character_082,Fixed8x13_Character_083,Fixed8x13_Character_084,Fixed8x13_Character_085,Fixed8x13_Character_086,Fixed8x13_Character_087,Fixed8x13_Character_088,Fixed8x13_Character_089,Fixed8x13_Character_090,Fixed8x13_Character_091,Fixed8x13_Character_092,Fixed8x13_Character_093,Fixed8x13_Character_094,Fixed8x13_Character_095,Fixed8x13_Character_096,Fixed8x13_Character_097,Fixed8x13_Character_098,Fixed8x13_Character_099,Fixed8x13_Character_100,Fixed8x13_Character_101,Fixed8x13_Character_102,Fixed8x13_Character_103,Fixed8x13_Character_104,Fixed8x13_Character_105,Fixed8x13_Character_106,Fixed8x13_Character_107,Fixed8x13_Character_108,Fixed8x13_Character_109,Fixed8x13_Character_110,Fixed8x13_Character_111,Fixed8x13_Character_112,Fixed8x13_Character_113,Fixed8x13_Character_114,Fixed8x13_Character_115,Fixed8x13_Character_116,Fixed8x13_Character_117,Fixed8x13_Character_118,Fixed8x13_Character_119,Fixed8x13_Character_120,Fixed8x13_Character_121,Fixed8x13_Character_122,Fixed8x13_Character_123,Fixed8x13_Character_042,Fixed8x13_Character_125,Fixed8x13_Character_126,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,NULL}; + +/* The font structure: */ +const SFG_Font fgFontFixed8x13 = { "-misc-fixed-medium-r-normal--13-120-75-75-C-80-iso8859-1", 93, 13, Fixed8x13_Character_Map }; + +static const guchar Fixed9x15_Character_032[] = { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Fixed9x15_Character_097[] = { 7, 0, 0, 0,122,134,130,126, 2, 2,124, 0, 0, 0, 0, 0}; +static const guchar Fixed9x15_Character_098[] = { 7, 0, 0, 0,188,194,130,130,130,194,188,128,128,128, 0, 0}; +static const guchar Fixed9x15_Character_099[] = { 7, 0, 0, 0,124,130,128,128,128,130,124, 0, 0, 0, 0, 0}; +static const guchar Fixed9x15_Character_100[] = { 7, 0, 0, 0,122,134,130,130,130,134,122, 2, 2, 2, 0, 0}; +static const guchar Fixed9x15_Character_101[] = { 7, 0, 0, 0,124,128,128,254,130,130,124, 0, 0, 0, 0, 0}; +static const guchar Fixed9x15_Character_102[] = { 7, 0, 0, 0, 32, 32, 32, 32,248, 32, 32, 34, 34, 28, 0, 0}; +static const guchar Fixed9x15_Character_103[] = { 7,124,130,130,124,128,120,132,132,132,122, 0, 0, 0, 0, 0}; +static const guchar Fixed9x15_Character_104[] = { 7, 0, 0, 0,130,130,130,130,130,194,188,128,128,128, 0, 0}; +static const guchar Fixed9x15_Character_105[] = { 5, 0, 0, 0,248, 32, 32, 32, 32, 32,224, 0, 0, 96, 0, 0}; +static const guchar Fixed9x15_Character_106[] = { 6,120,132,132,132, 4, 4, 4, 4, 4, 28, 0, 0, 12, 0, 0}; +static const guchar Fixed9x15_Character_107[] = { 7, 0, 0, 0,130,140,176,192,176,140,130,128,128,128, 0, 0}; +static const guchar Fixed9x15_Character_108[] = { 5, 0, 0, 0,248, 32, 32, 32, 32, 32, 32, 32, 32,224, 0, 0}; +static const guchar Fixed9x15_Character_109[] = { 7, 0, 0, 0,130,146,146,146,146,146,236, 0, 0, 0, 0, 0}; +static const guchar Fixed9x15_Character_110[] = { 7, 0, 0, 0,130,130,130,130,130,194,188, 0, 0, 0, 0, 0}; +static const guchar Fixed9x15_Character_111[] = { 7, 0, 0, 0,124,130,130,130,130,130,124, 0, 0, 0, 0, 0}; +static const guchar Fixed9x15_Character_112[] = { 7,128,128,128,188,194,130,130,130,194,188, 0, 0, 0, 0, 0}; +static const guchar Fixed9x15_Character_113[] = { 7, 2, 2, 2,122,134,130,130,130,134,122, 0, 0, 0, 0, 0}; +static const guchar Fixed9x15_Character_114[] = { 7, 0, 0, 0, 64, 64, 64, 64, 66, 98,156, 0, 0, 0, 0, 0}; +static const guchar Fixed9x15_Character_115[] = { 7, 0, 0, 0,124,130, 2,124,128,130,124, 0, 0, 0, 0, 0}; +static const guchar Fixed9x15_Character_116[] = { 7, 0, 0, 0, 28, 34, 32, 32, 32, 32,252, 32, 32, 0, 0, 0}; +static const guchar Fixed9x15_Character_117[] = { 7, 0, 0, 0,122,132,132,132,132,132,132, 0, 0, 0, 0, 0}; +static const guchar Fixed9x15_Character_119[] = { 7, 0, 0, 0, 68,170,146,146,146,130,130, 0, 0, 0, 0, 0}; +static const guchar Fixed9x15_Character_118[] = { 7, 0, 0, 0, 16, 40, 40, 68, 68,130,130, 0, 0, 0, 0, 0}; +static const guchar Fixed9x15_Character_120[] = { 7, 0, 0, 0,130, 68, 40, 16, 40, 68,130, 0, 0, 0, 0, 0}; +static const guchar Fixed9x15_Character_121[] = { 6,120,132, 4,116,140,132,132,132,132,132, 0, 0, 0, 0, 0}; +static const guchar Fixed9x15_Character_122[] = { 7, 0, 0, 0,254, 64, 32, 16, 8, 4,254, 0, 0, 0, 0, 0}; +static const guchar Fixed9x15_Character_065[] = { 7, 0, 0, 0,130,130,130,254,130,130,130, 68, 40, 16, 0, 0}; +static const guchar Fixed9x15_Character_066[] = { 7, 0, 0, 0,252, 66, 66, 66, 66,124, 66, 66, 66,252, 0, 0}; +static const guchar Fixed9x15_Character_067[] = { 7, 0, 0, 0,124,130,128,128,128,128,128,128,130,124, 0, 0}; +static const guchar Fixed9x15_Character_068[] = { 7, 0, 0, 0,252, 66, 66, 66, 66, 66, 66, 66, 66,252, 0, 0}; +static const guchar Fixed9x15_Character_069[] = { 7, 0, 0, 0,254, 64, 64, 64, 64,120, 64, 64, 64,254, 0, 0}; +static const guchar Fixed9x15_Character_070[] = { 7, 0, 0, 0, 64, 64, 64, 64, 64,120, 64, 64, 64,254, 0, 0}; +static const guchar Fixed9x15_Character_071[] = { 7, 0, 0, 0,124,130,130,130,142,128,128,128,130,124, 0, 0}; +static const guchar Fixed9x15_Character_072[] = { 7, 0, 0, 0,130,130,130,130,130,254,130,130,130,130, 0, 0}; +static const guchar Fixed9x15_Character_073[] = { 5, 0, 0, 0,248, 32, 32, 32, 32, 32, 32, 32, 32,248, 0, 0}; +static const guchar Fixed9x15_Character_074[] = { 7, 0, 0, 0,120,132, 4, 4, 4, 4, 4, 4, 4, 30, 0, 0}; +static const guchar Fixed9x15_Character_075[] = { 7, 0, 0, 0,130,132,136,144,160,224,144,136,132,130, 0, 0}; +static const guchar Fixed9x15_Character_076[] = { 7, 0, 0, 0,254,128,128,128,128,128,128,128,128,128, 0, 0}; +static const guchar Fixed9x15_Character_077[] = { 7, 0, 0, 0,130,130,130,146,146,170,170,198,130,130, 0, 0}; +static const guchar Fixed9x15_Character_078[] = { 7, 0, 0, 0,130,130,130,134,138,146,162,194,130,130, 0, 0}; +static const guchar Fixed9x15_Character_079[] = { 7, 0, 0, 0,124,130,130,130,130,130,130,130,130,124, 0, 0}; +static const guchar Fixed9x15_Character_080[] = { 7, 0, 0, 0,128,128,128,128,128,252,130,130,130,252, 0, 0}; +static const guchar Fixed9x15_Character_081[] = { 7, 0, 6, 8,124,146,162,130,130,130,130,130,130,124, 0, 0}; +static const guchar Fixed9x15_Character_082[] = { 7, 0, 0, 0,130,130,132,136,144,252,130,130,130,252, 0, 0}; +static const guchar Fixed9x15_Character_083[] = { 7, 0, 0, 0,124,130,130, 2, 12,112,128,130,130,124, 0, 0}; +static const guchar Fixed9x15_Character_084[] = { 7, 0, 0, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16,254, 0, 0}; +static const guchar Fixed9x15_Character_085[] = { 7, 0, 0, 0,124,130,130,130,130,130,130,130,130,130, 0, 0}; +static const guchar Fixed9x15_Character_087[] = { 7, 0, 0, 0, 68,170,146,146,146,146,130,130,130,130, 0, 0}; +static const guchar Fixed9x15_Character_086[] = { 7, 0, 0, 0, 16, 40, 40, 40, 68, 68, 68,130,130,130, 0, 0}; +static const guchar Fixed9x15_Character_088[] = { 7, 0, 0, 0,130,130, 68, 40, 16, 16, 40, 68,130,130, 0, 0}; +static const guchar Fixed9x15_Character_089[] = { 7, 0, 0, 0, 16, 16, 16, 16, 16, 16, 40, 68,130,130, 0, 0}; +static const guchar Fixed9x15_Character_090[] = { 7, 0, 0, 0,254,128,128, 64, 32, 16, 8, 4, 2,254, 0, 0}; +static const guchar Fixed9x15_Character_048[] = { 7, 0, 0, 0, 56, 68,130,130,130,130,130,130, 68, 56, 0, 0}; +static const guchar Fixed9x15_Character_049[] = { 7, 0, 0, 0,254, 16, 16, 16, 16, 16,144, 80, 48, 16, 0, 0}; +static const guchar Fixed9x15_Character_050[] = { 7, 0, 0, 0,254,128, 64, 48, 8, 4, 2,130,130,124, 0, 0}; +static const guchar Fixed9x15_Character_051[] = { 7, 0, 0, 0,124,130, 2, 2, 2, 28, 8, 4, 2,254, 0, 0}; +static const guchar Fixed9x15_Character_052[] = { 7, 0, 0, 0, 4, 4, 4,254,132, 68, 36, 20, 12, 4, 0, 0}; +static const guchar Fixed9x15_Character_053[] = { 7, 0, 0, 0,124,130, 2, 2, 2,194,188,128,128,254, 0, 0}; +static const guchar Fixed9x15_Character_054[] = { 7, 0, 0, 0,124,130,130,130,194,188,128,128, 64, 60, 0, 0}; +static const guchar Fixed9x15_Character_055[] = { 7, 0, 0, 0, 64, 64, 32, 32, 16, 8, 4, 2, 2,254, 0, 0}; +static const guchar Fixed9x15_Character_056[] = { 7, 0, 0, 0, 56, 68,130,130, 68, 56, 68,130, 68, 56, 0, 0}; +static const guchar Fixed9x15_Character_057[] = { 7, 0, 0, 0,120, 4, 2, 2,122,134,130,130,130,124, 0, 0}; +static const guchar Fixed9x15_Character_096[] = { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 32, 64,192, 0, 0}; +static const guchar Fixed9x15_Character_126[] = { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,146, 98, 0, 0}; +static const guchar Fixed9x15_Character_033[] = { 1, 0, 0, 0,128,128, 0, 0,128,128,128,128,128,128,128, 0}; +static const guchar Fixed9x15_Character_064[] = { 7, 0, 0, 0,124,128,128,154,166,162,158,130,130,124, 0, 0}; +static const guchar Fixed9x15_Character_035[] = { 6, 0, 0, 0, 0, 72, 72,252, 72, 72,252, 72, 72, 0, 0, 0}; +static const guchar Fixed9x15_Character_036[] = { 7, 0, 0, 16,124,146, 18, 18, 20, 56, 80,144,146,124, 16, 0}; +static const guchar Fixed9x15_Character_037[] = { 7, 0, 0, 0,132, 74, 74, 36, 16, 16, 72,164,164, 66, 0, 0}; +static const guchar Fixed9x15_Character_094[] = { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,130, 68, 40, 16, 0, 0}; +static const guchar Fixed9x15_Character_038[] = { 7, 0, 0, 0, 98,148,136,148, 98, 96,144,144,144, 96, 0, 0}; +static const guchar Fixed9x15_Character_042[] = { 7, 0, 0, 0, 0, 16,146, 84, 56, 84,146, 16, 0, 0, 0, 0}; +static const guchar Fixed9x15_Character_040[] = { 3, 0, 0, 32, 64, 64,128,128,128,128,128,128, 64, 64, 32, 0}; +static const guchar Fixed9x15_Character_041[] = { 3, 0, 0,128, 64, 64, 32, 32, 32, 32, 32, 32, 64, 64,128, 0}; +static const guchar Fixed9x15_Character_045[] = { 7, 0, 0, 0, 0, 0, 0, 0,254, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Fixed9x15_Character_095[] = { 8, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Fixed9x15_Character_061[] = { 7, 0, 0, 0, 0, 0,254, 0, 0,254, 0, 0, 0, 0, 0, 0}; +static const guchar Fixed9x15_Character_043[] = { 7, 0, 0, 0, 0, 16, 16, 16,254, 16, 16, 16, 0, 0, 0, 0}; +static const guchar Fixed9x15_Character_091[] = { 4, 0, 0,240,128,128,128,128,128,128,128,128,128,128,240, 0}; +static const guchar Fixed9x15_Character_123[] = { 5, 0, 0, 56, 64, 64, 64, 32,192,192, 32, 64, 64, 64, 56, 0}; +static const guchar Fixed9x15_Character_125[] = { 5, 0, 0,224, 16, 16, 16, 32, 24, 24, 32, 16, 16, 16,224, 0}; +static const guchar Fixed9x15_Character_093[] = { 4, 0, 0,240, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,240, 0}; +static const guchar Fixed9x15_Character_059[] = { 2,128, 64, 64,192,192, 0, 0, 0,192,192, 0, 0, 0, 0, 0}; +static const guchar Fixed9x15_Character_058[] = { 2, 0, 0, 0,192,192, 0, 0, 0,192,192, 0, 0, 0, 0, 0}; +static const guchar Fixed9x15_Character_044[] = { 2,128, 64, 64,192,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Fixed9x15_Character_046[] = { 2, 0, 0, 0,192,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Fixed9x15_Character_060[] = { 5, 0, 0, 0, 8, 16, 32, 64,128,128, 64, 32, 16, 8, 0, 0}; +static const guchar Fixed9x15_Character_062[] = { 5, 0, 0, 0,128, 64, 32, 16, 8, 8, 16, 32, 64,128, 0, 0}; +static const guchar Fixed9x15_Character_047[] = { 7, 0, 0, 0,128, 64, 64, 32, 16, 16, 8, 4, 4, 2, 0, 0}; +static const guchar Fixed9x15_Character_063[] = { 7, 0, 0, 0, 16, 0, 16, 16, 8, 4, 2,130,130,124, 0, 0}; +static const guchar Fixed9x15_Character_092[] = { 7, 0, 0, 0, 2, 4, 4, 8, 16, 16, 32, 64, 64,128, 0, 0}; +static const guchar Fixed9x15_Character_034[] = { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,144,144, 0, 0}; + +/* The font characters mapping: */ +static const guchar* Fixed9x15_Character_Map[] = {Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_032,Fixed9x15_Character_033,Fixed9x15_Character_034,Fixed9x15_Character_035,Fixed9x15_Character_036,Fixed9x15_Character_037,Fixed9x15_Character_038,Fixed9x15_Character_042,Fixed9x15_Character_040,Fixed9x15_Character_041,Fixed9x15_Character_042,Fixed9x15_Character_043,Fixed9x15_Character_044,Fixed9x15_Character_045,Fixed9x15_Character_046,Fixed9x15_Character_047,Fixed9x15_Character_048,Fixed9x15_Character_049,Fixed9x15_Character_050,Fixed9x15_Character_051,Fixed9x15_Character_052,Fixed9x15_Character_053,Fixed9x15_Character_054,Fixed9x15_Character_055,Fixed9x15_Character_056,Fixed9x15_Character_057,Fixed9x15_Character_058,Fixed9x15_Character_059,Fixed9x15_Character_060,Fixed9x15_Character_061,Fixed9x15_Character_062,Fixed9x15_Character_063,Fixed9x15_Character_064,Fixed9x15_Character_065,Fixed9x15_Character_066,Fixed9x15_Character_067,Fixed9x15_Character_068,Fixed9x15_Character_069,Fixed9x15_Character_070,Fixed9x15_Character_071,Fixed9x15_Character_072,Fixed9x15_Character_073,Fixed9x15_Character_074,Fixed9x15_Character_075,Fixed9x15_Character_076,Fixed9x15_Character_077,Fixed9x15_Character_078,Fixed9x15_Character_079,Fixed9x15_Character_080,Fixed9x15_Character_081,Fixed9x15_Character_082,Fixed9x15_Character_083,Fixed9x15_Character_084,Fixed9x15_Character_085,Fixed9x15_Character_086,Fixed9x15_Character_087,Fixed9x15_Character_088,Fixed9x15_Character_089,Fixed9x15_Character_090,Fixed9x15_Character_091,Fixed9x15_Character_092,Fixed9x15_Character_093,Fixed9x15_Character_094,Fixed9x15_Character_095,Fixed9x15_Character_096,Fixed9x15_Character_097,Fixed9x15_Character_098,Fixed9x15_Character_099,Fixed9x15_Character_100,Fixed9x15_Character_101,Fixed9x15_Character_102,Fixed9x15_Character_103,Fixed9x15_Character_104,Fixed9x15_Character_105,Fixed9x15_Character_106,Fixed9x15_Character_107,Fixed9x15_Character_108,Fixed9x15_Character_109,Fixed9x15_Character_110,Fixed9x15_Character_111,Fixed9x15_Character_112,Fixed9x15_Character_113,Fixed9x15_Character_114,Fixed9x15_Character_115,Fixed9x15_Character_116,Fixed9x15_Character_117,Fixed9x15_Character_118,Fixed9x15_Character_119,Fixed9x15_Character_120,Fixed9x15_Character_121,Fixed9x15_Character_122,Fixed9x15_Character_123,Fixed9x15_Character_042,Fixed9x15_Character_125,Fixed9x15_Character_126,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,NULL}; + +/* The font structure: */ +const SFG_Font fgFontFixed9x15 = { "-misc-fixed-medium-r-normal--15-140-75-75-C-90-iso8859-1", 93, 15, Fixed9x15_Character_Map }; + +static const guchar Helvetica10_Character_032[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_097[] = { 5, 0, 0,104,144,144,112, 16,224, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_098[] = { 5, 0, 0,176,200,136,136,200,176,128,128, 0, 0, 0}; +static const guchar Helvetica10_Character_099[] = { 4, 0, 0, 96,144,128,128,144, 96, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_100[] = { 5, 0, 0,104,152,136,136,152,104, 8, 8, 0, 0, 0}; +static const guchar Helvetica10_Character_101[] = { 4, 0, 0, 96,144,128,240,144, 96, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_102[] = { 4, 0, 0, 64, 64, 64, 64, 64,224, 64, 48, 0, 0, 0}; +static const guchar Helvetica10_Character_103[] = { 5,112, 8,104,152,136,136,152,104, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_104[] = { 5, 0, 0,136,136,136,136,200,176,128,128, 0, 0, 0}; +static const guchar Helvetica10_Character_105[] = { 1, 0, 0,128,128,128,128,128,128, 0,128, 0, 0, 0}; +static const guchar Helvetica10_Character_106[] = { 1, 0,128,128,128,128,128,128,128, 0,128, 0, 0, 0}; +static const guchar Helvetica10_Character_107[] = { 4, 0, 0,144,144,160,192,160,144,128,128, 0, 0, 0}; +static const guchar Helvetica10_Character_108[] = { 1, 0, 0,128,128,128,128,128,128,128,128, 0, 0, 0}; +static const guchar Helvetica10_Character_109[] = { 7, 0, 0,146,146,146,146,146,236, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_110[] = { 5, 0, 0,136,136,136,136,200,176, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_111[] = { 5, 0, 0,112,136,136,136,136,112, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_112[] = { 5,128,128,176,200,136,136,200,176, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_113[] = { 5, 8, 8,104,152,136,136,152,104, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_114[] = { 3, 0, 0,128,128,128,128,192,160, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_115[] = { 4, 0, 0, 96,144, 16, 96,144, 96, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_116[] = { 3, 0, 0, 96, 64, 64, 64, 64,224, 64, 64, 0, 0, 0}; +static const guchar Helvetica10_Character_117[] = { 4, 0, 0,112,144,144,144,144,144, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_119[] = { 7, 0, 0, 40, 40, 84, 84,146,146, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_118[] = { 5, 0, 0, 32, 32, 80, 80,136,136, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_120[] = { 5, 0, 0,136,136, 80, 32, 80,136, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_121[] = { 4,128, 64, 64, 96,160,160,144,144, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_122[] = { 4, 0, 0,240,128, 64, 32, 16,240, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_065[] = { 7, 0, 0,130,130,124, 68, 40, 40, 16, 16, 0, 0, 0}; +static const guchar Helvetica10_Character_066[] = { 5, 0, 0,240,136,136,136,240,136,136,240, 0, 0, 0}; +static const guchar Helvetica10_Character_067[] = { 6, 0, 0,120,132,128,128,128,128,132,120, 0, 0, 0}; +static const guchar Helvetica10_Character_068[] = { 6, 0, 0,240,136,132,132,132,132,136,240, 0, 0, 0}; +static const guchar Helvetica10_Character_069[] = { 5, 0, 0,248,128,128,128,248,128,128,248, 0, 0, 0}; +static const guchar Helvetica10_Character_070[] = { 5, 0, 0,128,128,128,128,240,128,128,248, 0, 0, 0}; +static const guchar Helvetica10_Character_071[] = { 6, 0, 0,116,140,132,140,128,128,132,120, 0, 0, 0}; +static const guchar Helvetica10_Character_072[] = { 6, 0, 0,132,132,132,132,252,132,132,132, 0, 0, 0}; +static const guchar Helvetica10_Character_073[] = { 1, 0, 0,128,128,128,128,128,128,128,128, 0, 0, 0}; +static const guchar Helvetica10_Character_074[] = { 4, 0, 0, 96,144, 16, 16, 16, 16, 16, 16, 0, 0, 0}; +static const guchar Helvetica10_Character_075[] = { 5, 0, 0,136,136,144,144,224,160,144,136, 0, 0, 0}; +static const guchar Helvetica10_Character_076[] = { 4, 0, 0,240,128,128,128,128,128,128,128, 0, 0, 0}; +static const guchar Helvetica10_Character_077[] = { 7, 0, 0,146,146,146,170,170,198,198,130, 0, 0, 0}; +static const guchar Helvetica10_Character_078[] = { 6, 0, 0,140,140,148,148,164,164,196,196, 0, 0, 0}; +static const guchar Helvetica10_Character_079[] = { 6, 0, 0,120,132,132,132,132,132,132,120, 0, 0, 0}; +static const guchar Helvetica10_Character_080[] = { 5, 0, 0,128,128,128,128,240,136,136,240, 0, 0, 0}; +static const guchar Helvetica10_Character_081[] = { 7, 0, 2,124,140,148,132,132,132,132,120, 0, 0, 0}; +static const guchar Helvetica10_Character_082[] = { 5, 0, 0,136,136,136,136,240,136,136,240, 0, 0, 0}; +static const guchar Helvetica10_Character_083[] = { 5, 0, 0,112,136,136, 8,112,128,136,112, 0, 0, 0}; +static const guchar Helvetica10_Character_084[] = { 5, 0, 0, 32, 32, 32, 32, 32, 32, 32,248, 0, 0, 0}; +static const guchar Helvetica10_Character_085[] = { 6, 0, 0,120,132,132,132,132,132,132,132, 0, 0, 0}; +static const guchar Helvetica10_Character_087[] = { 9, 0, 0, 0, 0, 34, 0, 34, 0, 34, 0, 85, 0, 73, 0, 73, 0,136,128,136,128, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_086[] = { 7, 0, 0, 16, 40, 40, 68, 68, 68,130,130, 0, 0, 0}; +static const guchar Helvetica10_Character_088[] = { 5, 0, 0,136,136, 80, 80, 32, 80,136,136, 0, 0, 0}; +static const guchar Helvetica10_Character_089[] = { 7, 0, 0, 16, 16, 16, 40, 40, 68, 68,130, 0, 0, 0}; +static const guchar Helvetica10_Character_090[] = { 5, 0, 0,248,128, 64, 32, 32, 16, 8,248, 0, 0, 0}; +static const guchar Helvetica10_Character_048[] = { 5, 0, 0,112,136,136,136,136,136,136,112, 0, 0, 0}; +static const guchar Helvetica10_Character_049[] = { 2, 0, 0, 64, 64, 64, 64, 64, 64,192, 64, 0, 0, 0}; +static const guchar Helvetica10_Character_050[] = { 5, 0, 0,248,128, 64, 48, 8, 8,136,112, 0, 0, 0}; +static const guchar Helvetica10_Character_051[] = { 5, 0, 0,112,136, 8, 8, 48, 8,136,112, 0, 0, 0}; +static const guchar Helvetica10_Character_052[] = { 5, 0, 0, 16, 16,248,144, 80, 80, 48, 16, 0, 0, 0}; +static const guchar Helvetica10_Character_053[] = { 5, 0, 0,112,136, 8, 8,240,128,128,248, 0, 0, 0}; +static const guchar Helvetica10_Character_054[] = { 5, 0, 0,112,136,136,200,176,128,136,112, 0, 0, 0}; +static const guchar Helvetica10_Character_055[] = { 5, 0, 0, 64, 64, 32, 32, 16, 16, 8,248, 0, 0, 0}; +static const guchar Helvetica10_Character_056[] = { 5, 0, 0,112,136,136,136,112,136,136,112, 0, 0, 0}; +static const guchar Helvetica10_Character_057[] = { 5, 0, 0,112,136, 8,104,152,136,136,112, 0, 0, 0}; +static const guchar Helvetica10_Character_096[] = { 2, 0, 0, 0, 0, 0, 0, 0,128,128, 64, 0, 0, 0}; +static const guchar Helvetica10_Character_126[] = { 6, 0, 0, 0, 0, 0,152,100, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_033[] = { 1, 0, 0,128, 0,128,128,128,128,128,128, 0, 0, 0}; +static const guchar Helvetica10_Character_064[] = { 10, 62, 0, 64, 0,155, 0,164,128,164,128,162, 64,146, 64, 77, 64, 32,128, 31, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_035[] = { 6, 0, 0, 80, 80,248, 40,124, 40, 40, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_036[] = { 5, 0, 32,112,168, 40,112,160,168,112, 32, 0, 0, 0}; +static const guchar Helvetica10_Character_037[] = { 8, 0, 0, 38, 41, 22, 16, 8,104,148,100, 0, 0, 0}; +static const guchar Helvetica10_Character_094[] = { 5, 0, 0, 0, 0, 0,136, 80, 80, 32, 32, 0, 0, 0}; +static const guchar Helvetica10_Character_038[] = { 6, 0, 0,100,152,152,164, 96, 80, 80, 32, 0, 0, 0}; +static const guchar Helvetica10_Character_042[] = { 3, 0, 0, 0, 0, 0, 0, 0,160, 64,160, 0, 0, 0}; +static const guchar Helvetica10_Character_040[] = { 3, 32, 64, 64,128,128,128,128, 64, 64, 32, 0, 0, 0}; +static const guchar Helvetica10_Character_041[] = { 3,128, 64, 64, 32, 32, 32, 32, 64, 64,128, 0, 0, 0}; +static const guchar Helvetica10_Character_045[] = { 5, 0, 0, 0, 0, 0,248, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_095[] = { 6,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_061[] = { 4, 0, 0, 0, 0,240, 0,240, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_043[] = { 5, 0, 0, 0, 32, 32,248, 32, 32, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_091[] = { 2,192,128,128,128,128,128,128,128,128,192, 0, 0, 0}; +static const guchar Helvetica10_Character_123[] = { 3, 32, 64, 64, 64, 64,128, 64, 64, 64, 32, 0, 0, 0}; +static const guchar Helvetica10_Character_125[] = { 3,128, 64, 64, 64, 64, 32, 64, 64, 64,128, 0, 0, 0}; +static const guchar Helvetica10_Character_093[] = { 2,192, 64, 64, 64, 64, 64, 64, 64, 64,192, 0, 0, 0}; +static const guchar Helvetica10_Character_059[] = { 2,128, 64, 64, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_058[] = { 1, 0, 0,128, 0, 0, 0, 0,128, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_044[] = { 2,128, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_046[] = { 1, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_060[] = { 3, 0, 0, 0, 32, 64,128, 64, 32, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_062[] = { 3, 0, 0, 0,128, 64, 32, 64,128, 0, 0, 0, 0, 0}; +static const guchar Helvetica10_Character_047[] = { 3, 0, 0,128,128, 64, 64, 64, 64, 32, 32, 0, 0, 0}; +static const guchar Helvetica10_Character_063[] = { 4, 0, 0, 64, 0, 64, 64, 32, 16,144, 96, 0, 0, 0}; +static const guchar Helvetica10_Character_092[] = { 3, 0, 0, 32, 32, 64, 64, 64, 64,128,128, 0, 0, 0}; +static const guchar Helvetica10_Character_034[] = { 3, 0, 0, 0, 0, 0, 0, 0, 0,160,160, 0, 0, 0}; + +/* The font characters mapping: */ +static const guchar* Helvetica10_Character_Map[] = {Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_032,Helvetica10_Character_033,Helvetica10_Character_034,Helvetica10_Character_035,Helvetica10_Character_036,Helvetica10_Character_037,Helvetica10_Character_038,Helvetica10_Character_042,Helvetica10_Character_040,Helvetica10_Character_041,Helvetica10_Character_042,Helvetica10_Character_043,Helvetica10_Character_044,Helvetica10_Character_045,Helvetica10_Character_046,Helvetica10_Character_047,Helvetica10_Character_048,Helvetica10_Character_049,Helvetica10_Character_050,Helvetica10_Character_051,Helvetica10_Character_052,Helvetica10_Character_053,Helvetica10_Character_054,Helvetica10_Character_055,Helvetica10_Character_056,Helvetica10_Character_057,Helvetica10_Character_058,Helvetica10_Character_059,Helvetica10_Character_060,Helvetica10_Character_061,Helvetica10_Character_062,Helvetica10_Character_063,Helvetica10_Character_064,Helvetica10_Character_065,Helvetica10_Character_066,Helvetica10_Character_067,Helvetica10_Character_068,Helvetica10_Character_069,Helvetica10_Character_070,Helvetica10_Character_071,Helvetica10_Character_072,Helvetica10_Character_073,Helvetica10_Character_074,Helvetica10_Character_075,Helvetica10_Character_076,Helvetica10_Character_077,Helvetica10_Character_078,Helvetica10_Character_079,Helvetica10_Character_080,Helvetica10_Character_081,Helvetica10_Character_082,Helvetica10_Character_083,Helvetica10_Character_084,Helvetica10_Character_085,Helvetica10_Character_086,Helvetica10_Character_087,Helvetica10_Character_088,Helvetica10_Character_089,Helvetica10_Character_090,Helvetica10_Character_091,Helvetica10_Character_092,Helvetica10_Character_093,Helvetica10_Character_094,Helvetica10_Character_095,Helvetica10_Character_096,Helvetica10_Character_097,Helvetica10_Character_098,Helvetica10_Character_099,Helvetica10_Character_100,Helvetica10_Character_101,Helvetica10_Character_102,Helvetica10_Character_103,Helvetica10_Character_104,Helvetica10_Character_105,Helvetica10_Character_106,Helvetica10_Character_107,Helvetica10_Character_108,Helvetica10_Character_109,Helvetica10_Character_110,Helvetica10_Character_111,Helvetica10_Character_112,Helvetica10_Character_113,Helvetica10_Character_114,Helvetica10_Character_115,Helvetica10_Character_116,Helvetica10_Character_117,Helvetica10_Character_118,Helvetica10_Character_119,Helvetica10_Character_120,Helvetica10_Character_121,Helvetica10_Character_122,Helvetica10_Character_123,Helvetica10_Character_042,Helvetica10_Character_125,Helvetica10_Character_126,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,NULL}; + +/* The font structure: */ +const SFG_Font fgFontHelvetica10 = { "-adobe-helvetica-medium-r-normal--10-100-75-75-p-56-iso8859-1", 93, 13, Helvetica10_Character_Map }; + +static const guchar Helvetica12_Character_032[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_097[] = { 6, 0, 0, 0,116,136,136,120, 8,136,112, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_098[] = { 5, 0, 0, 0,176,200,136,136,136,200,176,128,128, 0, 0, 0}; +static const guchar Helvetica12_Character_099[] = { 5, 0, 0, 0,112,136,128,128,128,136,112, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_100[] = { 5, 0, 0, 0,104,152,136,136,136,152,104, 8, 8, 0, 0, 0}; +static const guchar Helvetica12_Character_101[] = { 5, 0, 0, 0,112,136,128,248,136,136,112, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_102[] = { 4, 0, 0, 0, 64, 64, 64, 64, 64, 64,224, 64, 48, 0, 0, 0}; +static const guchar Helvetica12_Character_103[] = { 5,112,136, 8,104,152,136,136,136,152,104, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_104[] = { 5, 0, 0, 0,136,136,136,136,136,200,176,128,128, 0, 0, 0}; +static const guchar Helvetica12_Character_105[] = { 1, 0, 0, 0,128,128,128,128,128,128,128, 0,128, 0, 0, 0}; +static const guchar Helvetica12_Character_106[] = { 2,128, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 0, 0, 0}; +static const guchar Helvetica12_Character_107[] = { 5, 0, 0, 0,136,144,160,192,192,160,144,128,128, 0, 0, 0}; +static const guchar Helvetica12_Character_108[] = { 1, 0, 0, 0,128,128,128,128,128,128,128,128,128, 0, 0, 0}; +static const guchar Helvetica12_Character_109[] = { 7, 0, 0, 0,146,146,146,146,146,218,164, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_110[] = { 5, 0, 0, 0,136,136,136,136,136,200,176, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_111[] = { 5, 0, 0, 0,112,136,136,136,136,136,112, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_112[] = { 5,128,128,128,176,200,136,136,136,200,176, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_113[] = { 5, 8, 8, 8,104,152,136,136,136,152,104, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_114[] = { 3, 0, 0, 0,128,128,128,128,128,192,160, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_115[] = { 4, 0, 0, 0, 96,144, 16, 96,128,144, 96, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_116[] = { 3, 0, 0, 0, 96, 64, 64, 64, 64, 64,224, 64, 64, 0, 0, 0}; +static const guchar Helvetica12_Character_117[] = { 5, 0, 0, 0,104,152,136,136,136,136,136, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_119[] = { 9, 0, 0, 0, 0, 0, 0, 34, 0, 34, 0, 85, 0, 73, 0, 73, 0,136,128,136,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_118[] = { 5, 0, 0, 0, 32, 32, 80, 80,136,136,136, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_120[] = { 6, 0, 0, 0,132,132, 72, 48, 48, 72,132, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_121[] = { 5,128, 64, 32, 32, 80, 80,144,136,136,136, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_122[] = { 4, 0, 0, 0,240,128, 64, 64, 32, 16,240, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_065[] = { 7, 0, 0, 0,130,130,130,124, 68, 68, 40, 40, 16, 0, 0, 0}; +static const guchar Helvetica12_Character_066[] = { 6, 0, 0, 0,248,132,132,132,248,132,132,132,248, 0, 0, 0}; +static const guchar Helvetica12_Character_067[] = { 7, 0, 0, 0, 60, 66,128,128,128,128,128, 66, 60, 0, 0, 0}; +static const guchar Helvetica12_Character_068[] = { 7, 0, 0, 0,248,132,130,130,130,130,130,132,248, 0, 0, 0}; +static const guchar Helvetica12_Character_069[] = { 6, 0, 0, 0,252,128,128,128,252,128,128,128,252, 0, 0, 0}; +static const guchar Helvetica12_Character_070[] = { 6, 0, 0, 0,128,128,128,128,248,128,128,128,252, 0, 0, 0}; +static const guchar Helvetica12_Character_071[] = { 7, 0, 0, 0, 58, 70,130,130,142,128,128, 66, 60, 0, 0, 0}; +static const guchar Helvetica12_Character_072[] = { 7, 0, 0, 0,130,130,130,130,254,130,130,130,130, 0, 0, 0}; +static const guchar Helvetica12_Character_073[] = { 1, 0, 0, 0,128,128,128,128,128,128,128,128,128, 0, 0, 0}; +static const guchar Helvetica12_Character_074[] = { 5, 0, 0, 0,112,136,136, 8, 8, 8, 8, 8, 8, 0, 0, 0}; +static const guchar Helvetica12_Character_075[] = { 7, 0, 0, 0,130,132,136,144,224,160,144,136,132, 0, 0, 0}; +static const guchar Helvetica12_Character_076[] = { 5, 0, 0, 0,248,128,128,128,128,128,128,128,128, 0, 0, 0}; +static const guchar Helvetica12_Character_077[] = { 9, 0, 0, 0, 0, 0, 0,136,128,136,128,148,128,148,128,162,128,162,128,193,128,193,128,128,128, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_078[] = { 7, 0, 0, 0,130,134,138,138,146,162,162,194,130, 0, 0, 0}; +static const guchar Helvetica12_Character_079[] = { 8, 0, 0, 0, 60, 66,129,129,129,129,129, 66, 60, 0, 0, 0}; +static const guchar Helvetica12_Character_080[] = { 6, 0, 0, 0,128,128,128,128,248,132,132,132,248, 0, 0, 0}; +static const guchar Helvetica12_Character_081[] = { 8, 0, 0, 0, 61, 66,133,137,129,129,129, 66, 60, 0, 0, 0}; +static const guchar Helvetica12_Character_082[] = { 6, 0, 0, 0,132,132,132,136,248,132,132,132,248, 0, 0, 0}; +static const guchar Helvetica12_Character_083[] = { 6, 0, 0, 0,120,132,132, 4, 24, 96,128,132,120, 0, 0, 0}; +static const guchar Helvetica12_Character_084[] = { 7, 0, 0, 0, 16, 16, 16, 16, 16, 16, 16, 16,254, 0, 0, 0}; +static const guchar Helvetica12_Character_085[] = { 6, 0, 0, 0,120,132,132,132,132,132,132,132,132, 0, 0, 0}; +static const guchar Helvetica12_Character_087[] = { 9, 0, 0, 0, 0, 0, 0, 34, 0, 34, 0, 34, 0, 85, 0, 85, 0, 73, 0,136,128,136,128,136,128, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_086[] = { 7, 0, 0, 0, 16, 16, 40, 40, 68, 68, 68,130,130, 0, 0, 0}; +static const guchar Helvetica12_Character_088[] = { 7, 0, 0, 0,130, 68, 68, 40, 16, 40, 68, 68,130, 0, 0, 0}; +static const guchar Helvetica12_Character_089[] = { 7, 0, 0, 0, 16, 16, 16, 16, 40, 68, 68,130,130, 0, 0, 0}; +static const guchar Helvetica12_Character_090[] = { 7, 0, 0, 0,254,128, 64, 32, 16, 8, 4, 2,254, 0, 0, 0}; +static const guchar Helvetica12_Character_048[] = { 5, 0, 0, 0,112,136,136,136,136,136,136,136,112, 0, 0, 0}; +static const guchar Helvetica12_Character_049[] = { 3, 0, 0, 0, 32, 32, 32, 32, 32, 32, 32,224, 32, 0, 0, 0}; +static const guchar Helvetica12_Character_050[] = { 5, 0, 0, 0,248,128,128, 64, 32, 16, 8,136,112, 0, 0, 0}; +static const guchar Helvetica12_Character_051[] = { 5, 0, 0, 0,112,136,136, 8, 8, 48, 8,136,112, 0, 0, 0}; +static const guchar Helvetica12_Character_052[] = { 6, 0, 0, 0, 8, 8,252,136, 72, 40, 40, 24, 8, 0, 0, 0}; +static const guchar Helvetica12_Character_053[] = { 5, 0, 0, 0,112,136,136, 8, 8,240,128,128,248, 0, 0, 0}; +static const guchar Helvetica12_Character_054[] = { 5, 0, 0, 0,112,136,136,136,200,176,128,136,112, 0, 0, 0}; +static const guchar Helvetica12_Character_055[] = { 5, 0, 0, 0, 64, 64, 32, 32, 32, 16, 16, 8,248, 0, 0, 0}; +static const guchar Helvetica12_Character_056[] = { 5, 0, 0, 0,112,136,136,136,136,112,136,136,112, 0, 0, 0}; +static const guchar Helvetica12_Character_057[] = { 5, 0, 0, 0,112,136, 8, 8,120,136,136,136,112, 0, 0, 0}; +static const guchar Helvetica12_Character_096[] = { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,128, 64, 0, 0, 0}; +static const guchar Helvetica12_Character_126[] = { 6, 0, 0, 0, 0, 0, 0,152,100, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_033[] = { 1, 0, 0, 0,128, 0,128,128,128,128,128,128,128, 0, 0, 0}; +static const guchar Helvetica12_Character_064[] = { 10, 0, 0, 0, 0, 62, 0, 64, 0,155, 0,166,128,162, 64,162, 64,146, 64, 77, 64, 96,128, 31, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_035[] = { 6, 0, 0, 0, 80, 80, 80,252, 40,252, 40, 40, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_036[] = { 5, 0, 0, 32,112,168,168, 40,112,160,168,112, 32, 0, 0, 0}; +static const guchar Helvetica12_Character_037[] = { 9, 0, 0, 0, 0, 0, 0, 35, 0, 20,128, 20,128, 19, 0, 8, 0,104, 0,148, 0,148, 0, 98, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_094[] = { 5, 0, 0, 0, 0, 0, 0, 0, 0,136, 80, 32, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_038[] = { 7, 0, 0, 0,114,140,132,138, 80, 48, 72, 72, 48, 0, 0, 0}; +static const guchar Helvetica12_Character_042[] = { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 64,160, 0, 0, 0}; +static const guchar Helvetica12_Character_040[] = { 3, 32, 64, 64,128,128,128,128,128,128, 64, 64, 32, 0, 0, 0}; +static const guchar Helvetica12_Character_041[] = { 3,128, 64, 64, 32, 32, 32, 32, 32, 32, 64, 64,128, 0, 0, 0}; +static const guchar Helvetica12_Character_045[] = { 5, 0, 0, 0, 0, 0, 0,248, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_095[] = { 7, 0,254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_061[] = { 5, 0, 0, 0, 0, 0,248, 0,248, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_043[] = { 5, 0, 0, 0, 0, 32, 32,248, 32, 32, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_091[] = { 2,192,128,128,128,128,128,128,128,128,128,128,192, 0, 0, 0}; +static const guchar Helvetica12_Character_123[] = { 4, 48, 64, 64, 64, 64, 64,128, 64, 64, 64, 64, 48, 0, 0, 0}; +static const guchar Helvetica12_Character_125[] = { 4,192, 32, 32, 32, 32, 32, 16, 32, 32, 32, 32,192, 0, 0, 0}; +static const guchar Helvetica12_Character_093[] = { 2,192, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,192, 0, 0, 0}; +static const guchar Helvetica12_Character_059[] = { 2, 0,128, 64, 64, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_058[] = { 1, 0, 0, 0,128, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_044[] = { 2, 0,128, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_046[] = { 1, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_060[] = { 6, 0, 0, 0, 0, 12, 48,192, 48, 12, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_062[] = { 6, 0, 0, 0, 0,192, 48, 12, 48,192, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica12_Character_047[] = { 4, 0, 0, 0,128,128, 64, 64, 64, 32, 32, 16, 16, 0, 0, 0}; +static const guchar Helvetica12_Character_063[] = { 5, 0, 0, 0, 32, 0, 32, 32, 16, 16,136,136,112, 0, 0, 0}; +static const guchar Helvetica12_Character_092[] = { 4, 0, 0, 0, 16, 16, 32, 32, 32, 64, 64,128,128, 0, 0, 0}; +static const guchar Helvetica12_Character_034[] = { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,160,160, 0, 0, 0}; + +/* The font characters mapping: */ +static const guchar* Helvetica12_Character_Map[] = {Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_032,Helvetica12_Character_033,Helvetica12_Character_034,Helvetica12_Character_035,Helvetica12_Character_036,Helvetica12_Character_037,Helvetica12_Character_038,Helvetica12_Character_042,Helvetica12_Character_040,Helvetica12_Character_041,Helvetica12_Character_042,Helvetica12_Character_043,Helvetica12_Character_044,Helvetica12_Character_045,Helvetica12_Character_046,Helvetica12_Character_047,Helvetica12_Character_048,Helvetica12_Character_049,Helvetica12_Character_050,Helvetica12_Character_051,Helvetica12_Character_052,Helvetica12_Character_053,Helvetica12_Character_054,Helvetica12_Character_055,Helvetica12_Character_056,Helvetica12_Character_057,Helvetica12_Character_058,Helvetica12_Character_059,Helvetica12_Character_060,Helvetica12_Character_061,Helvetica12_Character_062,Helvetica12_Character_063,Helvetica12_Character_064,Helvetica12_Character_065,Helvetica12_Character_066,Helvetica12_Character_067,Helvetica12_Character_068,Helvetica12_Character_069,Helvetica12_Character_070,Helvetica12_Character_071,Helvetica12_Character_072,Helvetica12_Character_073,Helvetica12_Character_074,Helvetica12_Character_075,Helvetica12_Character_076,Helvetica12_Character_077,Helvetica12_Character_078,Helvetica12_Character_079,Helvetica12_Character_080,Helvetica12_Character_081,Helvetica12_Character_082,Helvetica12_Character_083,Helvetica12_Character_084,Helvetica12_Character_085,Helvetica12_Character_086,Helvetica12_Character_087,Helvetica12_Character_088,Helvetica12_Character_089,Helvetica12_Character_090,Helvetica12_Character_091,Helvetica12_Character_092,Helvetica12_Character_093,Helvetica12_Character_094,Helvetica12_Character_095,Helvetica12_Character_096,Helvetica12_Character_097,Helvetica12_Character_098,Helvetica12_Character_099,Helvetica12_Character_100,Helvetica12_Character_101,Helvetica12_Character_102,Helvetica12_Character_103,Helvetica12_Character_104,Helvetica12_Character_105,Helvetica12_Character_106,Helvetica12_Character_107,Helvetica12_Character_108,Helvetica12_Character_109,Helvetica12_Character_110,Helvetica12_Character_111,Helvetica12_Character_112,Helvetica12_Character_113,Helvetica12_Character_114,Helvetica12_Character_115,Helvetica12_Character_116,Helvetica12_Character_117,Helvetica12_Character_118,Helvetica12_Character_119,Helvetica12_Character_120,Helvetica12_Character_121,Helvetica12_Character_122,Helvetica12_Character_123,Helvetica12_Character_042,Helvetica12_Character_125,Helvetica12_Character_126,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,NULL}; + +/* The font structure: */ +const SFG_Font fgFontHelvetica12 = { "-adobe-helvetica-medium-r-normal--12-120-75-75-p-67-iso8859-1", 93, 15, Helvetica12_Character_Map }; + +static const guchar Helvetica18_Character_032[] = { 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_097[] = { 7, 0, 0, 0, 0,118,238,198,198,230,126, 14,198,238,124, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_098[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0,222, 0,255, 0,227, 0,193,128,193,128,193,128,193,128,227, 0,255, 0,222, 0,192, 0,192, 0,192, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_099[] = { 8, 0, 0, 0, 0, 62,127, 99,192,192,192,192, 99,127, 62, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_100[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0, 61,128,127,128, 99,128,193,128,193,128,193,128,193,128, 99,128,127,128, 61,128, 1,128, 1,128, 1,128, 1,128, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_101[] = { 8, 0, 0, 0, 0, 60,127,227,192,192,255,195,195,126, 60, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_102[] = { 6, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48,252,252, 48, 48, 60, 28, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_103[] = { 9, 28, 0,127, 0, 99, 0, 1,128, 61,128,127,128, 99,128,193,128,193,128,193,128,193,128, 97,128,127,128, 61,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_104[] = { 8, 0, 0, 0, 0,195,195,195,195,195,195,195,227,223,206,192,192,192,192, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_105[] = { 2, 0, 0, 0, 0,192,192,192,192,192,192,192,192,192,192, 0, 0,192,192, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_106[] = { 4,224,240, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_107[] = { 8, 0, 0, 0, 0,199,198,206,204,216,248,240,216,204,198,192,192,192,192, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_108[] = { 2, 0, 0, 0, 0,192,192,192,192,192,192,192,192,192,192,192,192,192,192, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_109[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0,198, 48,198, 48,198, 48,198, 48,198, 48,198, 48,198, 48,231, 48,222,240,204, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_110[] = { 8, 0, 0, 0, 0,195,195,195,195,195,195,195,227,223,206, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_111[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0,127, 0, 99, 0,193,128,193,128,193,128,193,128, 99, 0,127, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_112[] = { 9,192, 0,192, 0,192, 0,192, 0,222, 0,255, 0,227, 0,193,128,193,128,193,128,193,128,227, 0,255, 0,222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_113[] = { 9, 1,128, 1,128, 1,128, 1,128, 61,128,127,128, 99,128,193,128,193,128,193,128,193,128, 99,128,127,128, 61,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_114[] = { 5, 0, 0, 0, 0,192,192,192,192,192,192,192,224,216,216, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_115[] = { 7, 0, 0, 0, 0,120,252,198, 6, 62,252,192,198,126, 60, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_116[] = { 6, 0, 0, 0, 0, 24, 56, 48, 48, 48, 48, 48, 48,252,252, 48, 48, 48, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_117[] = { 8, 0, 0, 0, 0,115,251,199,195,195,195,195,195,195,195, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_119[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0, 25,128, 25,128, 57,192, 41, 64,105, 96,102, 96,102, 96,198, 48,198, 48,198, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_118[] = { 8, 0, 0, 0, 0, 24, 24, 60, 36,102,102,102,195,195,195, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_120[] = { 8, 0, 0, 0, 0,195,231,102, 60, 24, 24, 60,102,231,195, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_121[] = { 8,112,112, 24, 24, 24, 24, 60, 36,102,102,102,195,195,195, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_122[] = { 7, 0, 0, 0, 0,254,254,192, 96, 48, 24, 12, 6,254,254, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_065[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0,192, 48,192, 48, 96, 96, 96, 96,127,224, 63,192, 48,192, 48,192, 25,128, 25,128, 15, 0, 15, 0, 6, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_066[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0,255,128,255,192,192,224,192, 96,192, 96,192,224,255,192,255,128,193,128,192,192,192,192,193,192,255,128,255, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_067[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0, 15,128, 63,224,112,112, 96, 48,224, 0,192, 0,192, 0,192, 0,192, 0,224, 0, 96, 48,112,112, 63,224, 15,128, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_068[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0,255, 0,255,128,193,192,192,192,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192,192,193,192,255,128,255, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_069[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0,255,128,255,128,192, 0,192, 0,192, 0,192, 0,255, 0,255, 0,192, 0,192, 0,192, 0,192, 0,255,128,255,128, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_070[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0,192, 0,192, 0,192, 0,192, 0,192, 0,192, 0,255, 0,255, 0,192, 0,192, 0,192, 0,192, 0,255,128,255,128, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_071[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0, 15,176, 63,240,112,112, 96, 48,224, 48,193,240,193,240,192, 0,192, 0,224, 48, 96, 48,112,112, 63,224, 15,128, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_072[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,255,224,255,224,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_073[] = { 2, 0, 0, 0, 0,192,192,192,192,192,192,192,192,192,192,192,192,192,192, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_074[] = { 8, 0, 0, 0, 0, 60,126,231,195,195, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_075[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0,192,112,192,224,193,192,195,128,199, 0,206, 0,252, 0,248, 0,220, 0,206, 0,199, 0,195,128,193,192,192,224, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_076[] = { 8, 0, 0, 0, 0,255,255,192,192,192,192,192,192,192,192,192,192,192,192, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_077[] = { 14, 0, 0, 0, 0, 0, 0, 0, 0,195, 12,195, 12,199,140,196,140,204,204,204,204,216,108,216,108,240, 60,240, 60,224, 28,224, 28,192, 12,192, 12, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_078[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0,192, 96,192,224,193,224,193,224,195, 96,198, 96,198, 96,204, 96,204, 96,216, 96,240, 96,240, 96,224, 96,192, 96, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_079[] = { 13, 0, 0, 0, 0, 0, 0, 0, 0, 15,128, 63,224,112,112, 96, 48,224, 56,192, 24,192, 24,192, 24,192, 24,224, 56, 96, 48,112,112, 63,224, 15,128, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_080[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0,192, 0,192, 0,192, 0,192, 0,192, 0,192, 0,255, 0,255,128,193,192,192,192,192,192,193,192,255,128,255, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_081[] = { 13, 0, 0, 0, 0, 0, 0, 0, 48, 15,176, 63,224,112,240, 97,176,225,184,192, 24,192, 24,192, 24,192, 24,224, 56, 96, 48,112,112, 63,224, 15,128, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_082[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0,192,192,192,192,192,192,192,192,193,128,193,128,255, 0,255,128,193,192,192,192,192,192,193,192,255,128,255, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_083[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0,127,192,224,224,192, 96, 0, 96, 0,224, 3,192, 31, 0,124, 0,224, 0,192, 96,224,224,127,192, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_084[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0,255,192,255,192, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_085[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0,127,192, 96,192,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_087[] = { 16, 0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 24, 24, 28, 56, 52, 44, 54,108, 54,108,102,102,102,102, 98, 70, 99,198,195,195,193,131,193,131,193,131, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_086[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 15, 0, 15, 0, 25,128, 25,128, 25,128, 48,192, 48,192, 48,192, 96, 96, 96, 96, 96, 96,192, 48,192, 48, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_088[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0,192, 96,224,224, 96,192,113,192, 49,128, 27, 0, 14, 0, 14, 0, 27, 0, 49,128,113,192, 96,192,224,224,192, 96, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_089[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 15, 0, 25,128, 48,192, 48,192, 96, 96, 96, 96,192, 48,192, 48, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_090[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0,255,192,255,192,192, 0, 96, 0, 48, 0, 24, 0, 28, 0, 12, 0, 6, 0, 3, 0, 1,128, 0,192,255,192,255,192, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_048[] = { 8, 0, 0, 0, 0, 60,126,102,195,195,195,195,195,195,195,102,126, 60, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_049[] = { 5, 0, 0, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,248,248, 24, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_050[] = { 8, 0, 0, 0, 0,255,255,192,224,112, 56, 28, 14, 7, 3,195,254, 60, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_051[] = { 8, 0, 0, 0, 0, 60,126,199,195, 3, 7, 30, 28, 6,195,195,126, 60, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_052[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 3, 0,255,128,255,128,195, 0, 99, 0, 51, 0, 51, 0, 27, 0, 15, 0, 7, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_053[] = { 8, 0, 0, 0, 0,124,254,199,195, 3, 3,199,254,252,192,192,254,254, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_054[] = { 8, 0, 0, 0, 0, 60,126,227,195,195,195,254,220,192,192, 99,127, 60, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_055[] = { 8, 0, 0, 0, 0, 96, 96, 48, 48, 48, 24, 24, 12, 12, 6, 3,255,255, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_056[] = { 8, 0, 0, 0, 0, 60,126,231,195,195,102,126,102,195,195,231,126, 60, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_057[] = { 8, 0, 0, 0, 0,124,254,198, 3, 3, 59,127,195,195,195,199,126, 60, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_096[] = { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,192,128,128, 64, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_126[] = { 8, 0, 0, 0, 0, 0, 0, 0, 0,204,126, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_033[] = { 2, 0, 0, 0, 0,192,192, 0, 0,128,128,192,192,192,192,192,192,192,192, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_064[] = { 16, 0, 0, 7,224, 31,240, 56, 0,112, 0,103,112,207,248,204,204,204,102,204,102,204, 99,198, 51,103,115, 99,179, 48, 6, 28, 14, 15,252, 3,240, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_035[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 36, 0, 36, 0,255,128,255,128, 18, 0, 18, 0, 18, 0,127,192,127,192, 9, 0, 9, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_036[] = { 9, 0, 0, 0, 0, 8, 0, 8, 0, 62, 0,127, 0,235,128,201,128, 9,128, 15, 0, 62, 0,120, 0,232, 0,200, 0,203, 0,127, 0, 62, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_037[] = { 14, 0, 0, 0, 0, 0, 0, 0, 0, 24,120, 24,252, 12,204, 12,204, 6,252, 6,120, 3, 0,123, 0,253,128,205,128,204,192,252,192,120, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_094[] = { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,130,198,108, 56, 16, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_038[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0, 60,112,126,224,231,192,195,128,195,192,198,192,238,192,124, 0, 60, 0,102, 0,102, 0,126, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_042[] = { 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,112,112,248, 32, 32, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_040[] = { 4, 16, 48, 96, 96,192,192,192,192,192,192,192,192,192,192, 96, 96, 48, 16, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_041[] = { 4,128,192, 96, 96, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 96, 96,192,128, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_045[] = { 8, 0, 0, 0, 0, 0, 0, 0, 0,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_095[] = { 10,255,192,255,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_061[] = { 7, 0, 0, 0, 0, 0, 0,254,254, 0, 0,254,254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_043[] = { 8, 0, 0, 0, 0, 24, 24, 24, 24,255,255, 24, 24, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_091[] = { 4,240,240,192,192,192,192,192,192,192,192,192,192,192,192,192,192,240,240, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_123[] = { 6, 12, 24, 48, 48, 48, 48, 48, 48, 96,192, 96, 48, 48, 48, 48, 48, 24, 12, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_125[] = { 6,192, 96, 48, 48, 48, 48, 48, 48, 24, 12, 24, 48, 48, 48, 48, 48, 96,192, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_093[] = { 4,240,240, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,240,240, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_059[] = { 2, 0,128, 64, 64,192,192, 0, 0, 0, 0, 0, 0,192,192, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_058[] = { 2, 0, 0, 0, 0,192,192, 0, 0, 0, 0, 0, 0,192,192, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_044[] = { 2, 0,128, 64, 64,192,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_046[] = { 2, 0, 0, 0, 0,192,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_060[] = { 8, 0, 0, 0, 0, 3, 15, 60,112,192,112, 60, 15, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_062[] = { 8, 0, 0, 0, 0,192,240, 60, 14, 3, 14, 60,240,192, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_047[] = { 5, 0, 0, 0, 0,192,192, 64, 64, 96, 96, 32, 32, 48, 48, 16, 16, 24, 24, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_063[] = { 7, 0, 0, 0, 0, 48, 48, 0, 0, 48, 48, 48, 56, 28, 14,198,198,254,124, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_092[] = { 5, 0, 0, 0, 0, 24, 24, 16, 16, 48, 48, 32, 32, 96, 96, 64, 64,192,192, 0, 0, 0, 0}; +static const guchar Helvetica18_Character_034[] = { 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,144,216,216,216, 0, 0, 0, 0}; + +/* The font characters mapping: */ +static const guchar* Helvetica18_Character_Map[] = {Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_032,Helvetica18_Character_033,Helvetica18_Character_034,Helvetica18_Character_035,Helvetica18_Character_036,Helvetica18_Character_037,Helvetica18_Character_038,Helvetica18_Character_042,Helvetica18_Character_040,Helvetica18_Character_041,Helvetica18_Character_042,Helvetica18_Character_043,Helvetica18_Character_044,Helvetica18_Character_045,Helvetica18_Character_046,Helvetica18_Character_047,Helvetica18_Character_048,Helvetica18_Character_049,Helvetica18_Character_050,Helvetica18_Character_051,Helvetica18_Character_052,Helvetica18_Character_053,Helvetica18_Character_054,Helvetica18_Character_055,Helvetica18_Character_056,Helvetica18_Character_057,Helvetica18_Character_058,Helvetica18_Character_059,Helvetica18_Character_060,Helvetica18_Character_061,Helvetica18_Character_062,Helvetica18_Character_063,Helvetica18_Character_064,Helvetica18_Character_065,Helvetica18_Character_066,Helvetica18_Character_067,Helvetica18_Character_068,Helvetica18_Character_069,Helvetica18_Character_070,Helvetica18_Character_071,Helvetica18_Character_072,Helvetica18_Character_073,Helvetica18_Character_074,Helvetica18_Character_075,Helvetica18_Character_076,Helvetica18_Character_077,Helvetica18_Character_078,Helvetica18_Character_079,Helvetica18_Character_080,Helvetica18_Character_081,Helvetica18_Character_082,Helvetica18_Character_083,Helvetica18_Character_084,Helvetica18_Character_085,Helvetica18_Character_086,Helvetica18_Character_087,Helvetica18_Character_088,Helvetica18_Character_089,Helvetica18_Character_090,Helvetica18_Character_091,Helvetica18_Character_092,Helvetica18_Character_093,Helvetica18_Character_094,Helvetica18_Character_095,Helvetica18_Character_096,Helvetica18_Character_097,Helvetica18_Character_098,Helvetica18_Character_099,Helvetica18_Character_100,Helvetica18_Character_101,Helvetica18_Character_102,Helvetica18_Character_103,Helvetica18_Character_104,Helvetica18_Character_105,Helvetica18_Character_106,Helvetica18_Character_107,Helvetica18_Character_108,Helvetica18_Character_109,Helvetica18_Character_110,Helvetica18_Character_111,Helvetica18_Character_112,Helvetica18_Character_113,Helvetica18_Character_114,Helvetica18_Character_115,Helvetica18_Character_116,Helvetica18_Character_117,Helvetica18_Character_118,Helvetica18_Character_119,Helvetica18_Character_120,Helvetica18_Character_121,Helvetica18_Character_122,Helvetica18_Character_123,Helvetica18_Character_042,Helvetica18_Character_125,Helvetica18_Character_126,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,NULL}; + +/* The font structure: */ +const SFG_Font fgFontHelvetica18 = { "-adobe-helvetica-medium-r-normal--18-180-75-75-p-98-iso8859-1", 93, 22, Helvetica18_Character_Map }; + +static const guchar TimesRoman10_Character_032[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_097[] = { 3, 0, 0, 0,224,160, 96, 32,192, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_098[] = { 4, 0, 0, 0,224,144,144,144,224,128,128, 0, 0, 0}; +static const guchar TimesRoman10_Character_099[] = { 3, 0, 0, 0, 96,128,128,128, 96, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_100[] = { 5, 0, 0, 0,104,144,144,144,112, 16, 48, 0, 0, 0}; +static const guchar TimesRoman10_Character_101[] = { 3, 0, 0, 0, 96,128,192,160, 96, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_102[] = { 4, 0, 0, 0,224, 64, 64, 64,224, 64, 48, 0, 0, 0}; +static const guchar TimesRoman10_Character_103[] = { 4, 0,224,144, 96, 64,160,160,112, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_104[] = { 5, 0, 0, 0,216,144,144,144,224,128,128, 0, 0, 0}; +static const guchar TimesRoman10_Character_105[] = { 2, 0, 0, 0, 64, 64, 64, 64,192, 0, 64, 0, 0, 0}; +static const guchar TimesRoman10_Character_106[] = { 2, 0,128, 64, 64, 64, 64, 64,192, 0, 64, 0, 0, 0}; +static const guchar TimesRoman10_Character_107[] = { 5, 0, 0, 0,152,144,224,160,144,128,128, 0, 0, 0}; +static const guchar TimesRoman10_Character_108[] = { 3, 0, 0, 0,224, 64, 64, 64, 64, 64,192, 0, 0, 0}; +static const guchar TimesRoman10_Character_109[] = { 8, 0, 0, 0,219,146,146,146,236, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_110[] = { 5, 0, 0, 0,216,144,144,144,224, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_111[] = { 4, 0, 0, 0, 96,144,144,144, 96, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_112[] = { 4, 0,192,128,224,144,144,144,224, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_113[] = { 5, 0, 56, 16,112,144,144,144,112, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_114[] = { 3, 0, 0, 0,224, 64, 64, 96,160, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_115[] = { 3, 0, 0, 0,224, 32, 96,128,224, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_116[] = { 4, 0, 0, 0, 48, 64, 64, 64,224, 64, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_117[] = { 5, 0, 0, 0,104,144,144,144,144, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_119[] = { 8, 0, 0, 0, 40,108, 84,146,219, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_118[] = { 5, 0, 0, 0, 32, 96, 80,144,216, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_120[] = { 5, 0, 0, 0,216, 80, 32, 80,216, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_121[] = { 6, 0, 64, 64, 32, 48, 80, 72,220, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_122[] = { 4, 0, 0, 0,240,144, 64, 32,240, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_065[] = { 7, 0, 0, 0,238, 68,124, 40, 40, 56, 16, 0, 0, 0}; +static const guchar TimesRoman10_Character_066[] = { 5, 0, 0, 0,240, 72, 72,112, 72, 72,240, 0, 0, 0}; +static const guchar TimesRoman10_Character_067[] = { 6, 0, 0, 0,120,196,128,128,128,196,124, 0, 0, 0}; +static const guchar TimesRoman10_Character_068[] = { 6, 0, 0, 0,248, 76, 68, 68, 68, 76,248, 0, 0, 0}; +static const guchar TimesRoman10_Character_069[] = { 5, 0, 0, 0,248, 72, 64,112, 64, 72,248, 0, 0, 0}; +static const guchar TimesRoman10_Character_070[] = { 5, 0, 0, 0,224, 64, 64,112, 64, 72,248, 0, 0, 0}; +static const guchar TimesRoman10_Character_071[] = { 6, 0, 0, 0,120,196,132,156,128,196,124, 0, 0, 0}; +static const guchar TimesRoman10_Character_072[] = { 7, 0, 0, 0,238, 68, 68,124, 68, 68,238, 0, 0, 0}; +static const guchar TimesRoman10_Character_073[] = { 3, 0, 0, 0,224, 64, 64, 64, 64, 64,224, 0, 0, 0}; +static const guchar TimesRoman10_Character_074[] = { 4, 0, 0, 0,192,160, 32, 32, 32, 32,112, 0, 0, 0}; +static const guchar TimesRoman10_Character_075[] = { 6, 0, 0, 0,236, 72, 80, 96, 80, 72,236, 0, 0, 0}; +static const guchar TimesRoman10_Character_076[] = { 5, 0, 0, 0,248, 72, 64, 64, 64, 64,224, 0, 0, 0}; +static const guchar TimesRoman10_Character_077[] = { 9, 0, 0, 0, 0, 0, 0,235,128, 73, 0, 85, 0, 85, 0, 99, 0, 99, 0,227,128, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_078[] = { 7, 0, 0, 0,228, 76, 76, 84, 84,100,238, 0, 0, 0}; +static const guchar TimesRoman10_Character_079[] = { 6, 0, 0, 0,120,204,132,132,132,204,120, 0, 0, 0}; +static const guchar TimesRoman10_Character_080[] = { 5, 0, 0, 0,224, 64, 64,112, 72, 72,240, 0, 0, 0}; +static const guchar TimesRoman10_Character_081[] = { 6, 0, 12, 24,112,204,132,132,132,204,120, 0, 0, 0}; +static const guchar TimesRoman10_Character_082[] = { 6, 0, 0, 0,236, 72, 80,112, 72, 72,240, 0, 0, 0}; +static const guchar TimesRoman10_Character_083[] = { 4, 0, 0, 0,224,144, 16, 96,192,144,112, 0, 0, 0}; +static const guchar TimesRoman10_Character_084[] = { 5, 0, 0, 0,112, 32, 32, 32, 32,168,248, 0, 0, 0}; +static const guchar TimesRoman10_Character_085[] = { 7, 0, 0, 0, 56,108, 68, 68, 68, 68,238, 0, 0, 0}; +static const guchar TimesRoman10_Character_087[] = { 10, 0, 0, 0, 0, 0, 0, 34, 0, 34, 0, 85, 0, 85, 0,201,128,136,128,221,192, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_086[] = { 7, 0, 0, 0, 16, 16, 40, 40,108, 68,238, 0, 0, 0}; +static const guchar TimesRoman10_Character_088[] = { 7, 0, 0, 0,238, 68, 40, 16, 40, 68,238, 0, 0, 0}; +static const guchar TimesRoman10_Character_089[] = { 7, 0, 0, 0, 56, 16, 16, 40, 40, 68,238, 0, 0, 0}; +static const guchar TimesRoman10_Character_090[] = { 5, 0, 0, 0,248,136, 64, 32, 16,136,248, 0, 0, 0}; +static const guchar TimesRoman10_Character_048[] = { 4, 0, 0, 0, 96,144,144,144,144,144, 96, 0, 0, 0}; +static const guchar TimesRoman10_Character_049[] = { 3, 0, 0, 0,224, 64, 64, 64, 64,192, 64, 0, 0, 0}; +static const guchar TimesRoman10_Character_050[] = { 4, 0, 0, 0,240, 64, 32, 32, 16,144, 96, 0, 0, 0}; +static const guchar TimesRoman10_Character_051[] = { 4, 0, 0, 0,224, 16, 16, 96, 16,144, 96, 0, 0, 0}; +static const guchar TimesRoman10_Character_052[] = { 5, 0, 0, 0, 16, 16,248,144, 80, 48, 16, 0, 0, 0}; +static const guchar TimesRoman10_Character_053[] = { 4, 0, 0, 0,224,144, 16, 16,224, 64,112, 0, 0, 0}; +static const guchar TimesRoman10_Character_054[] = { 4, 0, 0, 0, 96,144,144,144,224, 64, 48, 0, 0, 0}; +static const guchar TimesRoman10_Character_055[] = { 4, 0, 0, 0, 64, 64, 64, 32, 32,144,240, 0, 0, 0}; +static const guchar TimesRoman10_Character_056[] = { 4, 0, 0, 0, 96,144,144, 96,144,144, 96, 0, 0, 0}; +static const guchar TimesRoman10_Character_057[] = { 4, 0, 0, 0,192, 32,112,144,144,144, 96, 0, 0, 0}; +static const guchar TimesRoman10_Character_096[] = { 2, 0, 0, 0, 0, 0, 0, 0, 0,192,128, 0, 0, 0}; +static const guchar TimesRoman10_Character_126[] = { 6, 0, 0, 0, 0, 0,152,100, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_033[] = { 1, 0, 0, 0,128, 0,128,128,128,128,128, 0, 0, 0}; +static const guchar TimesRoman10_Character_064[] = { 8, 0, 62, 64,146,173,165,165,157, 66, 60, 0, 0, 0}; +static const guchar TimesRoman10_Character_035[] = { 5, 0, 0, 0, 80, 80,248, 80,248, 80, 80, 0, 0, 0}; +static const guchar TimesRoman10_Character_036[] = { 4, 0, 0, 32,224,144, 16, 96,128,144,112, 32, 0, 0}; +static const guchar TimesRoman10_Character_037[] = { 7, 0, 0, 0, 68, 42, 42, 86,168,164,126, 0, 0, 0}; +static const guchar TimesRoman10_Character_094[] = { 3, 0, 0, 0, 0, 0, 0, 0,160,160, 64, 0, 0, 0}; +static const guchar TimesRoman10_Character_038[] = { 8, 0, 0, 0,118,141,152,116,110, 80, 48, 0, 0, 0}; +static const guchar TimesRoman10_Character_042[] = { 3, 0, 0, 0, 0, 0, 0, 0,160, 64,160, 0, 0, 0}; +static const guchar TimesRoman10_Character_040[] = { 3, 0, 32, 64, 64,128,128,128, 64, 64, 32, 0, 0, 0}; +static const guchar TimesRoman10_Character_041[] = { 3, 0,128, 64, 64, 32, 32, 32, 64, 64,128, 0, 0, 0}; +static const guchar TimesRoman10_Character_045[] = { 4, 0, 0, 0, 0, 0,240, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_095[] = { 5,248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_061[] = { 5, 0, 0, 0, 0,248, 0,248, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_043[] = { 5, 0, 0, 0, 32, 32,248, 32, 32, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_091[] = { 2, 0,192,128,128,128,128,128,128,128,192, 0, 0, 0}; +static const guchar TimesRoman10_Character_123[] = { 3, 0, 32, 64, 64, 64,128, 64, 64, 64, 32, 0, 0, 0}; +static const guchar TimesRoman10_Character_125[] = { 3, 0,128, 64, 64, 64, 32, 64, 64, 64,128, 0, 0, 0}; +static const guchar TimesRoman10_Character_093[] = { 2, 0,192, 64, 64, 64, 64, 64, 64, 64,192, 0, 0, 0}; +static const guchar TimesRoman10_Character_059[] = { 1, 0,128,128,128, 0, 0, 0,128, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_058[] = { 1, 0, 0, 0,128, 0, 0, 0,128, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_044[] = { 1, 0,128,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_046[] = { 1, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_060[] = { 3, 0, 0, 0, 32, 64,128, 64, 32, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_062[] = { 3, 0, 0, 0,128, 64, 32, 64,128, 0, 0, 0, 0, 0}; +static const guchar TimesRoman10_Character_047[] = { 3, 0, 0, 0,128,128, 64, 64, 64, 32, 32, 0, 0, 0}; +static const guchar TimesRoman10_Character_063[] = { 3, 0, 0, 0, 64, 0, 64, 64, 32,160,224, 0, 0, 0}; +static const guchar TimesRoman10_Character_092[] = { 3, 0, 0, 0, 32, 32, 64, 64, 64,128,128, 0, 0, 0}; +static const guchar TimesRoman10_Character_034[] = { 3, 0, 0, 0, 0, 0, 0, 0, 0,160,160, 0, 0, 0}; + +/* The font characters mapping: */ +static const guchar* TimesRoman10_Character_Map[] = {TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_032,TimesRoman10_Character_033,TimesRoman10_Character_034,TimesRoman10_Character_035,TimesRoman10_Character_036,TimesRoman10_Character_037,TimesRoman10_Character_038,TimesRoman10_Character_042,TimesRoman10_Character_040,TimesRoman10_Character_041,TimesRoman10_Character_042,TimesRoman10_Character_043,TimesRoman10_Character_044,TimesRoman10_Character_045,TimesRoman10_Character_046,TimesRoman10_Character_047,TimesRoman10_Character_048,TimesRoman10_Character_049,TimesRoman10_Character_050,TimesRoman10_Character_051,TimesRoman10_Character_052,TimesRoman10_Character_053,TimesRoman10_Character_054,TimesRoman10_Character_055,TimesRoman10_Character_056,TimesRoman10_Character_057,TimesRoman10_Character_058,TimesRoman10_Character_059,TimesRoman10_Character_060,TimesRoman10_Character_061,TimesRoman10_Character_062,TimesRoman10_Character_063,TimesRoman10_Character_064,TimesRoman10_Character_065,TimesRoman10_Character_066,TimesRoman10_Character_067,TimesRoman10_Character_068,TimesRoman10_Character_069,TimesRoman10_Character_070,TimesRoman10_Character_071,TimesRoman10_Character_072,TimesRoman10_Character_073,TimesRoman10_Character_074,TimesRoman10_Character_075,TimesRoman10_Character_076,TimesRoman10_Character_077,TimesRoman10_Character_078,TimesRoman10_Character_079,TimesRoman10_Character_080,TimesRoman10_Character_081,TimesRoman10_Character_082,TimesRoman10_Character_083,TimesRoman10_Character_084,TimesRoman10_Character_085,TimesRoman10_Character_086,TimesRoman10_Character_087,TimesRoman10_Character_088,TimesRoman10_Character_089,TimesRoman10_Character_090,TimesRoman10_Character_091,TimesRoman10_Character_092,TimesRoman10_Character_093,TimesRoman10_Character_094,TimesRoman10_Character_095,TimesRoman10_Character_096,TimesRoman10_Character_097,TimesRoman10_Character_098,TimesRoman10_Character_099,TimesRoman10_Character_100,TimesRoman10_Character_101,TimesRoman10_Character_102,TimesRoman10_Character_103,TimesRoman10_Character_104,TimesRoman10_Character_105,TimesRoman10_Character_106,TimesRoman10_Character_107,TimesRoman10_Character_108,TimesRoman10_Character_109,TimesRoman10_Character_110,TimesRoman10_Character_111,TimesRoman10_Character_112,TimesRoman10_Character_113,TimesRoman10_Character_114,TimesRoman10_Character_115,TimesRoman10_Character_116,TimesRoman10_Character_117,TimesRoman10_Character_118,TimesRoman10_Character_119,TimesRoman10_Character_120,TimesRoman10_Character_121,TimesRoman10_Character_122,TimesRoman10_Character_123,TimesRoman10_Character_042,TimesRoman10_Character_125,TimesRoman10_Character_126,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,NULL}; + +/* The font structure: */ +const SFG_Font fgFontTimesRoman10 = { "-adobe-times-medium-r-normal--10-100-75-75-p-54-iso8859-1", 93, 13, TimesRoman10_Character_Map }; + +static const guchar TimesRoman24_Character_032[] = { 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_097[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,113,128,251, 0,199, 0,195, 0,195, 0, 99, 0, 59, 0, 15, 0, 3, 0, 99, 0,103, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_098[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0,115,128, 97,128, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192, 97,128,115,128,110, 0, 96, 0, 96, 0, 96, 0, 96, 0,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_099[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0,127, 0,112,128,224, 0,192, 0,192, 0,192, 0,192, 0,192, 0, 65,128, 99,128, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_100[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30,192,115,128, 97,128,193,128,193,128,193,128,193,128,193,128,193,128, 97,128,115,128, 29,128, 1,128, 1,128, 1,128, 1,128, 3,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_101[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0,127, 0,112,128,224, 0,192, 0,192, 0,192, 0,255,128,193,128, 65,128, 99, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_102[] = { 7, 0, 0, 0, 0, 0, 0,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,254, 48, 48, 48, 22, 14, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_103[] = { 11, 0, 0, 63, 0,241,192,192, 96,192, 32, 96, 96, 63,192,127, 0, 96, 0, 48, 0, 62, 0, 51, 0, 97,128, 97,128, 97,128, 97,128, 51, 0, 31,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_104[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241,224, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192,113,192,111,128,103, 0, 96, 0, 96, 0, 96, 0, 96, 0,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_105[] = { 4, 0, 0, 0, 0, 0, 0,240, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,224, 0, 0, 0, 96, 96, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_106[] = { 4, 0,192,224, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,112, 0, 0, 0, 48, 48, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_107[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,243,224, 97,192, 99,128,103, 0,110, 0,108, 0,120, 0,104, 0,100, 0,102, 0, 99, 0,103,192, 96, 0, 96, 0, 96, 0, 96, 0,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_108[] = { 4, 0, 0, 0, 0, 0, 0,240, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,224, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_109[] = { 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241,227,192, 96,193,128, 96,193,128, 96,193,128, 96,193,128, 96,193,128, 96,193,128, 96,193,128, 96,193,128,113,227,128,111,159, 0,231, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_110[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241,224, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192,113,192,111,128,231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_111[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0,115,128, 97,128,192,192,192,192,192,192,192,192,192,192,192,192, 97,128,115,128, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_112[] = { 10, 0, 0,240, 0, 96, 0, 96, 0, 96, 0, 96, 0,110, 0,115,128, 97,128, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192, 97,128,115,128,238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_113[] = { 10, 0, 0, 3,192, 1,128, 1,128, 1,128, 1,128, 29,128,115,128, 97,128,193,128,193,128,193,128,193,128,193,128,193,128, 97,128,115,128, 29,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_114[] = { 7, 0, 0, 0, 0, 0, 0,240, 96, 96, 96, 96, 96, 96, 96, 96,118,110,230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_115[] = { 8, 0, 0, 0, 0, 0, 0,248,198,131, 3, 7, 30,124,112,224,194,102, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_116[] = { 7, 0, 0, 0, 0, 0, 0, 28, 50, 48, 48, 48, 48, 48, 48, 48, 48, 48,254,112, 48, 16, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_117[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,224, 62,192,113,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192,225,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_119[] = { 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 16, 0, 14, 56, 0, 14, 56, 0, 26, 40, 0, 26,100, 0, 25,100, 0, 49,100, 0, 48,194, 0, 48,194, 0, 96,194, 0, 96,195, 0,241,231,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_118[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 14, 0, 14, 0, 26, 0, 25, 0, 25, 0, 49, 0, 48,128, 48,128, 96,128, 96,192,241,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_120[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241,224, 96,192, 33,128, 51,128, 27, 0, 14, 0, 12, 0, 26, 0, 57, 0, 49,128, 96,192,241,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_121[] = { 11, 0, 0,224, 0,240, 0, 24, 0, 8, 0, 12, 0, 4, 0, 14, 0, 14, 0, 26, 0, 25, 0, 25, 0, 49, 0, 48,128, 48,128, 96,128, 96,192,241,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_122[] = { 8, 0, 0, 0, 0, 0, 0,255,195, 97,112, 48, 56, 24, 28, 14,134,195,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_065[] = { 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252, 31,128, 48, 6, 0, 16, 6, 0, 16, 12, 0, 24, 12, 0, 8, 12, 0, 15,248, 0, 12, 24, 0, 4, 24, 0, 4, 48, 0, 6, 48, 0, 2, 48, 0, 2, 96, 0, 1, 96, 0, 1,192, 0, 1,192, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_066[] = { 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,224, 48,120, 48, 24, 48, 12, 48, 12, 48, 12, 48, 24, 48, 56, 63,224, 48, 64, 48, 48, 48, 24, 48, 24, 48, 24, 48, 48, 48,112,255,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_067[] = { 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,224, 30, 56, 56, 8, 96, 4, 96, 0,192, 0,192, 0,192, 0,192, 0,192, 0,192, 0,192, 0, 96, 4, 96, 4, 56, 12, 28, 60, 7,228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_068[] = { 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,192, 48,112, 48, 56, 48, 12, 48, 12, 48, 6, 48, 6, 48, 6, 48, 6, 48, 6, 48, 6, 48, 6, 48, 12, 48, 12, 48, 56, 48,112,255,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_069[] = { 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,248, 48, 24, 48, 8, 48, 8, 48, 0, 48, 0, 48, 64, 48, 64, 63,192, 48, 64, 48, 64, 48, 0, 48, 0, 48, 16, 48, 16, 48, 48,255,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_070[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 32, 48, 32, 63,224, 48, 32, 48, 32, 48, 0, 48, 0, 48, 16, 48, 16, 48, 48,255,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_071[] = { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,224, 30, 56, 56, 28, 96, 12, 96, 12,192, 12,192, 12,192, 63,192, 0,192, 0,192, 0,192, 0, 96, 4, 96, 4, 56, 12, 28, 60, 7,228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_072[] = { 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252, 31,128, 48, 6, 0, 48, 6, 0, 48, 6, 0, 48, 6, 0, 48, 6, 0, 48, 6, 0, 48, 6, 0, 63,254, 0, 48, 6, 0, 48, 6, 0, 48, 6, 0, 48, 6, 0, 48, 6, 0, 48, 6, 0, 48, 6, 0,252, 31,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_073[] = { 6, 0, 0, 0, 0, 0, 0,252, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,252, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_074[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 0,204, 0,198, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 31,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_075[] = { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252, 31, 48, 14, 48, 28, 48, 56, 48,112, 48,224, 49,192, 51,128, 63, 0, 62, 0, 51, 0, 49,128, 48,192, 48, 96, 48, 48, 48, 24,252,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_076[] = { 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,248, 48, 24, 48, 8, 48, 8, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_077[] = { 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 33,248, 32, 96, 96, 32, 96, 96, 32,208, 96, 32,208, 96, 33,136, 96, 33,136, 96, 35, 8, 96, 35, 4, 96, 38, 4, 96, 38, 2, 96, 44, 2, 96, 44, 2, 96, 56, 1, 96, 56, 1, 96, 48, 0,224,240, 0,248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_078[] = { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 12, 32, 28, 32, 28, 32, 52, 32,100, 32,100, 32,196, 33,132, 33,132, 35, 4, 38, 4, 38, 4, 44, 4, 56, 4, 56, 4, 48, 4,240, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_079[] = { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,224, 28, 56, 56, 28, 96, 6, 96, 6,192, 3,192, 3,192, 3,192, 3,192, 3,192, 3,192, 3, 96, 6, 96, 6, 56, 28, 28, 56, 7,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_080[] = { 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0, 63,192, 48,112, 48, 48, 48, 24, 48, 24, 48, 24, 48, 48, 48,112,255,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_081[] = { 16, 0, 0, 0, 15, 0, 56, 0,112, 0,224, 1,192, 7,224, 28, 56, 56, 28, 96, 6, 96, 6,192, 3,192, 3,192, 3,192, 3,192, 3,192, 3,192, 3, 96, 6, 96, 6, 56, 28, 28, 56, 7,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_082[] = { 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252, 30, 48, 28, 48, 56, 48,112, 48, 96, 48,192, 49,192, 51,128, 63,192, 48,112, 48, 48, 48, 56, 48, 24, 48, 56, 48, 48, 48,112,255,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_083[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,158, 0,241,128,192,192,128, 96,128, 96, 0, 96, 0,224, 3,192, 15,128, 30, 0,120, 0,224, 0,192, 64,192, 64,192,192, 99,192, 30, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_084[] = { 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15,192, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0,131, 4,131, 4,195, 12,255,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_085[] = { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,224, 28, 48, 24, 8, 48, 8, 48, 4, 48, 4, 48, 4, 48, 4, 48, 4, 48, 4, 48, 4, 48, 4, 48, 4, 48, 4, 48, 4, 48, 4,252, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_087[] = { 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,131, 0, 1,131, 0, 1,131,128, 3,135,128, 3, 70,128, 3, 70,192, 6, 70, 64, 6, 76, 64, 6, 76, 96, 12, 44, 96, 12, 44, 32, 24, 44, 32, 24, 24, 48, 24, 24, 16, 48, 24, 16, 48, 24, 24,252,126,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_086[] = { 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,128, 0, 1,128, 0, 1,128, 0, 3,192, 0, 3, 64, 0, 3, 96, 0, 6, 32, 0, 6, 32, 0, 6, 48, 0, 12, 16, 0, 12, 24, 0, 24, 8, 0, 24, 8, 0, 24, 12, 0, 48, 4, 0, 48, 6, 0,252, 31,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_088[] = { 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252, 15,192, 48, 3,128, 24, 7, 0, 8, 14, 0, 4, 12, 0, 6, 24, 0, 2, 56, 0, 1,112, 0, 0,224, 0, 0,192, 0, 1,192, 0, 3,160, 0, 3, 16, 0, 6, 8, 0, 14, 12, 0, 28, 6, 0,126, 15,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_089[] = { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,224, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 3,192, 3, 64, 6, 96, 6, 32, 12, 48, 28, 16, 24, 24, 56, 8, 48, 12,252, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_090[] = { 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,248,224, 24,112, 8, 48, 8, 56, 0, 24, 0, 28, 0, 14, 0, 6, 0, 7, 0, 3, 0, 3,128, 1,192,128,192,128,224,192,112,255,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_048[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 51, 0, 97,128, 97,128,225,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, 97,128, 97,128, 51, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_049[] = { 8, 0, 0, 0, 0, 0, 0,255, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,120, 24, 8, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_050[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,128,255,192, 96, 64, 48, 0, 24, 0, 12, 0, 4, 0, 6, 0, 3, 0, 3, 0, 1,128, 1,128,129,128,129,128, 67,128,127, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_051[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 0,230, 0,195, 0, 1, 0, 1,128, 1,128, 1,128, 3,128, 7, 0, 30, 0, 12, 0, 6, 0,131, 0,131, 0, 71, 0,126, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_052[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 3, 0, 3, 0,255,192,255,192,195, 0, 67, 0, 99, 0, 35, 0, 51, 0, 19, 0, 27, 0, 11, 0, 7, 0, 7, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_053[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 0,227,128,193,128, 0,192, 0,192, 0,192, 0,192, 1,192, 3,128, 15,128,126, 0,120, 0, 96, 0, 32, 0, 32, 0, 31,128, 31,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_054[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0,123,128, 97,128,224,192,192,192,192,192,192,192,192,192,193,128,243,128,238, 0, 96, 0,112, 0, 48, 0, 24, 0, 14, 0, 3,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_055[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 24, 0, 12, 0, 12, 0, 12, 0, 4, 0, 6, 0, 6, 0, 2, 0, 3, 0, 3, 0, 1, 0, 1,128,129,128,192,192,255,192,127,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_056[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0,115,128,225,128,192,192,192,192,192,192, 65,192, 97,128, 55, 0, 30, 0, 30, 0, 51, 0, 97,128, 97,128, 97,128, 51, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_057[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 0, 28, 0, 6, 0, 3, 0, 3,128, 1,128, 29,128,115,192, 97,192,192,192,192,192,192,192,192,192,193,192, 97,128,119,128, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_096[] = { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,224,128,192, 96, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_126[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,131,128,199,192,124, 96, 56, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_033[] = { 2, 0, 0, 0, 0, 0, 0,192,192, 0, 0, 0,192,192,192,192,192,192,192,192,192,192,192,192, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_064[] = { 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,240, 0, 14, 12, 0, 24, 0, 0, 48, 0, 0, 97,222, 0, 99,123, 0,198, 57,128,198, 24,128,198, 24,192,198, 24, 64,198, 12, 64,195, 12, 64,195,140, 64,225,252, 64, 96,236,192,112, 0,128, 56, 1,128, 28, 3, 0, 15, 14, 0, 3,248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_035[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 34, 0, 34, 0, 34, 0, 34, 0,255,192,255,192, 17, 0, 17, 0, 17, 0,127,224,127,224, 8,128, 8,128, 8,128, 8,128, 8,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_036[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 0, 63, 0,229,192,196,192,132, 96,132, 96, 4, 96, 4,224, 7,192, 7,128, 30, 0, 60, 0,116, 0,100, 0,100, 32,100, 96, 52,224, 31,128, 4, 0, 4, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_037[] = { 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 60, 0, 24,114, 0, 12, 97, 0, 4, 96,128, 6, 96,128, 3, 48,128, 1, 25,128, 1,143, 0,120,192, 0,228, 64, 0,194, 96, 0,193, 48, 0,193, 16, 0, 97, 24, 0, 51,252, 0, 30, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_094[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,193,128, 65, 0, 99, 0, 34, 0, 54, 0, 20, 0, 28, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_038[] = { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60,127,126,225,225,192,192,193,192,193,160, 99, 32, 55, 16, 30, 24, 14, 62, 15, 0, 29,128, 24,192, 24, 64, 24, 64, 12,192, 7,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_042[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 28, 0,201,128,235,128, 28, 0,235,128,201,128, 28, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_040[] = { 6, 0, 4, 8, 16, 48, 32, 96, 96,192,192,192,192,192,192,192,192, 96, 96, 32, 48, 16, 8, 4, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_041[] = { 6, 0,128, 64, 32, 48, 16, 24, 24, 12, 12, 12, 12, 12, 12, 12, 12, 24, 24, 16, 48, 32, 64,128, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_045[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,240,255,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_095[] = { 13, 0, 0,255,248,255,248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_061[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,240,255,240, 0, 0, 0, 0,255,240,255,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_043[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0,255,240,255,240, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_091[] = { 5, 0, 0,248,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,248, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_123[] = { 8, 0, 7, 12, 24, 24, 24, 24, 24, 24, 16, 48, 32,192, 32, 48, 16, 24, 24, 24, 24, 24, 12, 7, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_125[] = { 8, 0,224, 48, 24, 24, 24, 24, 24, 24, 8, 12, 4, 3, 4, 12, 8, 24, 24, 24, 24, 24, 48,224, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_093[] = { 5, 0, 0,248, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,248, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_059[] = { 3, 0, 0, 0,192, 96, 32,224,192, 0, 0, 0, 0, 0, 0, 0,192,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_058[] = { 2, 0, 0, 0, 0, 0, 0,192,192, 0, 0, 0, 0, 0, 0, 0,192,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_044[] = { 3, 0, 0, 0,192, 96, 32,224,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_046[] = { 2, 0, 0, 0, 0, 0, 0,192,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_060[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 1,192, 7, 0, 28, 0,112, 0,192, 0,112, 0, 28, 0, 7, 0, 1,192, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_062[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 0,112, 0, 28, 0, 7, 0, 1,192, 0, 96, 1,192, 7, 0, 28, 0,112, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_047[] = { 8, 0, 0, 0,192,192,192, 96, 96, 32, 48, 48, 16, 24, 24, 8, 12, 12, 4, 6, 6, 3, 3, 3, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_063[] = { 8, 0, 0, 0, 0, 0, 0, 48, 48, 0, 0, 16, 16, 16, 24, 24, 12, 14, 7,195,195,131,198,124, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_092[] = { 7, 0, 0, 0, 0, 0, 0, 6, 6, 4, 12, 12, 8, 24, 24, 16, 48, 48, 32, 96, 96, 64,192,192, 0, 0, 0, 0, 0}; +static const guchar TimesRoman24_Character_034[] = { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,204,204,204,204, 0, 0, 0, 0, 0}; + +/* The font characters mapping: */ +static const guchar* TimesRoman24_Character_Map[] = {TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_032,TimesRoman24_Character_033,TimesRoman24_Character_034,TimesRoman24_Character_035,TimesRoman24_Character_036,TimesRoman24_Character_037,TimesRoman24_Character_038,TimesRoman24_Character_042,TimesRoman24_Character_040,TimesRoman24_Character_041,TimesRoman24_Character_042,TimesRoman24_Character_043,TimesRoman24_Character_044,TimesRoman24_Character_045,TimesRoman24_Character_046,TimesRoman24_Character_047,TimesRoman24_Character_048,TimesRoman24_Character_049,TimesRoman24_Character_050,TimesRoman24_Character_051,TimesRoman24_Character_052,TimesRoman24_Character_053,TimesRoman24_Character_054,TimesRoman24_Character_055,TimesRoman24_Character_056,TimesRoman24_Character_057,TimesRoman24_Character_058,TimesRoman24_Character_059,TimesRoman24_Character_060,TimesRoman24_Character_061,TimesRoman24_Character_062,TimesRoman24_Character_063,TimesRoman24_Character_064,TimesRoman24_Character_065,TimesRoman24_Character_066,TimesRoman24_Character_067,TimesRoman24_Character_068,TimesRoman24_Character_069,TimesRoman24_Character_070,TimesRoman24_Character_071,TimesRoman24_Character_072,TimesRoman24_Character_073,TimesRoman24_Character_074,TimesRoman24_Character_075,TimesRoman24_Character_076,TimesRoman24_Character_077,TimesRoman24_Character_078,TimesRoman24_Character_079,TimesRoman24_Character_080,TimesRoman24_Character_081,TimesRoman24_Character_082,TimesRoman24_Character_083,TimesRoman24_Character_084,TimesRoman24_Character_085,TimesRoman24_Character_086,TimesRoman24_Character_087,TimesRoman24_Character_088,TimesRoman24_Character_089,TimesRoman24_Character_090,TimesRoman24_Character_091,TimesRoman24_Character_092,TimesRoman24_Character_093,TimesRoman24_Character_094,TimesRoman24_Character_095,TimesRoman24_Character_096,TimesRoman24_Character_097,TimesRoman24_Character_098,TimesRoman24_Character_099,TimesRoman24_Character_100,TimesRoman24_Character_101,TimesRoman24_Character_102,TimesRoman24_Character_103,TimesRoman24_Character_104,TimesRoman24_Character_105,TimesRoman24_Character_106,TimesRoman24_Character_107,TimesRoman24_Character_108,TimesRoman24_Character_109,TimesRoman24_Character_110,TimesRoman24_Character_111,TimesRoman24_Character_112,TimesRoman24_Character_113,TimesRoman24_Character_114,TimesRoman24_Character_115,TimesRoman24_Character_116,TimesRoman24_Character_117,TimesRoman24_Character_118,TimesRoman24_Character_119,TimesRoman24_Character_120,TimesRoman24_Character_121,TimesRoman24_Character_122,TimesRoman24_Character_123,TimesRoman24_Character_042,TimesRoman24_Character_125,TimesRoman24_Character_126,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,NULL}; + +/* The font structure: */ +const SFG_Font fgFontTimesRoman24 = { "-adobe-times-medium-r-normal--24-240-75-75-p-124-iso8859-1", 93, 28, TimesRoman24_Character_Map }; + +/*** END OF FILE ***/ + diff --git a/freeglut/freeglut/freeglut-1.3/freeglut_gamemode.c b/freeglut/freeglut/freeglut-1.3/freeglut_gamemode.c new file mode 100644 index 0000000..297f80c --- /dev/null +++ b/freeglut/freeglut/freeglut-1.3/freeglut_gamemode.c @@ -0,0 +1,511 @@ +/* + * freeglut_gamemode.c + * + * The game mode handling code. + * + * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved. + * Written by Pawel W. Olszta, + * Creation date: Thu Dec 16 1999 + * + * 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 + * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#define G_LOG_DOMAIN "freeglut-gamemode" + +#include "../include/GL/freeglut.h" +#include "../include/GL/freeglut_internal.h" + +/* + * TODO BEFORE THE STABLE RELEASE: + * + * glutGameModeString() -- missing + * glutEnterGameMode() -- X11 version + * glutLeaveGameMode() -- is that correct? + * glutGameModeGet() -- is that correct? + */ + + +/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */ + +/* + * Remembers the current visual settings, so that + * we can change them and restore later... + */ +void fghRememberState( void ) +{ +#if TARGET_HOST_UNIX_X11 + + /* + * This highly depends on the XFree86 extensions, not approved as X Consortium standards + */ +# ifdef X_XF86VidModeGetModeLine + + /* + * Query the current display settings: + */ + XF86VidModeGetModeLine( + fgDisplay.Display, + fgDisplay.Screen, + &fgDisplay.DisplayModeClock, + &fgDisplay.DisplayMode + ); + +# else +# warning fghRememberState: missing XFree86 video mode extensions, game mode will not change screen resolution when activated +# endif + +#elif TARGET_HOST_WIN32 + + DEVMODE devMode; + + /* + * Grab the current desktop settings... + */ + EnumDisplaySettings( NULL, ENUM_CURRENT_SETTINGS, &fgDisplay.DisplayMode ); + + /* + * Make sure we will be restoring all settings needed + */ + fgDisplay.DisplayMode.dmFields |= DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_DISPLAYFREQUENCY; + +#endif +} + +/* + * Restores the previously remembered visual settings + */ +void fghRestoreState( void ) +{ +#if TARGET_HOST_UNIX_X11 + + /* + * This highly depends on the XFree86 extensions, not approved as X Consortium standards + */ +# ifdef X_XF86VidModeGetAllModeLines + + XF86VidModeModeInfo** displayModes; + gint i, displayModesCount; + + /* + * Query for all the display available... + */ + XF86VidModeGetAllModeLines( + fgDisplay.Display, + fgDisplay.Screen, + &displayModesCount, + &displayModes + ); + + /* + * Check every of the modes looking for one that matches our demands + */ + for( i=0; ihdisplay == fgDisplay.DisplayMode.hdisplay && + displayModes[ i ]->vdisplay == fgDisplay.DisplayMode.vdisplay && + displayModes[ i ]->dotclock == fgDisplay.DisplayModeClock ) + { + /* + * OKi, this is the display mode we have been looking for... + */ + XF86VidModeSwitchToMode( + fgDisplay.Display, + fgDisplay.Screen, + displayModes[ i ] + ); + + return; + } + } + +# else +# warning fghRestoreState: missing XFree86 video mode extensions, game mode will not change screen resolution when activated +# endif + +#elif TARGET_HOST_WIN32 + + /* + * Restore the previously rememebered desktop display settings + */ + ChangeDisplaySettings( &fgDisplay.DisplayMode, 0 ); + +#endif +} + +/* + * Checks the display mode settings against user's preferences + */ +gboolean fghCheckDisplayMode( gint width, gint height, gint depth, gint refresh ) +{ + /* + * The desired values should be stored in fgState structure... + */ + return( (width == fgState.GameModeSize.X) && (height == fgState.GameModeSize.Y) && + (depth == fgState.GameModeDepth) && (refresh == fgState.GameModeRefresh) ); +} + +/* + * Changes the current display mode to match user's settings + */ +gboolean fghChangeDisplayMode( gboolean haveToTest ) +{ +#if TARGET_HOST_UNIX_X11 + + /* + * This highly depends on the XFree86 extensions, not approved as X Consortium standards + */ +# ifdef X_XF86VidModeGetAllModeLines + + XF86VidModeModeInfo** displayModes; + gint i, displayModesCount; + + /* + * Query for all the display available... + */ + XF86VidModeGetAllModeLines( + fgDisplay.Display, + fgDisplay.Screen, + &displayModesCount, + &displayModes + ); + + /* + * Check every of the modes looking for one that matches our demands + */ + for( i=0; ihdisplay, displayModes[ i ]->vdisplay, + fgState.GameModeDepth, fgState.GameModeRefresh ) ) + { + /* + * OKi, this is the display mode we have been looking for... + */ + XF86VidModeSwitchToMode( + fgDisplay.Display, + fgDisplay.Screen, + displayModes[ i ] + ); + + /* + * Set the viewport's origin to (0,0) (the game mode window's top-left corner) + */ + XF86VidModeSetViewPort( + fgDisplay.Display, + fgDisplay.Screen, + 0, + 0 + ); + + /* + * Return successfull... + */ + return( TRUE ); + } + } + + /* + * Something must have went wrong + */ + return( FALSE ); + +# else +# warning fghChangeDisplayMode: missing XFree86 video mode extensions, game mode will not change screen resolution when activated +# endif + +#elif TARGET_HOST_WIN32 + + guint displayModes = 0, mode = 0xffffffff; + gboolean success = FALSE; + HDC desktopDC; + DEVMODE devMode; + + /* + * Enumerate the available display modes + */ + while( EnumDisplaySettings( NULL, displayModes, &devMode ) == TRUE ) + { + /* + * Does the enumerated display mode match the user's preferences? + */ + if( fghCheckDisplayMode( devMode.dmPelsWidth, devMode.dmPelsHeight, + devMode.dmBitsPerPel, fgState.GameModeRefresh ) ) + { + /* + * OKi, we've found a matching display mode, remember it's number and break + */ + mode = displayModes; + break; + } + + /* + * Switch to the next display mode, if any + */ + displayModes++; + } + + /* + * Did we find a matching display mode? + */ + if( mode != 0xffffffff ) + { + gint retVal = DISP_CHANGE_SUCCESSFUL; + + /* + * Mark the values we want to modify in the display change call + */ + devMode.dmFields |= DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_DISPLAYFREQUENCY; + + /* + * Change the current display mode (possibly in test mode only) + */ + retVal = ChangeDisplaySettings( &devMode, haveToTest ? CDS_TEST : 0 ); + + /* + * I don't know if it's really needed, but looks nice: + */ + success = (retVal == DISP_CHANGE_SUCCESSFUL) || (retVal == DISP_CHANGE_NOTUPDATED); + + /* + * If it was not a test, remember the current screen settings + */ + if( !haveToTest && success ) + { + fgState.GameModeSize.X = devMode.dmPelsWidth; + fgState.GameModeSize.Y = devMode.dmPelsHeight; + fgState.GameModeDepth = devMode.dmBitsPerPel; + fgState.GameModeRefresh = devMode.dmDisplayFrequency; + } + } + + /* + * Otherwise we must have failed somewhere + */ + return( success ); + +#endif +} + + +/* -- INTERFACE FUNCTIONS -------------------------------------------------- */ + +/* + * Sets the game mode display string + */ +void FGAPIENTRY glutGameModeString( const gchar* string ) +{ + gint width = 640, height = 480, depth = 16, refresh = 72; + + /* + * This one seems a bit easier than glutInitDisplayString. The bad thing + * about it that I was unable to find the game mode string definition, so + * that I assumed it is: "[width]x[height]:[depth]@[refresh rate]", which + * appears in all GLUT game mode programs I have seen to date. + */ + if( sscanf( string, "%ix%i:%i@%i", &width, &height, &depth, &refresh ) != 4 ) + if( sscanf( string, "%ix%i:%i", &width, &height, &depth ) != 3 ) + if( sscanf( string, "%ix%i@%i", &width, &height, &refresh ) != 3 ) + if( sscanf( string, "%ix%i", &width, &height ) != 2 ) + if( sscanf( string, ":%i@%i", &depth, &refresh ) != 2 ) + if( sscanf( string, ":%i", &depth ) != 1 ) + if( sscanf( string, "@%i", &refresh ) != 1 ) + g_warning( "unable to parse game mode string `%s'", string ); + + /* + * Hopefully it worked, and if not, we still have the default values + */ + fgState.GameModeSize.X = width; + fgState.GameModeSize.Y = height; + fgState.GameModeDepth = depth; + fgState.GameModeRefresh = refresh; +} + +/* + * Enters the game mode + */ +int FGAPIENTRY glutEnterGameMode( void ) +{ + /* + * Check if a game mode window already exists... + */ + if( fgStructure.GameMode != NULL ) + { + /* + * ...if so, delete it before proceeding... + */ + fgDestroyWindow( fgStructure.GameMode, TRUE ); + } + else + { + /* + * ...otherwise remember the current resolution, etc. + */ + fghRememberState(); + } + + /* + * We are ready to change the current screen's resolution now + */ + if( fghChangeDisplayMode( FALSE ) == FALSE ) + { + g_warning( "failed to change screen settings" ); + return( FALSE ); + } + + /* + * Finally, have the game mode window created + */ + fgStructure.GameMode = fgCreateWindow( + NULL, "FREEGLUT", 0, 0, fgState.GameModeSize.X, fgState.GameModeSize.Y, TRUE + ); + +#if TARGET_HOST_UNIX_X11 + + /* + * Move the mouse pointer over the game mode window + */ + XSetInputFocus( + fgDisplay.Display, + fgStructure.GameMode->Window.Handle, + RevertToNone, + CurrentTime + ); + + /* + * Confine the mouse pointer to the window's client area + */ + XGrabPointer( + fgDisplay.Display, + fgStructure.GameMode->Window.Handle, + TRUE, + ButtonPressMask|ButtonReleaseMask|ButtonMotionMask|PointerMotionMask, + GrabModeAsync, GrabModeAsync, + fgStructure.GameMode->Window.Handle, + None, + CurrentTime + ); + + /* + * Grab the keyboard, too + */ + XGrabKeyboard( + fgDisplay.Display, + fgStructure.GameMode->Window.Handle, + FALSE, + GrabModeAsync, GrabModeAsync, + CurrentTime + ); + +#endif + + /* + * Return successfull + */ + return( TRUE ); +} + +/* + * Leaves the game mode + */ +void FGAPIENTRY glutLeaveGameMode( void ) +{ + freeglut_return_if_fail( fgStructure.GameMode != NULL ); + + /* + * First of all, have the game mode window created + */ + fgDestroyWindow( fgStructure.GameMode, TRUE ); + +#if TARGET_HOST_UNIX_X11 + + /* + * Ungrab the mouse and keyboard + */ + XUngrabPointer( fgDisplay.Display, CurrentTime ); + XUngrabKeyboard( fgDisplay.Display, CurrentTime ); + +#endif + + /* + * Then, have the desktop visual settings restored + */ + fghRestoreState(); +} + +/* + * Returns information concerning the freeglut game mode + */ +int FGAPIENTRY glutGameModeGet( GLenum eWhat ) +{ + /* + * See why are we bothered + */ + switch( eWhat ) + { + case GLUT_GAME_MODE_ACTIVE: + /* + * Check if the game mode is currently active + */ + return( fgStructure.GameMode != NULL ); + + case GLUT_GAME_MODE_POSSIBLE: + /* + * Check if the current game mode settings are valid + */ + return( fghChangeDisplayMode( TRUE ) ); + + case GLUT_GAME_MODE_WIDTH: + /* + * The game mode screen width + */ + return( fgState.GameModeSize.X ); + + case GLUT_GAME_MODE_HEIGHT: + /* + * The game mode screen height + */ + return( fgState.GameModeSize.Y ); + + case GLUT_GAME_MODE_PIXEL_DEPTH: + /* + * The game mode pixel depth + */ + return( fgState.GameModeDepth ); + + case GLUT_GAME_MODE_REFRESH_RATE: + /* + * The game mode refresh rate + */ + return( fgState.GameModeRefresh ); + + case GLUT_GAME_MODE_DISPLAY_CHANGED: + /* + * This is true if the game mode has been activated successfully.. + */ + return( fgStructure.GameMode != NULL ); + } +} + +/*** END OF FILE ***/ + + + + diff --git a/freeglut/freeglut/freeglut-1.3/freeglut_geometry.c b/freeglut/freeglut/freeglut-1.3/freeglut_geometry.c new file mode 100644 index 0000000..2819d60 --- /dev/null +++ b/freeglut/freeglut/freeglut-1.3/freeglut_geometry.c @@ -0,0 +1,540 @@ +/* + * freeglut_geometry.c + * + * Freeglut geometry rendering methods. + * + * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved. + * Written by Pawel W. Olszta, + * Creation date: Fri Dec 3 1999 + * + * 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 + * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#define G_LOG_DOMAIN "freeglut-geometry" + +#include "../include/GL/freeglut.h" +#include "../include/GL/freeglut_internal.h" + +/* + * TODO BEFORE THE STABLE RELEASE: + * + * Following functions have been contributed by Andreas Umbach. I modified + * them a bit to make them use GLib (for memory allocation). + * + * glutWireCube() -- could add normal vectors so that lighting works + * glutSolidCube() -- OK + * glutWireSphere() -- OK + * glutSolidSphere() -- OK + * + * Following functions have been implemented by me: + * + * glutWireCone() -- looks OK + * glutSolidCone() -- normals are missing, there are holes in the thing + * + * Those functions need to be implemented, as nothing has been done yet. + * For now all of them draw a wire or solid cube, just to mark their presence. + * + * glutWireTorus() -- + * glutSolidTorus() -- + * glutWireDodecahedron() -- + * glutSolidDodecahedron() -- + * glutWireOctahedron() -- + * glutSolidOctahedron() -- + * glutWireTetrahedron() -- + * glutSolidTetrahedron() -- + * glutWireIcosahedron() -- + * glutSolidIcosahedron() -- + */ + + +/* -- INTERFACE FUNCTIONS -------------------------------------------------- */ + +/* + * Draws a wireframed cube. Code contributed by Andreas Umbach + */ +void FGAPIENTRY glutWireCube( GLdouble dSize ) +{ + float size = (float) dSize * 0.5f; + +# define V(a,b,c) glVertex3f( a size, b size, c size ); + + /* + * PWO: I dared to convert the code to use macros... + */ + glBegin( GL_LINE_LOOP ); V(-,-,+); V(+,-,+); V(+,+,+); V(-,+,+); glEnd(); + glBegin( GL_LINE_LOOP ); V(-,-,-); V(-,+,-); V(+,+,-); V(+,-,-); glEnd(); + glBegin( GL_LINES ); + V(-,-,+); V(-,-,-); V(-,+,+); V(-,+,-); + V(+,-,+); V(+,-,-); V(+,+,+); V(+,+,-); + glEnd(); + +# undef V +} + +/* + * Draws a solid cube. Code contributed by Andreas Umbach + */ +void FGAPIENTRY glutSolidCube( GLdouble dSize ) +{ + float size = (float) dSize * 0.5f; + +# define V(a,b,c) glVertex3f( a size, b size, c size ); +# define N(a,b,c) glNormal3f( a, b, c ); + + /* + * PWO: Again, I dared to convert the code to use macros... + */ + glBegin( GL_QUADS ); + N( 1, 0, 0); V(+,-,+); V(+,-,-); V(+,+,-); V(+,+,+); + N( 0, 1, 0); V(+,+,+); V(+,+,-); V(-,+,-); V(-,+,+); + N( 0, 0, 1); V(+,+,+); V(-,+,+); V(-,-,+); V(+,-,+); + N(-1, 0, 0); V(-,-,+); V(-,+,+); V(-,+,-); V(-,-,-); + N( 0,-1, 0); V(-,-,+); V(-,-,-); V(+,-,-); V(+,-,+); + N( 0, 0,-1); V(-,-,-); V(-,+,-); V(+,+,-); V(+,-,-); + glEnd(); + +# undef V +# undef N +} + +/* + * Draws a wire sphere. Code contributed by Andreas Umbach + */ +void FGAPIENTRY glutWireSphere( GLdouble dRadius, GLint slices, GLint stacks ) +{ + float radius = (float) dRadius, phi, psi, dpsi, dphi; + float* vertex; + gint i, j; + + /* + * Allocate the vertices array + */ + vertex = g_new0( float, 3 * slices * (stacks - 1) ); + + glPushMatrix(); + glScalef( radius, radius, radius ); + + dpsi = M_PI / (stacks + 1); + dphi = 2 * M_PI / slices; + psi = dpsi; + + for( j=0; j + */ +void FGAPIENTRY glutSolidSphere( GLdouble dRadius, GLint slices, GLint stacks ) +{ + float radius = (float) dRadius, phi, psi, dpsi, dphi; + float *next, *tmp, *row; + gint i, j; + + glPushMatrix(); + //glScalef( radius, radius, radius ); + + row = g_new0( float, slices * 3 ); + next = g_new0( float, slices * 3 ); + + dpsi = M_PI / (stacks + 1); + dphi = 2 * M_PI / slices; + psi = dpsi; + phi = 0; + + /* init first line + do polar cap */ + glBegin( GL_TRIANGLE_FAN ); + glNormal3f( 0, 0, 1 ); + glVertex3f( 0, 0, radius ); + + for( i=0; i=0; i-- ) + { + glNormal3fv(row + 3 * i); + glVertex3f( + radius * *(row + 3 * i + 0), + radius * *(row + 3 * i + 1), + radius * *(row + 3 * i + 2) + ); + } + + glEnd(); + + g_free(row); + g_free(next); + glPopMatrix(); +} + +/* + * Draws a wire cone + */ +void FGAPIENTRY glutWireCone( GLdouble base, GLdouble height, GLint slices, GLint stacks ) +{ + float alt = (float) height / (float) (stacks + 1); + float angle = (float) M_PI / (float) slices * 2.0f; + float slope = (float) tan( height / base ); + float* vertices = NULL; + gint i, j; + + /* + * We need 'slices' points on a circle + */ + vertices = g_new0( float, 2 * (slices + 1) ); + + for( i=0; i + * Creation date: Thu Dec 2 1999 + * + * 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 + * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#define G_LOG_DOMAIN "freeglut-init" + +#include "../include/GL/freeglut.h" +#include "../include/GL/freeglut_internal.h" + +/* + * TODO BEFORE THE STABLE RELEASE: + * + * fgDeinitialize() -- Win32's OK, X11 needs the OS-specific deinitialization done + * glutInitDisplayString() -- display mode string parsing + * + * Wouldn't it be cool to use gettext() for error messages? I just love bash saying + * "nie znaleziono pliku" instead of "file not found" :) Is gettext easily portable? + */ + +/* -- GLOBAL VARIABLES ----------------------------------------------------- */ + +/* + * A structure pointed by g_pDisplay holds all information + * regarding the display, screen, root window etc. + */ +SFG_Display fgDisplay; + +/* + * The settings for the current freeglut session + */ +SFG_State fgState; + + +/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */ + +/* + * A call to this function should initialize all the display stuff... + */ +void fgInitialize( const gchar* displayName ) +{ +#if TARGET_HOST_UNIX_X11 + /* + * Have the display created + */ + fgDisplay.Display = XOpenDisplay( displayName ); + + if( fgDisplay.Display == NULL ) + { + /* + * Failed to open a display. That's no good. + */ + g_error( "failed to open display '%s'", XDisplayName( displayName ) ); + } + + /* + * Check for the OpenGL GLX extension availability: + */ + if( !glXQueryExtension( fgDisplay.Display, NULL, NULL ) ) + { + /* + * GLX extensions have not been found... + */ + g_error( "OpenGL GLX extension not supported by display '%s'", XDisplayName( displayName ) ); + } + + /* + * Grab the default screen for the display we have just opened + */ + fgDisplay.Screen = DefaultScreen( fgDisplay.Display ); + + /* + * The same applying to the root window + */ + fgDisplay.RootWindow = RootWindow( + fgDisplay.Display, + fgDisplay.Screen + ); + + /* + * Grab the logical screen's geometry + */ + fgDisplay.ScreenWidth = DisplayWidth( + fgDisplay.Display, + fgDisplay.Screen + ); + + fgDisplay.ScreenHeight = DisplayHeight( + fgDisplay.Display, + fgDisplay.Screen + ); + + /* + * Grab the physical screen's geometry + */ + fgDisplay.ScreenWidthMM = DisplayWidthMM( + fgDisplay.Display, + fgDisplay.Screen + ); + + fgDisplay.ScreenHeightMM = DisplayHeightMM( + fgDisplay.Display, + fgDisplay.Screen + ); + + /* + * The display's connection number + */ + fgDisplay.Connection = ConnectionNumber( fgDisplay.Display ); + + /* + * Create the window deletion atom + */ + fgDisplay.DeleteWindow = XInternAtom( + fgDisplay.Display, + "WM_DELETE_WINDOW", + FALSE + ); + +#elif TARGET_HOST_WIN32 + + WNDCLASS wc; + ATOM atom; + + /* + * What we need to do is to initialize the fgDisplay global structure here... + */ + fgDisplay.Instance = GetModuleHandle( NULL ); + + /* + * Check if the freeglut window class has been registered before... + */ + atom = GetClassInfo( fgDisplay.Instance, "FREEGLUT", &wc ); + + /* + * ...nope, it has not, and we have to do it right now: + */ + if( atom == 0 ) + { + gboolean retval; + + /* + * Make sure the unitialized fields are reset to zero + */ + ZeroMemory( &wc, sizeof(WNDCLASS) ); + + /* + * Each of the windows should have it's own device context... + */ + wc.style = CS_OWNDC; + wc.lpfnWndProc = fgWindowProc; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hInstance = fgDisplay.Instance; + wc.hIcon = LoadIcon( NULL, IDI_WINLOGO ); + wc.hCursor = LoadCursor( NULL, IDC_ARROW ); + wc.hbrBackground = NULL; + wc.lpszMenuName = NULL; + wc.lpszClassName = "FREEGLUT"; + + /* + * Register the window class + */ + retval = RegisterClass( &wc ); + g_assert( retval != FALSE ); + } + + /* + * The screen dimensions can be obtained via GetSystemMetrics() calls + */ + fgDisplay.ScreenWidth = GetSystemMetrics( SM_CXSCREEN ); + fgDisplay.ScreenHeight = GetSystemMetrics( SM_CYSCREEN ); + + { + /* + * Checking the display's size in millimeters isn't too hard, too: + */ + HWND desktop = GetDesktopWindow(); + HDC context = GetDC( desktop ); + + /* + * Grab the appropriate values now (HORZSIZE and VERTSIZE respectably): + */ + fgDisplay.ScreenWidthMM = GetDeviceCaps( context, HORZSIZE ); + fgDisplay.ScreenHeightMM = GetDeviceCaps( context, VERTSIZE ); + + /* + * Whoops, forgot to release the device context :) + */ + ReleaseDC( desktop, context ); + } + +#endif + + /* + * Have the joystick device initialized now + */ + fgJoystickInit( 0 ); +} + +/* + * Perform the freeglut deinitialization... + */ +void fgDeinitialize( void ) +{ + gint i; + + /* + * Check if initialization has been performed before + */ + if( fgState.Timer == NULL ) + { + g_warning( "fgDeinitialize(): fgState.Timer is null => no valid initialization has been performed" ); + return; + } + + /* + * Perform the freeglut structure deinitialization + */ + fgDestroyStructure(); + + /* + * Delete all the timers and their storage list + */ + for( i=0; i<(gint) g_list_length( fgState.Timers ); i++ ) + g_free( g_list_nth( fgState.Timers, i )->data ); + + g_list_free( fgState.Timers ); + fgState.Timers = NULL; + + /* + * Destroy the timer itself + */ + g_timer_stop( fgState.Timer ); + g_timer_destroy( fgState.Timer ); + fgState.Timer = NULL; + + /* + * Deinitialize the joystick device + */ + fgJoystickClose(); + +#if TARGET_HOST_UNIX_X11 + + /* + * Make sure all X-client data we have created will be destroyed on display closing + */ + XSetCloseDownMode( fgDisplay.Display, DestroyAll ); + + /* + * Close the display connection, destroying all windows we have created so far + */ + XCloseDisplay( fgDisplay.Display ); + +#endif +} + + +/* -- INTERFACE FUNCTIONS -------------------------------------------------- */ + +/* + * Perform initialization. This usually happens on the program startup + * and restarting after glutMainLoop termination... + */ +void FGAPIENTRY glutInit( int* pargc, char** argv ) +{ + gchar* geometrySettings = NULL; + gchar* displayName = NULL; + gint i, j, argc = *pargc; + + /* + * Do not allow multiple initialization of the library + */ + if( fgState.Timer != NULL ) + { + /* + * We can't have multiple initialization performed + */ + g_error( "illegal glutInit() reinitialization attemp" ); + } + + /* + * Have the internal freeglut structure initialized now + */ + fgCreateStructure(); + + /* + * Fill in the default values that have not been passed in yet. + */ + if( fgState.Position.Use == FALSE ) + { + fgState.Position.X = -1; + fgState.Position.Y = -1; + } + + if( fgState.Size.Use == FALSE ) + { + fgState.Size.X = 300; + fgState.Size.Y = 300; + fgState.Size.Use = TRUE; + } + + /* + * Some more settings to come + */ + fgState.ForceDirectContext = FALSE; + fgState.TryDirectContext = TRUE; + fgState.ForceIconic = FALSE; + fgState.GLDebugSwitch = FALSE; + fgState.XSyncSwitch = FALSE; + + /* + * Assume we want to ignore the automatic key repeat + */ + fgState.IgnoreKeyRepeat = TRUE; + + /* + * The default display mode to be used + */ + fgState.DisplayMode = GLUT_RGBA | GLUT_SINGLE | GLUT_DEPTH; + + /* + * Set the default game mode settings + */ + fgState.GameModeSize.X = 640; + fgState.GameModeSize.Y = 480; + fgState.GameModeDepth = 16; + fgState.GameModeRefresh = 72; + + /* + * Remember the function's call time + */ + fgState.Timer = g_timer_new(); + g_timer_start( fgState.Timer ); + + /* + * Grab the environment variable indicating the X display to use. + * This is harmless under Win32, so let's let it stay here... + */ + displayName = (gchar *) strdup( (gchar *) g_getenv( "DISPLAY" ) ); + + /* + * Have the program arguments parsed. + */ + for( i=1; i= argc ) + g_error( "-display parameter must be followed by display name" ); + + /* + * Release the previous display name (the one from app's environment) + */ + g_free( displayName ); + + /* + * Make a working copy of the name for us to use + */ + displayName = strdup( argv[ i ] ); + + /* + * Have both arguments removed + */ + argv[ i - 1 ] = NULL; + argv[ i ] = NULL; + (* pargc) -= 2; + } + + /* + * The geometry settings + */ + else if( strcmp( argv[ i ], "-geometry" ) == 0 ) + { + /* + * Again, check if there is at least one more argument + */ + if( ++i >= argc ) + g_error( "-geometry parameter must be followed by window geometry settings" ); + + /* + * Otherwise make a duplicate of the geometry settings... + */ + geometrySettings = strdup( argv[ i ] ); + + /* + * Have both arguments removed + */ + argv[ i - 1 ] = NULL; + argv[ i ] = NULL; + (* pargc) -= 2; + } + + /* + * The direct/indirect OpenGL contexts settings + */ + else if( strcmp( argv[ i ], "-direct" ) == 0) + { + /* + * We try to force direct rendering... + */ + if( fgState.TryDirectContext == FALSE ) + g_error( "parameters ambiguity, -direct and -indirect cannot be both specified" ); + + fgState.ForceDirectContext = TRUE; + argv[ i ] = NULL; + (* pargc)--; + } + else if( strcmp( argv[ i ], "-indirect" ) == 0 ) + { + /* + * We try to force indirect rendering... + */ + if( fgState.ForceDirectContext == TRUE ) + g_error( "parameters ambiguity, -direct and -indirect cannot be both specified" ); + + fgState.TryDirectContext = FALSE; + argv[ i ] = NULL; + (* pargc)--; + } + + /* + * The '-iconic' parameter makes all new top-level + * windows created in iconified state... + */ + else if( strcmp( argv[ i ], "-iconic" ) == 0 ) + { + fgState.ForceIconic = TRUE; + argv[ i ] = NULL; + (* pargc)--; + } + + /* + * The '-gldebug' option activates some OpenGL state debugging features + */ + else if( strcmp( argv[ i ], "-gldebug" ) == 0 ) + { + fgState.GLDebugSwitch = TRUE; + argv[ i ] = NULL; + (* pargc)--; + } + + /* + * The '-sync' option activates X protocol synchronization (for debugging purposes) + */ + else if( strcmp( argv[ i ], "-sync" ) == 0 ) + { + fgState.XSyncSwitch = TRUE; + argv[ i ] = NULL; + (* pargc)--; + } + } + + /* + * Have the arguments list compacted now + */ + for( i=1; i= 0) ) + fgState.Size.X = w; + + if( (result & HeightValue) && (h >= 0) ) + fgState.Size.Y = h; + + if( result & XValue ) + if( result & XNegative ) + fgState.Position.X = fgDisplay.ScreenWidth + x - fgState.Size.X; + else + fgState.Position.X = x; + + if( result & YValue ) + if( result & YNegative ) + fgState.Position.Y = fgDisplay.ScreenHeight + y - fgState.Size.Y; + else + fgState.Position.Y = y; + + /* + * Free the geometry settings string + */ + g_free( geometrySettings ); + } +#endif + + /* + * Check for the minus one settings for both position and size... + */ + if( fgState.Position.X < 0 || fgState.Position.Y < 0 ) + fgState.Position.Use = FALSE; + + if( fgState.Size.X < 0 || fgState.Size.Y < 0 ) + fgState.Size.Use = FALSE; + + /* + * Do not forget about releasing the display name string + */ + g_free( displayName ); +} + +/* + * Sets the default initial window position for new windows + */ +void FGAPIENTRY glutInitWindowPosition( int x, int y ) +{ + /* + * The settings can be disables when both coordinates are negative + */ + if( (x >= 0) && (y >= 0) ) + { + /* + * We want to specify the initial position of each of the windows + */ + fgState.Position.X = x; + fgState.Position.Y = y; + fgState.Position.Use = TRUE; + } + else + { + /* + * The initial position of each of the windows is specified by the wm + */ + fgState.Position.X = -1; + fgState.Position.Y = -1; + fgState.Position.Use = FALSE; + } +} + +/* + * Sets the default initial window size for new windows + */ +void FGAPIENTRY glutInitWindowSize( int width, int height ) +{ + /* + * The settings can be disables when both values are negative + */ + if( (width >= 0) && (height >= 0) ) + { + /* + * We want to specify the initial size of each of the windows + */ + fgState.Size.X = width; + fgState.Size.Y = height; + fgState.Size.Use = TRUE; + } + else + { + /* + * The initial size of each of the windows is specified by the wm + */ + fgState.Size.X = -1; + fgState.Size.Y = -1; + fgState.Size.Use = FALSE; + } +} + +/* + * Sets the default display mode for all new windows + */ +void FGAPIENTRY glutInitDisplayMode( int displayMode ) +{ + /* + * We will make use of this value when creating a new OpenGL context... + */ + fgState.DisplayMode = displayMode; +} + + +/* -- INIT DISPLAY STRING PARSING ------------------------------------------ */ + +/* + * There is a discrete number of comparison operators we can encounter: + * + * comparison ::= "=" | "!=" | "<" | ">" | "<=" | ">=" | "~" + */ +#define FG_NONE 0x0000 +#define FG_EQUAL 0x0001 +#define FG_NOT_EQUAL 0x0002 +#define FG_LESS 0x0003 +#define FG_MORE 0x0004 +#define FG_LESS_OR_EQUAL 0x0005 +#define FG_MORE_OR_EQUAL 0x0006 +#define FG_CLOSEST 0x0007 + +/* + * The caller can feed us with a number of capability tokens: + * + * capability ::= "alpha" | "acca" | "acc" | "blue" | "buffer" | "conformant" | "depth" | "double" | + * "green" | "index" | "num" | "red" | "rgba" | "rgb" | "luminance" | "stencil" | + * "single" | "stereo" | "samples" | "slow" | "win32pdf" | "xvisual" | "xstaticgray" | + * "xgrayscale" | "xstaticcolor" | "xpseudocolor" | "xtruecolor" | "xdirectcolor" + */ +static gchar* g_Tokens[] = +{ + "none", "alpha", "acca", "acc", "blue", "buffer", "conformant", "depth", "double", "green", + "index", "num", "red", "rgba", "rgb", "luminance", "stencil", "single", "stereo", "samples", + "slow", "win32pdf", "xvisual", "xstaticgray", "xgrayscale", "xstaticcolor", "xpseudocolor", + "xtruecolor", "xdirectcolor", NULL +}; + +/* + * The structure to hold the parsed display string tokens + */ +typedef struct tagSFG_Capability SFG_Capability; +struct tagSFG_Capability +{ + gint capability; /* the capability token enumerator */ + gint comparison; /* the comparison operator used */ + gint value; /* the value we're comparing to */ +}; + +/* + * The scanner configuration for the init display string + */ +static GScannerConfig fgInitDisplayStringScannerConfig = +{ + ( " \t\r\n" ) /* cset_skip_characters */, + ( + G_CSET_a_2_z + "_" + G_CSET_A_2_Z + ) /* cset_identifier_first */, + ( + G_CSET_a_2_z + "_0123456789" + G_CSET_A_2_Z + G_CSET_LATINS + G_CSET_LATINC + "<>!=~" + ) /* cset_identifier_nth */, + ( "#\n" ) /* cpair_comment_single */, + FALSE /* case_sensitive */, + TRUE /* skip_comment_multi */, + TRUE /* skip_comment_single */, + TRUE /* scan_comment_multi */, + TRUE /* scan_identifier */, + FALSE /* scan_identifier_1char */, + FALSE /* scan_identifier_NULL */, + TRUE /* scan_symbols */, + FALSE /* scan_binary */, + TRUE /* scan_octal */, + TRUE /* scan_float */, + TRUE /* scan_hex */, + FALSE /* scan_hex_dollar */, + TRUE /* scan_string_sq */, + TRUE /* scan_string_dq */, + TRUE /* numbers_2_int */, + FALSE /* int_2_float */, + FALSE /* identifier_2_string */, + TRUE /* char_2_token */, + FALSE /* symbol_2_token */, + FALSE /* scope_0_fallback */, +}; + +/* + * Sets the default display mode for all new windows using a string + */ +void FGAPIENTRY glutInitDisplayString( char* displayMode ) +{ + /* + * display_string ::= (switch) + * switch ::= capability [comparison value] + * comparison ::= "=" | "!=" | "<" | ">" | "<=" | ">=" | "~" + * capability ::= "alpha" | "acca" | "acc" | "blue" | "buffer" | "conformant" | + * "depth" | "double" | "green" | "index" | "num" | "red" | "rgba" | + * "rgb" | "luminance" | "stencil" | "single" | "stereo" | + * "samples" | "slow" | "win32pdf" | "xvisual" | "xstaticgray" | + * "xgrayscale" | "xstaticcolor" | "xpseudocolor" | + * "xtruecolor" | "xdirectcolor" + * value ::= 0..9 [value] + * + * The display string grammar. This should be EBNF, but I couldn't find the definitions so, to + * clarify: (expr) means 0 or more times the expression, [expr] means 0 or 1 times expr. + * + * Create a new GLib lexical analyzer to process the display mode string + */ + GScanner* scanner = g_scanner_new( &fgInitDisplayStringScannerConfig ); + GList* caps = NULL; + gint i; + + /* + * Fail if the display mode string is empty or the scanner failed to initialize + */ + freeglut_return_if_fail( (scanner != NULL) && (strlen( displayMode ) > 0) ); + + /* + * Set the scanner's input name (for debugging) + */ + scanner->input_name = "glutInitDisplayString"; + + /* + * Start the lexical analysis of the extensions string + */ + g_scanner_input_text( scanner, displayMode, strlen( displayMode ) ); + + /* + * While there are any more tokens to be checked... + */ + while( !g_scanner_eof( scanner ) ) + { + /* + * Actually we're expecting only string tokens + */ + GTokenType tokenType = g_scanner_get_next_token( scanner ); + + /* + * We are looking for identifiers + */ + if( tokenType == G_TOKEN_IDENTIFIER ) + { + gchar* capability = NULL; /* the capability identifier string (always present) */ + gint capID = 0; /* the capability identifier value (from g_Tokens) */ + gint comparison = 0; /* the comparison operator value, see definitions */ + gchar* valueString = NULL; /* if the previous one is present, this is needed */ + gint value = 0; /* the integer value converted using a strtol call */ + SFG_Capability* capStruct; /* the capability description structure */ + + /* + * OK. The general rule of thumb that we always should be getting a capability identifier + * string (see the grammar description). If it is followed by a comparison identifier, then + * there must follow an integer value we're comparing the capability to... + * + * Have the current token analyzed with that in mind... + */ + for( i=0; i<(gint) strlen( scanner->value.v_identifier ); i++ ) + { + gchar c = scanner->value.v_identifier[ i ]; + + if( (c == '=') || (c == '!') || (c == '<') || (c == '>') || (c == '~') ) + break; + } + + /* + * Here we go with the length of the capability identifier string. + * In the worst of cases, it is as long as the token identifier. + */ + capability = g_strndup( scanner->value.v_identifier, i ); + + /* + * OK. Is there a chance for comparison and value identifiers to follow? + * Note: checking against i+1 as this handles two cases: single character + * comparison operator and first of value's digits, which must always be + * there, or the two-character comparison operators. + */ + if( (i + 1) < (gint) strlen( scanner->value.v_identifier ) ) + { + /* + * Yeah, indeed, it is the i-th character to start the identifier, then. + */ + gchar c1 = scanner->value.v_identifier[ i + 0 ]; + gchar c2 = scanner->value.v_identifier[ i + 1 ]; + + if( (c1 == '=') ) { i += 1; comparison = FG_EQUAL; } else + if( (c1 == '!') && (c2 == '=') ) { i += 2; comparison = FG_NOT_EQUAL; } else + if( (c1 == '<') && (c2 == '=') ) { i += 2; comparison = FG_LESS_OR_EQUAL; } else + if( (c1 == '>') && (c2 == '=') ) { i += 2; comparison = FG_MORE_OR_EQUAL; } else + if( (c1 == '<') ) { i += 1; comparison = FG_LESS; } else + if( (c1 == '>') ) { i += 1; comparison = FG_MORE; } else + if( (c1 == '~') ) { i += 1; comparison = FG_CLOSEST; } else + g_warning( "invalid comparison operator in token `%s'", scanner->value.v_identifier ); + } + + /* + * Grab the value string that must follow the comparison operator... + */ + if( comparison != FG_NONE && i < (gint) strlen( scanner->value.v_identifier ) ) + valueString = g_strdup( scanner->value.v_identifier + i ); + + /* + * If there was a value string, convert it to integer... + */ + if( comparison != FG_NONE && strlen( valueString ) > 0 ) + value = strtol( valueString, NULL, 0 ); + + /* + * Now we need to match the capability string and it's ID + */ + for( i=0; g_Tokens[ i ]!=NULL; i++ ) + { + if( strcmp( capability, g_Tokens[ i ] ) == 0 ) + { + /* + * Looks like we've found the one we were looking for + */ + capID = i; + break; + } + } + + /* + * Create a new capability description structure + */ + capStruct = g_new0( SFG_Capability, 1 ); + + /* + * Fill in the cap's values, as we have parsed it: + */ + capStruct->capability = capID; + capStruct->comparison = comparison; + capStruct->value = value; + + /* + * Add the new capabaility to the caps list + */ + caps = g_list_append( caps, capStruct ); + + /* + * Clean up the local mess and keep rolling on + */ + g_free( valueString ); + g_free( capability ); + } + } + + /* + * Now that we have converted the string into somewhat more machine-friendly + * form, proceed with matching the frame buffer configuration... + * + * The caps list could be passed to a function that would try finding the closest + * matching pixel format, visual, frame buffer configuration or whatever. It would + * be good to convert the glutInitDisplayMode() to use the same method. + */ +#if 0 + g_message( "found %i capability preferences", g_list_length( caps ) ); + + g_message( "token `%s': cap: %i, com: %i, val: %i", + scanner->value.v_identifier, + capStruct->capability, + capStruct->comparison, + capStruct->value + ); +#endif + + /* + * Free the capabilities we have parsed + */ + for( i=0; i<(gint) g_list_length( caps ); i++ ) + g_free( g_list_nth( caps, i )->data ); + + /* + * Destroy the capabilities list itself + */ + g_list_free( caps ); + + /* + * Free the lexical scanner now... + */ + g_scanner_destroy( scanner ); +} + +/*** END OF FILE ***/ + + + + + diff --git a/freeglut/freeglut/freeglut-1.3/freeglut_joystick.c b/freeglut/freeglut/freeglut-1.3/freeglut_joystick.c new file mode 100644 index 0000000..369910c --- /dev/null +++ b/freeglut/freeglut/freeglut-1.3/freeglut_joystick.c @@ -0,0 +1,603 @@ +/* + * freeglut_joystick.c + * + * Joystick handling code + * + * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved. + * Written by Steve Baker, + * + * 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. + * 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 + * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * PWO: this is not exactly what Steve Baker has done for PLIB, as I had to convert + * it from C++ to C. And I've also reformatted it a bit (that's my little + * personal deviation :]) I don't really know if it is still portable... + * Steve: could you please add some comments to the code? :) + * + * FreeBSD port - courtesy of Stephen Montgomery-Smith + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#define G_LOG_DOMAIN "freeglut-joystick" + +#include "../include/GL/freeglut.h" +#include "../include/GL/freeglut_internal.h" + +/* + * PWO: I don't like it at all. It's a mess. Could it be cleared? + */ +#ifdef WIN32 +# include +# if defined( __CYGWIN32__ ) || defined( __CYGWIN__ ) +# define NEAR /* */ +# define FAR /* */ +# endif +# include +# include +#else +# include +# include +# ifdef __FreeBSD__ +# include +# define JS_DATA_TYPE joystick +# define JS_RETURN (sizeof(struct JS_DATA_TYPE)) +# elif defined(__linux__) +# include +# include +# include + + /* + * Check the joystick driver version + */ +# ifdef JS_VERSION +# if JS_VERSION >= 0x010000 +# define JS_NEW +# endif +# endif +# else +# ifndef JS_DATA_TYPE + + /* + * Not Windoze and no joystick driver... + * + * Well - we'll put these values in and that should + * allow the code to at least compile. The JS open + * routine should error out and shut off all the code + * downstream anyway + */ + struct JS_DATA_TYPE + { + int buttons; + int x; + int y; + }; + +# define JS_RETURN (sizeof(struct JS_DATA_TYPE)) +# endif +# endif +#endif + +#ifdef WIN32 +# define _JS_MAX_AXES 6 +#else +# ifdef __FreeBSD__ +# define _JS_MAX_AXES 2 +# else +# define _JS_MAX_AXES 6 +# endif +#endif + +typedef struct tagSFG_Joystick SFG_Joystick; +struct tagSFG_Joystick +{ +#ifdef __FreeBSD__ + gint id; +#endif + +#ifdef WIN32 + JOYINFOEX js; + UINT js_id; +#else +# ifdef JS_NEW + struct js_event js; + gint tmp_buttons; + float tmp_axes[ _JS_MAX_AXES ]; +# else + JS_DATA_TYPE js; +# endif + + gchar fname[ 128 ]; + gint fd; +#endif + + gboolean error; + gint num_axes; + gint num_buttons; + + float dead_band[ _JS_MAX_AXES ]; + float saturate [ _JS_MAX_AXES ]; + float center [ _JS_MAX_AXES ]; + float max [ _JS_MAX_AXES ]; + float min [ _JS_MAX_AXES ]; +}; + +/* + * The static joystick structure pointer + */ +static SFG_Joystick* fgJoystick = NULL; + +/* + * Read the raw joystick data + */ +static void fghJoystickRawRead ( SFG_Joystick* joy, gint* buttons, float* axes ) +{ +#ifdef WIN32 + MMRESULT status; +#else + gint status; +#endif + + gint i; + + if( joy->error ) + { + if( buttons ) + *buttons = 0 ; + + if( axes ) + for( i=0; inum_axes; i++ ) + axes[ i ] = 1500.0f; + + return; + } + +#ifdef WIN32 + status = joyGetPosEx( joy->js_id, &joy->js ); + + if( status != JOYERR_NOERROR ) + { + joy->error = TRUE; + return; + } + + if( buttons ) + *buttons = (int) joy->js.dwButtons; + + if( axes ) + { + /* + * WARNING - Fall through case clauses!! + */ + switch( joy->num_axes ) + { + case 6: axes[5] = (float) joy->js.dwVpos; + case 5: axes[4] = (float) joy->js.dwUpos; + case 4: axes[3] = (float) joy->js.dwRpos; + case 3: axes[2] = (float) joy->js.dwZpos; + case 2: axes[1] = (float) joy->js.dwYpos; + case 1: axes[0] = (float) joy->js.dwXpos; + } + } +#else +# ifdef JS_NEW + + while( 1 ) + { + gint status = read( joy->fd, &joy->js, sizeof(struct js_event) ); + + if( status != sizeof(struct js_event) ) + { + if( errno == EAGAIN ) + { + /* + * Use the old values + */ + if( buttons ) *buttons = joy->tmp_buttons; + if( axes ) memcpy( axes, joy->tmp_axes, sizeof(float) * joy->num_axes ); + return; + } + + g_warning( joy->fname ); + joy->error = TRUE; + return; + } + + switch( joy->js.type & ~JS_EVENT_INIT ) + { + case JS_EVENT_BUTTON: + if ( joy->js.value == 0 ) /* clear the flag */ + joy->tmp_buttons &= ~(1 << joy->js.number); + else + joy->tmp_buttons |= (1 << joy->js.number); + break; + + case JS_EVENT_AXIS: + joy->tmp_axes[ joy->js.number ] = (float) joy->js.value; + + if( axes ) + memcpy( axes, joy->tmp_axes, sizeof(float) * joy->num_axes ); + break; + } + + if( buttons ) + *buttons = joy->tmp_buttons; + } +# else + + status = read( joy->fd, &joy->js, JS_RETURN ); + + if( status != JS_RETURN ) + { + g_warning( fname ); + joy->error = TRUE; + return; + } + + if( buttons ) +# ifdef __FreeBSD__ + *buttons = (joy->js.b1 ? 1 : 0) | (joy->js.b2 ? 2 : 0); +# else + *buttons = joy->js.buttons; +# endif + + if( axes ) + { + axes[ 0 ] = (float) joy->js.x; + axes[ 1 ] = (float) joy->js.y; + } +# endif +#endif +} + +/* + * Correct the joystick axis data + */ +static float fghJoystickFudgeAxis( SFG_Joystick* joy, float value, gint axis ) +{ + if( value < joy->center[ axis ] ) + { + float xx = (value - joy->center[ axis ]) / (joy->center[ axis ] - joy->min[ axis ]); + + if( xx < -joy->saturate[ axis ] ) + return( -1.0f ); + + if( xx > -joy->dead_band [ axis ] ) + return( 0.0f ); + + xx = (xx + joy->dead_band[ axis ]) / (joy->saturate[ axis ] - joy->dead_band[ axis ]); + + return( ( xx < -1.0f ) ? -1.0f : xx ); + } + else + { + float xx = (value - joy->center [ axis ]) / (joy->max[ axis ] - joy->center[ axis ]); + + if( xx > joy->saturate[ axis ] ) + return 1.0f ; + + if( xx < joy->dead_band[ axis ] ) + return 0.0f ; + + xx = (xx - joy->dead_band[ axis ]) / (joy->saturate[ axis ] - joy->dead_band[ axis ]); + + return( ( xx > 1.0f ) ? 1.0f : xx ); + } +} + +/* + * Read the corrected joystick data + */ +static void fghJoystickRead( SFG_Joystick* joy, gint* buttons, float* axes ) +{ + float raw_axes[ _JS_MAX_AXES ]; + gint i; + + if( joy->error ) + { + if( buttons ) + *buttons = 0; + + if( axes ) + for ( i=0; inum_axes ; i++ ) + axes[ i ] = 0.0f ; + } + + fghJoystickRawRead( joy, buttons, raw_axes ); + + if( axes ) + for( i=0 ; inum_axes ; i++ ) + axes[ i ] = fghJoystickFudgeAxis( joy, raw_axes[ i ], i ); +} + +/* + * Happy happy happy joy joy joy (happy new year toudi :D) + */ +static void fghJoystickOpen( SFG_Joystick* joy ) +{ +#ifdef WIN32 + JOYCAPS jsCaps; + gint i; + + joy->js.dwFlags = JOY_RETURNALL; + joy->js.dwSize = sizeof( joy->js ); + + memset( &jsCaps, 0, sizeof(jsCaps) ); + + joy->error = (joyGetDevCaps( joy->js_id, &jsCaps, sizeof(jsCaps) ) != JOYERR_NOERROR); + joy->num_axes = (jsCaps.wNumAxes < _JS_MAX_AXES ) ? jsCaps.wNumAxes : _JS_MAX_AXES; + + /* + * WARNING - Fall through case clauses!! + */ + switch( joy->num_axes ) + { + case 6 : joy->min[ 5 ] = (float) jsCaps.wVmin; joy->max[ 5 ] = (float) jsCaps.wVmax; + case 5 : joy->min[ 4 ] = (float) jsCaps.wUmin; joy->max[ 4 ] = (float) jsCaps.wUmax; + case 4 : joy->min[ 3 ] = (float) jsCaps.wRmin; joy->max[ 3 ] = (float) jsCaps.wRmax; + case 3 : joy->min[ 2 ] = (float) jsCaps.wZmin; joy->max[ 2 ] = (float) jsCaps.wZmax; + case 2 : joy->min[ 1 ] = (float) jsCaps.wYmin; joy->max[ 1 ] = (float) jsCaps.wYmax; + case 1 : joy->min[ 0 ] = (float) jsCaps.wXmin; joy->max[ 0 ] = (float) jsCaps.wXmax; break; + + /* + * I guess we have no axes at all + */ + default: joy->error = TRUE; break; + } + + /* + * Guess all the rest judging on the axes extremals + */ + for( i=0 ; inum_axes ; i++ ) + { + joy->center [ i ] = (joy->max[i] + joy->min[i]) * 0.5f; + joy->dead_band[ i ] = 0.0f; + joy->saturate [ i ] = 1.0f; + } + +#else +# ifdef __FreeBSD__ + gint buttons[ _JS_MAX_AXES ]; + float axes[ _JS_MAX_AXES ]; + gint noargs, in_no_axes; + gchar joyfname[ 1024 ]; + FILE* joyfile; +# endif + + gint i, counter; + + /* + * Default for older Linux systems. + */ + joy->num_axes = 2; + joy->num_buttons = 32; + +# ifdef JS_NEW + for( i=0 ; i<_JS_MAX_AXES ; i++ ) + joy->tmp_axes[ i ] = 0.0f ; + + joy->tmp_buttons = 0 ; +# endif + + joy->fd = open( joy->fname, O_RDONLY ); + + joy->error = (joy->fd < 0); + + if( joy->error ) + return; + +# ifdef __FreeBSD__ + fghJoystickRawRead( buttons, axes ); + joy->error = axes[ 0 ] < -1000000000.0f; + if( joy->error ) + return ; + + sprintf( joyfname, "%s/.joy%drc", g_getenv( "HOME" ), id ); + + joyfile = fopen( joyfname, "r" ); + joy->error = (joyfile == NULL); + if( joy->error ) + return; + + noargs = fscanf( + joyfile, "%d%f%f%f%f%f%f", + &in_no_axes, + &joy->min[ 0 ], &joy->center[ 0 ], &joy->max[ 0 ], + &joy->min[ 1 ], &joy->center[ 1 ], &joy->max[ 1 ] + ); + + joy->error = (noargs != 7) || (in_no_axes != _JS_MAX_AXES); + fclose( joyfile ); + if( joy->error ) + return; + + for( i=0 ; i<_JS_MAX_AXES ; i++ ) + { + dead_band[ i ] = 0.0f; + saturate [ i ] = 1.0f; + } +# else + + /* + * Set the correct number of axes for the linux driver + */ +# ifdef JS_NEW + ioctl( joy->fd, JSIOCGAXES , &joy->num_axes ); + ioctl( joy->fd, JSIOCGBUTTONS, &joy->num_buttons ); + fcntl( joy->fd, F_SETFL, O_NONBLOCK ); + +# endif + + /* + * The Linux driver seems to return 512 for all axes + * when no stick is present - but there is a chance + * that could happen by accident - so it's gotta happen + * on both axes for at least 100 attempts. + * + * PWO: shouldn't be that done somehow wiser on the kernel level? + */ +# ifndef JS_NEW + counter = 0 ; + + do + { + fghJoystickRawRead( joy, NULL, center ); + counter++; + } while( !joy->error && counter < 100 && center[ 0 ] == 512.0f && center[ 1 ] == 512.0f ); + + if( counter >= 100 ) + joy->error = TRUE; +# endif + + for( i=0 ; i<_JS_MAX_AXES ; i++ ) + { +# ifdef JS_NEW + joy->max [ i ] = 32767.0f; + joy->center[ i ] = 0.0f; + joy->min [ i ] = -32767.0f; +# else + joy->max[ i ] = center[ i ] * 2.0f; + joy->min[ i ] = 0.0f; +# endif + joy->dead_band[ i ] = 0.0f ; + joy->saturate [ i ] = 1.0f ; + } +# endif +#endif +} + +/* + * + */ +void fgJoystickInit( gint ident ) +{ + /* + * Make sure we don't get reinitialized + */ + if( fgJoystick != NULL ) + g_error( "illegal attemp to initialize joystick device" ); + + /* + * Have the global joystick structure created + */ + fgJoystick = g_new0( SFG_Joystick, 1 ); + +#ifdef WIN32 + switch( ident ) + { + case 0: fgJoystick->js_id = JOYSTICKID1; fghJoystickOpen( fgJoystick ); break; + case 1: fgJoystick->js_id = JOYSTICKID2; fghJoystickOpen( fgJoystick ); break; + default: fgJoystick->num_axes = 0; fgJoystick->error = TRUE; break; + } +#else + +# ifdef __FreeBSD__ + fgJoystick->id = ident; + sprintf( fgJoystick->fname, "/dev/joy%d", ident ); +# else + sprintf( fgJoystick->fname, "/dev/js%d", ident ); +# endif + + /* + * Let's try opening the joystick device now: + */ + fghJoystickOpen( fgJoystick ); +#endif +} + +/* + * + */ +void fgJoystickClose( void ) +{ + if( fgJoystick == NULL ) + g_error( "illegal attempt to deinitialize joystick device" ); + +#ifndef WIN32 + if( fgJoystick->error != TRUE ) + close( fgJoystick->fd ); +#endif +} + +/* + * Polls the joystick and executes the joystick callback hooked to the + * window specified in the function's parameter: + */ +void fgJoystickPollWindow( SFG_Window* window ) +{ + float axes[ _JS_MAX_AXES ]; + gint buttons; + + /* + * Make sure the joystick device is initialized, the window seems valid + * and that there is a joystick callback hooked to it: + */ + freeglut_return_if_fail( fgJoystick == NULL || window == NULL ); + freeglut_return_if_fail( window->Callbacks.Joystick == NULL ); + + /* + * Poll the joystick now: + */ + fghJoystickRead( fgJoystick, &buttons, axes ); + + /* + * Execute the freeglut joystick callback now + */ + window->Callbacks.Joystick( + buttons, + (gint) (axes[ 0 ] * 1000.0f), + (gint) (axes[ 1 ] * 1000.0f), + (gint) (axes[ 2 ] * 1000.0f) + ); +} + +/* + * PWO: These jsJoystick class methods have not been implemented. + * We might consider adding such functions to freeglut-2.0. + */ +#if 0 + int getNumAxes () { return num_axes ; } + int notWorking () { return error ; } + + float getDeadBand ( int axis ) { return dead_band [ axis ] ; } + void setDeadBand ( int axis, float db ) { dead_band [ axis ] = db ; } + + float getSaturation ( int axis ) { return saturate [ axis ] ; } + void setSaturation ( int axis, float st ) { saturate [ axis ] = st ; } + + void setMinRange ( float *axes ) { memcpy ( min , axes, num_axes * sizeof(float) ) ; } + void setMaxRange ( float *axes ) { memcpy ( max , axes, num_axes * sizeof(float) ) ; } + void setCenter ( float *axes ) { memcpy ( center, axes, num_axes * sizeof(float) ) ; } + + void getMinRange ( float *axes ) { memcpy ( axes, min , num_axes * sizeof(float) ) ; } + void getMaxRange ( float *axes ) { memcpy ( axes, max , num_axes * sizeof(float) ) ; } + void getCenter ( float *axes ) { memcpy ( axes, center, num_axes * sizeof(float) ) ; } +#endif + +/*** END OF FILE ***/ + + + + diff --git a/freeglut/freeglut/freeglut-1.3/freeglut_main.c b/freeglut/freeglut/freeglut-1.3/freeglut_main.c new file mode 100644 index 0000000..227a943 --- /dev/null +++ b/freeglut/freeglut/freeglut-1.3/freeglut_main.c @@ -0,0 +1,1294 @@ +/* + * freeglut_main.c + * + * The windows message processing methods. + * + * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved. + * Written by Pawel W. Olszta, + * Creation date: Fri Dec 3 1999 + * + * 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 + * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#define G_LOG_DOMAIN "freeglut-main" + +#include "../include/GL/freeglut.h" +#include "../include/GL/freeglut_internal.h" + +/* + * TODO BEFORE THE STABLE RELEASE: + * + * There are some issues concerning window redrawing under X11, and maybe + * some events are not handled. The Win32 version lacks some more features, + * but seems acceptable for not demanding purposes. + * + * Need to investigate why the X11 version breaks out with an error when + * closing a window (using the window manager, not glutDestroyWindow)... + */ + +/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */ + +/* + * Calls a window's redraw method. This is used when + * a redraw is forced by the incoming window messages. + */ +static void fghRedrawWindowByHandle +#if TARGET_HOST_UNIX_X11 + ( Window handle ) +#elif TARGET_HOST_WIN32 + ( HWND handle ) +#endif +{ + /* + * Find the window we have to redraw... + */ + SFG_Window* window = fgWindowByHandle( handle ); + freeglut_return_if_fail( window != NULL ); + + /* + * Check if there is a display callback hooked to it + */ + freeglut_return_if_fail( window->Callbacks.Display != NULL ); + + /* + * Return if the window is not visible + */ + freeglut_return_if_fail( window->State.Visible != TRUE ); + + /* + * Set the window as the current one. Calling glutSetWindow() + * might seem slow and generally redundant, but it is portable. + */ + glutSetWindow( window->ID ); + + /* + * Have the callback executed now. The buffers should + * be swapped by the glutSwapBuffers() execution inside + * the callback itself. + */ + window->Callbacks.Display(); +} + +/* + * Handle a window configuration change. When no reshape + * callback is hooked, the viewport size is updated to + * match the new window size. + */ +static void fghReshapeWindowByHandle +#if TARGET_HOST_UNIX_X11 + ( Window handle, gint width, gint height ) +#elif TARGET_HOST_WIN32 + ( HWND handle, gint width, gint height ) +#endif +{ + /* + * Find the window that received the reshape event + */ + SFG_Window* window = fgWindowByHandle( handle ); + freeglut_return_if_fail( window != NULL ); + + /* + * Remember about setting the current window... + */ + glutSetWindow( window->ID ); + + /* + * Check if there is a reshape callback hooked + */ + if( window->Callbacks.Reshape != NULL ) + { + /* + * OKi, have it called immediately + */ + window->Callbacks.Reshape( width, height ); + } + else + { + /* + * Otherwise just resize the viewport + */ + glViewport( 0, 0, width, height ); + } +} + +/* + * A static helper function to execute display callback for a window + */ +static void fghcbDisplayWindow( gpointer window, gpointer enumerator ) +{ +#if TARGET_HOST_UNIX_X11 + /* + * Check if there is an idle callback hooked + */ +# warning there is a redisplay hack here (see the code commented out) + if( (((SFG_Window *) window)->Callbacks.Display != NULL) /*&& + /*(((SFG_Window *) window)->State.Redisplay == TRUE)*/ && + (((SFG_Window *) window)->State.Visible == TRUE) ) + { + /* + * OKi, this is the case: have the window set as the current one + */ + glutSetWindow( ((SFG_Window *) window)->ID ); + + /* + * Do not exagerate with the redisplaying + */ + ((SFG_Window *) window)->State.Redisplay = FALSE; + + /* + * And execute the display callback immediately after + */ + ((SFG_Window *) window)->Callbacks.Display(); + } + +#elif TARGET_HOST_WIN32 + + /* + * Do we need to explicitly resize the window? + */ + if( ((SFG_Window *) window)->State.NeedToResize ) + { + glutSetWindow( ((SFG_Window *) window)->ID ); + + fghReshapeWindowByHandle( + ((SFG_Window *) window)->Window.Handle, + glutGet( GLUT_WINDOW_WIDTH ), + glutGet( GLUT_WINDOW_HEIGHT ) + ); + + /* + * Never ever do that again: + */ + ((SFG_Window *) window)->State.NeedToResize = FALSE; + } + + /* + * This is done in a bit different way under Windows + */ + RedrawWindow( + ((SFG_Window *) window)->Window.Handle, NULL, NULL, + RDW_NOERASE | RDW_INTERNALPAINT | RDW_INVALIDATE + ); + +#endif + + /* + * Process this window's children (if any) + */ + fgEnumSubWindows( (SFG_Window *) window, fghcbDisplayWindow, enumerator ); +} + +/* + * Make all windows perform a display call + */ +static void fghDisplayAll( void ) +{ + SFG_Enumerator enumerator; + + /* + * Uses a method very similiar for fgWindowByHandle... + */ + enumerator.found = FALSE; + enumerator.data = NULL; + + /* + * Start the enumeration now: + */ + fgEnumWindows( fghcbDisplayWindow, &enumerator ); +} + +/* + * Window enumerator callback to check for the joystick polling code + */ +static void fghcbCheckJoystickPolls( gpointer window, gpointer enumerator ) +{ + double checkTime = g_timer_elapsed( fgState.Timer, NULL ); + SFG_Window* win = (SFG_Window *) window; + + /* + * Check if actually need to do the poll for the currently enumerated window: + */ + if( win->State.JoystickLastPoll + win->State.JoystickPollRate >= checkTime ) + { + /* + * Yeah, that's it. Poll the joystick... + */ + fgJoystickPollWindow( (SFG_Window *) window ); + + /* + * ...and reset the polling counters: + */ + win->State.JoystickLastPoll = checkTime; + } + + /* + * Process this window's children (if any) + */ + fgEnumSubWindows( (SFG_Window *) window, fghcbCheckJoystickPolls, enumerator ); +} + +/* + * Check all windows for joystick polling + */ +static void fghCheckJoystickPolls( void ) +{ + SFG_Enumerator enumerator; + + /* + * Uses a method very similiar for fgWindowByHandle... + */ + enumerator.found = FALSE; + enumerator.data = NULL; + + /* + * Start the enumeration now: + */ + fgEnumWindows( fghcbCheckJoystickPolls, &enumerator ); +} + +/* + * Check the global timers + */ +static void fghCheckTimers( void ) +{ + double checkTime = g_timer_elapsed( fgState.Timer, NULL ); + SFG_Timer* timer = NULL; + GList* timedOut = NULL; + gint i, length; + + /* + * For every timer that is waiting for triggering + */ + for( i=0; i<(gint) g_list_length( fgState.Timers ); i++ ) + { + /* + * ...grab the appropriate timer hook structure pointer + */ + timer = (SFG_Timer *) g_list_nth( fgState.Timers, i )->data; + g_assert( timer != NULL ); + + /* + * Check for the timeout: + */ + if( timer->TriggerTime <= checkTime ) + { + /* + * Add the timer to the timed out timers list + */ + timedOut = g_list_append( timedOut, timer ); + } + } + + /* + * Now, have all the timed out timers removed from the window hooks + */ + length = g_list_length( timedOut ); + + for( i=0; idata + ); + } + + /* + * Now feel free to execute all the hooked and timed out timer callbacks + */ + for( i=0; iCallback != NULL ) + timer->Callback( timer->ID ); + } + + /* + * Finally, delete the timed out timers... + */ + for( i=0; idata ); + + /* + * Finally, have the timed out timers list released + */ + if( timedOut != NULL ) + g_list_free( timedOut ); +} + + +/* -- INTERFACE FUNCTIONS -------------------------------------------------- */ + +/* + * Enters the FreeGLUT processing loop. Never returns. + */ +void FGAPIENTRY glutMainLoop( void ) +{ +#if TARGET_HOST_UNIX_X11 + SFG_Window* window; + XEvent event; + + /* + * This code was repeated constantly, so here it goes into a definition: + */ +# define GETWINDOW(a) window = fgWindowByHandle( event.a.window );if( window == NULL ) break; +# define GETMOUSE(a) window->State.MouseX = event.a.x; window->State.MouseY = event.a.y; + + /* + * Make sure the display has been created etc. + */ + freeglut_assert_ready; + + /* + * Enter the loop. Iterate as long as there are + * any windows in the freeglut structure. + */ + while( fgStructure.Windows != NULL ) + { + /* + * Do we have any event messages pending? + */ + if( XPending( fgDisplay.Display ) ) + { + /* + * Grab the next event to be processed... + */ + XNextEvent( fgDisplay.Display, &event ); + + /* + * Check the event's type + */ + switch( event.type ) + { + case CreateNotify: + /* + * The window creation confirmation + */ + break; + + case DestroyNotify: + /* + * This is sent to confirm the XDestroyWindow call. Ignore it. + */ + break; + + case ClientMessage: + /* + * Destroy the window when the WM_DELETE_WINDOW message arrives + */ + if( (Atom) event.xclient.data.l[ 0 ] == fgDisplay.DeleteWindow ) + { + /* + * I wonder if the window still exists ;-) + */ + fgDestroyWindow( fgWindowByHandle( event.xclient.window ), TRUE ); + } + break; + + case UnmapNotify: + /* + * A window of ours has been unmapped... + */ + break; + + case Expose: + /* + * We are too dumb to process partial exposes... + */ + if( event.xexpose.count == 0 ) + fghRedrawWindowByHandle( event.xexpose.window ); + break; + + case ConfigureNotify: + /* + * The window gets resized + */ + fghReshapeWindowByHandle( + event.xconfigure.window, + event.xconfigure.width, + event.xconfigure.height + ); + break; + + case MappingNotify: + /* + * Have the client's keyboard knowledge updated (xlib.ps, + * page 206, says that's a good thing to do) + */ + XRefreshKeyboardMapping( (XMappingEvent *) &event ); + break; + + case VisibilityNotify: + { + /* + * The window's visiblity might have changed + */ + GETWINDOW( xvisibility ); + + /* + * Break now if no window status callback has been hooked to that window + */ + if( window->Callbacks.WindowStatus == NULL ) + break; + + /* + * We're going to send a callback to a window. Make it current. + */ + glutSetWindow( window->ID ); + + /* + * Sending this event, the X server can notify us that the window has just + * acquired one of the three possible visibility states: VisibilityUnobscured, + * VisibilityPartiallyObscured or VisibilityFullyObscured + */ + switch( event.xvisibility.state ) + { + case VisibilityUnobscured: + /* + * We are fully visible... + */ + window->Callbacks.WindowStatus( GLUT_FULLY_RETAINED ); + window->State.Visible = TRUE; + break; + + case VisibilityPartiallyObscured: + /* + * The window is partially visible + */ + window->Callbacks.WindowStatus( GLUT_PARTIALLY_RETAINED ); + window->State.Visible = TRUE; + break; + + case VisibilityFullyObscured: + /* + * The window is totally obscured + */ + window->Callbacks.WindowStatus( GLUT_FULLY_COVERED ); + window->State.Visible = FALSE; + break; + } + } + break; + + case EnterNotify: + { + /* + * Mouse is over one of our windows + */ + GETWINDOW( xcrossing ); GETMOUSE( xcrossing ); + + /* + * Is there an entry callback hooked to the window? + */ + if( window->Callbacks.Entry != NULL ) + { + /* + * Yeah. Notify the window about having the mouse cursor over + */ + window->Callbacks.Entry( GLUT_ENTERED ); + } + } + break; + + case LeaveNotify: + { + /* + * Mouse is no longer over one of our windows + */ + GETWINDOW( xcrossing ); GETMOUSE( xcrossing ); + + /* + * Is there an entry callback hooked to the window? + */ + if( window->Callbacks.Entry != NULL ) + { + /* + * Yeah. Notify the window about having the mouse cursor over + */ + window->Callbacks.Entry( GLUT_LEFT ); + } + } + break; + + case MotionNotify: + { + /* + * The mouse cursor was moved... + */ + GETWINDOW( xmotion ); GETMOUSE( xmotion ); + + /* + * What kind of a movement was it? + */ + if( (event.xmotion.state & Button1Mask) || (event.xmotion.state & Button2Mask) || + (event.xmotion.state & Button3Mask) || (event.xmotion.state & Button4Mask) || + (event.xmotion.state & Button5Mask) ) + { + /* + * A mouse button was pressed during the movement... + * Is there a motion callback hooked to the window? + */ + if( window->Callbacks.Motion != NULL ) + { + /* + * Yup. Have it executed immediately + */ + window->Callbacks.Motion( event.xmotion.x, event.xmotion.y ); + } + } + else + { + /* + * Otherwise it was a passive movement... + */ + if( window->Callbacks.Passive != NULL ) + { + /* + * That's right, and there is a passive callback, too. + */ + window->Callbacks.Passive( event.xmotion.x, event.xmotion.y ); + } + } + } + break; + + case ButtonRelease: + case ButtonPress: + { + gint button; + + /* + * A mouse button has been pressed or released. Traditionally, + * break if the window was found within the freeglut structures. + */ + GETWINDOW( xbutton ); GETMOUSE( xbutton ); + + /* + * GLUT API assumes that you can't have more than three mouse buttons, so: + */ + switch( event.xbutton.button ) + { + /* + * WARNING: this might be wrong, if we only have two mouse buttons, + * Button2 might mean the right button, isn't that right? + */ + case Button1: button = GLUT_LEFT_BUTTON; break; + case Button2: button = GLUT_MIDDLE_BUTTON; break; + case Button3: button = GLUT_RIGHT_BUTTON; break; + default: button = -1; break; + } + + /* + * Skip the unwanted mouse buttons... + */ + if( button == -1 ) + break; + + /* + * Do not execute the callback if a menu is hooked to this key. + * In that case an appropriate private call should be generated + */ + if( window->Menu[ button ] != NULL ) + { + /* + * Set the current window + */ + glutSetWindow( window->ID ); + + if( event.type == ButtonPress ) + { + /* + * Activate the appropriate menu structure... + */ + fgActivateMenu( button ); + } + else + { + /* + * There are two general cases generated when a menu button + * is released -- it can provoke a menu call (when released + * over a menu area) or just deactivate the menu (when released + * somewhere else). Unfortunately, both cases must be checked + * recursively due to the submenu possibilities. + */ + fgDeactivateMenu( button ); + } + break; + } + + /* + * Check if there is a mouse callback hooked to the window + */ + if( window->Callbacks.Mouse == NULL ) + break; + + /* + * Set the current window + */ + glutSetWindow( window->ID ); + + /* + * Remember the current modifiers state + */ + window->State.Modifiers = event.xbutton.state; + + /* + * Finally execute the mouse callback + */ + window->Callbacks.Mouse( + button, + event.type == ButtonPress ? GLUT_DOWN : GLUT_UP, + event.xbutton.x, + event.xbutton.y + ); + + /* + * Trash the modifiers state + */ + window->State.Modifiers = 0xffffffff; + } + break; + + case KeyPress: + { + /* + * A key has been pressed, find the window that had the focus: + */ + GETWINDOW( xkey ); GETMOUSE( xkey ); + + /* + * Is there a keyboard/special callback hooked for this window? + */ + if( (window->Callbacks.Keyboard != NULL) || (window->Callbacks.Special != NULL) ) + { + XComposeStatus composeStatus; + gchar asciiCode[ 32 ]; + KeySym keySym; + gint len; + + /* + * Check for the ASCII/KeySym codes associated with the event: + */ + len = XLookupString( &event.xkey, asciiCode, sizeof(asciiCode), &keySym, &composeStatus ); + + /* + * Get ready to calling the keyboard/special callbacks + */ + glutSetWindow( window->ID ); + + /* + * GLUT API tells us to have two separate callbacks... + */ + if( len > 0 ) + { + /* + * ...one for the ASCII translateable keypresses... + */ + if( window->Callbacks.Keyboard != NULL ) + { + /* + * Remember the current modifiers state + */ + window->State.Modifiers = event.xkey.state; + + /* + * Execute the callback + */ + window->Callbacks.Keyboard( asciiCode[ 0 ], event.xkey.x, event.xkey.y ); + + /* + * Trash the modifiers state + */ + window->State.Modifiers = 0xffffffff; + } + } + else + { + gint special = -1; + + /* + * ...and one for all the others, which need to be translated to GLUT_KEY_Xs... + */ + switch( keySym ) + { + /* + * First the function keys come: + */ + case XK_F1: special = GLUT_KEY_F1; break; + case XK_F2: special = GLUT_KEY_F2; break; + case XK_F3: special = GLUT_KEY_F3; break; + case XK_F4: special = GLUT_KEY_F4; break; + case XK_F5: special = GLUT_KEY_F5; break; + case XK_F6: special = GLUT_KEY_F6; break; + case XK_F7: special = GLUT_KEY_F7; break; + case XK_F8: special = GLUT_KEY_F8; break; + case XK_F9: special = GLUT_KEY_F9; break; + case XK_F10: special = GLUT_KEY_F10; break; + case XK_F11: special = GLUT_KEY_F11; break; + case XK_F12: special = GLUT_KEY_F12; break; + + /* + * Then the arrows and stuff: + */ + case XK_Left: special = GLUT_KEY_LEFT; break; + case XK_Right: special = GLUT_KEY_RIGHT; break; + case XK_Up: special = GLUT_KEY_UP; break; + case XK_Down: special = GLUT_KEY_DOWN; break; + } + + /* + * Execute the callback (if one has been specified), + * given that the special code seems to be valid... + */ + if( (window->Callbacks.Special != NULL) && (special != -1) ) + { + /* + * Remember the current modifiers state + */ + window->State.Modifiers = event.xkey.state; + + window->Callbacks.Special( special, event.xkey.x, event.xkey.y ); + + /* + * Trash the modifiers state + */ + window->State.Modifiers = 0xffffffff; + } + } + } + } + break; + } + } + else + { + /* + * Have all the timers checked. + */ + fghCheckTimers(); + + /* + * Poll the joystick and notify all windows that want to be notified... + */ + fghCheckJoystickPolls(); + + /* + * No messages in the queue, which means we are idling... + */ + if( fgState.IdleCallback != NULL ) + fgState.IdleCallback(); + + /* + * Remember about displaying all the windows that have + * been marked for a redisplay (possibly in the idle call): + */ + fghDisplayAll(); + } + } + +#elif TARGET_HOST_WIN32 + + gboolean bLoop = TRUE; + MSG stMsg; + + /* + * The windows main loop is considerably smaller + */ + while( bLoop ) + { + if( PeekMessage( &stMsg, NULL, 0, 0, PM_NOREMOVE ) ) + { + /* + * Grab the message now, checking for WM_QUIT + */ + if( GetMessage( &stMsg, NULL, 0, 0 ) == 0 ) + bLoop = FALSE; + + /* + * Translate virtual-key messages and send them to the window... + */ + TranslateMessage( &stMsg ); + DispatchMessage( &stMsg ); + } + else + { + /* + * Have all the timers checked. + */ + fghCheckTimers(); + + /* + * Poll the joystick and notify all windows that want to be notified... + */ + fghCheckJoystickPolls(); + + /* + * No messages in the queue, which means we are idling... + */ + if( fgState.IdleCallback != NULL ) + fgState.IdleCallback(); + + /* + * Remember about displaying all the windows that have + * been marked for a redisplay (possibly in the idle call): + */ + fghDisplayAll(); + + /* + * We need to terminate the main loop if no windows are left + */ + bLoop = (g_list_length( fgStructure.Windows ) != 0); + } + } + +#endif + + /* + * When this loop terminates, destroy the display, state and structure + * of a freeglut session, so that another glutInit() call can happen + */ + fgDeinitialize(); +} + +/* + * The window procedure for handling Win32 events + */ +#if TARGET_HOST_WIN32 +LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) +{ + SFG_Window* window = fgWindowByHandle( hWnd ); + PAINTSTRUCT ps; + LONG lRet = 1; + +# define assert_window_registered if( window == NULL ) return( DefWindowProc( hWnd, uMsg, wParam, lParam ) ); + + /* + * Check what type of message are we receiving + */ + switch( uMsg ) + { + case WM_CREATE: + /* + * The window structure is passed as the creation structure paramter... + */ + window = (SFG_Window *) (((LPCREATESTRUCT) lParam)->lpCreateParams); + g_assert( window != NULL ); + + /* + * We can safely store the window's handle now: + */ + window->Window.Handle = hWnd; + + /* + * Get the window's device context + */ + window->Window.Device = GetDC( hWnd ); + + /* + * Setup the pixel format of our window + */ + fgSetupPixelFormat( window, FALSE ); + + /* + * Create the OpenGL rendering context now + */ + window->Window.Context = wglCreateContext( window->Window.Device ); + + /* + * Still, we'll be needing to explicitly resize the window + */ + window->State.NeedToResize = TRUE; + + /* + * Finally, have the window's device context released + */ + ReleaseDC( window->Window.Handle, window->Window.Device ); + break; + + case WM_SIZE: + /* + * We got resized... But check if the window has been already added... + */ + fghReshapeWindowByHandle( hWnd, LOWORD(lParam), HIWORD(lParam) ); + break; + + case WM_PAINT: + /* + * Start the painting job + */ + BeginPaint( hWnd, &ps ); + + /* + * Call the engine's main frame drawing method + */ + fghRedrawWindowByHandle( hWnd ); + + /* + * End the painting job, release the device context + */ + EndPaint( hWnd, &ps ); + break; + + case WM_CLOSE: + /* + * Make sure we don't close a window with current context active + */ + if( fgStructure.Window == window ) + { + wglMakeCurrent( NULL, NULL ); + wglDeleteContext( window->Window.Context ); + } + + /* + * Proceed with the window destruction + */ + DestroyWindow( window->Window.Handle ); + break; + + case WM_DESTROY: + /* + * The window already got destroyed, so forget about it's existence: + */ + fgDestroyWindow( window, FALSE ); + return( 0 ); + + case WM_MOUSEMOVE: + { + assert_window_registered; + + /* + * The mouse cursor has moved. Remember the new mouse cursor's position + */ + window->State.MouseX = LOWORD( lParam ); + window->State.MouseY = HIWORD( lParam ); + + /* + * Fallback if there's an active menu hooked to this window + */ + if( window->MenuActive[ 0 ] || window->MenuActive[ 1 ] || window->MenuActive[ 2 ] ) + break; + + /* + * Remember the current modifiers state. + */ + window->State.Modifiers = + (GetKeyState( VK_LSHIFT ) || GetKeyState( VK_RSHIFT )) ? GLUT_ACTIVE_SHIFT : 0 | + (GetKeyState( VK_LCONTROL ) || GetKeyState( VK_RCONTROL )) ? GLUT_ACTIVE_CTRL : 0 | + (GetKeyState( VK_LMENU ) || GetKeyState( VK_RMENU )) ? GLUT_ACTIVE_ALT : 0; + + /* + * Check if any of the mouse buttons is pressed... + */ + if( (wParam & MK_LBUTTON) || (wParam & MK_MBUTTON) || (wParam & MK_RBUTTON) ) + { + /* + * Yeah, indeed. We need to use the motion callback then: + */ + if( window->Callbacks.Motion != NULL ) + { + /* + * Make sure the current window is set... + */ + glutSetWindow( window->ID ); + + /* + * Execute the active mouse motion callback now + */ + window->Callbacks.Motion( window->State.MouseX, window->State.MouseY ); + } + } + else + { + /* + * All mouse buttons are up, execute the passive mouse motion callback + */ + if( window->Callbacks.Passive != NULL ) + { + /* + * Make sure the current window is set + */ + glutSetWindow( window->ID ); + + /* + * Execute the passive mouse motion callback + */ + window->Callbacks.Passive( window->State.MouseX, window->State.MouseY ); + } + } + + /* + * Thrash the current modifiers state now + */ + window->State.Modifiers = 0xffffffff; + } + break; + + case WM_LBUTTONDOWN: + case WM_MBUTTONDOWN: + case WM_RBUTTONDOWN: + case WM_LBUTTONUP: + case WM_MBUTTONUP: + case WM_RBUTTONUP: + { + gboolean pressed = TRUE; + gint button; + + /* + * A mouse button has been pressed *or* released. Again, break off + * if the message was not directed towards a freeglut window... + */ + assert_window_registered; + + /* + * The mouse cursor has moved. Remember the new mouse cursor's position + */ + window->State.MouseX = LOWORD( lParam ); + window->State.MouseY = HIWORD( lParam ); + + /* + * We're curious about the GLUT API button name... + */ + switch( uMsg ) + { + case WM_LBUTTONDOWN: pressed = TRUE; button = GLUT_LEFT_BUTTON; break; + case WM_MBUTTONDOWN: pressed = TRUE; button = GLUT_MIDDLE_BUTTON; break; + case WM_RBUTTONDOWN: pressed = TRUE; button = GLUT_RIGHT_BUTTON; break; + case WM_LBUTTONUP: pressed = FALSE; button = GLUT_LEFT_BUTTON; break; + case WM_MBUTTONUP: pressed = FALSE; button = GLUT_MIDDLE_BUTTON; break; + case WM_RBUTTONUP: pressed = FALSE; button = GLUT_RIGHT_BUTTON; break; + default: pressed = FALSE; button = -1; break; + } + + /* + * The left and right mouse buttons might have been swapped... + */ + if( GetSystemMetrics( SM_SWAPBUTTON ) ) + if( button == GLUT_LEFT_BUTTON ) button = GLUT_RIGHT_BUTTON; + else if( button == GLUT_RIGHT_BUTTON ) button = GLUT_LEFT_BUTTON; + + /* + * Hey, what's up with you? + */ + if( button == -1 ) + return( DefWindowProc( hWnd, uMsg, lParam, wParam ) ); + + /* + * Do not execute the callback if a menu is hooked to this key. + * In that case an appropriate private call should be generated + */ + if( window->Menu[ button ] != NULL ) + { + /* + * Set the current window + */ + glutSetWindow( window->ID ); + + if( pressed == TRUE ) + { + /* + * Activate the appropriate menu structure... + */ + fgActivateMenu( button ); + } + else + { + /* + * There are two general cases generated when a menu button + * is released -- it can provoke a menu call (when released + * over a menu area) or just deactivate the menu (when released + * somewhere else). Unfortunately, both cases must be checked + * recursively due to the submenu possibilities. + */ + fgDeactivateMenu( button ); + } + break; + } + + /* + * Check if there is a mouse callback hooked to the window + */ + if( window->Callbacks.Mouse == NULL ) + break; + + /* + * Set the current window + */ + glutSetWindow( window->ID ); + + /* + * Remember the current modifiers state. + */ + window->State.Modifiers = + (GetKeyState( VK_LSHIFT ) || GetKeyState( VK_RSHIFT )) ? GLUT_ACTIVE_SHIFT : 0 | + (GetKeyState( VK_LCONTROL ) || GetKeyState( VK_RCONTROL )) ? GLUT_ACTIVE_CTRL : 0 | + (GetKeyState( VK_LMENU ) || GetKeyState( VK_RMENU )) ? GLUT_ACTIVE_ALT : 0; + + /* + * Finally execute the mouse callback + */ + window->Callbacks.Mouse( + button, + pressed == TRUE ? GLUT_DOWN : GLUT_UP, + window->State.MouseX, + window->State.MouseY + ); + + /* + * Trash the modifiers state + */ + window->State.Modifiers = 0xffffffff; + } + break; + + case WM_SYSKEYDOWN: + case WM_KEYDOWN: + { + gint keypress = -1; + + /* + * First of all, make sure that there is a window to be notified of this + */ + assert_window_registered; + + /* + * Ignore the automatic key repetition if needed: + */ + if( fgState.IgnoreKeyRepeat && (lParam & KF_REPEAT) ) + break; + + /* + * Remember the current modifiers state. This is done here in order + * to make sure the VK_DELETE keyboard callback is executed properly. + */ + window->State.Modifiers = + (GetKeyState( VK_LSHIFT ) || GetKeyState( VK_RSHIFT )) ? GLUT_ACTIVE_SHIFT : 0 | + (GetKeyState( VK_LCONTROL ) || GetKeyState( VK_RCONTROL )) ? GLUT_ACTIVE_CTRL : 0 | + (GetKeyState( VK_LMENU ) || GetKeyState( VK_RMENU )) ? GLUT_ACTIVE_ALT : 0; + + /* + * Convert the Win32 keystroke codes to GLUTtish way + */ +# define KEY(a,b) case a: keypress = b; break; + + switch( wParam ) + { + /* + * Most of the special characters can be handled automagically... + */ + KEY( VK_F1, GLUT_KEY_F1 ); KEY( VK_F2, GLUT_KEY_F2 ); + KEY( VK_F3, GLUT_KEY_F3 ); KEY( VK_F4, GLUT_KEY_F4 ); + KEY( VK_F5, GLUT_KEY_F5 ); KEY( VK_F6, GLUT_KEY_F6 ); + KEY( VK_F7, GLUT_KEY_F7 ); KEY( VK_F8, GLUT_KEY_F8 ); + KEY( VK_F9, GLUT_KEY_F9 ); KEY( VK_F10, GLUT_KEY_F10 ); + KEY( VK_F11, GLUT_KEY_F11 ); KEY( VK_F12, GLUT_KEY_F12 ); + KEY( VK_PRIOR, GLUT_KEY_PAGE_UP ); KEY( VK_NEXT, GLUT_KEY_PAGE_DOWN ); + KEY( VK_HOME, GLUT_KEY_HOME ); KEY( VK_END, GLUT_KEY_END ); + KEY( VK_LEFT, GLUT_KEY_LEFT ); KEY( VK_UP, GLUT_KEY_UP ); + KEY( VK_RIGHT, GLUT_KEY_RIGHT ); KEY( VK_DOWN, GLUT_KEY_DOWN ); + KEY( VK_INSERT, GLUT_KEY_INSERT ); + + /* + * ...yet there is a small exception we need to have handled... + */ + case VK_DELETE: + /* + * The delete key should be treated as an ASCII keypress: + */ + if( window->Callbacks.Keyboard != NULL ) + window->Callbacks.Keyboard( 127, window->State.MouseX, window->State.MouseY ); + } + + /* + * Execute the special callback, if present, given the conversion was a success: + */ + if( (keypress != -1) && (window->Callbacks.Special != NULL) ) + { + /* + * Have the special callback executed: + */ + window->Callbacks.Special( keypress, window->State.MouseX, window->State.MouseY ); + } + + /* + * Thrash the modifiers register now + */ + window->State.Modifiers = 0xffffffff; + } + break; + + case WM_SYSCHAR: + case WM_CHAR: + { + /* + * First of all, make sure that there is a window to be notified of this + */ + assert_window_registered; + + /* + * Ignore the automatic key repetition if needed: + */ + if( fgState.IgnoreKeyRepeat && (lParam & KF_REPEAT) ) + break; + + /* + * Clear to go with the keyboard callback, if registered: + */ + if( window->Callbacks.Keyboard != NULL ) + { + /* + * Remember the current modifiers state + */ + window->State.Modifiers = + (GetKeyState( VK_LSHIFT ) || GetKeyState( VK_RSHIFT )) ? GLUT_ACTIVE_SHIFT : 0 | + (GetKeyState( VK_LCONTROL ) || GetKeyState( VK_RCONTROL )) ? GLUT_ACTIVE_CTRL : 0 | + (GetKeyState( VK_LMENU ) || GetKeyState( VK_RMENU )) ? GLUT_ACTIVE_ALT : 0; + + /* + * Have the special callback executed: + */ + window->Callbacks.Keyboard( wParam, window->State.MouseX, window->State.MouseY ); + + /* + * Thrash the modifiers register now + */ + window->State.Modifiers = 0xffffffff; + } + } + break; + + default: + /* + * Handle unhandled messages + */ + lRet = DefWindowProc( hWnd, uMsg, wParam, lParam ); + break; + } + + return( lRet ); +} +#endif + +/*** END OF FILE ***/ + + + + + + diff --git a/freeglut/freeglut/freeglut-1.3/freeglut_menu.c b/freeglut/freeglut/freeglut-1.3/freeglut_menu.c new file mode 100644 index 0000000..58430dc --- /dev/null +++ b/freeglut/freeglut/freeglut-1.3/freeglut_menu.c @@ -0,0 +1,808 @@ +/* + * freeglut_menu.c + * + * Pull-down menu creation and handling. + * + * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved. + * Written by Pawel W. Olszta, + * Creation date: Thu Dec 16 1999 + * + * 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 + * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#define G_LOG_DOMAIN "freeglut-menu" + +#include "../include/GL/freeglut.h" +#include "../include/GL/freeglut_internal.h" + +/* + * TODO BEFORE THE STABLE RELEASE: + * + * It would be cool if the submenu entries were somehow marked, for example with a dings + * on the right menu border or something like that. Think about the possibility of doing + * the menu on layers *or* using the native window system instead of OpenGL. + */ + +/* -- DEFINITIONS ---------------------------------------------------------- */ + +/* + * We'll be using freeglut fonts to draw the menu + */ +#define FREEGLUT_MENU_FONT GLUT_BITMAP_8_BY_13 +#define FREEGLUT_MENU_HEIGHT 15 + + +/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */ + +/* + * Private static function to check for the current menu/sub menu activity state + */ +static gboolean fghCheckMenuStatus( SFG_Menu* menu ) +{ + SFG_Window* window = fgStructure.Window; + gint i, x, y; + + /* + * First of all check any of the active sub menus... + */ + for( i=0; i<(gint) g_list_length( menu->Entries ); i++ ) + { + SFG_MenuEntry* menuEntry = (SFG_MenuEntry *) g_list_nth( menu->Entries, i )->data; + + /* + * Is that an active sub menu by any case? + */ + if( menuEntry->SubMenu != NULL && menuEntry->IsActive == TRUE ) + { + /* + * OKi, have the sub-menu checked, too. If it returns TRUE, it will mean + * that it caught the mouse cursor and we do not need to regenerate + * the activity list, and so our parents do... + */ + if( fghCheckMenuStatus( menuEntry->SubMenu ) == TRUE ) + return( TRUE ); + } + } + + /* + * That much about our sub menus, let's get to checking the current menu: + */ + x = window->State.MouseX - menu->X; + y = window->State.MouseY - menu->Y; + + /* + * Mark all menu entries inactive... + */ + for( i=0; i<(gint) g_list_length( menu->Entries ); i++ ) + { + SFG_MenuEntry* menuEntry = (SFG_MenuEntry *) g_list_nth( menu->Entries, i )->data; + + menuEntry->IsActive = FALSE; + } + + menu->IsActive = FALSE; + + /* + * Check if the mouse cursor is contained within the current menu box + */ + if( x >= 0 && x < menu->Width && y >= 0 && y < menu->Height ) + { + /* + * Calculation of the highlighted menu item is easy enough now: + */ + gint menuID = y / FREEGLUT_MENU_HEIGHT; + + /* + * The mouse cursor is somewhere over our box, check it out. + */ + SFG_MenuEntry* menuEntry = (SFG_MenuEntry *) g_list_nth( menu->Entries, menuID )->data; + g_assert( menuEntry != NULL ); + + /* + * Mark the menu as active... + */ + menuEntry->IsActive = TRUE; + menuEntry->Ordinal = menuID; + + /* + * Don't forget about marking the current menu as active, too: + */ + menu->IsActive = TRUE; + + /* + * OKi, we have marked that entry as active, but it would be also + * nice to have it's contents updated, in case it's a sub menu. + * Also, ignore the return value of the check function: + */ + if( menuEntry->SubMenu != NULL ) + { + gint x = window->State.MouseX; + gint y = window->State.MouseY; + + /* + * Set up the initial menu position now... + */ + + if( x > 15 ) menuEntry->SubMenu->X = x - 15; else menuEntry->SubMenu->X = 15; + if( y > 15 ) menuEntry->SubMenu->Y = y - 15; else menuEntry->SubMenu->Y = 15; + + if( x > (glutGet( GLUT_WINDOW_WIDTH ) - menuEntry->SubMenu->Width - 15) ) + menuEntry->SubMenu->X = glutGet( GLUT_WINDOW_WIDTH ) - menuEntry->SubMenu->Width - 15; + if( y > (glutGet( GLUT_WINDOW_HEIGHT ) - menuEntry->SubMenu->Height - 15) ) + menuEntry->SubMenu->Y = glutGet( GLUT_WINDOW_HEIGHT ) - menuEntry->SubMenu->Height - 15; + + /* + * ...then check the submenu's state: + */ + fghCheckMenuStatus( menuEntry->SubMenu ); + } + + /* + * Report back that we have caught the menu cursor + */ + return( TRUE ); + } + + /* + * Looks like the menu cursor is somewhere else... + */ + return( FALSE ); +} + +/* + * Displays a menu box and all of it's submenus (if they are active) + */ +static void fghDisplayMenuBox( SFG_Menu* menu ) +{ + SFG_Window* window = fgStructure.Window; + gint i, j, x, y; + + /* + * Have the menu box drawn first. The +- values are + * here just to make it more nice-looking... + */ + glColor4f( 0.0, 0.0, 0.0, 1.0 ); + glBegin( GL_QUADS ); + glVertex2f( menu->X - 8 , menu->Y - 1 ); + glVertex2f( menu->X + 8 + menu->Width, menu->Y - 1 ); + glVertex2f( menu->X + 8 + menu->Width, menu->Y + 4 + menu->Height ); + glVertex2f( menu->X - 8 , menu->Y + 4 + menu->Height ); + glEnd(); + + glColor4f( 0.3, 0.4, 0.5, 1.0 ); + glBegin( GL_QUADS ); + glVertex2f( menu->X - 6 , menu->Y + 1 ); + glVertex2f( menu->X + 6 + menu->Width, menu->Y + 1 ); + glVertex2f( menu->X + 6 + menu->Width, menu->Y + 2 + menu->Height ); + glVertex2f( menu->X - 6 , menu->Y + 2 + menu->Height ); + glEnd(); + + /* + * Check if any of the submenus is currently active... + */ + for( i=0; i<(gint) g_list_length( menu->Entries ); i++ ) + { + SFG_MenuEntry* menuEntry = (SFG_MenuEntry *) g_list_nth( menu->Entries, i )->data; + + /* + * Has the menu been marked as active, maybe? + */ + if( menuEntry->IsActive == TRUE ) + { + /* + * That's truly right, and we need to have it highlighted. + * There is an assumption that mouse cursor didn't move + * since the last check of menu activity state: + */ + gint menuID = menuEntry->Ordinal; + + /* + * So have the highlight drawn... + */ + glColor4f( 0.2, 0.3, 0.4, 1.0 ); + glBegin( GL_QUADS ); + glVertex2f( menu->X - 6 , menu->Y + (menuID + 0)*FREEGLUT_MENU_HEIGHT + 1 ); + glVertex2f( menu->X + 6 + menu->Width, menu->Y + (menuID + 0)*FREEGLUT_MENU_HEIGHT + 1 ); + glVertex2f( menu->X + 6 + menu->Width, menu->Y + (menuID + 1)*FREEGLUT_MENU_HEIGHT + 2 ); + glVertex2f( menu->X - 6 , menu->Y + (menuID + 1)*FREEGLUT_MENU_HEIGHT + 2 ); + glEnd(); + } + } + + /* + * Print the menu entries now... + */ + glColor4f( 1, 1, 1, 1 ); + + for( i=0; i<(gint) g_list_length( menu->Entries ); i++ ) + { + SFG_MenuEntry* menuEntry = (SFG_MenuEntry *) g_list_nth( menu->Entries, i )->data; + + /* + * Move the raster into position... + */ + glRasterPos2i( + menu->X, + menu->Y + (i + 1)*FREEGLUT_MENU_HEIGHT + ); + + /* + * Have the label drawn, character after character: + */ + for( j=0; jText->len; j++ ) + glutBitmapCharacter( FREEGLUT_MENU_FONT, (gint) menuEntry->Text->str[ j ] ); + } + + /* + * Now we are ready to check if any of our children needs to be redrawn: + */ + for( i=0; i<(gint) g_list_length( menu->Entries ); i++ ) + { + SFG_MenuEntry* menuEntry = (SFG_MenuEntry *) g_list_nth( menu->Entries, i )->data; + + /* + * Is that an active sub menu by any case? + */ + if( menuEntry->SubMenu != NULL && menuEntry->IsActive == TRUE ) + { + /* + * Yeah, indeed. Have it redrawn now: + */ + fghDisplayMenuBox( menuEntry->SubMenu ); + } + } +} + +/* + * Displays the currently active menu for the current window + */ +void fgDisplayMenu( void ) +{ + SFG_Window* window = fgStructure.Window; + SFG_Menu* menu = NULL; + gint i; + + /* + * Make sure there is a current window available + */ + freeglut_assert_window; + + /* + * Check if there is an active menu attached to this window... + */ + for( i=0; iMenu[ i ] != NULL && window->MenuActive[ i ] == TRUE ) + menu = window->Menu[ i ]; + }; + + /* + * Did we find an active window? + */ + freeglut_return_if_fail( menu != NULL ); + + /* + * Prepare the OpenGL state to do the rendering first: + */ + glPushAttrib( GL_DEPTH_BUFFER_BIT | GL_TEXTURE_BIT | GL_LIGHTING_BIT | GL_POLYGON_BIT ); + + glDisable( GL_DEPTH_TEST ); + glDisable( GL_TEXTURE_2D ); + glDisable( GL_LIGHTING ); + glDisable( GL_CULL_FACE ); + + /* + * We'll use an orthogonal projection matrix to draw the menu: + */ + glMatrixMode( GL_PROJECTION ); + glPushMatrix(); + glLoadIdentity(); + glOrtho( + 0, glutGet( GLUT_WINDOW_WIDTH ), + glutGet( GLUT_WINDOW_HEIGHT ), 0, + -1, 1 + ); + + /* + * Model-view matix gets reset to identity: + */ + glMatrixMode( GL_MODELVIEW ); + glPushMatrix(); + glLoadIdentity(); + + /* + * First of all, have the exact menu status check: + */ + fghCheckMenuStatus( menu ); + + /* + * The status has been updated and we're ready to have the menu drawn now: + */ + fghDisplayMenuBox( menu ); + + /* + * Restore the old OpenGL settings now + */ + glPopAttrib(); + + glMatrixMode( GL_MODELVIEW ); + glPopMatrix(); + glMatrixMode( GL_PROJECTION ); + glPopMatrix(); +} + +/* + * Activates a menu pointed by the function argument + */ +void fgActivateMenu( gint button ) +{ + SFG_Window* window = fgStructure.Window; + SFG_Menu* menu = NULL; + gint x, y; + + freeglut_assert_window; + + /* + * Mark the menu as active, so that it gets displayed: + */ + window->MenuActive[ button ] = TRUE; + + /* + * We'll be referencing this menu a lot, so remember it's address: + */ + menu = window->Menu[ button ]; + + /* + * Grab the mouse cursor position respective to the current window + */ + x = window->State.MouseX; + y = window->State.MouseY; + + /* + * Set up the initial menu position now: + */ + if( x > 10 ) menu->X = x - 10; else menu->X = 5; + if( y > 10 ) menu->Y = y - 10; else menu->Y = 5; + + if( x > (glutGet( GLUT_WINDOW_WIDTH ) - menu->Width ) ) + menu->X = glutGet( GLUT_WINDOW_WIDTH ) - menu->Width; + if( y > (glutGet( GLUT_WINDOW_HEIGHT ) - menu->Height) ) + menu->Y = glutGet( GLUT_WINDOW_HEIGHT ) - menu->Height; +} + +/* + * Private static function to check for menu entry selection on menu deactivation + */ +static void fghCheckMenuSelect( SFG_Menu* menu ) +{ + gint i; + + /* + * First of all check any of the active sub menus... + */ + for( i=0; i<(gint) g_list_length( menu->Entries ); i++ ) + { + SFG_MenuEntry* menuEntry = (SFG_MenuEntry *) g_list_nth( menu->Entries, i )->data; + + /* + * Is this menu entry active? + */ + if( menuEntry->IsActive == TRUE ) + { + /* + * If this is not a sub menu, execute the menu callback and return... + */ + if( menuEntry->SubMenu == NULL ) + { + /* + * ...certainly given that there is one... + */ + if( menu->Callback != NULL ) + menu->Callback( menuEntry->ID ); + + return; + } + + /* + * Otherwise recurse into the submenu. + */ + fghCheckMenuSelect( menuEntry->SubMenu ); + + /* + * There is little sense in dwelling the search on + */ + return; + } + } +} + +/* + * Deactivates a menu pointed by the function argument. + */ +void fgDeactivateMenu( gint button ) +{ + SFG_Window* window = fgStructure.Window; + SFG_Menu* menu = NULL; + gint i, x, y; + + /* + * Make sure there is a current window available... + */ + freeglut_assert_window; + + /* + * Check if there is an active menu attached to this window... + */ + for( i=0; iMenu[ i ] != NULL && window->MenuActive[ i ] == TRUE ) + menu = window->Menu[ i ]; + }; + + /* + * Did we find an active window? + */ + freeglut_return_if_fail( menu != NULL ); + + /* + * Check if there was any menu entry active. This would + * mean the user has selected a menu entry... + */ + fghCheckMenuSelect( menu ); + + /* + * Forget about having that menu active anymore, now: + */ + fgStructure.Window->MenuActive[ button ] = FALSE; +} + +/* + * Recalculates current menu's box size + */ +void fghCalculateMenuBoxSize( void ) +{ + gint i, width; + + /* + * Make sure there is a current menu set + */ + freeglut_assert_ready; freeglut_return_if_fail( fgStructure.Menu != NULL ); + + /* + * The menu's box size depends on the menu entries: + */ + for( i=0, width=0; i<(gint) g_list_length( fgStructure.Menu->Entries ); i++ ) + { + SFG_MenuEntry* menuEntry = (SFG_MenuEntry *) g_list_nth( fgStructure.Menu->Entries, i )->data; + + /* + * Update the menu entry's width value + */ + menuEntry->Width = glutBitmapLength( FREEGLUT_MENU_FONT, menuEntry->Text->str ); + + /* + * Check if it's the biggest we've found + */ + if( menuEntry->Width > width ) + width = menuEntry->Width; + } + + /* + * Store the menu's box size now: + */ + fgStructure.Menu->Height = i * FREEGLUT_MENU_HEIGHT; + fgStructure.Menu->Width = width; +} + + +/* -- INTERFACE FUNCTIONS -------------------------------------------------- */ + +/* + * Creates a new menu object, adding it to the freeglut structure + */ +int FGAPIENTRY glutCreateMenu( void (* callback)( int ) ) +{ + /* + * The menu object creation code resides in freeglut_structure.c + */ + return( fgCreateMenu( callback )->ID ); +} + +/* + * Destroys a menu object, removing all references to it + */ +void FGAPIENTRY glutDestroyMenu( int menuID ) +{ + SFG_Menu* menu = fgMenuByID( menuID ); + + freeglut_assert_ready; freeglut_return_if_fail( menu != NULL ); + + /* + * The menu object destruction code resides in freeglut_structure.c + */ + fgDestroyMenu( menu ); +} + +/* + * Returns the ID number of the currently active menu + */ +int FGAPIENTRY glutGetMenu( void ) +{ + freeglut_assert_ready; + + /* + * Is there a current menu set? + */ + if( fgStructure.Menu != NULL ) + { + /* + * Yes, there is indeed... + */ + return( fgStructure.Menu->ID ); + } + + /* + * No, there is no current menu at all + */ + return( 0 ); +} + +/* + * Sets the current menu given it's menu ID + */ +void FGAPIENTRY glutSetMenu( int menuID ) +{ + SFG_Menu* menu = fgMenuByID( menuID ); + + freeglut_assert_ready; freeglut_return_if_fail( menu != NULL ); + + /* + * The current menu pointer is stored in fgStructure.Menu + */ + fgStructure.Menu = menu; +} + +/* + * Adds a menu entry to the bottom of the current menu + */ +void FGAPIENTRY glutAddMenuEntry( const char* label, int value ) +{ + SFG_MenuEntry* menuEntry = g_new0( SFG_MenuEntry, 1 ); + + /* + * Make sure there is a current menu set + */ + freeglut_assert_ready; freeglut_return_if_fail( fgStructure.Menu != NULL ); + + /* + * Fill in the appropriate values... + */ + menuEntry->Text = g_string_new( label ); + menuEntry->ID = value; + + /* + * Have the new menu entry attached to the current menu + */ + fgStructure.Menu->Entries = g_list_append( fgStructure.Menu->Entries, menuEntry ); + + /* + * Update the menu's dimensions now + */ + fghCalculateMenuBoxSize(); +} + +/* + * Add a sub menu to the bottom of the current menu + */ +void FGAPIENTRY glutAddSubMenu( const char* label, int subMenuID ) +{ + SFG_MenuEntry* menuEntry = g_new0( SFG_MenuEntry, 1 ); + SFG_Menu* subMenu = fgMenuByID( subMenuID ); + + /* + * Make sure there is a current menu and the sub menu + * we want to attach actually exists... + */ + freeglut_assert_ready; freeglut_return_if_fail( fgStructure.Menu != NULL ); + freeglut_return_if_fail( subMenu != NULL ); + + /* + * Fill in the appropriate values + */ + menuEntry->Text = g_string_new( label ); + menuEntry->SubMenu = subMenu; + menuEntry->ID = -1; + + /* + * Have the new menu entry attached to the current menu + */ + fgStructure.Menu->Entries = g_list_append( fgStructure.Menu->Entries, menuEntry ); + + /* + * Update the menu's dimensions now + */ + fghCalculateMenuBoxSize(); +} + +/* + * Changes the specified menu item in the current menu into a menu entry + */ +void FGAPIENTRY glutChangeToMenuEntry( int item, const char* label, int value ) +{ + SFG_MenuEntry* menuEntry = NULL; + + /* + * Make sure there is a current menu set... + */ + freeglut_assert_ready; freeglut_return_if_fail( fgStructure.Menu != NULL ); + + /* + * Make sure the item counter seems valid + */ + freeglut_return_if_fail( (item > 0) && (item <= (gint) g_list_length( fgStructure.Menu->Entries ) ) ); + + /* + * Get n-th menu entry in the current menu, starting from one: + */ + menuEntry = (SFG_MenuEntry *) g_list_nth( fgStructure.Menu->Entries, item - 1 )->data; + + /* + * We want it to become a normal menu entry, so: + */ + if( menuEntry->Text != NULL ) + g_string_free( menuEntry->Text, TRUE ); + + menuEntry->Text = g_string_new( label ); + menuEntry->ID = value; + menuEntry->SubMenu = NULL; + + /* + * Update the menu's dimensions now + */ + fghCalculateMenuBoxSize(); +} + +/* + * Changes the specified menu item in the current menu into a sub-menu trigger. + */ +void FGAPIENTRY glutChangeToSubMenu( int item, const char* label, int subMenuID ) +{ + SFG_Menu* subMenu = fgMenuByID( subMenuID ); + SFG_MenuEntry* menuEntry = NULL; + + /* + * Make sure there is a current menu set and the sub menu exists... + */ + freeglut_assert_ready; freeglut_return_if_fail( fgStructure.Menu != NULL ); + freeglut_return_if_fail( subMenu != NULL ); + + /* + * Make sure the item counter seems valid + */ + freeglut_return_if_fail( (item > 0) && (item <= (gint) g_list_length( fgStructure.Menu->Entries ) ) ); + + /* + * Get n-th menu entry in the current menu, starting from one: + */ + menuEntry = (SFG_MenuEntry *) g_list_nth( fgStructure.Menu->Entries, item - 1 )->data; + + /* + * We want it to become a sub menu entry, so: + */ + if( menuEntry->Text != NULL ) + g_string_free( menuEntry->Text, TRUE ); + + menuEntry->Text = g_string_new( label ); + menuEntry->SubMenu = subMenu; + menuEntry->ID = -1; + + /* + * Update the menu's dimensions now + */ + fghCalculateMenuBoxSize(); +} + +/* + * Removes the specified menu item from the current menu + */ +void FGAPIENTRY glutRemoveMenuItem( int item ) +{ + SFG_MenuEntry* menuEntry; + + /* + * Make sure there is a current menu set + */ + freeglut_assert_ready; freeglut_return_if_fail( fgStructure.Menu != NULL ); + + /* + * Make sure the item counter seems valid + */ + freeglut_return_if_fail( (item > 0) && (item <= (gint) g_list_length( fgStructure.Menu->Entries ) ) ); + + /* + * Removing a menu entry is quite simple... + */ + menuEntry = (SFG_MenuEntry *) g_list_nth( fgStructure.Menu->Entries, item - 1 )->data; + + fgStructure.Menu->Entries = g_list_remove( + fgStructure.Menu->Entries, + menuEntry + ); + + /* + * Free the entry label string, too + */ + g_string_free( menuEntry->Text, TRUE ); + + /* + * Update the menu's dimensions now + */ + fghCalculateMenuBoxSize(); +} + +/* + * Attaches a menu to the current window + */ +void FGAPIENTRY glutAttachMenu( int button ) +{ + freeglut_assert_ready; + + /* + * There must be a current window and a current menu set: + */ + freeglut_return_if_fail( fgStructure.Window != NULL || fgStructure.Menu != NULL ); + + /* + * Make sure the button value is valid (0, 1 or 2, see freeglut.h) + */ + freeglut_return_if_fail( button == GLUT_LEFT_BUTTON || button == GLUT_MIDDLE_BUTTON || button == GLUT_RIGHT_BUTTON ); + + /* + * It is safe now to attach the menu + */ + fgStructure.Window->Menu[ button ] = fgStructure.Menu; +} + +/* + * Detaches a menu from the current window + */ +void FGAPIENTRY glutDetachMenu( int button ) +{ + freeglut_assert_ready; + + /* + * There must be a current window set: + */ + freeglut_return_if_fail( fgStructure.Window != NULL ); + + /* + * Make sure the button value is valid (0, 1 or 2, see freeglut.h) + */ + freeglut_return_if_fail( button != 0 && button != 1 && button != 2 ); + + /* + * It is safe now to detach the menu + */ + fgStructure.Window->Menu[ button ] = NULL; +} + +/*** END OF FILE ***/ diff --git a/freeglut/freeglut/freeglut-1.3/freeglut_misc.c b/freeglut/freeglut/freeglut-1.3/freeglut_misc.c new file mode 100644 index 0000000..4be9a3b --- /dev/null +++ b/freeglut/freeglut/freeglut-1.3/freeglut_misc.c @@ -0,0 +1,265 @@ +/* + * freeglut_misc.c + * + * Functions that didn't fit anywhere else... + * + * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved. + * Written by Pawel W. Olszta, + * Creation date: Thu Dec 9 1999 + * + * 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 + * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#define G_LOG_DOMAIN "freeglut-misc" + +#include "../include/GL/freeglut.h" +#include "../include/GL/freeglut_internal.h" + +/* + * TODO BEFORE THE STABLE RELEASE: + * + * glutSetColor() -- + * glutGetColor() -- + * glutCopyColormap() -- + * glutSetKeyRepeat() -- this is evil and should be removed from API + */ + +/* -- INTERFACE FUNCTIONS -------------------------------------------------- */ + +/* + * This functions checks if an OpenGL extension is supported or not + */ +int FGAPIENTRY glutExtensionSupported( const char* extension ) +{ + /* + * Grab the current context's OpenGL extensions + * and create a new GLib lexical analyzer... + */ + gchar *glExtensions = (gchar *) glGetString( GL_EXTENSIONS ); + GScanner* scanner = g_scanner_new( NULL ); + gint i; + + /* + * Make sure there is a current window, and thus -- a current context available + */ + freeglut_assert_ready; freeglut_return_val_if_fail( fgStructure.Window != NULL, 0 ); + + /* + * Fail if there is no extension, extensions or scanner available + */ + freeglut_return_val_if_fail( (scanner != NULL) && (strlen( extension ) > 0) + && (strlen( glExtensions ) > 0), 0 ); + + /* + * Check if the extension itself looks valid + */ + for( i=0; i<(gint) strlen( extension ); i++ ) + if( extension[ i ] == ' ' ) + return( 0 ); + + /* + * Set the scanner's input name (for debugging) + */ + scanner->input_name = "glutExtensionSupported()"; + + /* + * Start the lexical analysis of the extensions string + */ + g_scanner_input_text( scanner, glExtensions, strlen( glExtensions ) ); + + /* + * While there are any more tokens to be checked... + */ + while( !g_scanner_eof( scanner ) ) + { + /* + * Actually we're expecting only string tokens + */ + GTokenType tokenType = g_scanner_get_next_token( scanner ); + + /* + * We are looking for identifiers + */ + if( tokenType == G_TOKEN_IDENTIFIER ) + { + /* + * Compare the token and the extension string + */ + if( strcmp( scanner->value.v_identifier, extension ) == 0 ) + { + /* + * OKi, we have found the extension string we've been looking for + */ + g_scanner_destroy( scanner ); + return( 1 ); + } + } + } + + /* + * Well, looks like we have failed to find the extension string + */ + g_scanner_destroy( scanner ); + return( 0 ); +} + +/* + * This function reports all the errors that happened till now + */ +void FGAPIENTRY glutReportErrors( void ) +{ + GLenum error = glGetError(); + + /* + * Keep reporting errors as long as there are any... + */ + while( error != GL_NO_ERROR ) + { + /* + * Print the current error + */ +# undef G_LOG_DOMAIN +# define G_LOG_DOMAIN ((gchar *) 0) + + g_warning( "GL error: %s", gluErrorString( error ) ); + +# undef G_LOG_DOMAIN +# define G_LOG_DOMAIN "freeglut_misc.c" + + /* + * Grab the next error value + */ + error = glGetError(); + }; +} + +/* + * Turns the ignore key auto repeat feature on and off + */ +void FGAPIENTRY glutIgnoreKeyRepeat( int ignore ) +{ + /* + * This is simple and not demanging... + */ + fgState.IgnoreKeyRepeat = ignore ? TRUE : FALSE; +} + +/* + * Hints the window system whether to generate key auto repeat, or not. This is evil. + */ +void FGAPIENTRY glutSetKeyRepeat( int repeatMode ) +{ +#if TARGET_HOST_UNIX_X11 + + freeglut_assert_ready; + + /* + * This is really evil, but let's have this done. + */ + switch( repeatMode ) + { + case GLUT_KEY_REPEAT_OFF: XAutoRepeatOff( fgDisplay.Display ); break; + case GLUT_KEY_REPEAT_ON: XAutoRepeatOn( fgDisplay.Display ); break; + case GLUT_KEY_REPEAT_DEFAULT: + { + XKeyboardState keyboardState; + + /* + * Query the current keyboard state + */ + XGetKeyboardControl( fgDisplay.Display, &keyboardState ); + + /* + * Set the auto key repeat basing on the global settings + */ + glutSetKeyRepeat( + keyboardState.global_auto_repeat == AutoRepeatModeOn ? + GLUT_KEY_REPEAT_ON : GLUT_KEY_REPEAT_OFF + ); + } + break; + + default: + /* + * Whoops, this was not expected at all + */ + g_assert_not_reached(); + } + +#endif +} + +/* + * Forces the joystick callback to be executed + */ +void FGAPIENTRY glutForceJoystickFunc( void ) +{ + freeglut_assert_ready; + + /* + * Is there a current window selected? + */ + freeglut_return_if_fail( fgStructure.Window != NULL ); + + /* + * Check if there is a joystick callback hooked to the current window + */ + freeglut_return_if_fail( fgStructure.Window->Callbacks.Joystick != NULL ); + + /* + * Poll the joystick now, using the current window's joystick callback + */ + fgJoystickPollWindow( fgStructure.Window ); +} + +/* + * + */ +void FGAPIENTRY glutSetColor( int nColor, GLfloat red, GLfloat green, GLfloat blue ) +{ + /* + * + */ +} + +/* + * + */ +GLfloat FGAPIENTRY glutGetColor( int color, int component ) +{ + /* + * + */ + return( 0.0f ); +} + +/* + * + */ +void FGAPIENTRY glutCopyColormap( int window ) +{ + /* + * + */ +} + +/*** END OF FILE ***/ diff --git a/freeglut/freeglut/freeglut-1.3/freeglut_overlay.c b/freeglut/freeglut/freeglut-1.3/freeglut_overlay.c new file mode 100644 index 0000000..6477744 --- /dev/null +++ b/freeglut/freeglut/freeglut-1.3/freeglut_overlay.c @@ -0,0 +1,51 @@ +/* + * freeglut_overlay.c + * + * Overlay management functions (as defined by GLUT API) + * + * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved. + * Written by Pawel W. Olszta, + * Creation date: Thu Dec 16 1999 + * + * 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 + * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#define G_LOG_DOMAIN "freeglut-overlay" + +#include "../include/GL/freeglut.h" +#include "../include/GL/freeglut_internal.h" + +/* + * NOTE: functions declared in this file probably will not be implemented. + */ + +/* -- INTERFACE FUNCTIONS -------------------------------------------------- */ + +void FGAPIENTRY glutEstablishOverlay( void ) { /* Not implemented */ } +void FGAPIENTRY glutRemoveOverlay( void ) { /* Not implemented */ } +void FGAPIENTRY glutUseLayer( GLenum layer ) { /* Not implemented */ } +void FGAPIENTRY glutPostOverlayRedisplay( void ) { /* Not implemented */ } +void FGAPIENTRY glutPostWindowOverlayRedisplay( int ID ) { /* Not implemented */ } +void FGAPIENTRY glutShowOverlay( void ) { /* Not implemented */ } +void FGAPIENTRY glutHideOverlay( void ) { /* Not implemented */ } + +/*** END OF FILE ***/ diff --git a/freeglut/freeglut/freeglut-1.3/freeglut_state.c b/freeglut/freeglut/freeglut-1.3/freeglut_state.c new file mode 100644 index 0000000..44347d6 --- /dev/null +++ b/freeglut/freeglut/freeglut-1.3/freeglut_state.c @@ -0,0 +1,618 @@ +/* + * freeglut_state.c + * + * Freeglut state query methods. + * + * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved. + * Written by Pawel W. Olszta, + * Creation date: Thu Dec 16 1999 + * + * 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 + * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#define G_LOG_DOMAIN "freeglut-state" + +#include "../include/GL/freeglut.h" +#include "../include/GL/freeglut_internal.h" + +/* + * TODO BEFORE THE STABLE RELEASE: + * + * glutGet() -- X11 tests passed, but check if all enums handled (what about Win32?) + * glutDeviceGet() -- X11 tests passed, but check if all enums handled (what about Win32?) + * glutGetModifiers() -- OK, but could also remove the limitation + * glutLayerGet() -- what about GLUT_NORMAL_DAMAGED? + * + * The fail-on-call policy will help adding the most needed things imho. + */ + +/* -- LOCAL DEFINITIONS ---------------------------------------------------- */ + +/* + * Those are definitions introduced to make the glutGet() more easy, + * however they might introduce errors if someone ports GLX to Win32 :) + * + * Btw. this is not that a bad idea (wrapping WGL around GLX)... + */ +#if TARGET_HOST_WIN32 +# define GLX_RGBA 0x01 +# define GLX_DOUBLEBUFFER 0x02 +# define GLX_BUFFER_SIZE 0x03 +# define GLX_STENCIL_SIZE 0x04 +# define GLX_DEPTH_SIZE 0x05 +# define GLX_RED_SIZE 0x06 +# define GLX_GREEN_SIZE 0x07 +# define GLX_BLUE_SIZE 0x08 +# define GLX_ALPHA_SIZE 0x09 +# define GLX_ACCUM_RED_SIZE 0x0A +# define GLX_ACCUM_GREEN_SIZE 0x0B +# define GLX_ACCUM_BLUE_SIZE 0x0C +# define GLX_ACCUM_ALPHA_SIZE 0x0D +# define GLX_STEREO 0x0E +#endif + + +/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */ + +/* + * Queries the GL context about some attributes + */ +static gint fghGetConfig( gint attribute ) +{ + gint returnValue; + + /* + * Return nothing if there is no current window set + */ + if( fgStructure.Window == NULL ) + return( 0 ); + +#if TARGET_HOST_UNIX_X11 + /* + * glXGetConfig should work fine + */ + glXGetConfig( fgDisplay.Display, fgStructure.Window->Window.VisualInfo, attribute, &returnValue ); + +#elif TARGET_HOST_WIN32 + /* + * This is going to be a bit harder than the X11 version... + */ +# pragma message( "freeglut_state.c::fghGetConfig() says hello world my name is not implemented!" ) + switch( attribute ) + { + case GLX_RGBA: + case GLX_DOUBLEBUFFER: + case GLX_BUFFER_SIZE: + case GLX_RED_SIZE: + case GLX_GREEN_SIZE: + case GLX_BLUE_SIZE: + case GLX_DEPTH_SIZE: + return( 1 ); + + case GLX_STENCIL_SIZE: + case GLX_ALPHA_SIZE: + case GLX_ACCUM_RED_SIZE: + case GLX_ACCUM_GREEN_SIZE: + case GLX_ACCUM_BLUE_SIZE: + case GLX_ACCUM_ALPHA_SIZE: + case GLX_STEREO: + default: + /* + * Well, this looks like not implemented to me :) + */ + return( 0 ); + } + +#endif + + /* + * Have the query results returned + */ + return( returnValue ); +} + +/* -- INTERFACE FUNCTIONS -------------------------------------------------- */ + +/* + * General settings query method + */ +int FGAPIENTRY glutGet( GLenum eWhat ) +{ + gint returnValue; + + freeglut_assert_ready; + + /* + * Check what is the caller querying for. In chronological code add order. + */ + switch( eWhat ) + { + case GLUT_ELAPSED_TIME: + /* + * This is easy and nicely portable, as we are using GLib... + */ + return( (int) (g_timer_elapsed( fgState.Timer, NULL ) * 1000.0) ); + + /* + * Following values are stored in fgState and fgDisplay global structures + */ + case GLUT_SCREEN_WIDTH: return( fgDisplay.ScreenWidth ); + case GLUT_SCREEN_HEIGHT: return( fgDisplay.ScreenHeight ); + case GLUT_SCREEN_WIDTH_MM: return( fgDisplay.ScreenWidthMM ); + case GLUT_SCREEN_HEIGHT_MM: return( fgDisplay.ScreenHeightMM ); + case GLUT_INIT_WINDOW_X: return( fgState.Position.X ); + case GLUT_INIT_WINDOW_Y: return( fgState.Position.Y ); + case GLUT_INIT_WINDOW_WIDTH: return( fgState.Size.X ); + case GLUT_INIT_WINDOW_HEIGHT: return( fgState.Size.Y ); + case GLUT_INIT_DISPLAY_MODE: return( fgState.DisplayMode ); + + /* + * The window/context specific queries are handled mostly by fghGetConfig(). + */ + case GLUT_WINDOW_NUM_SAMPLES: + /* + * Multisampling. Return what I know about multisampling. + */ + return( 0 ); + + /* + * The rest of GLX queries is general enough to use a macro to check them + */ +# define GLX_QUERY(a,b) case a: return( fghGetConfig( b ) ); + + GLX_QUERY( GLUT_WINDOW_RGBA, GLX_RGBA ); + GLX_QUERY( GLUT_WINDOW_DOUBLEBUFFER, GLX_DOUBLEBUFFER ); + GLX_QUERY( GLUT_WINDOW_BUFFER_SIZE, GLX_BUFFER_SIZE ); + GLX_QUERY( GLUT_WINDOW_STENCIL_SIZE, GLX_STENCIL_SIZE ); + GLX_QUERY( GLUT_WINDOW_DEPTH_SIZE, GLX_DEPTH_SIZE ); + GLX_QUERY( GLUT_WINDOW_RED_SIZE, GLX_RED_SIZE ); + GLX_QUERY( GLUT_WINDOW_GREEN_SIZE, GLX_GREEN_SIZE ); + GLX_QUERY( GLUT_WINDOW_BLUE_SIZE, GLX_BLUE_SIZE ); + GLX_QUERY( GLUT_WINDOW_ALPHA_SIZE, GLX_ALPHA_SIZE ); + GLX_QUERY( GLUT_WINDOW_ACCUM_RED_SIZE, GLX_ACCUM_RED_SIZE ); + GLX_QUERY( GLUT_WINDOW_ACCUM_GREEN_SIZE, GLX_ACCUM_GREEN_SIZE ); + GLX_QUERY( GLUT_WINDOW_ACCUM_BLUE_SIZE, GLX_ACCUM_BLUE_SIZE ); + GLX_QUERY( GLUT_WINDOW_ACCUM_ALPHA_SIZE, GLX_ACCUM_ALPHA_SIZE ); + GLX_QUERY( GLUT_WINDOW_STEREO, GLX_STEREO ); + +# undef GLX_QUERY + +#if TARGET_HOST_UNIX_X11 + /* + * Colormap size is handled in a bit different way than all the rest + */ + case GLUT_WINDOW_COLORMAP_SIZE: + /* + * Check for the visual type + */ + if( (fghGetConfig( GLX_RGBA )) || (fgStructure.Window == NULL) ) + { + /* + * We've got a RGBA visual, so there is no colormap at all. + * The other possibility is that we have no current window set. + */ + return( 0 ); + } + + /* + * Otherwise return the number of entries in the colormap + */ + return( fgStructure.Window->Window.VisualInfo->visual->map_entries ); + + /* + * Those calls are somewhat similiar, as they use XGetWindowAttributes() function + */ + case GLUT_WINDOW_X: + case GLUT_WINDOW_Y: + { + XWindowAttributes winAttributes; + Window another, window; + gint x, y; + + /* + * Return zero if there is no current window set + */ + if( fgStructure.Window == NULL ) + return( 0 ); + + /* + * So, grab the current window's position + */ + window = fgStructure.Window->Window.Handle; + + /* + * Grab the current window's attributes now + */ + XGetWindowAttributes( + fgDisplay.Display, + window, + &winAttributes + ); + + /* + * Correct the results for the parental relation and border size + */ + XTranslateCoordinates( + fgDisplay.Display, + window, + winAttributes.root, + -winAttributes.border_width, + -winAttributes.border_width, + &x, &y, + &another + ); + + /* + * See if we have to return the X or Y coordinate + */ + return( eWhat == GLUT_WINDOW_X ? x : y ); + } + + case GLUT_WINDOW_WIDTH: + case GLUT_WINDOW_HEIGHT: + { + XWindowAttributes winAttributes; + + /* + * Return zero if there is no current window set + */ + if( fgStructure.Window == NULL ) + return( 0 ); + + /* + * Checking for window's size is much easier: + */ + XGetWindowAttributes( + fgDisplay.Display, + fgStructure.Window->Window.Handle, + &winAttributes + ); + + /* + * See if to return the window's width or height + */ + return( eWhat == GLUT_WINDOW_WIDTH ? winAttributes.width : winAttributes.height ); + } + + /* + * I do not know yet if there will be a fgChooseVisual() function for Win32 + */ + case GLUT_DISPLAY_MODE_POSSIBLE: + /* + * Check if the current display mode is possible + */ + return( fgChooseVisual() == NULL ? 0 : 1 ); + + /* + * This is system-dependant + */ + case GLUT_WINDOW_FORMAT_ID: + /* + * Return the visual ID, if there is a current window naturally: + */ + if( fgStructure.Window == NULL ) + return( 0 ); + + return( fgStructure.Window->Window.VisualInfo->visualid ); + +#elif TARGET_HOST_WIN32 + + case GLUT_WINDOW_X: + case GLUT_WINDOW_Y: + case GLUT_WINDOW_WIDTH: + case GLUT_WINDOW_HEIGHT: + { + RECT winRect; + + /* + * Check if there is a window to be queried for dimensions: + */ + freeglut_return_val_if_fail( fgStructure.Window != NULL, 0 ); + + /* + * We need to call GetWindowRect() first... + */ + GetWindowRect( fgStructure.Window->Window.Handle, &winRect ); + + /* + * ...then we've got to correct the results we've just received... + */ + winRect.left += GetSystemMetrics( SM_CXSIZEFRAME ) - 1; + winRect.right -= GetSystemMetrics( SM_CXSIZEFRAME ) - 1; + winRect.top += GetSystemMetrics( SM_CYSIZEFRAME ) - 1 + GetSystemMetrics( SM_CYCAPTION ); + winRect.bottom -= GetSystemMetrics( SM_CYSIZEFRAME ) + 1; + + /* + * ...and finally return the caller the desired value: + */ + switch( eWhat ) + { + case GLUT_WINDOW_X: return( winRect.left ); + case GLUT_WINDOW_Y: return( winRect.top ); + case GLUT_WINDOW_WIDTH: return( winRect.right - winRect.left ); + case GLUT_WINDOW_HEIGHT: return( winRect.bottom - winRect.top ); + } + } + break; + + case GLUT_DISPLAY_MODE_POSSIBLE: + /* + * Check if the current display mode is possible + */ + return( fgSetupPixelFormat( fgStructure.Window, TRUE ) ); + + case GLUT_WINDOW_FORMAT_ID: + /* + * Return the pixel format of the current window + */ + if( fgStructure.Window != NULL ) + return( GetPixelFormat( fgStructure.Window->Window.Device ) ); + + /* + * If the current window does not exist, fail: + */ + return( 0 ); + +#endif + + /* + * The window structure queries + */ + case GLUT_WINDOW_PARENT: + /* + * Return the ID number of current window's parent, if any + */ + if( fgStructure.Window == NULL ) return( 0 ); + if( fgStructure.Window->Parent == NULL ) return( 0 ); + + return( fgStructure.Window->Parent->ID ); + + case GLUT_WINDOW_NUM_CHILDREN: + /* + * Return the number of children attached to the current window + */ + if( fgStructure.Window == NULL ) + return( 0 ); + + return( g_list_length( fgStructure.Window->Children ) ); + + case GLUT_WINDOW_CURSOR: + /* + * Return the currently selected window cursor + */ + if( fgStructure.Window == NULL ) + return( 0 ); + + return( fgStructure.Window->State.Cursor ); + + case GLUT_MENU_NUM_ITEMS: + /* + * Return the number of menu entries in the current menu + */ + if( fgStructure.Menu == NULL ) + return( 0 ); + + return( g_list_length( fgStructure.Menu->Entries ) ); + + default: + /* + * Just have it reported, so that we can see what needs to be implemented + */ + g_warning( "glutGet(): missing enum handle %i\n", eWhat ); + break; + } + + /* + * If nothing happens, then we are in deep trouble... + */ + g_assert_not_reached(); +} + +/* + * Returns various device information. + */ +int FGAPIENTRY glutDeviceGet( GLenum eWhat ) +{ + freeglut_assert_ready; + + /* + * See why are we bothered... + * + * WARNING: we are mostly lying in this function. + */ + switch( eWhat ) + { + case GLUT_HAS_KEYBOARD: + /* + * We always have a keyboard present on PC machines... + */ + return( TRUE ); + +#if TARGET_HOST_UNIX_X11 + + case GLUT_HAS_MOUSE: + /* + * Hey, my Atari 65XE hasn't had a mouse! + */ + return( TRUE ); + + case GLUT_NUM_MOUSE_BUTTONS: + /* + * Return the number of mouse buttons available. This is a big guess. + */ + return( 3 ); + +#elif TARGET_HOST_WIN32 + + case GLUT_HAS_MOUSE: + /* + * The Windows can be booted without a mouse. + * It would be nice to have this reported. + */ + return( GetSystemMetrics( SM_MOUSEPRESENT ) ); + + case GLUT_NUM_MOUSE_BUTTONS: + /* + * We are much more fortunate under Win32 about this... + */ + return( GetSystemMetrics( SM_CMOUSEBUTTONS ) ); + +#endif + + case GLUT_JOYSTICK_POLL_RATE: + case GLUT_HAS_JOYSTICK: + case GLUT_JOYSTICK_BUTTONS: + case GLUT_JOYSTICK_AXES: + /* + * WARNING: THIS IS A BIG LIE! + */ + return( 0 ); + + case GLUT_HAS_SPACEBALL: + case GLUT_HAS_DIAL_AND_BUTTON_BOX: + case GLUT_HAS_TABLET: + /* + * Sounds cool. And unuseful. + */ + return( FALSE ); + + case GLUT_NUM_SPACEBALL_BUTTONS: + case GLUT_NUM_BUTTON_BOX_BUTTONS: + case GLUT_NUM_DIALS: + case GLUT_NUM_TABLET_BUTTONS: + /* + * Zero is not the answer. Zero is the question. Continuum is the answer. + */ + return( 0 ); + + case GLUT_DEVICE_IGNORE_KEY_REPEAT: + /* + * Return what we think about the key auto repeat settings + */ + return( fgState.IgnoreKeyRepeat ); + + case GLUT_DEVICE_KEY_REPEAT: + /* + * WARNING: THIS IS A BIG LIE! + */ + return( GLUT_KEY_REPEAT_DEFAULT ); + + default: + /* + * Complain. + */ + g_warning( "glutDeviceGet(): missing enum handle %i\n", eWhat ); + break; + } + + /* + * And now -- the failure. + */ + g_assert_not_reached(); +} + +/* + * This should return the current state of ALT, SHIFT and CTRL keys. + */ +int FGAPIENTRY glutGetModifiers( void ) +{ + /* + * Fail if there is no current window or called outside an input callback + */ + if( fgStructure.Window == NULL ) + return( 0 ); + + if( fgStructure.Window->State.Modifiers == 0xffffffff ) + { + g_warning( "glutGetModifiers() called outside an input callback" ); + return( 0 ); + } + + /* + * Return the current modifiers state otherwise + */ + return( fgStructure.Window->State.Modifiers ); +} + +/* + * Return the state of the GLUT API overlay subsystem. A misery ;-) + */ +int FGAPIENTRY glutLayerGet( GLenum eWhat ) +{ + freeglut_assert_ready; + + /* + * This is easy as layers are not implemented ;-) + */ + switch( eWhat ) + { + case GLUT_OVERLAY_POSSIBLE: + /* + * Nope, overlays are not possible. + */ + return( FALSE ); + + case GLUT_LAYER_IN_USE: + /* + * The normal plane is always in use + */ + return( GLUT_NORMAL ); + + case GLUT_HAS_OVERLAY: + /* + * No window is allowed to have an overlay + */ + return( FALSE ); + + case GLUT_TRANSPARENT_INDEX: + /* + * Return just anything, which is always defined as zero + */ + return( 0 ); + + case GLUT_NORMAL_DAMAGED: + /* + * Actually I do not know. Maybe. + */ + return( FALSE ); + + case GLUT_OVERLAY_DAMAGED: + /* + * Return minus one to mark that no layer is in use + */ + return( -1 ); + + default: + /* + * Complain to the user about the obvious bug + */ + g_warning( "glutLayerGet(): missing enum handle %i\n", eWhat ); + break; + } + + /* + * And fail. That's good. Programs do love failing. + */ + g_assert_not_reached(); +} + +/*** END OF FILE ***/ diff --git a/freeglut/freeglut/freeglut-1.3/freeglut_structure.c b/freeglut/freeglut/freeglut-1.3/freeglut_structure.c new file mode 100644 index 0000000..af851f1 --- /dev/null +++ b/freeglut/freeglut/freeglut-1.3/freeglut_structure.c @@ -0,0 +1,643 @@ +/* + * freeglut_structure.c + * + * Windows and menus need tree structure + * + * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved. + * Written by Pawel W. Olszta, + * Creation date: Sat Dec 18 1999 + * + * 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 + * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#define G_LOG_DOMAIN "freeglut-structure" + +#include "../include/GL/freeglut.h" +#include "../include/GL/freeglut_internal.h" + + +/* -- GLOBAL EXPORTS ------------------------------------------------------- */ + +/* + * The SFG_Structure container holds information about windows and menus + * created between glutInit() and glutMainLoop() return. + */ +SFG_Structure fgStructure; + + +/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */ + +/* + * This private function creates, opens and adds to the hierarchy + * a freeglut window complete with OpenGL context and stuff... + * + * If parent is set to NULL, the window created will be a topmost one. + */ +SFG_Window* fgCreateWindow( SFG_Window* parent, const gchar* title, gint x, gint y, gint w, gint h, gboolean gameMode ) +{ + /* + * Have the window object created + */ + SFG_Window* window = g_new0( SFG_Window, 1 ); + gint fakeArgc = 0; + + /* + * If the freeglut internals haven't been initialized yet, + * do it now. Hack's idea courtesy of Chris Purnell... + */ + if( fgState.Timer == NULL ) + glutInit( &fakeArgc, NULL ); + + /* + * Initialize the object properties + */ + window->ID = ++fgStructure.WindowID; + + /* + * Does this window have a parent? + */ + if( parent != NULL ) + { + /* + * That's quite right, attach this windows as a child window + */ + parent->Children = g_list_append( parent->Children, window ); + window->Parent = parent; + } + else + { + /* + * Otherwise add the newly created window to the topmost windows list + */ + fgStructure.Windows = g_list_append( fgStructure.Windows, window ); + } + + /* + * Set the default mouse cursor and reset the modifiers value + */ + window->State.Cursor = GLUT_CURSOR_INHERIT; + window->State.Modifiers = 0xffffffff; + + /* + * Open the window now. The fgOpenWindow() function is system + * dependant, and resides in freeglut_window.c. Uses fgState. + */ + fgOpenWindow( window, title, x, y, w, h, gameMode ); + + /* + * Return a pointer to the newly created window + */ + return( window ); +} + +/* + * This private function creates a menu and adds it to the menus list + */ +SFG_Menu* fgCreateMenu( FGCBmenu menuCallback ) +{ + /* + * Have the menu object created + */ + SFG_Menu* menu = g_new0( SFG_Menu, 1 ); + gint fakeArgc = 0; + + /* + * If the freeglut internals haven't been initialized yet, + * do it now. Hack's idea courtesy of Chris Purnell... + */ + if( fgState.Timer == NULL ) + glutInit( &fakeArgc, NULL ); + + /* + * Initialize the object properties: + */ + menu->ID = ++fgStructure.MenuID; + menu->Callback = menuCallback; + + /* + * Add it to the menu structure hierarchy + */ + fgStructure.Menus = g_list_append( fgStructure.Menus, menu ); + + /* + * Newly created menus implicitly become current ones + */ + fgStructure.Menu = menu; + + /* + * Return the result to the caller + */ + return( menu ); +} + +/* + * This function destroys a window and all of it's subwindows. Actually, + * another function, defined in freeglut_window.c is called, but this is + * a whole different story... + */ +void fgDestroyWindow( SFG_Window* window, gboolean needToClose ) +{ + int i; + + g_assert( window != NULL ); + freeglut_assert_ready; + + /* + * Does this window have any subwindows? + */ + if( window->Children != NULL ) + { + /* + * OKi, while there are any subwindows left... + */ + while( g_list_first( window->Children ) != NULL ) + { + SFG_Window* subWindow = g_list_first( window->Children )->data; + + /* + * Destroy the first window in the list (possibly destroying + * it's subwindows too. This is not very effective, but works + */ + fgDestroyWindow( subWindow, TRUE ); + + /* + * Remove the just destroyed node from the subwindows list + */ + window->Children = g_list_remove( window->Children, subWindow ); + } + + /* + * Have the list freed now (probably it already is, but you can + * never be sure with no GLib documentation on your hdd...) + */ + g_list_free( window->Children ); + window->Children = NULL; + } + + /* + * Now we should remove the reference to this window from it's parent + */ + if( window->Parent != NULL ) + window->Parent->Children = g_list_remove( window->Parent->Children, window ); + + /* + * OK, this window seems disconnected from the structure enough + * in order to be closed without any bigger risks... + */ + if( needToClose == TRUE ) + fgCloseWindow( window ); + + /* + * Try removing the window from the parents list in fgStructure. + * This might fail as the window is not guaranteed to be there: + */ + fgStructure.Windows = g_list_remove( fgStructure.Windows, window ); + + /* + * Check if the window is the current one... + */ + if( fgStructure.Window == window ) + fgStructure.Window = NULL; + + /* + * Finally, we can delete the window's object. It hopefully does + * have everything inside it freed and we do not have to care... + */ + g_free( window ); +} + +/* + * This is a helper static function that removes a menu (given it's pointer) + * from any windows that can be accessed from a given parent... + */ +static void fghRemoveMenuFromWindow( SFG_Window* window, SFG_Menu* menu ) +{ + gint i; + + /* + * Check if the menu is attached to the current window, + * if so, have it detached (by overwriting with a NULL): + */ + for( i=0; i<3; i++ ) + if( window->Menu[ i ] == menu ) + window->Menu[ i ] = NULL; + + /* + * Call this function for all of the window's children recursively: + */ + for( i=0; i<(gint) g_list_length( window->Children ); i++ ) + fghRemoveMenuFromWindow( + (SFG_Window *) g_list_nth( window->Children, i )->data, + menu + ); +} + +/* + * This is a static helper function that removes menu references + * from another menu, given two pointers to them... + */ +static void fghRemoveMenuFromMenu( SFG_Menu* from, SFG_Menu* menu ) +{ + gboolean found = FALSE; + + /* + * Do not allow removing a menu from itself... + */ + if( from == menu ) + return; + + /* + * Look up for the first entry that matches the given + * menu and have it removed, then search again and again: + */ + do + { + /* + * Try searching for the incriminated menu entry + */ + GList* where = g_list_find( from->Entries, menu ); + + /* + * Make sure we still have a list to be searched + */ + if( where != NULL ) + { + /* + * Did we actually find the menu entry we want to remove? + */ + found = ((SFG_Menu *) where->data == menu); + + /* + * Need to check that, as the search might have failed + */ + if( found ) + from->Entries = g_list_remove( from->Entries, menu ); + } + else + { + /* + * It would be nice if we had a stop rule ;-) + */ + found = FALSE; + } + } while( found == TRUE ); +} + +/* + * This function destroys a menu specified by the parameter. All menus + * and windows are updated to make sure no ill pointers hang around. + */ +void fgDestroyMenu( SFG_Menu* menu ) +{ + gint i; + + g_assert( menu != NULL ); + freeglut_assert_ready; + + /* + * First of all, have all references to this menu removed from all windows: + */ + for( i=0; i<(gint) g_list_length( fgStructure.Windows ); i++ ) + fghRemoveMenuFromWindow( + (SFG_Window *) g_list_nth( fgStructure.Windows, i )->data, + menu + ); + + /* + * Now proceed with removing menu entries that lead to this menu + */ + for( i=0; i<(gint) g_list_length( fgStructure.Menus ); i++ ) + fghRemoveMenuFromMenu( + (SFG_Menu *) g_list_nth( fgStructure.Menus, i )->data, + menu + ); + + /* + * Now we are pretty sure the menu is not used anywhere + * and that we can remove all of it's entries + */ + for( i=0; i<(gint) g_list_length( menu->Entries ); i++ ) + { + SFG_MenuEntry* entry = (SFG_MenuEntry *) g_list_nth( menu->Entries, i )->data; + + /* + * There might be a string allocated, have it freed: + */ + g_string_free( entry->Text, TRUE ); + + /* + * Deallocate the entry itself: + */ + g_free( entry ); + } + + /* + * Deallocate the entries list + */ + g_list_free( menu->Entries ); + menu->Entries = NULL; + + /* + * Remove the menu from the menus list + */ + fgStructure.Menus = g_list_remove( fgStructure.Menus, menu ); + + /* + * If that menu was the current one... + */ + if( fgStructure.Menu == menu ) + fgStructure.Menu = NULL; + + /* + * Have the menu structure freed + */ + g_free( menu ); +} + +/* + * This function should be called on glutInit(). It will prepare the internal + * structure of freeglut to be used in the application. The structure will be + * destroyed using fgDestroyStructure() on glutMainLoop() return. In that + * case further use of freeglut should be preceeded with a glutInit() call. + */ +void fgCreateStructure( void ) +{ + /* + * We will be needing two lists: the first containing windows, and the second + * containing the user-defined menus. However we do not need allocating anything, + * as it is done automagically by GLib when appending new entries to both of them. + * Also, no current window/menu is set, as none has been created yet. + */ +} + +/* + * This function is automatically called on glutMainLoop() return. It should deallocate + * and destroy all remnants of previous glutInit()-enforced structure initialization... + */ +void fgDestroyStructure( void ) +{ + /* + * Just make sure we are not called in vain... + */ + freeglut_assert_ready; + + /* + * Make sure all windows and menus have been deallocated + */ + while( fgStructure.Windows != NULL ) + fgDestroyWindow( (SFG_Window *) g_list_first( fgStructure.Windows )->data, TRUE ); + + while( fgStructure.Menus != NULL ) + fgDestroyMenu( (SFG_Menu *) g_list_first( fgStructure.Menus )->data ); +} + +/* + * Helper function to enumerate through all registered top-level windows + */ +void fgEnumWindows( GFunc enumCallback, SFG_Enumerator* enumerator ) +{ + gint i; + + g_assert( (enumCallback != NULL) && (enumerator != NULL) ); + freeglut_assert_ready; + + /* + * Check every of the top-level windows + */ + for( i=0; i<(gint) g_list_length( fgStructure.Windows ); i++ ) + { + /* + * Execute the callback... + */ + enumCallback( (gpointer) g_list_nth( fgStructure.Windows, i )->data, (gpointer) enumerator ); + + /* + * If it has been marked as 'found', stop searching + */ + if( enumerator->found == TRUE ) + return; + } +} + +/* + * Helper function to enumerate through all a window's subwindows (single level descent) + */ +void fgEnumSubWindows( SFG_Window* window, GFunc enumCallback, SFG_Enumerator* enumerator ) +{ + gint i; + + g_assert( (enumCallback != NULL) && (enumerator != NULL) ); + freeglut_assert_ready; + + /* + * Check every of the window's children: + */ + for( i=0; i<(gint) g_list_length( window->Children ); i++ ) + { + /* + * Execute the callback... + */ + enumCallback( (gpointer) g_list_nth( window->Children, i )->data, (gpointer) enumerator ); + + /* + * If it has been marked as 'found', stop searching + */ + if( enumerator->found == TRUE ) + return; + } +} + +/* + * A static helper function to look for a window given it's handle + */ +static void fghcbWindowByHandle( gpointer window, gpointer enumerator ) +{ + /* + * Make sure we do not overwrite our precious results... + */ + freeglut_return_if_fail( ((SFG_Enumerator *) enumerator)->found == FALSE ); + +#if TARGET_HOST_UNIX_X11 + #define WBHANDLE (Window) +#elif TARGET_HOST_WIN32 + #define WBHANDLE (HWND) +#endif + + /* + * Check the window's handle. Hope this works. Looks ugly. That's for sure. + */ + if( ((SFG_Window *) window)->Window.Handle == (WBHANDLE ((SFG_Enumerator *) enumerator)->data) ) + { + ((SFG_Enumerator *) enumerator)->found = TRUE; + ((SFG_Enumerator *) enumerator)->data = (gpointer) window; + + return; + } + + /* + * Otherwise, check this window's children + */ + fgEnumSubWindows( (SFG_Window *) window, fghcbWindowByHandle, enumerator ); + +#undef WBHANDLE +} + +/* + * fgWindowByHandle returns a (SFG_Window *) value pointing to the + * first window in the queue matching the specified window handle. + * The function is defined in freeglut_structure.c file. + */ +SFG_Window* fgWindowByHandle +#if TARGET_HOST_UNIX_X11 +( Window hWindow ) +#elif TARGET_HOST_WIN32 +( HWND hWindow ) +#endif +{ + SFG_Enumerator enumerator; + + /* + * This is easy and makes use of the windows enumeration defined above + */ + enumerator.found = FALSE; + enumerator.data = (gpointer) hWindow; + + /* + * Start the enumeration now: + */ + fgEnumWindows( fghcbWindowByHandle, &enumerator ); + + /* + * Check if the window has been found or not: + */ + if( enumerator.found == TRUE ) + return( (SFG_Window *) enumerator.data ); + + /* + * Otherwise return NULL to mark the failure + */ + return( NULL ); +} + +/* + * A static helper function to look for a window given it's ID + */ +static void fghcbWindowByID( gpointer window, gpointer enumerator ) +{ + /* + * Make sure we do not overwrite our precious results... + */ + g_return_if_fail( ((SFG_Enumerator *) enumerator)->found == FALSE ); + + /* + * Check the window's handle. Hope this works. Looks ugly. That's for sure. + */ + if( ((SFG_Window *) window)->ID == (gint) (((SFG_Enumerator *) enumerator)->data) ) + { + ((SFG_Enumerator *) enumerator)->found = TRUE; + ((SFG_Enumerator *) enumerator)->data = (gpointer) window; + + return; + } + + /* + * Otherwise, check this window's children + */ + fgEnumSubWindows( (SFG_Window *) window, fghcbWindowByID, enumerator ); +} + +/* + * This function is similiar to the previous one, except it is + * looking for a specified (sub)window identifier. The function + * is defined in freeglut_structure.c file. + */ +SFG_Window* fgWindowByID( gint windowID ) +{ + SFG_Enumerator enumerator; + + /* + * Uses a method very similiar for fgWindowByHandle... + */ + enumerator.found = FALSE; + enumerator.data = (gpointer) windowID; + + /* + * Start the enumeration now: + */ + fgEnumWindows( fghcbWindowByID, &enumerator ); + + /* + * Check if the window has been found or not: + */ + if( enumerator.found == TRUE ) + return( (SFG_Window *) enumerator.data ); + + /* + * Otherwise return NULL to mark the failure + */ + return( NULL ); +} + +/* + * Looks up a menu given it's ID. This is easier that fgWindowByXXX + * as all menus are placed in a single doubly linked list... + */ +SFG_Menu* fgMenuByID( gint menuID ) +{ + SFG_Menu *menu = NULL; + gint i; + + freeglut_assert_ready; + + /* + * It's enough to check all entries in fgStructure.Menus... + */ + for( i=0; i<(gint) g_list_length( fgStructure.Menus ); i++ ) + { + /* + * Grab the n-th element of the menu objects list... + */ + menu = (SFG_Menu *) g_list_nth( fgStructure.Menus, i )->data; + + /* + * Does the ID number match? + */ + if( menu->ID == menuID ) + return( menu ); + } + + /* + * We have not found the requested menu ID + */ + return( NULL ); +} + +/*** END OF FILE ***/ + + + + + + + + + diff --git a/freeglut/freeglut/freeglut-1.3/freeglut_teapot.c b/freeglut/freeglut/freeglut-1.3/freeglut_teapot.c new file mode 100644 index 0000000..d910a08 --- /dev/null +++ b/freeglut/freeglut/freeglut-1.3/freeglut_teapot.c @@ -0,0 +1,248 @@ +/* + * freeglut_teapot.c + * + * Teapot(tm) rendering code. + * + * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved. + * Written by Pawel W. Olszta, + * Creation date: Fri Dec 24 1999 + * + * 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 + * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * Original teapot code copyright follows: + */ + +/* + * (c) Copyright 1993, Silicon Graphics, Inc. + * + * ALL RIGHTS RESERVED + * + * Permission to use, copy, modify, and distribute this software + * for any purpose and without fee is hereby granted, provided + * that the above copyright notice appear in all copies and that + * both the copyright notice and this permission notice appear in + * supporting documentation, and that the name of Silicon + * Graphics, Inc. not be used in advertising or publicity + * pertaining to distribution of the software without specific, + * written prior permission. + * + * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU + * "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR + * OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. IN NO + * EVENT SHALL SILICON GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE + * ELSE FOR ANY DIRECT, SPECIAL, INCIDENTAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER, + * INCLUDING WITHOUT LIMITATION, LOSS OF PROFIT, LOSS OF USE, + * SAVINGS OR REVENUE, OR THE CLAIMS OF THIRD PARTIES, WHETHER OR + * NOT SILICON GRAPHICS, INC. HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH LOSS, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * ARISING OUT OF OR IN CONNECTION WITH THE POSSESSION, USE OR + * PERFORMANCE OF THIS SOFTWARE. + * + * US Government Users Restricted Rights + * + * Use, duplication, or disclosure by the Government is subject to + * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph + * (c)(1)(ii) of the Rights in Technical Data and Computer + * Software clause at DFARS 252.227-7013 and/or in similar or + * successor clauses in the FAR or the DOD or NASA FAR + * Supplement. Unpublished-- rights reserved under the copyright + * laws of the United States. Contractor/manufacturer is Silicon + * Graphics, Inc., 2011 N. Shoreline Blvd., Mountain View, CA + * 94039-7311. + * + * OpenGL(TM) is a trademark of Silicon Graphics, Inc. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#define G_LOG_DOMAIN "freeglut-teapot" + +#include "../include/GL/freeglut.h" +#include "../include/GL/freeglut_internal.h" + + +/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */ + +/* + * Rim, body, lid, and bottom data must be reflected in x and y; + * handle and spout data across the y axis only. + */ +static int patchdata[][16] = +{ + { 102, 103, 104, 105, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, /* rim */ + { 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27 }, /* body */ + { 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 }, + { 96, 96, 96, 96, 97, 98, 99, 100, 101, 101, 101, 101, 0, 1, 2, 3 }, /* lid */ + { 0, 1, 2, 3, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117 }, + { 118, 118, 118, 118, 124, 122, 119, 121, 123, 126, 125, 120, 40, 39, 38, 37 }, /* bottom */ + { 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56 }, /* handle */ + { 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 28, 65, 66, 67 }, + { 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83 }, /* spout */ + { 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95 } +}; + +static float cpdata[][3] = +{ + {0.2, 0, 2.7}, {0.2, -0.112, 2.7}, {0.112, -0.2, 2.7}, {0, + -0.2, 2.7}, {1.3375, 0, 2.53125}, {1.3375, -0.749, 2.53125}, + {0.749, -1.3375, 2.53125}, {0, -1.3375, 2.53125}, {1.4375, + 0, 2.53125}, {1.4375, -0.805, 2.53125}, {0.805, -1.4375, + 2.53125}, {0, -1.4375, 2.53125}, {1.5, 0, 2.4}, {1.5, -0.84, + 2.4}, {0.84, -1.5, 2.4}, {0, -1.5, 2.4}, {1.75, 0, 1.875}, + {1.75, -0.98, 1.875}, {0.98, -1.75, 1.875}, {0, -1.75, + 1.875}, {2, 0, 1.35}, {2, -1.12, 1.35}, {1.12, -2, 1.35}, + {0, -2, 1.35}, {2, 0, 0.9}, {2, -1.12, 0.9}, {1.12, -2, + 0.9}, {0, -2, 0.9}, {-2, 0, 0.9}, {2, 0, 0.45}, {2, -1.12, + 0.45}, {1.12, -2, 0.45}, {0, -2, 0.45}, {1.5, 0, 0.225}, + {1.5, -0.84, 0.225}, {0.84, -1.5, 0.225}, {0, -1.5, 0.225}, + {1.5, 0, 0.15}, {1.5, -0.84, 0.15}, {0.84, -1.5, 0.15}, {0, + -1.5, 0.15}, {-1.6, 0, 2.025}, {-1.6, -0.3, 2.025}, {-1.5, + -0.3, 2.25}, {-1.5, 0, 2.25}, {-2.3, 0, 2.025}, {-2.3, -0.3, + 2.025}, {-2.5, -0.3, 2.25}, {-2.5, 0, 2.25}, {-2.7, 0, + 2.025}, {-2.7, -0.3, 2.025}, {-3, -0.3, 2.25}, {-3, 0, + 2.25}, {-2.7, 0, 1.8}, {-2.7, -0.3, 1.8}, {-3, -0.3, 1.8}, + {-3, 0, 1.8}, {-2.7, 0, 1.575}, {-2.7, -0.3, 1.575}, {-3, + -0.3, 1.35}, {-3, 0, 1.35}, {-2.5, 0, 1.125}, {-2.5, -0.3, + 1.125}, {-2.65, -0.3, 0.9375}, {-2.65, 0, 0.9375}, {-2, + -0.3, 0.9}, {-1.9, -0.3, 0.6}, {-1.9, 0, 0.6}, {1.7, 0, + 1.425}, {1.7, -0.66, 1.425}, {1.7, -0.66, 0.6}, {1.7, 0, + 0.6}, {2.6, 0, 1.425}, {2.6, -0.66, 1.425}, {3.1, -0.66, + 0.825}, {3.1, 0, 0.825}, {2.3, 0, 2.1}, {2.3, -0.25, 2.1}, + {2.4, -0.25, 2.025}, {2.4, 0, 2.025}, {2.7, 0, 2.4}, {2.7, + -0.25, 2.4}, {3.3, -0.25, 2.4}, {3.3, 0, 2.4}, {2.8, 0, + 2.475}, {2.8, -0.25, 2.475}, {3.525, -0.25, 2.49375}, + {3.525, 0, 2.49375}, {2.9, 0, 2.475}, {2.9, -0.15, 2.475}, + {3.45, -0.15, 2.5125}, {3.45, 0, 2.5125}, {2.8, 0, 2.4}, + {2.8, -0.15, 2.4}, {3.2, -0.15, 2.4}, {3.2, 0, 2.4}, {0, 0, + 3.15}, {0.8, 0, 3.15}, {0.8, -0.45, 3.15}, {0.45, -0.8, + 3.15}, {0, -0.8, 3.15}, {0, 0, 2.85}, {1.4, 0, 2.4}, {1.4, + -0.784, 2.4}, {0.784, -1.4, 2.4}, {0, -1.4, 2.4}, {0.4, 0, + 2.55}, {0.4, -0.224, 2.55}, {0.224, -0.4, 2.55}, {0, -0.4, + 2.55}, {1.3, 0, 2.55}, {1.3, -0.728, 2.55}, {0.728, -1.3, + 2.55}, {0, -1.3, 2.55}, {1.3, 0, 2.4}, {1.3, -0.728, 2.4}, + {0.728, -1.3, 2.4}, {0, -1.3, 2.4}, {0, 0, 0}, {1.425, + -0.798, 0}, {1.5, 0, 0.075}, {1.425, 0, 0}, {0.798, -1.425, + 0}, {0, -1.5, 0.075}, {0, -1.425, 0}, {1.5, -0.84, 0.075}, + {0.84, -1.5, 0.075} +}; + +static float tex[2][2][2] = +{ + { {0, 0}, {1, 0} }, + { {0, 1}, {1, 1} } +}; + +static void teapot( GLint grid, GLdouble scale, GLenum type ) +{ + float p[4][4][3], q[4][4][3], r[4][4][3], s[4][4][3]; + long i, j, k, l; + + glPushAttrib( GL_ENABLE_BIT | GL_EVAL_BIT ); + glEnable( GL_AUTO_NORMAL ); + glEnable( GL_NORMALIZE ); + glEnable( GL_MAP2_VERTEX_3 ); + glEnable( GL_MAP2_TEXTURE_COORD_2 ); + + glPushMatrix(); + glRotatef(270.0, 1.0, 0.0, 0.0); + glScalef(0.5 * scale, 0.5 * scale, 0.5 * scale); + glTranslatef(0.0, 0.0, -1.5); + + for (i = 0; i < 10; i++) { + for (j = 0; j < 4; j++) { + for (k = 0; k < 4; k++) { + for (l = 0; l < 3; l++) { + p[j][k][l] = cpdata[patchdata[i][j * 4 + k]][l]; + q[j][k][l] = cpdata[patchdata[i][j * 4 + (3 - k)]][l]; + if (l == 1) + q[j][k][l] *= -1.0; + if (i < 6) { + r[j][k][l] = + cpdata[patchdata[i][j * 4 + (3 - k)]][l]; + if (l == 0) + r[j][k][l] *= -1.0; + s[j][k][l] = cpdata[patchdata[i][j * 4 + k]][l]; + if (l == 0) + s[j][k][l] *= -1.0; + if (l == 1) + s[j][k][l] *= -1.0; + } + } + } + } + + glMap2f(GL_MAP2_TEXTURE_COORD_2, 0, 1, 2, 2, 0, 1, 4, 2, + &tex[0][0][0]); + glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, + &p[0][0][0]); + glMapGrid2f(grid, 0.0, 1.0, grid, 0.0, 1.0); + glEvalMesh2(type, 0, grid, 0, grid); + glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, + &q[0][0][0]); + glEvalMesh2(type, 0, grid, 0, grid); + if (i < 6) { + glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, + &r[0][0][0]); + glEvalMesh2(type, 0, grid, 0, grid); + glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, + &s[0][0][0]); + glEvalMesh2(type, 0, grid, 0, grid); + } + } + + glPopMatrix(); + glPopAttrib(); +} + + +/* -- INTERFACE FUNCTIONS -------------------------------------------------- */ + +/* + * Renders a beautiful wired teapot... + */ +void FGAPIENTRY glutWireTeapot( GLdouble size ) +{ + /* + * We will use the general teapot rendering code + */ + teapot( 10, size, GL_LINE ); +} + +/* + * Renders a beautiful filled teapot... + */ +void FGAPIENTRY glutSolidTeapot( GLdouble size ) +{ + /* + * We will use the general teapot rendering code + */ + teapot( 7, size, GL_FILL ); +} + +/*** END OF FILE ***/ + + + + + diff --git a/freeglut/freeglut/freeglut-1.3/freeglut_videoresize.c b/freeglut/freeglut/freeglut-1.3/freeglut_videoresize.c new file mode 100644 index 0000000..d0a00ba --- /dev/null +++ b/freeglut/freeglut/freeglut-1.3/freeglut_videoresize.c @@ -0,0 +1,56 @@ +/* + * freeglut_videoresize.c + * + * Video resize functions (as defined by GLUT API) + * + * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved. + * Written by Pawel W. Olszta, + * Creation date: Thu Dec 16 1999 + * + * 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 + * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#define G_LOG_DOMAIN "freeglut-videoresize" + +#include "../include/GL/freeglut.h" +#include "../include/GL/freeglut_internal.h" + +/* + * NOTE: functions declared in this file probably will not be implemented. + */ + +/* -- INTERFACE FUNCTIONS -------------------------------------------------- */ + +int FGAPIENTRY glutVideoResizeGet( GLenum eWhat ) { return( 0x00 ); } +void FGAPIENTRY glutSetupVideoResizing( void ) { /* Not implemented */ } +void FGAPIENTRY glutStopVideoResizing( void ) { /* Not implemented */ } +void FGAPIENTRY glutVideoResize( int x, int y, int w, int h ) { /* Not implemented */ } +void FGAPIENTRY glutVideoPan( int x, int y, int w, int h ) { /* Not implemented */ } + +/*** END OF FILE ***/ + + + + + + + diff --git a/freeglut/freeglut/freeglut-1.3/freeglut_window.c b/freeglut/freeglut/freeglut-1.3/freeglut_window.c new file mode 100644 index 0000000..5cd3876 --- /dev/null +++ b/freeglut/freeglut/freeglut-1.3/freeglut_window.c @@ -0,0 +1,1099 @@ +/* + * freeglut_window.c + * + * Window management methods. + * + * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved. + * Written by Pawel W. Olszta, + * Creation date: Fri Dec 3 1999 + * + * 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 + * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#define G_LOG_DOMAIN "freeglut-window" + +#include "../include/GL/freeglut.h" +#include "../include/GL/freeglut_internal.h" + +/* + * TODO BEFORE THE STABLE RELEASE: + * + * fgChooseVisual() -- OK, but what about glutInitDisplayString()? + * fgSetupPixelFormat -- ignores the display mode settings + * fgOpenWindow() -- check the Win32 version, -iconic handling! + * fgCloseWindow() -- check the Win32 version + * glutCreateWindow() -- see what happens when default position and size is {-1,-1} + * glutCreateSubWindow() -- see what happens when default position and size is {-1,-1} + * glutDestroyWindow() -- check the Win32 version + * glutSetWindow() -- check the Win32 version + * glutGetWindow() -- OK + * glutSetWindowTitle() -- check the Win32 version + * glutSetIconTitle() -- check the Win32 version + * glutShowWindow() -- check the Win32 version + * glutHideWindow() -- check the Win32 version + * glutIconifyWindow() -- check the Win32 version + * glutReshapeWindow() -- check the Win32 version + * glutPositionWindow() -- check the Win32 version + * glutPushWindow() -- check the Win32 version + * glutPopWindow() -- check the Win32 version + */ + +/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */ + +/* + * Chooses a visual basing on the current display mode settings + */ +#if TARGET_HOST_UNIX_X11 +XVisualInfo* fgChooseVisual( void ) +{ + gint bufferSize[] = { 16, 12, 8, 4, 2, 1 }; + gboolean wantIndexedMode = FALSE; + gint attributes[ 32 ]; + gint where = 0; + + /* + * First we have to process the display mode settings... + */ +# define ATTRIB(a) attributes[where++]=a; + + /* + * Decide if we want a true or indexed color visual: + */ + if( !(fgState.DisplayMode & GLUT_INDEX) ) + { + /* + * We are sure that there will be R, B and B components requested: + */ + ATTRIB( GLX_RGBA ); + ATTRIB( GLX_RED_SIZE ); ATTRIB( 1 ); + ATTRIB( GLX_GREEN_SIZE ); ATTRIB( 1 ); + ATTRIB( GLX_BLUE_SIZE ); ATTRIB( 1 ); + + /* + * Check if the A component is required, too: + */ + if( fgState.DisplayMode & GLUT_ALPHA ) + { + ATTRIB( GLX_ALPHA_SIZE ); ATTRIB( 1 ); + } + } + else + { + /* + * We've got an indexed color request + */ + ATTRIB( GLX_BUFFER_SIZE ); ATTRIB( 8 ); + + /* + * Set the 'I want indexed mode' switch + */ + wantIndexedMode = TRUE; + } + + /* + * We can have double or single buffered contexts created + */ + if( fgState.DisplayMode & GLUT_DOUBLE ) + { + ATTRIB( GLX_DOUBLEBUFFER ); + } + + /* + * Stereoscopy seems a nice thing to have + */ + if( fgState.DisplayMode & GLUT_STEREO ) + { + ATTRIB( GLX_STEREO ); + } + + /* + * Depth buffer is almost always required + */ + if( fgState.DisplayMode & GLUT_DEPTH ) + { + ATTRIB( GLX_DEPTH_SIZE ); ATTRIB( 1 ); + } + + /* + * Stenciling support + */ + if( fgState.DisplayMode & GLUT_STENCIL ) + { + ATTRIB( GLX_STENCIL_SIZE ); ATTRIB( 1 ); + } + + /* + * And finally the accumulation buffers + */ + if( fgState.DisplayMode & GLUT_ACCUM ) + { + ATTRIB( GLX_ACCUM_RED_SIZE ); ATTRIB( 1 ); + ATTRIB( GLX_ACCUM_GREEN_SIZE ); ATTRIB( 1 ); + ATTRIB( GLX_ACCUM_BLUE_SIZE ); ATTRIB( 1 ); + + /* + * Check if the A component is required, too: + */ + if( fgState.DisplayMode & GLUT_ALPHA ) + { + ATTRIB( GLX_ACCUM_ALPHA_SIZE ); ATTRIB( 1 ); + } + } + + /* + * Push a null at the end of the list + */ + ATTRIB( None ); + + /* + * OKi now, we've got two cases -- RGB(A) and index mode visuals + */ + if( wantIndexedMode == FALSE ) + { + /* + * The easier one. And more common, too. + */ + return( glXChooseVisual( fgDisplay.Display, fgDisplay.Screen, attributes ) ); + } + else + { + XVisualInfo* visualInfo; + int i; + + /* + * In indexed mode, we need to check how many bits of depth can we achieve + */ + for( i=0; i<6; i++ ) + { + + /* + * The GLX_BUFFER_SIZE value comes always first, so: + */ + attributes[ 1 ] = bufferSize[ i ]; + + /* + * Check if such visual is possible + */ + visualInfo = glXChooseVisual( fgDisplay.Display, fgDisplay.Screen, attributes ); + + /* + * The buffer size are sorted in descendant order, so choose the first: + */ + if( visualInfo != NULL ) + return( visualInfo ); + } + + /* + * If we are still here, it means that the visual info was not found + */ + return( NULL ); + } +} +#endif + +/* + * Setup the pixel format for a Win32 window + */ +#if TARGET_HOST_WIN32 +gboolean fgSetupPixelFormat( SFG_Window* window, gboolean checkOnly ) +{ + PIXELFORMATDESCRIPTOR* ppfd, pfd; + gint flags, pixelformat; + + /* + * Check if the window seems valid + */ + freeglut_return_val_if_fail( window != NULL, 0 ); + + /* + * The pixel format should allow us to draw to the window using OpenGL + */ + flags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL; + + /* + * It might be the case for us to use double buffering + */ + if( fgState.DisplayMode & GLUT_DOUBLE ) + flags |= PFD_DOUBLEBUFFER; + + /* + * Specify which pixel format do we opt for... + */ +# pragma message( "fgSetupPixelFormat(): there is still some work to do here!" ) + + pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); + pfd.nVersion = 1; + pfd.dwFlags = flags; + pfd.iPixelType = PFD_TYPE_RGBA; + pfd.cColorBits = 24; + pfd.cRedBits = 0; + pfd.cRedShift = 0; + pfd.cGreenBits = 0; + pfd.cGreenShift = 0; + pfd.cBlueBits = 0; + pfd.cBlueShift = 0; + pfd.cAlphaBits = 0; + pfd.cAlphaShift = 0; + pfd.cAccumBits = 0; + pfd.cAccumRedBits = 0; + pfd.cAccumGreenBits = 0; + pfd.cAccumBlueBits = 0; + pfd.cAccumAlphaBits = 0; + pfd.cDepthBits = 32; + pfd.cStencilBits = 0; + pfd.cAuxBuffers = 0; + pfd.iLayerType = PFD_MAIN_PLANE; + pfd.bReserved = 0; + pfd.dwLayerMask = 0; + pfd.dwVisibleMask = 0; + pfd.dwDamageMask = 0; + + /* + * Fill in the color bits... + */ + pfd.cColorBits = (BYTE) GetDeviceCaps( window->Window.Device, BITSPIXEL ); + ppfd = &pfd; + + /* + * Choose the pixel format that matches our demand + */ + pixelformat = ChoosePixelFormat( window->Window.Device, ppfd ); + if( pixelformat == 0 ) + return( FALSE ); + + /* + * We might have been called to check if the pixel format exists only + */ + if( checkOnly ) + return( TRUE ); + + /* + * Finally, set the window's pixel format + */ + if( SetPixelFormat( window->Window.Device, pixelformat, ppfd ) == FALSE ) + return( FALSE ); + + return( TRUE ); +} +#endif + +/* + * Opens a window. Requires a SFG_Window object created and attached + * to the freeglut structure. OpenGL context is created here. + */ +void fgOpenWindow( SFG_Window* window, const gchar* title, gint x, gint y, gint w, gint h, gboolean gameMode ) +{ +#if TARGET_HOST_UNIX_X11 + XSetWindowAttributes winAttr; + XTextProperty textProperty; + XSizeHints sizeHints; + XWMHints wmHints; + guint32 mask; + + freeglut_assert_ready; + + /* + * Here we are upon the stage. Have the visual selected. + */ + window->Window.VisualInfo = fgChooseVisual(); + g_assert( window->Window.VisualInfo != NULL ); + + /* + * Have the windows attributes set + * + * HINT: the masks should be updated when adding/removing callbacks. + * This might speed up message processing. Is that true? + */ + winAttr.event_mask = StructureNotifyMask | SubstructureNotifyMask | ExposureMask | + ButtonPressMask | ButtonReleaseMask | KeyPressMask | + VisibilityChangeMask | EnterWindowMask | LeaveWindowMask | + PointerMotionMask | ButtonMotionMask; + winAttr.background_pixmap = None; + winAttr.background_pixel = 0; + winAttr.border_pixel = 0; + + /* + * The color map is required, too + */ + winAttr.colormap = XCreateColormap( + fgDisplay.Display, fgDisplay.RootWindow, + window->Window.VisualInfo->visual, AllocNone + ); + + /* + * This tells the XCreateWindow() what attributes are we supplying it with + */ + mask = CWBackPixmap | CWBorderPixel | CWColormap | CWEventMask; + + /* + * Have the window created now + */ + window->Window.Handle = XCreateWindow( + fgDisplay.Display, + window->Parent == NULL ? fgDisplay.RootWindow : window->Parent->Window.Handle, + x, y, w, h, 0, + window->Window.VisualInfo->depth, InputOutput, + window->Window.VisualInfo->visual, mask, + &winAttr + ); + + /* + * The GLX context creation, possibly trying the direct context rendering + */ + window->Window.Context = glXCreateContext( + fgDisplay.Display, window->Window.VisualInfo, + NULL, fgState.ForceDirectContext | fgState.TryDirectContext + ); + + /* + * Make sure the context is direct when the user wants it forced + */ + if( fgState.ForceDirectContext && !glXIsDirect( fgDisplay.Display, window->Window.Context ) ) + g_error( "unable to force direct context rendering for window '%s'", title ); + + /* + * Set the new context as the current one. That's all about the window creation. + */ + glXMakeCurrent( + fgDisplay.Display, + window->Window.Handle, + window->Window.Context + ); + + /* + * Assume the new window is visible by default + */ + window->State.Visible = TRUE; + + /* + * For the position and size hints -- make sure we are passing valid values + */ + sizeHints.flags = 0; + + sizeHints.flags |= (fgState.Position.Use == TRUE) ? USPosition : PPosition; + sizeHints.flags |= (fgState.Size.Use == TRUE) ? USSize : PSize; + + /* + * Fill in the size hints values now (the x, y, width and height + * settings are obsolote, are there any more WMs that support them?) + */ + sizeHints.x = x; sizeHints.y = y; + sizeHints.width = w; sizeHints.height = h; + + /* + * We can have forced all new windows start in iconified state: + */ + wmHints.flags = StateHint; + wmHints.initial_state = (fgState.ForceIconic == FALSE) ? NormalState : IconicState; + + /* + * Prepare the window and iconified window names... + */ + XStringListToTextProperty( (char **) &title, 1, &textProperty ); + + /* + * Set the window's properties now + */ + XSetWMProperties( + fgDisplay.Display, + window->Window.Handle, + &textProperty, + &textProperty, + 0, + 0, + &sizeHints, + &wmHints, + NULL + ); + + /* + * Make sure we are informed about the window deletion commands + */ + XSetWMProtocols( fgDisplay.Display, window->Window.Handle, &fgDisplay.DeleteWindow, 1 ); + + /* + * Finally, have the window mapped to our display + */ + XMapWindow( fgDisplay.Display, window->Window.Handle ); + + /* + * This somehow fixes the glutGet() GLUT_WINDOW_X and GLUT_WINDOW_Y problem... + */ + XMoveWindow( fgDisplay.Display, window->Window.Handle, x, y ); + + /* + * In game mode, move the viewport a bit to hide the decorations. + * This code depends on the XFree86 video mode extensions. + */ + if( gameMode == TRUE ) + { +# ifdef X_XF86VidModeSetViewPort + + /* + * Set the newly created window as the current one... + */ + glutSetWindow( window->ID ); + + /* + * Move the viewport a bit down and right from top-left corner to hide the decorations + */ + XF86VidModeSetViewPort( + fgDisplay.Display, + fgDisplay.Screen, + glutGet( GLUT_WINDOW_X ), + glutGet( GLUT_WINDOW_Y ) + ); + +# endif + } + +#elif TARGET_HOST_WIN32 + + WNDCLASS wc; + gint flags; + ATOM atom; + HWND hWnd; + + freeglut_assert_ready; + + /* + * Grab the window class we have registered on glutInit(): + */ + atom = GetClassInfo( fgDisplay.Instance, "FREEGLUT", &wc ); + g_assert( atom != 0 ); + + if( gameMode == FALSE ) + { + /* + * Update the window position and dimensions, taking account of window decorations + */ + x -= (GetSystemMetrics( SM_CXSIZEFRAME ) - 1); + y -= (GetSystemMetrics( SM_CYSIZEFRAME ) - 1); + w += (GetSystemMetrics( SM_CXSIZEFRAME ) - 1)*2; + h += (GetSystemMetrics( SM_CYSIZEFRAME ) - 1)*2 + GetSystemMetrics( SM_CYCAPTION ); + + /* + * Check if the user wants us to use the default position/size + */ + if( fgState.Position.Use == FALSE ) { x = CW_USEDEFAULT; y = CW_USEDEFAULT; } + if( fgState.Size .Use == FALSE ) { w = CW_USEDEFAULT; h = CW_USEDEFAULT; } + + /* + * There's a small difference between creating the top, child and game mode windows + */ + flags = WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VISIBLE; + + if( window->Parent == NULL ) + flags |= WS_OVERLAPPEDWINDOW; + else + flags |= WS_CHILD; + } + else + { + /* + * In game mode, the story is a little bit different... + */ + g_assert( window->Parent == NULL ); + + /* + * Set the window creation flags appropriately to make the window entirely visible: + */ + flags = WS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VISIBLE; + } + + /* + * Create the window now, passing the freeglut window structure as the parameter + */ + window->Window.Handle = CreateWindow( + "FREEGLUT", + title, + flags, + x, y, w, h, + (HWND) window->Parent == NULL ? NULL : window->Parent->Window.Handle, + (HMENU) NULL, + fgDisplay.Instance, + (LPVOID) window + ); + + /* + * Make sure window was created + */ + g_assert( window->Window.Handle != NULL ); + + /* + * Show and update the main window. Hide the mouse cursor. + */ + ShowWindow( window->Window.Handle, fgState.ForceIconic ? SW_SHOWMINIMIZED : SW_SHOW ); + UpdateWindow( window->Window.Handle ); + ShowCursor( TRUE ); + +#endif + + /* + * Set the newly created window as the current one + */ + glutSetWindow( window->ID ); +} + +/* + * Closes a window, destroying the frame and OpenGL context + */ +void fgCloseWindow( SFG_Window* window ) +{ + freeglut_assert_ready; + +#if TARGET_HOST_UNIX_X11 + /* + * As easy as kill bunnies with axes. Destroy the context first: + */ + glXDestroyContext( fgDisplay.Display, window->Window.Context ); + + /* + * Then have the window killed: + */ + XDestroyWindow( fgDisplay.Display, window->Window.Handle ); + + /* + * Finally, flush the rests down the stream + */ + XFlush( fgDisplay.Display ); + +#elif TARGET_HOST_WIN32 + /* + * Send the WM_CLOSE message to the window now + */ + SendMessage( + window->Window.Handle, + WM_CLOSE, + 0, + 0 + ); + +#endif +} + + +/* -- INTERFACE FUNCTIONS -------------------------------------------------- */ + +/* + * Creates a new top-level freeglut window + */ +int FGAPIENTRY glutCreateWindow( const char* title ) +{ + /* + * Create a new window and return it's unique ID number + */ + return( fgCreateWindow( NULL, title, fgState.Position.X, fgState.Position.Y, + fgState.Size.X, fgState.Size.Y, FALSE )->ID ); +} + +/* + * This function creates a sub window. + */ +int FGAPIENTRY glutCreateSubWindow( int parentID, int x, int y, int w, int h ) +{ + SFG_Window* window = NULL; + SFG_Window* parent = NULL; + + freeglut_assert_ready; + + /* + * Find a parent to the newly created window... + */ + parent = fgWindowByID( parentID ); + + /* + * Fail if the parent has not been found + */ + g_return_val_if_fail( parent != NULL, 0 ); + + /* + * Create the new window + */ + window = fgCreateWindow( parent, "", x, y, w, h, FALSE ); + + /* + * Return the new window's ID + */ + return( window->ID ); +} + +/* + * Destroys a window and all of it's subwindows + */ +void FGAPIENTRY glutDestroyWindow( int windowID ) +{ + /* + * Grab the freeglut window pointer from the structure + */ + SFG_Window* window = fgWindowByID( windowID ); + freeglut_return_if_fail( window != NULL ); + + /* + * There is a function that performs all needed steps + * defined in freeglut_structure.c. Let's use it: + */ + fgDestroyWindow( window, TRUE ); +} + +/* + * This function selects the current window + */ +void FGAPIENTRY glutSetWindow( int ID ) +{ + SFG_Window* window = NULL; + + /* + * Make sure we don't get called too early + */ + freeglut_assert_ready; + + /* + * Be wise. Be wise. Be wise. Be quick. + */ + if( fgStructure.Window != NULL ) + if( fgStructure.Window->ID == ID ) + return; + + /* + * Now we are sure there is sense in looking for the window + */ + window = fgWindowByID( ID ); + + /* + * In the case of an utter failure... + */ + if( window == NULL ) + { + /* + * ...issue a warning message and keep rolling on + */ + g_warning( "glutSetWindow(): window ID %i not found!", ID ); + return; + } + +#if TARGET_HOST_UNIX_X11 + /* + * Make the selected window's GLX context the current one + */ + glXMakeCurrent( + fgDisplay.Display, + window->Window.Handle, + window->Window.Context + ); + +#elif TARGET_HOST_WIN32 + /* + * Release the previous' context's device context + */ + if( fgStructure.Window != NULL ) + ReleaseDC( fgStructure.Window->Window.Handle, fgStructure.Window->Window.Device ); + + /* + * We will care about releasing the device context later + */ + window->Window.Device = GetDC( window->Window.Handle ); + + /* + * Set the new current context: + */ + wglMakeCurrent( + window->Window.Device, + window->Window.Context + ); + +#endif + + /* + * Remember that we have changed the current window state + */ + fgStructure.Window = window; +} + +/* + * This function returns the ID number of the current window, 0 if none exists + */ +int FGAPIENTRY glutGetWindow( void ) +{ + freeglut_assert_ready; + + /* + * Do we have a current window selected? + */ + if( fgStructure.Window == NULL ) + { + /* + * Nope. Return zero to mark the state. + */ + return( 0 ); + } + + /* + * Otherwise, return the ID of the current window + */ + return( fgStructure.Window->ID ); +} + +/* + * This function makes the current window visible + */ +void FGAPIENTRY glutShowWindow( void ) +{ + freeglut_assert_ready; freeglut_assert_window; + +#if TARGET_HOST_UNIX_X11 + /* + * Showing the window is done via mapping under X + */ + XMapWindow( fgDisplay.Display, fgStructure.Window->Window.Handle ); + XFlush( fgDisplay.Display ); + +#elif TARGET_HOST_WIN32 + /* + * Restore the window's originial position and size + */ + ShowWindow( fgStructure.Window->Window.Handle, SW_SHOW ); + +#endif +} + +/* + * This function hides the current window + */ +void FGAPIENTRY glutHideWindow( void ) +{ + freeglut_assert_ready; freeglut_assert_window; + +#if TARGET_HOST_UNIX_X11 + /* + * The way we hide a window depends on if we're dealing + * with a top-level or children one... + */ + if( fgStructure.Window->Parent == NULL ) + { + /* + * This is a top-level window + */ + XWithdrawWindow( fgDisplay.Display, fgStructure.Window->Window.Handle, fgDisplay.Screen ); + } + else + { + /* + * Nope, it's a child window + */ + XUnmapWindow( fgDisplay.Display, fgStructure.Window->Window.Handle ); + } + + /* + * Flush the X state now + */ + XFlush( fgDisplay.Display ); + +#elif TARGET_HOST_WIN32 + /* + * Hide the window + */ + ShowWindow( fgStructure.Window->Window.Handle, SW_HIDE ); + +#endif +} + +/* + * Iconify the current window (top-level windows only) + */ +void FGAPIENTRY glutIconifyWindow( void ) +{ + freeglut_assert_ready; freeglut_assert_window; + +#if TARGET_HOST_UNIX_X11 + /* + * Iconify the window and flush the X state + */ + XIconifyWindow( fgDisplay.Display, fgStructure.Window->Window.Handle, fgDisplay.Screen ); + XFlush( fgDisplay.Display ); + +#elif TARGET_HOST_WIN32 + /* + * Minimize the current window (this should be the same as X window iconifying) + */ + ShowWindow( fgStructure.Window->Window.Handle, SW_MINIMIZE ); + +#endif +} + +/* + * Set the current window's title + */ +void FGAPIENTRY glutSetWindowTitle( char* title ) +{ + freeglut_assert_ready; freeglut_assert_window; + + /* + * Works only for top-level windows + */ + if( fgStructure.Window->Parent != NULL ) + return; + +#if TARGET_HOST_UNIX_X11 + { + XTextProperty text; + + /* + * Prepare the text properties + */ + text.value = (unsigned char *) title; + text.encoding = XA_STRING; + text.format = 8; + text.nitems = strlen( title ); + + /* + * Set the title now + */ + XSetWMName( + fgDisplay.Display, + fgStructure.Window->Window.Handle, + &text + ); + + /* + * Have the X display state flushed + */ + XFlush( fgDisplay.Display ); + } + +#elif TARGET_HOST_WIN32 + /* + * This seems to be a bit easier under Win32 + */ + SetWindowText( fgStructure.Window->Window.Handle, title ); + +#endif +} + +/* + * Set the current window's iconified title + */ +void FGAPIENTRY glutSetIconTitle( char* title ) +{ + freeglut_assert_ready; freeglut_assert_window; + + /* + * Works only for top-level windows + */ + if( fgStructure.Window->Parent != NULL ) + return; + +#if TARGET_HOST_UNIX_X11 + { + XTextProperty text; + + /* + * Prepare the text properties + */ + text.value = (unsigned char *) title; + text.encoding = XA_STRING; + text.format = 8; + text.nitems = strlen( title ); + + /* + * Set the title now + */ + XSetWMIconName( + fgDisplay.Display, + fgStructure.Window->Window.Handle, + &text + ); + + /* + * Have the X display state flushed + */ + XFlush( fgDisplay.Display ); + } + +#elif TARGET_HOST_WIN32 + /* + * This seems to be a bit easier under Win32 + */ + SetWindowText( fgStructure.Window->Window.Handle, title ); + +#endif +} + +/* + * Change the current window's size + */ +void FGAPIENTRY glutReshapeWindow( int width, int height ) +{ + freeglut_assert_ready; freeglut_assert_window; + +#if TARGET_HOST_UNIX_X11 + /* + * Resize the window and flush the X state + */ + XResizeWindow( fgDisplay.Display, fgStructure.Window->Window.Handle, width, height ); + XFlush( fgDisplay.Display ); + +#elif TARGET_HOST_WIN32 + { + RECT winRect; + + /* + * First off, grab the current window's position + */ + GetWindowRect( fgStructure.Window->Window.Handle, &winRect ); + + /* + * Resize the window, forcing a redraw to happen + */ + MoveWindow( + fgStructure.Window->Window.Handle, + winRect.left, + winRect.top, + width, + height, + TRUE + ); + } +#endif +} + +/* + * Change the current window's position + */ +void FGAPIENTRY glutPositionWindow( int x, int y ) +{ + freeglut_assert_ready; freeglut_assert_window; + +#if TARGET_HOST_UNIX_X11 + /* + * Reposition the window and flush the X state + */ + XMoveWindow( fgDisplay.Display, fgStructure.Window->Window.Handle, x, y ); + XFlush( fgDisplay.Display ); + +#elif TARGET_HOST_WIN32 + { + RECT winRect; + + /* + * First off, grab the current window's position + */ + GetWindowRect( fgStructure.Window->Window.Handle, &winRect ); + + /* + * Reposition the window, forcing a redraw to happen + */ + MoveWindow( + fgStructure.Window->Window.Handle, + x, + y, + winRect.right - winRect.left, + winRect.bottom - winRect.top, + TRUE + ); + } + +#endif +} + +/* + * Lowers the current window (by Z order change) + */ +void FGAPIENTRY glutPushWindow( void ) +{ + freeglut_assert_ready; freeglut_assert_window; + +#if TARGET_HOST_UNIX_X11 + /* + * Lower the current window + */ + XLowerWindow( fgDisplay.Display, fgStructure.Window->Window.Handle ); + +#elif TARGET_HOST_WIN32 + /* + * Set the new window's Z position, not affecting the rest of the settings: + */ + SetWindowPos( + fgStructure.Window->Window.Handle, + HWND_BOTTOM, + 0, 0, 0, 0, + SWP_NOSIZE | SWP_NOMOVE + ); + +#endif +} + +/* + * Raises the current window (by Z order change) + */ +void FGAPIENTRY glutPopWindow( void ) +{ + freeglut_assert_ready; freeglut_assert_window; + +#if TARGET_HOST_UNIX_X11 + /* + * Raise the current window + */ + XRaiseWindow( fgDisplay.Display, fgStructure.Window->Window.Handle ); + +#elif TARGET_HOST_WIN32 + /* + * Set the new window's Z position, not affecting the rest of the settings: + */ + SetWindowPos( + fgStructure.Window->Window.Handle, + HWND_TOP, + 0, 0, 0, 0, + SWP_NOSIZE | SWP_NOMOVE + ); + +#endif +} + +/* + * Resize the current window so that it fits the whole screen + */ +void FGAPIENTRY glutFullScreen( void ) +{ + freeglut_assert_ready; freeglut_assert_window; + + /* + * Just have the window repositioned and resized + */ + glutPositionWindow( 0, 0 ); + + glutReshapeWindow( + fgDisplay.ScreenWidth, + fgDisplay.ScreenHeight + ); +} + +/*** END OF FILE ***/ + + + + + + + + + diff --git a/freeglut/freeglut/freeglut-1.3/templates/cpp_template b/freeglut/freeglut/freeglut-1.3/templates/cpp_template new file mode 100644 index 0000000..9d4d4fa --- /dev/null +++ b/freeglut/freeglut/freeglut-1.3/templates/cpp_template @@ -0,0 +1,17 @@ +INVALID TEMPLATE, MOVED TO XFREE86-STYLE LICENSE + +/* + * |FILENAME| + * + * Here comes the file's contents description. + * + * Copyright (c) |YEAR| by |AUTHOR| + * Written by |AUTHOR|, <|EMAIL|> + * Creation date: |DATE| + * + * 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. + */ + diff --git a/freeglut/freeglut/freeglut-1.3/templates/header_template b/freeglut/freeglut/freeglut-1.3/templates/header_template new file mode 100644 index 0000000..9d4d4fa --- /dev/null +++ b/freeglut/freeglut/freeglut-1.3/templates/header_template @@ -0,0 +1,17 @@ +INVALID TEMPLATE, MOVED TO XFREE86-STYLE LICENSE + +/* + * |FILENAME| + * + * Here comes the file's contents description. + * + * Copyright (c) |YEAR| by |AUTHOR| + * Written by |AUTHOR|, <|EMAIL|> + * Creation date: |DATE| + * + * 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. + */ + diff --git a/freeglut/freeglut/freeglut.dsw b/freeglut/freeglut/freeglut.dsw new file mode 100755 index 0000000..1040dd6 --- /dev/null +++ b/freeglut/freeglut/freeglut.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 5.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "freeglut13"=.\freeglut13.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/freeglut/freeglut/freeglut.kdevprj b/freeglut/freeglut/freeglut.kdevprj new file mode 100644 index 0000000..88edf33 --- /dev/null +++ b/freeglut/freeglut/freeglut.kdevprj @@ -0,0 +1,176 @@ +# KDE Config File +[include/freeglut.h] +install_location= +dist=true +install=false +type=HEADER +[include/Makefile.am] +files=include/GL/freeglut.h,include/GL/freeglut_internal.h, +sub_dirs= +type=normal +[Workspace_1] +openfiles=Nienazwany.h,Nienazwany.cpp,/home/olszta/freeglut/include/GL/freeglut_internal.h,/home/olszta/freeglut/freeglut-1.3/freeglut_callbacks.c,/home/olszta/freeglut/freeglut-1.3/freeglut_gamemode.c,/home/olszta/freeglut/freeglut-1.3/freeglut_init.c,/home/olszta/freeglut/freeglut-1.3/freeglut_main.c,/home/olszta/freeglut/freeglut-1.3/freeglut_window.c,/home/olszta/freeglut/freeglut-1.3/freeglut_misc.c,/home/olszta/freeglut/include/GL/freeglut.h,/home/olszta/freeglut/freeglut-1.3/freeglut_cursor.c,/home/olszta/freeglut/freeglut-1.3/freeglut_geometry.c,/home/olszta/freeglut/freeglut-1.3/freeglut_font_data.c,/home/olszta/freeglut/freeglut-1.3/freeglut_videoresize.c,/home/olszta/freeglut/freeglut-1.3/freeglut_teapot.c,/home/olszta/freeglut/freeglut-1.3/freeglut_structure.c,/home/olszta/freeglut/freeglut-1.3/freeglut_state.c, +show_outputview=true +show_treeview=true +header_file=/home/olszta/freeglut/include/GL/freeglut.h +cpp_file=/home/olszta/freeglut/freeglut-1.3/freeglut_state.c +browser_file=file:/usr/doc/kde/HTML/default/kdevelop/welcome/index.html +[COPYING] +install_location= +dist=true +install=false +type=DATA +[freeglut-1.3/freeglut_videoresize.c] +install_location= +dist=true +install=false +type=SOURCE +[freeglut-1.3/docs/Makefile.am] +type=normal +sub_dirs= +[Config for BinMakefileAm] +ldflags= +bin_program=freeglut +cxxflags=-O0 -g3 -Wall +[po/Makefile.am] +type=po +sub_dirs= +[freeglut-1.3/Makefile.am] +files=freeglut-1.3/freeglut_callbacks.c,freeglut-1.3/freeglut_cursor.c,freeglut-1.3/freeglut_display.c,freeglut-1.3/freeglut_font.c,freeglut-1.3/freeglut_font_data.c,freeglut-1.3/freeglut_gamemode.c,freeglut-1.3/freeglut_geometry.c,freeglut-1.3/freeglut_init.c,freeglut-1.3/freeglut_joystick.c,freeglut-1.3/freeglut_main.c,freeglut-1.3/freeglut_menu.c,freeglut-1.3/freeglut_misc.c,freeglut-1.3/freeglut_overlay.c,freeglut-1.3/freeglut_state.c,freeglut-1.3/freeglut_structure.c,freeglut-1.3/freeglut_teapot.c,freeglut-1.3/freeglut_videoresize.c,freeglut-1.3/freeglut_window.c, +type=prog_main +sub_dirs= +[freeglut.kdevprj] +install_location= +dist=true +install=false +type=DATA +[README] +install_location= +dist=true +install=false +type=DATA +[freeglut-1.3/freeglut_gamemode.c] +install_location= +dist=true +install=false +type=SOURCE +[freeglut-1.3/freeglut_menu.c] +install_location= +dist=true +install=false +type=SOURCE +[LFV Groups] +GNU=AUTHORS,COPYING,ChangeLog,INSTALL,README,TODO,NEWS, +Others=*, +groups=Headers,Sources,GNU,Others, +Sources=*.cpp,*.c,*.cc,*.C,*.cxx,*.ec,*.ecpp,*.lxx,*.l++,*.ll,*.l, +Headers=*.h,*.hxx,*.hpp,*.H, +[freeglut-1.3/docs/en/Makefile.am] +type=normal +sub_dirs= +[freeglut-1.3/freeglut_font.c] +install_location= +dist=true +install=false +type=SOURCE +[freeglut-1.3/freeglut_window.c] +install_location= +dist=true +install=false +type=SOURCE +[freeglut-1.3/freeglut_main.c] +install_location= +dist=true +install=false +type=SOURCE +[freeglut-1.3/freeglut_state.c] +install_location= +dist=true +install=false +type=SOURCE +[freeglut-1.3/freeglut_callbacks.c] +install_location= +dist=true +install=false +type=SOURCE +[include/GL/freeglut_internal.h] +install_location= +dist=true +install=false +type=HEADER +[freeglut-1.3/freeglut_structure.c] +install_location= +dist=true +install=false +type=SOURCE +[ChangeLog] +install_location= +dist=true +install=false +type=DATA +[freeglut-1.3/freeglut_geometry.c] +install_location= +dist=true +install=false +type=SOURCE +[General] +makefiles=Makefile.am,freeglut-1.3/Makefile.am,freeglut-1.3/docs/Makefile.am,freeglut-1.3/docs/en/Makefile.am,po/Makefile.am,include/Makefile.am, +version_control=None +project_type=normal_empty +author=Pawel W. Olszta +sub_dir=freeglut-1.3/ +lfv_open_groups=Headers,Sources, +workspace=1 +project_name=freeglut +version=0.1 +email=olszta@sourceforge.net +kdevprj_version=1.0beta2 +[INSTALL] +install_location= +dist=true +install=false +type=DATA +[TODO] +install_location= +dist=true +install=false +type=DATA +[freeglut-1.3/freeglut_init.c] +install_location= +dist=true +install=false +type=SOURCE +[freeglut-1.3/freeglut_display.c] +install_location= +dist=true +install=false +type=SOURCE +[freeglut-1.3/freeglut_overlay.c] +install_location= +dist=true +install=false +type=SOURCE +[freeglut.lsm] +install_location= +dist=true +install=false +type=DATA +[freeglut-1.3/freeglut_misc.c] +install_location= +dist=true +install=false +type=SOURCE +[Makefile.am] +files=freeglut.kdevprj,AUTHORS,COPYING,ChangeLog,INSTALL,README,TODO,freeglut.lsm, +type=normal +sub_dirs=freeglut-1.3,include, +[freeglut-1.3/freeglut_cursor.c] +install_location= +dist=true +install=false +type=SOURCE +[AUTHORS] +install_location= +dist=true +install=false +type=DATA diff --git a/freeglut/freeglut/freeglut.lsm b/freeglut/freeglut/freeglut.lsm new file mode 100644 index 0000000..ccefe17 --- /dev/null +++ b/freeglut/freeglut/freeglut.lsm @@ -0,0 +1,14 @@ +Begin3 +Title: freeglut-1.3 +Version: 0.1 alpha +Entered-date: +Description: The free OpenGL utility toolkit, alternative to the GLUT library +Keywords: +Author: Pawel W. Olszta +Maintained-by: Pawel W. Olszta +Primary-site: http://freeglut.sourceforge.net +Home-page: http://freeglut.sourceforge.net +Original-site: +Platforms: Linux and other Unices +Copying-policy: X-Consortium style license +End diff --git a/freeglut/freeglut/freeglut13.dsp b/freeglut/freeglut/freeglut13.dsp new file mode 100755 index 0000000..c585da1 --- /dev/null +++ b/freeglut/freeglut/freeglut13.dsp @@ -0,0 +1,178 @@ +# Microsoft Developer Studio Project File - Name="freeglut13" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=freeglut13 - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "freeglut13.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "freeglut13.mak" CFG="freeglut13 - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "freeglut13 - Win32 Release" (based on\ + "Win32 (x86) Dynamic-Link Library") +!MESSAGE "freeglut13 - Win32 Debug" (based on\ + "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "freeglut13 - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +# ADD BASE RSC /l 0x415 /d "NDEBUG" +# ADD RSC /l 0x415 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 + +!ELSEIF "$(CFG)" == "freeglut13 - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 +# ADD BASE RSC /l 0x415 /d "_DEBUG" +# ADD RSC /l 0x415 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "freeglut13 - Win32 Release" +# Name "freeglut13 - Win32 Debug" +# Begin Group "Sources" + +# PROP Default_Filter "*.c" +# Begin Source File + +SOURCE=".\freeglut-1.3\freeglut_callbacks.c" +# End Source File +# Begin Source File + +SOURCE=".\freeglut-1.3\freeglut_cursor.c" +# End Source File +# Begin Source File + +SOURCE=".\freeglut-1.3\freeglut_display.c" +# End Source File +# Begin Source File + +SOURCE=".\freeglut-1.3\freeglut_font.c" +# End Source File +# Begin Source File + +SOURCE=".\freeglut-1.3\freeglut_font_data.c" +# End Source File +# Begin Source File + +SOURCE=".\freeglut-1.3\freeglut_gamemode.c" +# End Source File +# Begin Source File + +SOURCE=".\freeglut-1.3\freeglut_geometry.c" +# End Source File +# Begin Source File + +SOURCE=".\freeglut-1.3\freeglut_init.c" +# End Source File +# Begin Source File + +SOURCE=".\freeglut-1.3\freeglut_joystick.c" +# End Source File +# Begin Source File + +SOURCE=".\freeglut-1.3\freeglut_main.c" +# End Source File +# Begin Source File + +SOURCE=".\freeglut-1.3\freeglut_menu.c" +# End Source File +# Begin Source File + +SOURCE=".\freeglut-1.3\freeglut_misc.c" +# End Source File +# Begin Source File + +SOURCE=".\freeglut-1.3\freeglut_overlay.c" +# End Source File +# Begin Source File + +SOURCE=".\freeglut-1.3\freeglut_state.c" +# End Source File +# Begin Source File + +SOURCE=".\freeglut-1.3\freeglut_structure.c" +# End Source File +# Begin Source File + +SOURCE=".\freeglut-1.3\freeglut_teapot.c" +# End Source File +# Begin Source File + +SOURCE=".\freeglut-1.3\freeglut_videoresize.c" +# End Source File +# Begin Source File + +SOURCE=".\freeglut-1.3\freeglut_window.c" +# End Source File +# End Group +# Begin Group "Headers" + +# PROP Default_Filter "*.h" +# Begin Source File + +SOURCE=.\include\Gl\freeglut.h +# End Source File +# Begin Source File + +SOURCE=.\include\Gl\freeglut_internal.h +# End Source File +# End Group +# End Target +# End Project diff --git a/freeglut/freeglut/freeglut13.plg b/freeglut/freeglut/freeglut13.plg new file mode 100755 index 0000000..f8c5ceb --- /dev/null +++ b/freeglut/freeglut/freeglut13.plg @@ -0,0 +1,49 @@ +--------------------Configuration: freeglut13 - Win32 Debug-------------------- +Begining build with project "c:\project\freeglut\freeglut13.dsp", at root. +Active configuration is Win32 (x86) Dynamic-Link Library (based on Win32 (x86) Dynamic-Link Library) + +Project's tools are: + "32-bit C/C++ Compiler for 80x86" with flags "/nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /Fp"Debug/freeglut13.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /c " + "OLE Type Library Maker" with flags "/nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 " + "Win32 Resource Compiler" with flags "/l 0x415 /d "_DEBUG" " + "Browser Database Maker" with flags "/nologo /o"Debug/freeglut13.bsc" " + "COFF Linker for 80x86" with flags "kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /incremental:yes /pdb:"Debug/freeglut13.pdb" /debug /machine:I386 /out:"Debug/freeglut13.dll" /implib:"Debug/freeglut13.lib" /pdbtype:sept " + "Custom Build" with flags "" + "" with flags "" + +Creating temp file "C:\WINDOWS\TEMP\RSP170.TMP" with contents +Creating command line "cl.exe @C:\WINDOWS\TEMP\RSP170.TMP" +Creating temp file "C:\WINDOWS\TEMP\RSP0171.TMP" with contents +Creating command line "link.exe @C:\WINDOWS\TEMP\RSP0171.TMP" +Compiling... +freeglut_display.c +freeglut_font.c +C:\Project\freeglut\freeglut-1.3\freeglut_font.c(133) : fatal error C1189: #error : glPushClientAttrib declaration missing +freeglut_main.c +Error executing cl.exe. + + + +freeglut13.dll - 1 error(s), 0 warning(s) diff --git a/freeglut/freeglut/genfonts/.deps/genfonts.P b/freeglut/freeglut/genfonts/.deps/genfonts.P new file mode 100644 index 0000000..ea9c815 --- /dev/null +++ b/freeglut/freeglut/genfonts/.deps/genfonts.P @@ -0,0 +1,64 @@ +genfonts.o: genfonts.c ../config.h /usr/include/X11/Xlib.h \ + /usr/include/sys/types.h /usr/include/features.h \ + /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \ + /usr/include/bits/types.h \ + /usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/stddef.h \ + /usr/include/time.h /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/sys/sysmacros.h \ + /usr/include/X11/X.h /usr/include/X11/Xfuncproto.h \ + /usr/include/X11/Xosdefs.h /usr/include/X11/Xutil.h \ + /usr/include/glib.h /usr/include/glibconfig.h \ + /usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/limits.h \ + /usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h \ + /usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/float.h \ + /usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/stdarg.h \ + /usr/include/string.h /usr/include/bits/string.h \ + /usr/include/bits/string2.h /usr/include/stdlib.h \ + /usr/include/alloca.h /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/bits/stdio_lim.h \ + /usr/include/bits/stdio.h +genfonts.c : +../config.h : +/usr/include/X11/Xlib.h : +/usr/include/sys/types.h : +/usr/include/features.h : +/usr/include/sys/cdefs.h : +/usr/include/gnu/stubs.h : +/usr/include/bits/types.h : +/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/stddef.h : +/usr/include/time.h : +/usr/include/endian.h : +/usr/include/bits/endian.h : +/usr/include/sys/select.h : +/usr/include/bits/select.h : +/usr/include/bits/sigset.h : +/usr/include/sys/sysmacros.h : +/usr/include/X11/X.h : +/usr/include/X11/Xfuncproto.h : +/usr/include/X11/Xosdefs.h : +/usr/include/X11/Xutil.h : +/usr/include/glib.h : +/usr/include/glibconfig.h : +/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/limits.h : +/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/syslimits.h : +/usr/include/limits.h : +/usr/include/bits/posix1_lim.h : +/usr/include/bits/local_lim.h : +/usr/include/linux/limits.h : +/usr/include/bits/posix2_lim.h : +/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/float.h : +/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/stdarg.h : +/usr/include/string.h : +/usr/include/bits/string.h : +/usr/include/bits/string2.h : +/usr/include/stdlib.h : +/usr/include/alloca.h : +/usr/include/stdio.h : +/usr/include/libio.h : +/usr/include/_G_config.h : +/usr/include/bits/stdio_lim.h : +/usr/include/bits/stdio.h : diff --git a/freeglut/freeglut/genfonts/.deps/genstroke.P b/freeglut/freeglut/genfonts/.deps/genstroke.P new file mode 100644 index 0000000..14ed4de --- /dev/null +++ b/freeglut/freeglut/genfonts/.deps/genstroke.P @@ -0,0 +1,57 @@ +genstroke.o: genstroke.c ../config.h /usr/include/glib.h \ + /usr/include/glibconfig.h \ + /usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/limits.h \ + /usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/syslimits.h \ + /usr/include/limits.h /usr/include/features.h \ + /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \ + /usr/include/bits/posix1_lim.h /usr/include/bits/local_lim.h \ + /usr/include/linux/limits.h /usr/include/bits/posix2_lim.h \ + /usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/float.h \ + /usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/stdarg.h \ + /usr/include/string.h \ + /usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/stddef.h \ + /usr/include/bits/string.h /usr/include/bits/string2.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/types.h /usr/include/stdlib.h \ + /usr/include/sys/types.h /usr/include/time.h \ + /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/sys/sysmacros.h \ + /usr/include/alloca.h /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/bits/stdio_lim.h \ + /usr/include/bits/stdio.h +genstroke.c : +../config.h : +/usr/include/glib.h : +/usr/include/glibconfig.h : +/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/limits.h : +/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/syslimits.h : +/usr/include/limits.h : +/usr/include/features.h : +/usr/include/sys/cdefs.h : +/usr/include/gnu/stubs.h : +/usr/include/bits/posix1_lim.h : +/usr/include/bits/local_lim.h : +/usr/include/linux/limits.h : +/usr/include/bits/posix2_lim.h : +/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/float.h : +/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/stdarg.h : +/usr/include/string.h : +/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/stddef.h : +/usr/include/bits/string.h : +/usr/include/bits/string2.h : +/usr/include/endian.h : +/usr/include/bits/endian.h : +/usr/include/bits/types.h : +/usr/include/stdlib.h : +/usr/include/sys/types.h : +/usr/include/time.h : +/usr/include/sys/select.h : +/usr/include/bits/select.h : +/usr/include/bits/sigset.h : +/usr/include/sys/sysmacros.h : +/usr/include/alloca.h : +/usr/include/stdio.h : +/usr/include/libio.h : +/usr/include/_G_config.h : +/usr/include/bits/stdio_lim.h : +/usr/include/bits/stdio.h : diff --git a/freeglut/freeglut/genfonts/Makefile b/freeglut/freeglut/genfonts/Makefile new file mode 100644 index 0000000..5e81687 --- /dev/null +++ b/freeglut/freeglut/genfonts/Makefile @@ -0,0 +1,352 @@ +# Generated automatically from Makefile.in by configure. +# Makefile.in generated automatically by automake 1.4 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + +SHELL = /bin/sh + +srcdir = . +top_srcdir = .. +prefix = /usr/local +exec_prefix = ${prefix} + +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 +infodir = ${prefix}/info +mandir = ${prefix}/man +includedir = ${prefix}/include +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/freeglut +pkglibdir = $(libdir)/freeglut +pkgincludedir = $(includedir)/freeglut + +top_builddir = .. + +ACLOCAL = aclocal +AUTOCONF = autoconf +AUTOMAKE = automake +AUTOHEADER = autoheader + +INSTALL = /usr/bin/ginstall -c +INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_SCRIPT = ${INSTALL_PROGRAM} +transform = s,x,x, + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = i686-suse-linux +host_triplet = i686-suse-linux-gnu +AS = @AS@ +CC = gcc +DLLTOOL = @DLLTOOL@ +EXEEXT = +LIBM = -lm +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIBTOOL_DEPS = ./ltconfig ./ltmain.sh +LN_S = ln -s +MAKEINFO = makeinfo +OBJDUMP = @OBJDUMP@ +PACKAGE = freeglut +RANLIB = ranlib +VERSION = 0.1 + +bin_PROGRAMS = genfonts genstroke +genfonts_SOURCES = genfonts.c +genstroke_SOURCES = genstroke.c +genfonts_LDADD = -L/usr/X11R6/lib -lglib -lX11 -lXext +genstroke_LDADD = -lglib +EXTRA_DIST = genfonts.c genstroke.c +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = +bin_PROGRAMS = genfonts$(EXEEXT) genstroke$(EXEEXT) +PROGRAMS = $(bin_PROGRAMS) + + +DEFS = -DHAVE_CONFIG_H -I. -I$(srcdir) -I.. +CPPFLAGS = +LDFLAGS = +LIBS = +genfonts_OBJECTS = genfonts.o +genfonts_DEPENDENCIES = +genfonts_LDFLAGS = +genstroke_OBJECTS = genstroke.o +genstroke_DEPENDENCIES = +genstroke_LDFLAGS = +CFLAGS = -g -O2 +COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ +DIST_COMMON = Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP_ENV = --best +DEP_FILES = .deps/genfonts.P .deps/genstroke.P +SOURCES = $(genfonts_SOURCES) $(genstroke_SOURCES) +OBJECTS = $(genfonts_OBJECTS) $(genstroke_OBJECTS) + +all: all-redirect +.SUFFIXES: +.SUFFIXES: .S .c .lo .o .s +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --gnu genfonts/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +mostlyclean-binPROGRAMS: + +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) + +distclean-binPROGRAMS: + +maintainer-clean-binPROGRAMS: + +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(bindir) + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + if test -f $$p; then \ + echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \ + $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ + else :; fi; \ + done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + list='$(bin_PROGRAMS)'; for p in $$list; do \ + rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ + done + +.s.o: + $(COMPILE) -c $< + +.S.o: + $(COMPILE) -c $< + +mostlyclean-compile: + -rm -f *.o core *.core + +clean-compile: + +distclean-compile: + -rm -f *.tab.c + +maintainer-clean-compile: + +.s.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.S.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + +maintainer-clean-libtool: + +genfonts$(EXEEXT): $(genfonts_OBJECTS) $(genfonts_DEPENDENCIES) + @rm -f genfonts$(EXEEXT) + $(LINK) $(genfonts_LDFLAGS) $(genfonts_OBJECTS) $(genfonts_LDADD) $(LIBS) + +genstroke$(EXEEXT): $(genstroke_OBJECTS) $(genstroke_DEPENDENCIES) + @rm -f genstroke$(EXEEXT) + $(LINK) $(genstroke_LDFLAGS) $(genstroke_OBJECTS) $(genstroke_LDADD) $(LIBS) + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = genfonts + +distdir: $(DISTFILES) + here=`cd $(top_builddir) && pwd`; \ + top_distdir=`cd $(top_distdir) && pwd`; \ + distdir=`cd $(distdir) && pwd`; \ + cd $(top_srcdir) \ + && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu genfonts/Makefile + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done + +DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) + +-include $(DEP_FILES) + +mostlyclean-depend: + +clean-depend: + +distclean-depend: + -rm -rf .deps + +maintainer-clean-depend: + +%.o: %.c + @echo '$(COMPILE) -c $<'; \ + $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-cp .deps/$(*F).pp .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm .deps/$(*F).pp + +%.lo: %.c + @echo '$(LTCOMPILE) -c $<'; \ + $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ + < .deps/$(*F).pp > .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm -f .deps/$(*F).pp +info-am: +info: info-am +dvi-am: +dvi: dvi-am +check-am: all-am +check: check-am +installcheck-am: +installcheck: installcheck-am +install-exec-am: install-binPROGRAMS +install-exec: install-exec-am + +install-data-am: +install-data: install-data-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-am +uninstall-am: uninstall-binPROGRAMS +uninstall: uninstall-am +all-am: Makefile $(PROGRAMS) +all-redirect: all-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: + $(mkinstalldirs) $(DESTDIR)$(bindir) + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-binPROGRAMS mostlyclean-compile \ + mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ + mostlyclean-generic + +mostlyclean: mostlyclean-am + +clean-am: clean-binPROGRAMS clean-compile clean-libtool clean-tags \ + clean-depend clean-generic mostlyclean-am + +clean: clean-am + +distclean-am: distclean-binPROGRAMS distclean-compile distclean-libtool \ + distclean-tags distclean-depend distclean-generic \ + clean-am + -rm -f libtool + +distclean: distclean-am + +maintainer-clean-am: maintainer-clean-binPROGRAMS \ + maintainer-clean-compile maintainer-clean-libtool \ + maintainer-clean-tags maintainer-clean-depend \ + maintainer-clean-generic distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-am + +.PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \ +maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \ +mostlyclean-compile distclean-compile clean-compile \ +maintainer-clean-compile mostlyclean-libtool distclean-libtool \ +clean-libtool maintainer-clean-libtool tags mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir \ +mostlyclean-depend distclean-depend clean-depend \ +maintainer-clean-depend info-am info dvi-am dvi check check-am \ +installcheck-am installcheck install-exec-am install-exec \ +install-data-am install-data install-am install uninstall-am uninstall \ +all-redirect all-am all installdirs mostlyclean-generic \ +distclean-generic clean-generic maintainer-clean-generic clean \ +mostlyclean distclean maintainer-clean + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/freeglut/freeglut/genfonts/Makefile.am b/freeglut/freeglut/genfonts/Makefile.am new file mode 100644 index 0000000..e698fc4 --- /dev/null +++ b/freeglut/freeglut/genfonts/Makefile.am @@ -0,0 +1,8 @@ +## Process this file with automake to produce Makefile.im + +bin_PROGRAMS = genfonts genstroke +genfonts_SOURCES = genfonts.c +genstroke_SOURCES = genstroke.c +genfonts_LDADD = -L/usr/X11R6/lib -lglib -lX11 -lXext +genstroke_LDADD = -lglib +EXTRA_DIST = genfonts.c genstroke.c diff --git a/freeglut/freeglut/genfonts/Makefile.in b/freeglut/freeglut/genfonts/Makefile.in new file mode 100644 index 0000000..22e90e4 --- /dev/null +++ b/freeglut/freeglut/genfonts/Makefile.in @@ -0,0 +1,352 @@ +# Makefile.in generated automatically by automake 1.4 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +AS = @AS@ +CC = @CC@ +DLLTOOL = @DLLTOOL@ +EXEEXT = @EXEEXT@ +LIBM = @LIBM@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_DEPS = @LIBTOOL_DEPS@ +LN_S = @LN_S@ +MAKEINFO = @MAKEINFO@ +OBJDUMP = @OBJDUMP@ +PACKAGE = @PACKAGE@ +RANLIB = @RANLIB@ +VERSION = @VERSION@ + +bin_PROGRAMS = genfonts genstroke +genfonts_SOURCES = genfonts.c +genstroke_SOURCES = genstroke.c +genfonts_LDADD = -L/usr/X11R6/lib -lglib -lX11 -lXext +genstroke_LDADD = -lglib +EXTRA_DIST = genfonts.c genstroke.c +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = +bin_PROGRAMS = genfonts$(EXEEXT) genstroke$(EXEEXT) +PROGRAMS = $(bin_PROGRAMS) + + +DEFS = @DEFS@ -I. -I$(srcdir) -I.. +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +genfonts_OBJECTS = genfonts.o +genfonts_DEPENDENCIES = +genfonts_LDFLAGS = +genstroke_OBJECTS = genstroke.o +genstroke_DEPENDENCIES = +genstroke_LDFLAGS = +CFLAGS = @CFLAGS@ +COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ +DIST_COMMON = Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP_ENV = --best +DEP_FILES = .deps/genfonts.P .deps/genstroke.P +SOURCES = $(genfonts_SOURCES) $(genstroke_SOURCES) +OBJECTS = $(genfonts_OBJECTS) $(genstroke_OBJECTS) + +all: all-redirect +.SUFFIXES: +.SUFFIXES: .S .c .lo .o .s +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --gnu genfonts/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +mostlyclean-binPROGRAMS: + +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) + +distclean-binPROGRAMS: + +maintainer-clean-binPROGRAMS: + +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(bindir) + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + if test -f $$p; then \ + echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \ + $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ + else :; fi; \ + done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + list='$(bin_PROGRAMS)'; for p in $$list; do \ + rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ + done + +.s.o: + $(COMPILE) -c $< + +.S.o: + $(COMPILE) -c $< + +mostlyclean-compile: + -rm -f *.o core *.core + +clean-compile: + +distclean-compile: + -rm -f *.tab.c + +maintainer-clean-compile: + +.s.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.S.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + +maintainer-clean-libtool: + +genfonts$(EXEEXT): $(genfonts_OBJECTS) $(genfonts_DEPENDENCIES) + @rm -f genfonts$(EXEEXT) + $(LINK) $(genfonts_LDFLAGS) $(genfonts_OBJECTS) $(genfonts_LDADD) $(LIBS) + +genstroke$(EXEEXT): $(genstroke_OBJECTS) $(genstroke_DEPENDENCIES) + @rm -f genstroke$(EXEEXT) + $(LINK) $(genstroke_LDFLAGS) $(genstroke_OBJECTS) $(genstroke_LDADD) $(LIBS) + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = genfonts + +distdir: $(DISTFILES) + here=`cd $(top_builddir) && pwd`; \ + top_distdir=`cd $(top_distdir) && pwd`; \ + distdir=`cd $(distdir) && pwd`; \ + cd $(top_srcdir) \ + && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu genfonts/Makefile + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done + +DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) + +-include $(DEP_FILES) + +mostlyclean-depend: + +clean-depend: + +distclean-depend: + -rm -rf .deps + +maintainer-clean-depend: + +%.o: %.c + @echo '$(COMPILE) -c $<'; \ + $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-cp .deps/$(*F).pp .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm .deps/$(*F).pp + +%.lo: %.c + @echo '$(LTCOMPILE) -c $<'; \ + $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ + < .deps/$(*F).pp > .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm -f .deps/$(*F).pp +info-am: +info: info-am +dvi-am: +dvi: dvi-am +check-am: all-am +check: check-am +installcheck-am: +installcheck: installcheck-am +install-exec-am: install-binPROGRAMS +install-exec: install-exec-am + +install-data-am: +install-data: install-data-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-am +uninstall-am: uninstall-binPROGRAMS +uninstall: uninstall-am +all-am: Makefile $(PROGRAMS) +all-redirect: all-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: + $(mkinstalldirs) $(DESTDIR)$(bindir) + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-binPROGRAMS mostlyclean-compile \ + mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ + mostlyclean-generic + +mostlyclean: mostlyclean-am + +clean-am: clean-binPROGRAMS clean-compile clean-libtool clean-tags \ + clean-depend clean-generic mostlyclean-am + +clean: clean-am + +distclean-am: distclean-binPROGRAMS distclean-compile distclean-libtool \ + distclean-tags distclean-depend distclean-generic \ + clean-am + -rm -f libtool + +distclean: distclean-am + +maintainer-clean-am: maintainer-clean-binPROGRAMS \ + maintainer-clean-compile maintainer-clean-libtool \ + maintainer-clean-tags maintainer-clean-depend \ + maintainer-clean-generic distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-am + +.PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \ +maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \ +mostlyclean-compile distclean-compile clean-compile \ +maintainer-clean-compile mostlyclean-libtool distclean-libtool \ +clean-libtool maintainer-clean-libtool tags mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir \ +mostlyclean-depend distclean-depend clean-depend \ +maintainer-clean-depend info-am info dvi-am dvi check check-am \ +installcheck-am installcheck install-exec-am install-exec \ +install-data-am install-data install-am install uninstall-am uninstall \ +all-redirect all-am all installdirs mostlyclean-generic \ +distclean-generic clean-generic maintainer-clean-generic clean \ +mostlyclean distclean maintainer-clean + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/freeglut/freeglut/genfonts/Roman.src b/freeglut/freeglut/genfonts/Roman.src new file mode 100644 index 0000000..f1e3fce --- /dev/null +++ b/freeglut/freeglut/genfonts/Roman.src @@ -0,0 +1,603 @@ +## +# $XConsortium: Roman.src,v 5.3 94/04/17 20:10:05 rws Exp $ +## +## Copyright (c) 1989,1990, 1991 by Sun Microsystems, Inc. and the X Consortium. +## +## All Rights Reserved +## +## Permission to use, copy, modify, and distribute this software and its +## documentation for any purpose and without fee is hereby granted, +## provided that the above copyright notice appear in all copies and that +## both that copyright notice and this permission notice appear in +## supporting documentation, and that the names of Sun Microsystems +## and the X Consortium not be used in advertising or publicity +## pertaining to distribution of the software without specific, written +## prior permission. +## +## SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +## INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +## EVENT SHALL SUN MICROSYSTEMS OR THE X CONSORTIUM BE LIABLE FOR ANY SPECIAL, +## INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING +## FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +## NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION +## WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# Roman Simplex font. + + FONTNAME Roman + TOP 119.0476 + BOTTOM -33.3333 + NUM_CH 128 + PROPERTIES 3 + + (CHARSET_REGISTRY ISO8859) + (CHARSET_ENCODING "1") + (SPACING P) + +INDEX 32 STROKE 0 CENTER 52.3810 RIGHT 104.7619 +INDEX 33 STROKE 2 CENTER 4.7619 RIGHT 9.5238 + OPEN 2 (4.7619 100.0000) (4.7619 33.3333) + OPEN 5 (4.7619 9.5238) (0.0000 4.7619) (4.7619 0.0000) + (9.5238 4.7619) (4.7619 9.5238) +INDEX 34 STROKE 2 CENTER 19.0476 RIGHT 38.0952 + OPEN 2 (0.0000 100.0000) (0.0000 66.6667) + OPEN 2 (38.0952 100.0000) (38.0952 66.6667) +INDEX 35 STROKE 4 CENTER 33.3333 RIGHT 71.4286 + OPEN 2 (38.0952 119.0476) (4.7619 -33.3333) + OPEN 2 (66.6667 119.0476) (33.3333 -33.3333) + OPEN 2 (4.7619 57.1429) (71.4286 57.1429) + OPEN 2 (0.0000 28.5714) (66.6667 28.5714) +INDEX 36 STROKE 3 CENTER 33.3333 RIGHT 66.6667 + OPEN 2 (23.8095 119.0476) (23.8095 -19.0476) + OPEN 2 (42.8571 119.0476) (42.8571 -19.0476) + OPEN 20 (66.6667 85.7143) (57.1429 95.2381) (42.8571 100.0000) + (23.8095 100.0000) (9.5238 95.2381) (0.0000 85.7143) (0.0000 76.1905) + (4.7619 66.6667) (9.5238 61.9048) (19.0476 57.1429) (47.6190 47.6190) + (57.1429 42.8571) (61.9048 38.0952) (66.6667 28.5714) (66.6667 14.2857) + (57.1429 4.7619) (42.8571 0.0000) (23.8095 0.0000) (9.5238 4.7619) + (0.0000 14.2857) +INDEX 37 STROKE 3 CENTER 42.8571 RIGHT 85.7143 + OPEN 2 (85.7143 100.0000) (0.0000 0.0000) + OPEN 16 (23.8095 100.0000) (33.3333 90.4762) (33.3333 80.9524) + (28.5714 71.4286) (19.0476 66.6667) (9.5238 66.6667) (0.0000 76.1905) + (0.0000 85.7143) (4.7619 95.2381) (14.2857 100.0000) (23.8095 100.0000) + (33.3333 95.2381) (47.6190 90.4762) (61.9048 90.4762) (76.1905 95.2381) + (85.7143 100.0000) + OPEN 11 (66.6667 33.3333) (57.1429 28.5714) (52.3810 19.0476) + (52.3810 9.5238) (61.9048 0.0000) (71.4286 0.0000) (80.9524 4.7619) + (85.7143 14.2857) (85.7143 23.8095) (76.1905 33.3333) (66.6667 33.3333) +INDEX 38 STROKE 1 CENTER 47.6190 RIGHT 95.2381 + OPEN 34 (95.2381 57.1429) (95.2381 61.9048) (90.4762 66.6667) + (85.7143 66.6667) (80.9524 61.9048) (76.1905 52.3810) (66.6667 28.5714) + (57.1429 14.2857) (47.6190 4.7619) (38.0952 0.0000) (19.0476 0.0000) + (9.5238 4.7619) (4.7619 9.5238) (0.0000 19.0476) (0.0000 28.5714) + (4.7619 38.0952) (9.5238 42.8571) (42.8571 61.9048) (47.6190 66.6667) + (52.3810 76.1905) (52.3810 85.7143) (47.6190 95.2381) (38.0952 100.0000) + (28.5714 95.2381) (23.8095 85.7143) (23.8095 76.1905) (28.5714 61.9048) + (38.0952 47.6190) (61.9048 14.2857) (71.4286 4.7619) (80.9524 0.0000) + (90.4762 0.0000) (95.2381 4.7619) (95.2381 9.5238) +INDEX 39 STROKE 1 CENTER 0.0000 RIGHT 0.0000 + OPEN 2 (0.0000 100.0000) (0.0000 66.6667) +INDEX 40 STROKE 1 CENTER 14.2857 RIGHT 33.3333 + OPEN 10 (33.3333 119.0476) (23.8095 109.5238) (14.2857 95.2381) + (4.7619 76.1905) (0.0000 52.3810) (0.0000 33.3333) (4.7619 9.5238) + (14.2857 -9.5238) (23.8095 -23.8095) (33.3333 -33.3333) +INDEX 41 STROKE 1 CENTER 19.0476 RIGHT 33.3333 + OPEN 10 (0.0000 119.0476) (9.5238 109.5238) (19.0476 95.2381) + (28.5714 76.1905) (33.3333 52.3810) (33.3333 33.3333) (28.5714 9.5238) + (19.0476 -9.5238) (9.5238 -23.8095) (0.0000 -33.3333) +INDEX 42 STROKE 3 CENTER 23.8095 RIGHT 47.6190 + OPEN 2 (23.8095 71.4286) (23.8095 14.2857) + OPEN 2 (0.0000 57.1429) (47.6190 28.5714) + OPEN 2 (47.6190 57.1429) (0.0000 28.5714) +INDEX 43 STROKE 2 CENTER 42.8571 RIGHT 85.7143 + OPEN 2 (42.8571 85.7143) (42.8571 0.0000) + OPEN 2 (0.0000 42.8571) (85.7143 42.8571) +INDEX 44 STROKE 1 CENTER 4.7619 RIGHT 9.5238 + OPEN 8 (9.5238 4.7619) (4.7619 0.0000) (0.0000 4.7619) + (4.7619 9.5238) (9.5238 4.7619) (9.5238 -4.7619) (4.7619 -14.2857) + (0.0000 -19.0476) +INDEX 45 STROKE 1 CENTER 42.8571 RIGHT 85.7143 + OPEN 2 (0.0000 42.8571) (85.7143 42.8571) +INDEX 46 STROKE 1 CENTER 4.7619 RIGHT 9.5238 + OPEN 5 (4.7619 9.5238) (0.0000 4.7619) (4.7619 0.0000) + (9.5238 4.7619) (4.7619 9.5238) +INDEX 47 STROKE 1 CENTER 33.3333 RIGHT 66.6667 + OPEN 2 (0.0000 -14.2857) (66.6667 100.0000) +INDEX 48 STROKE 1 CENTER 33.3333 RIGHT 66.6667 + OPEN 17 (28.5714 100.0000) (14.2857 95.2381) (4.7619 80.9524) + (0.0000 57.1429) (0.0000 42.8571) (4.7619 19.0476) (14.2857 4.7619) + (28.5714 0.0000) (38.0952 0.0000) (52.3810 4.7619) (61.9048 19.0476) + (66.6667 42.8571) (66.6667 57.1429) (61.9048 80.9524) (52.3810 95.2381) + (38.0952 100.0000) (28.5714 100.0000) +INDEX 49 STROKE 1 CENTER 19.0476 RIGHT 23.8095 + OPEN 4 (0.0000 80.9524) (9.5238 85.7143) (23.8095 100.0000) + (23.8095 0.0000) +INDEX 50 STROKE 1 CENTER 33.3333 RIGHT 66.6667 + OPEN 14 (4.7619 76.1905) (4.7619 80.9524) (9.5238 90.4762) + (14.2857 95.2381) (23.8095 100.0000) (42.8571 100.0000) (52.3810 95.2381) + (57.1429 90.4762) (61.9048 80.9524) (61.9048 71.4286) (57.1429 61.9048) + (47.6190 47.6190) (0.0000 0.0000) (66.6667 0.0000) +INDEX 51 STROKE 1 CENTER 33.3333 RIGHT 66.6667 + OPEN 15 (9.5238 100.0000) (61.9048 100.0000) (33.3333 61.9048) + (47.6190 61.9048) (57.1429 57.1429) (61.9048 52.3810) (66.6667 38.0952) + (66.6667 28.5714) (61.9048 14.2857) (52.3810 4.7619) (38.0952 0.0000) + (23.8095 0.0000) (9.5238 4.7619) (4.7619 9.5238) (0.0000 19.0476) +INDEX 52 STROKE 2 CENTER 33.3333 RIGHT 71.4286 + OPEN 3 (47.6190 100.0000) (0.0000 33.3333) (71.4286 33.3333) + OPEN 2 (47.6190 100.0000) (47.6190 0.0000) +INDEX 53 STROKE 1 CENTER 33.3333 RIGHT 66.6667 + OPEN 17 (57.1429 100.0000) (9.5238 100.0000) (4.7619 57.1429) + (9.5238 61.9048) (23.8095 66.6667) (38.0952 66.6667) (52.3810 61.9048) + (61.9048 52.3810) (66.6667 38.0952) (66.6667 28.5714) (61.9048 14.2857) + (52.3810 4.7619) (38.0952 0.0000) (23.8095 0.0000) (9.5238 4.7619) + (4.7619 9.5238) (0.0000 19.0476) +INDEX 54 STROKE 1 CENTER 28.5714 RIGHT 61.9048 + OPEN 23 (57.1429 85.7143) (52.3810 95.2381) (38.0952 100.0000) + (28.5714 100.0000) (14.2857 95.2381) (4.7619 80.9524) (0.0000 57.1429) + (0.0000 33.3333) (4.7619 14.2857) (14.2857 4.7619) (28.5714 0.0000) + (33.3333 0.0000) (47.6190 4.7619) (57.1429 14.2857) (61.9048 28.5714) + (61.9048 33.3333) (57.1429 47.6190) (47.6190 57.1429) (33.3333 61.9048) + (28.5714 61.9048) (14.2857 57.1429) (4.7619 47.6190) (0.0000 33.3333) +INDEX 55 STROKE 2 CENTER 33.3333 RIGHT 66.6667 + OPEN 2 (66.6667 100.0000) (19.0476 0.0000) + OPEN 2 (0.0000 100.0000) (66.6667 100.0000) +INDEX 56 STROKE 1 CENTER 33.3333 RIGHT 66.6667 + OPEN 29 (23.8095 100.0000) (9.5238 95.2381) (4.7619 85.7143) + (4.7619 76.1905) (9.5238 66.6667) (19.0476 61.9048) (38.0952 57.1429) + (52.3810 52.3810) (61.9048 42.8571) (66.6667 33.3333) (66.6667 19.0476) + (61.9048 9.5238) (57.1429 4.7619) (42.8571 0.0000) (23.8095 0.0000) + (9.5238 4.7619) (4.7619 9.5238) (0.0000 19.0476) (0.0000 33.3333) + (4.7619 42.8571) (14.2857 52.3810) (28.5714 57.1429) (47.6190 61.9048) + (57.1429 66.6667) (61.9048 76.1905) (61.9048 85.7143) (57.1429 95.2381) + (42.8571 100.0000) (23.8095 100.0000) +INDEX 57 STROKE 1 CENTER 33.3333 RIGHT 61.9048 + OPEN 23 (61.9048 66.6667) (57.1429 52.3810) (47.6190 42.8571) + (33.3333 38.0952) (28.5714 38.0952) (14.2857 42.8571) (4.7619 52.3810) + (0.0000 66.6667) (0.0000 71.4286) (4.7619 85.7143) (14.2857 95.2381) + (28.5714 100.0000) (33.3333 100.0000) (47.6190 95.2381) (57.1429 85.7143) + (61.9048 66.6667) (61.9048 42.8571) (57.1429 19.0476) (47.6190 4.7619) + (33.3333 0.0000) (23.8095 0.0000) (9.5238 4.7619) (4.7619 14.2857) +INDEX 58 STROKE 2 CENTER 4.7619 RIGHT 9.5238 + OPEN 5 (4.7619 66.6667) (0.0000 61.9048) (4.7619 57.1429) + (9.5238 61.9048) (4.7619 66.6667) + OPEN 5 (4.7619 9.5238) (0.0000 4.7619) (4.7619 0.0000) + (9.5238 4.7619) (4.7619 9.5238) +INDEX 59 STROKE 2 CENTER 4.7619 RIGHT 9.5238 + OPEN 5 (4.7619 66.6667) (0.0000 61.9048) (4.7619 57.1429) + (9.5238 61.9048) (4.7619 66.6667) + OPEN 8 (9.5238 4.7619) (4.7619 0.0000) (0.0000 4.7619) + (4.7619 9.5238) (9.5238 4.7619) (9.5238 -4.7619) (4.7619 -14.2857) + (0.0000 -19.0476) +INDEX 60 STROKE 1 CENTER 38.0952 RIGHT 76.1905 + OPEN 3 (76.1905 85.7143) (0.0000 42.8571) (76.1905 0.0000) +INDEX 61 STROKE 2 CENTER 42.8571 RIGHT 85.7143 + OPEN 2 (0.0000 57.1429) (85.7143 57.1429) + OPEN 2 (0.0000 28.5714) (85.7143 28.5714) +INDEX 62 STROKE 1 CENTER 38.0952 RIGHT 76.1905 + OPEN 3 (0.0000 85.7143) (76.1905 42.8571) (0.0000 0.0000) +INDEX 63 STROKE 2 CENTER 28.5714 RIGHT 57.1429 + OPEN 14 (0.0000 76.1905) (0.0000 80.9524) (4.7619 90.4762) + (9.5238 95.2381) (19.0476 100.0000) (38.0952 100.0000) (47.6190 95.2381) + (52.3810 90.4762) (57.1429 80.9524) (57.1429 71.4286) (52.3810 61.9048) + (47.6190 57.1429) (28.5714 47.6190) (28.5714 33.3333) + OPEN 5 (28.5714 9.5238) (23.8095 4.7619) (28.5714 0.0000) + (33.3333 4.7619) (28.5714 9.5238) +INDEX 64 STROKE 2 CENTER 28.5714 RIGHT 61.9048 + OPEN 8 (42.8571 52.3810) (33.3333 57.1429) (23.8095 57.1429) + (19.0476 47.6190) (19.0476 42.8571) (23.8095 33.3333) (33.3333 33.3333) + (42.8571 38.0952) + OPEN 19 (42.8571 57.1429) (42.8571 38.0952) (47.6190 33.3333) + (57.1429 33.3333) (61.9048 42.8571) (61.9048 47.6190) (57.1429 61.9048) + (47.6190 71.4286) (33.3333 76.1905) (28.5714 76.1905) (14.2857 71.4286) + (4.7619 61.9048) (0.0000 47.6190) (0.0000 42.8571) (4.7619 28.5714) + (14.2857 19.0476) (28.5714 14.2857) (33.3333 14.2857) (47.6190 19.0476) +INDEX 65 STROKE 3 CENTER 38.0952 RIGHT 76.1905 + OPEN 2 (38.0952 100.0000) (0.0000 0.0000) + OPEN 2 (38.0952 100.0000) (76.1905 0.0000) + OPEN 2 (14.2857 33.3333) (61.9048 33.3333) +INDEX 66 STROKE 3 CENTER 33.3333 RIGHT 66.6667 + OPEN 2 (0.0000 100.0000) (0.0000 0.0000) + OPEN 9 (0.0000 100.0000) (42.8571 100.0000) (57.1429 95.2381) + (61.9048 90.4762) (66.6667 80.9524) (66.6667 71.4286) (61.9048 61.9048) + (57.1429 57.1429) (42.8571 52.3810) + OPEN 10 (0.0000 52.3810) (42.8571 52.3810) (57.1429 47.6190) + (61.9048 42.8571) (66.6667 33.3333) (66.6667 19.0476) (61.9048 9.5238) + (57.1429 4.7619) (42.8571 0.0000) (0.0000 0.0000) +INDEX 67 STROKE 1 CENTER 33.3333 RIGHT 71.4286 + OPEN 18 (71.4286 76.1905) (66.6667 85.7143) (57.1429 95.2381) + (47.6190 100.0000) (28.5714 100.0000) (19.0476 95.2381) (9.5238 85.7143) + (4.7619 76.1905) (0.0000 61.9048) (0.0000 38.0952) (4.7619 23.8095) + (9.5238 14.2857) (19.0476 4.7619) (28.5714 0.0000) (47.6190 0.0000) + (57.1429 4.7619) (66.6667 14.2857) (71.4286 23.8095) +INDEX 68 STROKE 2 CENTER 33.3333 RIGHT 66.6667 + OPEN 2 (0.0000 100.0000) (0.0000 0.0000) + OPEN 12 (0.0000 100.0000) (33.3333 100.0000) (47.6190 95.2381) + (57.1429 85.7143) (61.9048 76.1905) (66.6667 61.9048) (66.6667 38.0952) + (61.9048 23.8095) (57.1429 14.2857) (47.6190 4.7619) (33.3333 0.0000) + (0.0000 0.0000) +INDEX 69 STROKE 4 CENTER 28.5714 RIGHT 61.9048 + OPEN 2 (0.0000 100.0000) (0.0000 0.0000) + OPEN 2 (0.0000 100.0000) (61.9048 100.0000) + OPEN 2 (0.0000 52.3810) (38.0952 52.3810) + OPEN 2 (0.0000 0.0000) (61.9048 0.0000) +INDEX 70 STROKE 3 CENTER 28.5714 RIGHT 61.9048 + OPEN 2 (0.0000 100.0000) (0.0000 0.0000) + OPEN 2 (0.0000 100.0000) (61.9048 100.0000) + OPEN 2 (0.0000 52.3810) (38.0952 52.3810) +INDEX 71 STROKE 2 CENTER 33.3333 RIGHT 71.4286 + OPEN 19 (71.4286 76.1905) (66.6667 85.7143) (57.1429 95.2381) + (47.6190 100.0000) (28.5714 100.0000) (19.0476 95.2381) (9.5238 85.7143) + (4.7619 76.1905) (0.0000 61.9048) (0.0000 38.0952) (4.7619 23.8095) + (9.5238 14.2857) (19.0476 4.7619) (28.5714 0.0000) (47.6190 0.0000) + (57.1429 4.7619) (66.6667 14.2857) (71.4286 23.8095) (71.4286 38.0952) + OPEN 2 (47.6190 38.0952) (71.4286 38.0952) +INDEX 72 STROKE 3 CENTER 33.3333 RIGHT 66.6667 + OPEN 2 (0.0000 100.0000) (0.0000 0.0000) + OPEN 2 (66.6667 100.0000) (66.6667 0.0000) + OPEN 2 (0.0000 52.3810) (66.6667 52.3810) +INDEX 73 STROKE 1 CENTER 0.0000 RIGHT 0.0000 + OPEN 2 (0.0000 100.0000) (0.0000 0.0000) +INDEX 74 STROKE 1 CENTER 28.5714 RIGHT 47.6190 + OPEN 10 (47.6190 100.0000) (47.6190 23.8095) (42.8571 9.5238) + (38.0952 4.7619) (28.5714 0.0000) (19.0476 0.0000) (9.5238 4.7619) + (4.7619 9.5238) (0.0000 23.8095) (0.0000 33.3333) +INDEX 75 STROKE 3 CENTER 33.3333 RIGHT 66.6667 + OPEN 2 (0.0000 100.0000) (0.0000 0.0000) + OPEN 2 (66.6667 100.0000) (0.0000 33.3333) + OPEN 2 (23.8095 57.1429) (66.6667 0.0000) +INDEX 76 STROKE 2 CENTER 28.5714 RIGHT 57.1429 + OPEN 2 (0.0000 100.0000) (0.0000 0.0000) + OPEN 2 (0.0000 0.0000) (57.1429 0.0000) +INDEX 77 STROKE 4 CENTER 38.0952 RIGHT 76.1905 + OPEN 2 (0.0000 100.0000) (0.0000 0.0000) + OPEN 2 (0.0000 100.0000) (38.0952 0.0000) + OPEN 2 (76.1905 100.0000) (38.0952 0.0000) + OPEN 2 (76.1905 100.0000) (76.1905 0.0000) +INDEX 78 STROKE 3 CENTER 33.3333 RIGHT 66.6667 + OPEN 2 (0.0000 100.0000) (0.0000 0.0000) + OPEN 2 (0.0000 100.0000) (66.6667 0.0000) + OPEN 2 (66.6667 100.0000) (66.6667 0.0000) +INDEX 79 STROKE 1 CENTER 38.0952 RIGHT 76.1905 + OPEN 21 (28.5714 100.0000) (19.0476 95.2381) (9.5238 85.7143) + (4.7619 76.1905) (0.0000 61.9048) (0.0000 38.0952) (4.7619 23.8095) + (9.5238 14.2857) (19.0476 4.7619) (28.5714 0.0000) (47.6190 0.0000) + (57.1429 4.7619) (66.6667 14.2857) (71.4286 23.8095) (76.1905 38.0952) + (76.1905 61.9048) (71.4286 76.1905) (66.6667 85.7143) (57.1429 95.2381) + (47.6190 100.0000) (28.5714 100.0000) +INDEX 80 STROKE 2 CENTER 33.3333 RIGHT 66.6667 + OPEN 2 (0.0000 100.0000) (0.0000 0.0000) + OPEN 10 (0.0000 100.0000) (42.8571 100.0000) (57.1429 95.2381) + (61.9048 90.4762) (66.6667 80.9524) (66.6667 66.6667) (61.9048 57.1429) + (57.1429 52.3810) (42.8571 47.6190) (0.0000 47.6190) +INDEX 81 STROKE 2 CENTER 38.0952 RIGHT 76.1905 + OPEN 21 (28.5714 100.0000) (19.0476 95.2381) (9.5238 85.7143) + (4.7619 76.1905) (0.0000 61.9048) (0.0000 38.0952) (4.7619 23.8095) + (9.5238 14.2857) (19.0476 4.7619) (28.5714 0.0000) (47.6190 0.0000) + (57.1429 4.7619) (66.6667 14.2857) (71.4286 23.8095) (76.1905 38.0952) + (76.1905 61.9048) (71.4286 76.1905) (66.6667 85.7143) (57.1429 95.2381) + (47.6190 100.0000) (28.5714 100.0000) + OPEN 2 (42.8571 19.0476) (71.4286 -9.5238) +INDEX 82 STROKE 3 CENTER 33.3333 RIGHT 66.6667 + OPEN 2 (0.0000 100.0000) (0.0000 0.0000) + OPEN 10 (0.0000 100.0000) (42.8571 100.0000) (57.1429 95.2381) + (61.9048 90.4762) (66.6667 80.9524) (66.6667 71.4286) (61.9048 61.9048) + (57.1429 57.1429) (42.8571 52.3810) (0.0000 52.3810) + OPEN 2 (33.3333 52.3810) (66.6667 0.0000) +INDEX 83 STROKE 1 CENTER 33.3333 RIGHT 66.6667 + OPEN 20 (66.6667 85.7143) (57.1429 95.2381) (42.8571 100.0000) + (23.8095 100.0000) (9.5238 95.2381) (0.0000 85.7143) (0.0000 76.1905) + (4.7619 66.6667) (9.5238 61.9048) (19.0476 57.1429) (47.6190 47.6190) + (57.1429 42.8571) (61.9048 38.0952) (66.6667 28.5714) (66.6667 14.2857) + (57.1429 4.7619) (42.8571 0.0000) (23.8095 0.0000) (9.5238 4.7619) + (0.0000 14.2857) +INDEX 84 STROKE 2 CENTER 33.3333 RIGHT 66.6667 + OPEN 2 (33.3333 100.0000) (33.3333 0.0000) + OPEN 2 (0.0000 100.0000) (66.6667 100.0000) +INDEX 85 STROKE 1 CENTER 33.3333 RIGHT 66.6667 + OPEN 10 (0.0000 100.0000) (0.0000 28.5714) (4.7619 14.2857) + (14.2857 4.7619) (28.5714 0.0000) (38.0952 0.0000) (52.3810 4.7619) + (61.9048 14.2857) (66.6667 28.5714) (66.6667 100.0000) +INDEX 86 STROKE 2 CENTER 38.0952 RIGHT 76.1905 + OPEN 2 (0.0000 100.0000) (38.0952 0.0000) + OPEN 2 (76.1905 100.0000) (38.0952 0.0000) +INDEX 87 STROKE 4 CENTER 47.6190 RIGHT 95.2381 + OPEN 2 (0.0000 100.0000) (23.8095 0.0000) + OPEN 2 (47.6190 100.0000) (23.8095 0.0000) + OPEN 2 (47.6190 100.0000) (71.4286 0.0000) + OPEN 2 (95.2381 100.0000) (71.4286 0.0000) +INDEX 88 STROKE 2 CENTER 33.3333 RIGHT 66.6667 + OPEN 2 (0.0000 100.0000) (66.6667 0.0000) + OPEN 2 (66.6667 100.0000) (0.0000 0.0000) +INDEX 89 STROKE 2 CENTER 38.0952 RIGHT 76.1905 + OPEN 3 (0.0000 100.0000) (38.0952 52.3810) (38.0952 0.0000) + OPEN 2 (76.1905 100.0000) (38.0952 52.3810) +INDEX 90 STROKE 3 CENTER 33.3333 RIGHT 66.6667 + OPEN 2 (66.6667 100.0000) (0.0000 0.0000) + OPEN 2 (0.0000 100.0000) (66.6667 100.0000) + OPEN 2 (0.0000 0.0000) (66.6667 0.0000) +INDEX 91 STROKE 4 CENTER 14.2857 RIGHT 33.3333 + OPEN 2 (0.0000 119.0476) (0.0000 -33.3333) + OPEN 2 (4.7619 119.0476) (4.7619 -33.3333) + OPEN 2 (0.0000 119.0476) (33.3333 119.0476) + OPEN 2 (0.0000 -33.3333) (33.3333 -33.3333) +INDEX 92 STROKE 1 CENTER 33.3333 RIGHT 66.6667 + OPEN 2 (0.0000 100.0000) (66.6667 -14.2857) +INDEX 93 STROKE 4 CENTER 19.0476 RIGHT 33.3333 + OPEN 2 (28.5714 119.0476) (28.5714 -33.3333) + OPEN 2 (33.3333 119.0476) (33.3333 -33.3333) + OPEN 2 (0.0000 119.0476) (33.3333 119.0476) + OPEN 2 (0.0000 -33.3333) (33.3333 -33.3333) +INDEX 94 STROKE 2 CENTER 38.0952 RIGHT 76.1905 + OPEN 2 (38.0952 109.5238) (0.0000 42.8571) + OPEN 2 (38.0952 109.5238) (76.1905 42.8571) +INDEX 95 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 5 (0.0000 -33.3333) (104.7619 -33.3333) (104.7619 -28.5714) + (0.0000 -28.5714) (0.0000 -33.3333) +INDEX 96 STROKE 2 CENTER 14.2857 RIGHT 28.5714 + OPEN 2 (4.7619 100.0000) (28.5714 71.4286) + OPEN 3 (4.7619 100.0000) (0.0000 95.2381) (28.5714 71.4286) +INDEX 97 STROKE 2 CENTER 28.5714 RIGHT 57.1429 + OPEN 2 (57.1429 66.6667) (57.1429 0.0000) + OPEN 14 (57.1429 52.3810) (47.6190 61.9048) (38.0952 66.6667) + (23.8095 66.6667) (14.2857 61.9048) (4.7619 52.3810) (0.0000 38.0952) + (0.0000 28.5714) (4.7619 14.2857) (14.2857 4.7619) (23.8095 0.0000) + (38.0952 0.0000) (47.6190 4.7619) (57.1429 14.2857) +INDEX 98 STROKE 2 CENTER 28.5714 RIGHT 57.1429 + OPEN 2 (0.0000 100.0000) (0.0000 0.0000) + OPEN 14 (0.0000 52.3810) (9.5238 61.9048) (19.0476 66.6667) + (33.3333 66.6667) (42.8571 61.9048) (52.3810 52.3810) (57.1429 38.0952) + (57.1429 28.5714) (52.3810 14.2857) (42.8571 4.7619) (33.3333 0.0000) + (19.0476 0.0000) (9.5238 4.7619) (0.0000 14.2857) +INDEX 99 STROKE 1 CENTER 28.5714 RIGHT 57.1429 + OPEN 14 (57.1429 52.3810) (47.6190 61.9048) (38.0952 66.6667) + (23.8095 66.6667) (14.2857 61.9048) (4.7619 52.3810) (0.0000 38.0952) + (0.0000 28.5714) (4.7619 14.2857) (14.2857 4.7619) (23.8095 0.0000) + (38.0952 0.0000) (47.6190 4.7619) (57.1429 14.2857) +INDEX 100 STROKE 2 CENTER 28.5714 RIGHT 57.1429 + OPEN 2 (57.1429 100.0000) (57.1429 0.0000) + OPEN 14 (57.1429 52.3810) (47.6190 61.9048) (38.0952 66.6667) + (23.8095 66.6667) (14.2857 61.9048) (4.7619 52.3810) (0.0000 38.0952) + (0.0000 28.5714) (4.7619 14.2857) (14.2857 4.7619) (23.8095 0.0000) + (38.0952 0.0000) (47.6190 4.7619) (57.1429 14.2857) +INDEX 101 STROKE 1 CENTER 28.5714 RIGHT 57.1429 + OPEN 17 (0.0000 38.0952) (57.1429 38.0952) (57.1429 47.6190) + (52.3810 57.1429) (47.6190 61.9048) (38.0952 66.6667) (23.8095 66.6667) + (14.2857 61.9048) (4.7619 52.3810) (0.0000 38.0952) (0.0000 28.5714) + (4.7619 14.2857) (14.2857 4.7619) (23.8095 0.0000) (38.0952 0.0000) + (47.6190 4.7619) (57.1429 14.2857) +INDEX 102 STROKE 2 CENTER 14.2857 RIGHT 38.0952 + OPEN 5 (38.0952 100.0000) (28.5714 100.0000) (19.0476 95.2381) + (14.2857 80.9524) (14.2857 0.0000) + OPEN 2 (0.0000 66.6667) (33.3333 66.6667) +INDEX 103 STROKE 2 CENTER 28.5714 RIGHT 57.1429 + OPEN 7 (57.1429 66.6667) (57.1429 -9.5238) (52.3810 -23.8095) + (47.6190 -28.5714) (38.0952 -33.3333) (23.8095 -33.3333) (14.2857 -28.5714) + OPEN 14 (57.1429 52.3810) (47.6190 61.9048) (38.0952 66.6667) + (23.8095 66.6667) (14.2857 61.9048) (4.7619 52.3810) (0.0000 38.0952) + (0.0000 28.5714) (4.7619 14.2857) (14.2857 4.7619) (23.8095 0.0000) + (38.0952 0.0000) (47.6190 4.7619) (57.1429 14.2857) +INDEX 104 STROKE 2 CENTER 23.8095 RIGHT 52.3810 + OPEN 2 (0.0000 100.0000) (0.0000 0.0000) + OPEN 7 (0.0000 47.6190) (14.2857 61.9048) (23.8095 66.6667) + (38.0952 66.6667) (47.6190 61.9048) (52.3810 47.6190) (52.3810 0.0000) +INDEX 105 STROKE 2 CENTER 4.7619 RIGHT 9.5238 + OPEN 5 (0.0000 100.0000) (4.7619 95.2381) (9.5238 100.0000) + (4.7619 104.7619) (0.0000 100.0000) + OPEN 2 (4.7619 66.6667) (4.7619 0.0000) +INDEX 106 STROKE 2 CENTER 19.0476 RIGHT 28.5714 + OPEN 5 (19.0476 100.0000) (23.8095 95.2381) (28.5714 100.0000) + (23.8095 104.7619) (19.0476 100.0000) + OPEN 5 (23.8095 66.6667) (23.8095 -14.2857) (19.0476 -28.5714) + (9.5238 -33.3333) (0.0000 -33.3333) +INDEX 107 STROKE 3 CENTER 23.8095 RIGHT 52.3810 + OPEN 2 (0.0000 100.0000) (0.0000 0.0000) + OPEN 2 (47.6190 66.6667) (0.0000 19.0476) + OPEN 2 (19.0476 38.0952) (52.3810 0.0000) +INDEX 108 STROKE 1 CENTER 0.0000 RIGHT 0.0000 + OPEN 2 (0.0000 100.0000) (0.0000 0.0000) +INDEX 109 STROKE 3 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (0.0000 66.6667) (0.0000 0.0000) + OPEN 7 (0.0000 47.6190) (14.2857 61.9048) (23.8095 66.6667) + (38.0952 66.6667) (47.6190 61.9048) (52.3810 47.6190) (52.3810 0.0000) + OPEN 7 (52.3810 47.6190) (66.6667 61.9048) (76.1905 66.6667) + (90.4762 66.6667) (100.0000 61.9048) (104.7619 47.6190) (104.7619 0.0000) +INDEX 110 STROKE 2 CENTER 23.8095 RIGHT 52.3810 + OPEN 2 (0.0000 66.6667) (0.0000 0.0000) + OPEN 7 (0.0000 47.6190) (14.2857 61.9048) (23.8095 66.6667) + (38.0952 66.6667) (47.6190 61.9048) (52.3810 47.6190) (52.3810 0.0000) +INDEX 111 STROKE 1 CENTER 28.5714 RIGHT 61.9048 + OPEN 17 (23.8095 66.6667) (14.2857 61.9048) (4.7619 52.3810) + (0.0000 38.0952) (0.0000 28.5714) (4.7619 14.2857) (14.2857 4.7619) + (23.8095 0.0000) (38.0952 0.0000) (47.6190 4.7619) (57.1429 14.2857) + (61.9048 28.5714) (61.9048 38.0952) (57.1429 52.3810) (47.6190 61.9048) + (38.0952 66.6667) (23.8095 66.6667) +INDEX 112 STROKE 2 CENTER 28.5714 RIGHT 57.1429 + OPEN 2 (0.0000 66.6667) (0.0000 -33.3333) + OPEN 14 (0.0000 52.3810) (9.5238 61.9048) (19.0476 66.6667) + (33.3333 66.6667) (42.8571 61.9048) (52.3810 52.3810) (57.1429 38.0952) + (57.1429 28.5714) (52.3810 14.2857) (42.8571 4.7619) (33.3333 0.0000) + (19.0476 0.0000) (9.5238 4.7619) (0.0000 14.2857) +INDEX 113 STROKE 2 CENTER 28.5714 RIGHT 57.1429 + OPEN 2 (57.1429 66.6667) (57.1429 -33.3333) + OPEN 14 (57.1429 52.3810) (47.6190 61.9048) (38.0952 66.6667) + (23.8095 66.6667) (14.2857 61.9048) (4.7619 52.3810) (0.0000 38.0952) + (0.0000 28.5714) (4.7619 14.2857) (14.2857 4.7619) (23.8095 0.0000) + (38.0952 0.0000) (47.6190 4.7619) (57.1429 14.2857) +INDEX 114 STROKE 2 CENTER 14.2857 RIGHT 38.0952 + OPEN 2 (0.0000 66.6667) (0.0000 0.0000) + OPEN 5 (0.0000 38.0952) (4.7619 52.3810) (14.2857 61.9048) + (23.8095 66.6667) (38.0952 66.6667) +INDEX 115 STROKE 1 CENTER 23.8095 RIGHT 52.3810 + OPEN 17 (52.3810 52.3810) (47.6190 61.9048) (33.3333 66.6667) + (19.0476 66.6667) (4.7619 61.9048) (0.0000 52.3810) (4.7619 42.8571) + (14.2857 38.0952) (38.0952 33.3333) (47.6190 28.5714) (52.3810 19.0476) + (52.3810 14.2857) (47.6190 4.7619) (33.3333 0.0000) (19.0476 0.0000) + (4.7619 4.7619) (0.0000 14.2857) +INDEX 116 STROKE 2 CENTER 14.2857 RIGHT 38.0952 + OPEN 5 (14.2857 100.0000) (14.2857 19.0476) (19.0476 4.7619) + (28.5714 0.0000) (38.0952 0.0000) + OPEN 2 (0.0000 66.6667) (33.3333 66.6667) +INDEX 117 STROKE 2 CENTER 23.8095 RIGHT 52.3810 + OPEN 7 (0.0000 66.6667) (0.0000 19.0476) (4.7619 4.7619) + (14.2857 0.0000) (28.5714 0.0000) (38.0952 4.7619) (52.3810 19.0476) + OPEN 2 (52.3810 66.6667) (52.3810 0.0000) +INDEX 118 STROKE 2 CENTER 28.5714 RIGHT 57.1429 + OPEN 2 (0.0000 66.6667) (28.5714 0.0000) + OPEN 2 (57.1429 66.6667) (28.5714 0.0000) +INDEX 119 STROKE 4 CENTER 38.0952 RIGHT 76.1905 + OPEN 2 (0.0000 66.6667) (19.0476 0.0000) + OPEN 2 (38.0952 66.6667) (19.0476 0.0000) + OPEN 2 (38.0952 66.6667) (57.1429 0.0000) + OPEN 2 (76.1905 66.6667) (57.1429 0.0000) +INDEX 120 STROKE 2 CENTER 23.8095 RIGHT 52.3810 + OPEN 2 (0.0000 66.6667) (52.3810 0.0000) + OPEN 2 (52.3810 66.6667) (0.0000 0.0000) +INDEX 121 STROKE 2 CENTER 33.3333 RIGHT 61.9048 + OPEN 2 (4.7619 66.6667) (33.3333 0.0000) + OPEN 6 (61.9048 66.6667) (33.3333 0.0000) (23.8095 -19.0476) + (14.2857 -28.5714) (4.7619 -33.3333) (0.0000 -33.3333) +INDEX 122 STROKE 3 CENTER 23.8095 RIGHT 52.3810 + OPEN 2 (52.3810 66.6667) (0.0000 0.0000) + OPEN 2 (0.0000 66.6667) (52.3810 66.6667) + OPEN 2 (0.0000 0.0000) (52.3810 0.0000) +INDEX 123 STROKE 3 CENTER 14.2857 RIGHT 23.8095 + OPEN 10 (23.8095 119.0476) (14.2857 114.2857) (9.5238 109.5238) + (4.7619 100.0000) (4.7619 90.4762) (9.5238 80.9524) (14.2857 76.1905) + (19.0476 66.6667) (19.0476 57.1429) (9.5238 47.6190) + OPEN 17 (14.2857 114.2857) (9.5238 104.7619) (9.5238 95.2381) + (14.2857 85.7143) (19.0476 80.9524) (23.8095 71.4286) (23.8095 61.9048) + (19.0476 52.3810) (0.0000 42.8571) (19.0476 33.3333) (23.8095 23.8095) + (23.8095 14.2857) (19.0476 4.7619) (14.2857 0.0000) (9.5238 -9.5238) + (9.5238 -19.0476) (14.2857 -28.5714) + OPEN 10 (9.5238 38.0952) (19.0476 28.5714) (19.0476 19.0476) + (14.2857 9.5238) (9.5238 4.7619) (4.7619 -4.7619) (4.7619 -14.2857) + (9.5238 -23.8095) (14.2857 -28.5714) (23.8095 -33.3333) +INDEX 124 STROKE 1 CENTER 0.0000 RIGHT 0.0000 + OPEN 2 (0.0000 119.0476) (0.0000 -33.3333) +INDEX 125 STROKE 3 CENTER 9.5238 RIGHT 23.8095 + OPEN 10 (0.0000 119.0476) (9.5238 114.2857) (14.2857 109.5238) + (19.0476 100.0000) (19.0476 90.4762) (14.2857 80.9524) (9.5238 76.1905) + (4.7619 66.6667) (4.7619 57.1429) (14.2857 47.6190) + OPEN 17 (9.5238 114.2857) (14.2857 104.7619) (14.2857 95.2381) + (9.5238 85.7143) (4.7619 80.9524) (0.0000 71.4286) (0.0000 61.9048) + (4.7619 52.3810) (23.8095 42.8571) (4.7619 33.3333) (0.0000 23.8095) + (0.0000 14.2857) (4.7619 4.7619) (9.5238 0.0000) (14.2857 -9.5238) + (14.2857 -19.0476) (9.5238 -28.5714) + OPEN 10 (14.2857 38.0952) (4.7619 28.5714) (4.7619 19.0476) + (9.5238 9.5238) (14.2857 4.7619) (19.0476 -4.7619) (19.0476 -14.2857) + (14.2857 -23.8095) (9.5238 -28.5714) (0.0000 -33.3333) +INDEX 126 STROKE 2 CENTER 42.8571 RIGHT 85.7143 + OPEN 11 (0.0000 28.5714) (0.0000 38.0952) (4.7619 52.3810) + (14.2857 57.1429) (23.8095 57.1429) (33.3333 52.3810) (52.3810 38.0952) + (61.9048 33.3333) (71.4286 33.3333) (80.9524 38.0952) (85.7143 47.6190) + OPEN 11 (0.0000 38.0952) (4.7619 47.6190) (14.2857 52.3810) + (23.8095 52.3810) (33.3333 47.6190) (52.3810 33.3333) (61.9048 28.5714) + (71.4286 28.5714) (80.9524 33.3333) (85.7143 47.6190) (85.7143 57.1429) +INDEX 127 STROKE 2 CENTER 33.3333 RIGHT 66.6667 + OPEN 2 (52.3810 100.0000) (14.2857 -33.3333) + OPEN 17 (28.5714 66.6667) (14.2857 61.9048) (4.7619 52.3810) + (0.0000 38.0952) (0.0000 23.8095) (4.7619 14.2857) (14.2857 4.7619) + (28.5714 0.0000) (38.0952 0.0000) (52.3810 4.7619) (61.9048 14.2857) + (66.6667 28.5714) (66.6667 42.8571) (61.9048 52.3810) (52.3810 61.9048) + (38.0952 66.6667) (28.5714 66.6667) + + + +#/* NCGA GRAFNET:SANS-SERIF NORMAL*/ + +BEARING 32 L_SPACE 0.0 WIDTH 20.0 R_SPACE 0.0 +BEARING 33 L_SPACE 8.62 WIDTH 13.64 R_SPACE 8.48 +BEARING 34 L_SPACE 4.02 WIDTH 32.86 R_SPACE 9.32 +BEARING 35 L_SPACE 3.2 WIDTH 68.94 R_SPACE 4.86 +BEARING 36 L_SPACE 4.82 WIDTH 67.44 R_SPACE 4.72 +BEARING 37 L_SPACE 6.36 WIDTH 112.38 R_SPACE 4.5 +BEARING 38 L_SPACE 5.98 WIDTH 82.02 R_SPACE 0.54 +BEARING 39 L_SPACE 4.44 WIDTH 13.36 R_SPACE 9.18 +BEARING 40 L_SPACE 7.58 WIDTH 24.72 R_SPACE 6.26 +BEARING 41 L_SPACE 5.28 WIDTH 24.34 R_SPACE 8.92 +BEARING 42 L_SPACE 6.96 WIDTH 42.06 R_SPACE 4.86 +BEARING 43 L_SPACE 5.98 WIDTH 96.36 R_SPACE 5.56 +BEARING 44 L_SPACE 8.76 WIDTH 14.2 R_SPACE 7.78 +BEARING 45 L_SPACE 7.38 WIDTH 38.84 R_SPACE 7.66 +BEARING 46 L_SPACE 8.34 WIDTH 13.78 R_SPACE 8.62 +BEARING 47 L_SPACE 7.24 WIDTH 38.44 R_SPACE 8.2 +BEARING 48 L_SPACE 4.98 WIDTH 66.58 R_SPACE 5.42 +BEARING 49 L_SPACE 11.82 WIDTH 34.26 R_SPACE 30.9 +BEARING 50 L_SPACE 5.42 WIDTH 66.0 R_SPACE 5.56 +BEARING 51 L_SPACE 5.0 WIDTH 66.62 R_SPACE 5.38 +BEARING 52 L_SPACE 3.88 WIDTH 68.24 R_SPACE 4.86 +BEARING 53 L_SPACE 4.86 WIDTH 65.96 R_SPACE 6.16 +BEARING 54 L_SPACE 5.58 WIDTH 65.08 R_SPACE 6.32 +BEARING 55 L_SPACE 5.56 WIDTH 66.42 R_SPACE 5.0 +BEARING 56 L_SPACE 5.6 WIDTH 65.98 R_SPACE 5.4 +BEARING 57 L_SPACE 6.6 WIDTH 64.82 R_SPACE 5.56 +BEARING 58 L_SPACE 9.32 WIDTH 14.06 R_SPACE 7.38 +BEARING 59 L_SPACE 8.2 WIDTH 13.96 R_SPACE 8.58 +BEARING 60 L_SPACE 3.06 WIDTH 102.5 R_SPACE 2.36 +BEARING 61 L_SPACE 5.7 WIDTH 96.36 R_SPACE 5.84 +BEARING 62 L_SPACE 2.78 WIDTH 102.5 R_SPACE 2.64 +BEARING 63 L_SPACE 8.42 WIDTH 60.22 R_SPACE 8.34 +BEARING 64 L_SPACE 6.36 WIDTH 126.24 R_SPACE 6.1 +BEARING 65 L_SPACE 2.5 WIDTH 88.16 R_SPACE 1.8 +BEARING 66 L_SPACE 11.42 WIDTH 75.5 R_SPACE 5.54 +BEARING 67 L_SPACE 6.66 WIDTH 87.06 R_SPACE 6.4 +BEARING 68 L_SPACE 11.96 WIDTH 81.48 R_SPACE 6.66 +BEARING 69 L_SPACE 11.42 WIDTH 72.28 R_SPACE 4.86 +BEARING 70 L_SPACE 11.42 WIDTH 67.96 R_SPACE 5.42 +BEARING 71 L_SPACE 7.06 WIDTH 89.56 R_SPACE 11.28 +BEARING 72 L_SPACE 11.42 WIDTH 77.7 R_SPACE 11.0 +BEARING 73 L_SPACE 10.86 WIDTH 13.36 R_SPACE 10.44 +BEARING 74 L_SPACE 2.5 WIDTH 56.96 R_SPACE 9.88 +BEARING 75 L_SPACE 11.28 WIDTH 79.8 R_SPACE 1.38 +BEARING 76 L_SPACE 11.68 WIDTH 62.8 R_SPACE 2.5 +BEARING 77 L_SPACE 10.86 WIDTH 94.56 R_SPACE 10.16 +BEARING 78 L_SPACE 11.14 WIDTH 77.98 R_SPACE 11.0 +BEARING 79 L_SPACE 6.24 WIDTH 95.28 R_SPACE 6.4 +BEARING 80 L_SPACE 12.1 WIDTH 73.44 R_SPACE 6.9 +BEARING 81 L_SPACE 5.3 WIDTH 96.0 R_SPACE 6.6 +BEARING 82 L_SPACE 11.68 WIDTH 80.64 R_SPACE 4.02 +BEARING 83 L_SPACE 8.0 WIDTH 78.28 R_SPACE 6.16 +BEARING 84 L_SPACE 2.36 WIDTH 79.52 R_SPACE 2.92 +BEARING 85 L_SPACE 11.54 WIDTH 77.28 R_SPACE 11.28 +BEARING 86 L_SPACE 2.36 WIDTH 87.04 R_SPACE 3.06 +BEARING 87 L_SPACE 2.22 WIDTH 125.76 R_SPACE 3.06 +BEARING 88 L_SPACE 2.5 WIDTH 86.76 R_SPACE 3.2 +BEARING 89 L_SPACE 1.52 WIDTH 88.98 R_SPACE 1.94 +BEARING 90 L_SPACE 2.5 WIDTH 77.7 R_SPACE 4.58 +BEARING 91 L_SPACE 7.78 WIDTH 25.76 R_SPACE 5.0 +BEARING 92 L_SPACE 5.84 WIDTH 73.24 R_SPACE 5.7 +BEARING 93 L_SPACE 4.44 WIDTH 25.48 R_SPACE 8.62 +BEARING 94 L_SPACE 5.98 WIDTH 55.28 R_SPACE 8.06 +BEARING 95 L_SPACE -1.1 WIDTH 70.04 R_SPACE 0.4 +BEARING 96 L_SPACE 28.26 WIDTH 25.9 R_SPACE 26.74 +BEARING 97 L_SPACE 6.68 WIDTH 67.54 R_SPACE 2.78 +BEARING 98 L_SPACE 8.76 WIDTH 63.66 R_SPACE 4.56 +BEARING 99 L_SPACE 5.52 WIDTH 61.46 R_SPACE 6.26 +BEARING 100 L_SPACE 4.64 WIDTH 63.88 R_SPACE 8.48 +BEARING 101 L_SPACE 5.72 WIDTH 65.62 R_SPACE 5.66 +BEARING 102 L_SPACE 0.68 WIDTH 34.12 R_SPACE -0.12 +BEARING 103 L_SPACE 5.36 WIDTH 63.16 R_SPACE 8.48 +BEARING 104 L_SPACE 9.6 WIDTH 58.34 R_SPACE 9.04 +BEARING 105 L_SPACE 10.02 WIDTH 11.42 R_SPACE 9.32 +BEARING 106 L_SPACE -1.66 WIDTH 23.1 R_SPACE 9.32 +BEARING 107 L_SPACE 9.6 WIDTH 59.18 R_SPACE 0.54 +BEARING 108 L_SPACE 10.02 WIDTH 11.42 R_SPACE 9.32 +BEARING 109 L_SPACE 9.6 WIDTH 96.36 R_SPACE 9.6 +BEARING 110 L_SPACE 9.18 WIDTH 58.48 R_SPACE 9.32 +BEARING 111 L_SPACE 4.98 WIDTH 67.14 R_SPACE 4.86 +BEARING 112 L_SPACE 9.46 WIDTH 63.34 R_SPACE 4.2 +BEARING 113 L_SPACE 4.84 WIDTH 63.38 R_SPACE 8.76 +BEARING 114 L_SPACE 9.46 WIDTH 34.8 R_SPACE 1.94 +BEARING 115 L_SPACE 4.7 WIDTH 59.4 R_SPACE 5.24 +BEARING 116 L_SPACE 0.54 WIDTH 33.42 R_SPACE 0.68 +BEARING 117 L_SPACE 9.46 WIDTH 58.2 R_SPACE 9.32 +BEARING 118 L_SPACE 1.8 WIDTH 65.86 R_SPACE 1.66 +BEARING 119 L_SPACE 2.5 WIDTH 95.82 R_SPACE 1.8 +BEARING 120 L_SPACE 1.66 WIDTH 65.32 R_SPACE 2.36 +BEARING 121 L_SPACE 1.8 WIDTH 65.18 R_SPACE 2.36 +BEARING 122 L_SPACE 4.44 WIDTH 59.88 R_SPACE 5.0 +BEARING 123 L_SPACE 7.38 WIDTH 36.06 R_SPACE 10.44 +BEARING 124 L_SPACE 11.54 WIDTH 6.96 R_SPACE 12.24 +BEARING 125 L_SPACE 9.18 WIDTH 36.2 R_SPACE 8.48 +BEARING 126 L_SPACE 2.92 WIDTH 102.36 R_SPACE 2.64 + diff --git a/freeglut/freeglut/genfonts/Roman_M.src b/freeglut/freeglut/genfonts/Roman_M.src new file mode 100644 index 0000000..45717a5 --- /dev/null +++ b/freeglut/freeglut/genfonts/Roman_M.src @@ -0,0 +1,503 @@ +## +# $XConsortium: Roman_M.src,v 5.3 94/04/17 20:10:06 rws Exp $ +## +## Copyright (c) 1989,1990, 1991 by Sun Microsystems, Inc. and the X Consortium. +## +## All Rights Reserved +## +## Permission to use, copy, modify, and distribute this software and its +## documentation for any purpose and without fee is hereby granted, +## provided that the above copyright notice appear in all copies and that +## both that copyright notice and this permission notice appear in +## supporting documentation, and that the names of Sun Microsystems +## and the X Consortium not be used in advertising or publicity +## pertaining to distribution of the software without specific, written +## prior permission. +## +## SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +## INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +## EVENT SHALL SUN MICROSYSTEMS OR THE X CONSORTIUM BE LIABLE FOR ANY SPECIAL, +## INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING +## FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +## NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION +## WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +# Mono-spaced version of Roman Simplex font. + + FONTNAME Roman + TOP 119.0476 + BOTTOM -33.3333 + NUM_CH 128 + PROPERTIES 3 + + (CHARSET_REGISTRY ISO8859) + (CHARSET_ENCODING "1") + (SPACING M) + +INDEX 32 STROKE 0 CENTER 52.3810 RIGHT 104.7619 +INDEX 33 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (52.3810 100.0000) (52.3810 33.3333) + OPEN 5 (52.3810 9.5238) (47.6191 4.7619) (52.3810 0.0000) + (57.1429 4.7619) (52.3810 9.5238) +INDEX 34 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (33.3334 100.0000) (33.3334 66.6667) + OPEN 2 (71.4286 100.0000) (71.4286 66.6667) +INDEX 35 STROKE 4 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (54.7619 119.0476) (21.4286 -33.3333) + OPEN 2 (83.3334 119.0476) (50.0000 -33.3333) + OPEN 2 (21.4286 57.1429) (88.0952 57.1429) + OPEN 2 (16.6667 28.5714) (83.3334 28.5714) +INDEX 36 STROKE 3 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (42.8571 119.0476) (42.8571 -19.0476) + OPEN 2 (61.9047 119.0476) (61.9047 -19.0476) + OPEN 20 (85.7143 85.7143) (76.1905 95.2381) (61.9047 100.0000) + (42.8571 100.0000) (28.5714 95.2381) (19.0476 85.7143) (19.0476 76.1905) + (23.8095 66.6667) (28.5714 61.9048) (38.0952 57.1429) (66.6666 47.6190) + (76.1905 42.8571) (80.9524 38.0952) (85.7143 28.5714) (85.7143 14.2857) + (76.1905 4.7619) (61.9047 0.0000) (42.8571 0.0000) (28.5714 4.7619) + (19.0476 14.2857) +INDEX 37 STROKE 3 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (95.2381 100.0000) (9.5238 0.0000) + OPEN 16 (33.3333 100.0000) (42.8571 90.4762) (42.8571 80.9524) + (38.0952 71.4286) (28.5714 66.6667) (19.0476 66.6667) (9.5238 76.1905) + (9.5238 85.7143) (14.2857 95.2381) (23.8095 100.0000) (33.3333 100.0000) + (42.8571 95.2381) (57.1428 90.4762) (71.4286 90.4762) (85.7143 95.2381) + (95.2381 100.0000) + OPEN 11 (76.1905 33.3333) (66.6667 28.5714) (61.9048 19.0476) + (61.9048 9.5238) (71.4286 0.0000) (80.9524 0.0000) (90.4762 4.7619) + (95.2381 14.2857) (95.2381 23.8095) (85.7143 33.3333) (76.1905 33.3333) +INDEX 38 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 34 (100.0000 57.1429) (100.0000 61.9048) (95.2381 66.6667) + (90.4762 66.6667) (85.7143 61.9048) (80.9524 52.3810) (71.4286 28.5714) + (61.9048 14.2857) (52.3809 4.7619) (42.8571 0.0000) (23.8095 0.0000) + (14.2857 4.7619) (9.5238 9.5238) (4.7619 19.0476) (4.7619 28.5714) + (9.5238 38.0952) (14.2857 42.8571) (47.6190 61.9048) (52.3809 66.6667) + (57.1429 76.1905) (57.1429 85.7143) (52.3809 95.2381) (42.8571 100.0000) + (33.3333 95.2381) (28.5714 85.7143) (28.5714 76.1905) (33.3333 61.9048) + (42.8571 47.6190) (66.6667 14.2857) (76.1905 4.7619) (85.7143 0.0000) + (95.2381 0.0000) (100.0000 4.7619) (100.0000 9.5238) +INDEX 39 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (52.3810 100.0000) (52.3810 66.6667) +INDEX 40 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 10 (69.0476 119.0476) (59.5238 109.5238) (50.0000 95.2381) + (40.4762 76.1905) (35.7143 52.3810) (35.7143 33.3333) (40.4762 9.5238) + (50.0000 -9.5238) (59.5238 -23.8095) (69.0476 -33.3333) +INDEX 41 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 10 (35.7143 119.0476) (45.2381 109.5238) (54.7619 95.2381) + (64.2857 76.1905) (69.0476 52.3810) (69.0476 33.3333) (64.2857 9.5238) + (54.7619 -9.5238) (45.2381 -23.8095) (35.7143 -33.3333) +INDEX 42 STROKE 3 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (52.3810 71.4286) (52.3810 14.2857) + OPEN 2 (28.5715 57.1429) (76.1905 28.5714) + OPEN 2 (76.1905 57.1429) (28.5715 28.5714) +INDEX 43 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (52.3809 85.7143) (52.3809 0.0000) + OPEN 2 (9.5238 42.8571) (95.2381 42.8571) +INDEX 44 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 8 (57.1429 4.7619) (52.3810 0.0000) (47.6191 4.7619) + (52.3810 9.5238) (57.1429 4.7619) (57.1429 -4.7619) (52.3810 -14.2857) + (47.6191 -19.0476) +INDEX 45 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (9.5238 42.8571) (95.2381 42.8571) +INDEX 46 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 5 (52.3810 9.5238) (47.6191 4.7619) (52.3810 0.0000) + (57.1429 4.7619) (52.3810 9.5238) +INDEX 47 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (19.0476 -14.2857) (85.7143 100.0000) +INDEX 48 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 17 (47.6190 100.0000) (33.3333 95.2381) (23.8095 80.9524) + (19.0476 57.1429) (19.0476 42.8571) (23.8095 19.0476) (33.3333 4.7619) + (47.6190 0.0000) (57.1428 0.0000) (71.4286 4.7619) (80.9524 19.0476) + (85.7143 42.8571) (85.7143 57.1429) (80.9524 80.9524) (71.4286 95.2381) + (57.1428 100.0000) (47.6190 100.0000) +INDEX 49 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 4 (40.4762 80.9524) (50.0000 85.7143) (64.2857 100.0000) + (64.2857 0.0000) +INDEX 50 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 14 (23.8095 76.1905) (23.8095 80.9524) (28.5714 90.4762) + (33.3333 95.2381) (42.8571 100.0000) (61.9047 100.0000) (71.4286 95.2381) + (76.1905 90.4762) (80.9524 80.9524) (80.9524 71.4286) (76.1905 61.9048) + (66.6666 47.6190) (19.0476 0.0000) (85.7143 0.0000) +INDEX 51 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 15 (28.5714 100.0000) (80.9524 100.0000) (52.3809 61.9048) + (66.6666 61.9048) (76.1905 57.1429) (80.9524 52.3810) (85.7143 38.0952) + (85.7143 28.5714) (80.9524 14.2857) (71.4286 4.7619) (57.1428 0.0000) + (42.8571 0.0000) (28.5714 4.7619) (23.8095 9.5238) (19.0476 19.0476) +INDEX 52 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 3 (64.2857 100.0000) (16.6667 33.3333) (88.0952 33.3333) + OPEN 2 (64.2857 100.0000) (64.2857 0.0000) +INDEX 53 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 17 (76.1905 100.0000) (28.5714 100.0000) (23.8095 57.1429) + (28.5714 61.9048) (42.8571 66.6667) (57.1428 66.6667) (71.4286 61.9048) + (80.9524 52.3810) (85.7143 38.0952) (85.7143 28.5714) (80.9524 14.2857) + (71.4286 4.7619) (57.1428 0.0000) (42.8571 0.0000) (28.5714 4.7619) + (23.8095 9.5238) (19.0476 19.0476) +INDEX 54 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 23 (78.5714 85.7143) (73.8096 95.2381) (59.5238 100.0000) + (50.0000 100.0000) (35.7143 95.2381) (26.1905 80.9524) (21.4286 57.1429) + (21.4286 33.3333) (26.1905 14.2857) (35.7143 4.7619) (50.0000 0.0000) + (54.7619 0.0000) (69.0476 4.7619) (78.5714 14.2857) (83.3334 28.5714) + (83.3334 33.3333) (78.5714 47.6190) (69.0476 57.1429) (54.7619 61.9048) + (50.0000 61.9048) (35.7143 57.1429) (26.1905 47.6190) (21.4286 33.3333) +INDEX 55 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (85.7143 100.0000) (38.0952 0.0000) + OPEN 2 (19.0476 100.0000) (85.7143 100.0000) +INDEX 56 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 29 (42.8571 100.0000) (28.5714 95.2381) (23.8095 85.7143) + (23.8095 76.1905) (28.5714 66.6667) (38.0952 61.9048) (57.1428 57.1429) + (71.4286 52.3810) (80.9524 42.8571) (85.7143 33.3333) (85.7143 19.0476) + (80.9524 9.5238) (76.1905 4.7619) (61.9047 0.0000) (42.8571 0.0000) + (28.5714 4.7619) (23.8095 9.5238) (19.0476 19.0476) (19.0476 33.3333) + (23.8095 42.8571) (33.3333 52.3810) (47.6190 57.1429) (66.6666 61.9048) + (76.1905 66.6667) (80.9524 76.1905) (80.9524 85.7143) (76.1905 95.2381) + (61.9047 100.0000) (42.8571 100.0000) +INDEX 57 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 23 (83.3334 66.6667) (78.5714 52.3810) (69.0476 42.8571) + (54.7619 38.0952) (50.0000 38.0952) (35.7143 42.8571) (26.1905 52.3810) + (21.4286 66.6667) (21.4286 71.4286) (26.1905 85.7143) (35.7143 95.2381) + (50.0000 100.0000) (54.7619 100.0000) (69.0476 95.2381) (78.5714 85.7143) + (83.3334 66.6667) (83.3334 42.8571) (78.5714 19.0476) (69.0476 4.7619) + (54.7619 0.0000) (45.2381 0.0000) (30.9524 4.7619) (26.1905 14.2857) +INDEX 58 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 5 (52.3810 66.6667) (47.6191 61.9048) (52.3810 57.1429) + (57.1429 61.9048) (52.3810 66.6667) + OPEN 5 (52.3810 9.5238) (47.6191 4.7619) (52.3810 0.0000) + (57.1429 4.7619) (52.3810 9.5238) +INDEX 59 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 5 (52.3810 66.6667) (47.6191 61.9048) (52.3810 57.1429) + (57.1429 61.9048) (52.3810 66.6667) + OPEN 8 (57.1429 4.7619) (52.3810 0.0000) (47.6191 4.7619) + (52.3810 9.5238) (57.1429 4.7619) (57.1429 -4.7619) (52.3810 -14.2857) + (47.6191 -19.0476) +INDEX 60 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 3 (90.4762 85.7143) (14.2857 42.8571) (90.4762 0.0000) +INDEX 61 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (9.5238 57.1429) (95.2381 57.1429) + OPEN 2 (9.5238 28.5714) (95.2381 28.5714) +INDEX 62 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 3 (14.2857 85.7143) (90.4762 42.8571) (14.2857 0.0000) +INDEX 63 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 14 (23.8095 76.1905) (23.8095 80.9524) (28.5714 90.4762) + (33.3333 95.2381) (42.8571 100.0000) (61.9047 100.0000) (71.4285 95.2381) + (76.1905 90.4762) (80.9524 80.9524) (80.9524 71.4286) (76.1905 61.9048) + (71.4285 57.1429) (52.3809 47.6190) (52.3809 33.3333) + OPEN 5 (52.3809 9.5238) (47.6190 4.7619) (52.3809 0.0000) + (57.1428 4.7619) (52.3809 9.5238) +INDEX 64 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 8 (64.2857 52.3810) (54.7619 57.1429) (45.2381 57.1429) + (40.4762 47.6190) (40.4762 42.8571) (45.2381 33.3333) (54.7619 33.3333) + (64.2857 38.0952) + OPEN 19 (64.2857 57.1429) (64.2857 38.0952) (69.0476 33.3333) + (78.5714 33.3333) (83.3334 42.8571) (83.3334 47.6190) (78.5714 61.9048) + (69.0476 71.4286) (54.7619 76.1905) (50.0000 76.1905) (35.7143 71.4286) + (26.1905 61.9048) (21.4286 47.6190) (21.4286 42.8571) (26.1905 28.5714) + (35.7143 19.0476) (50.0000 14.2857) (54.7619 14.2857) (69.0476 19.0476) +INDEX 65 STROKE 3 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (52.3809 100.0000) (14.2857 0.0000) + OPEN 2 (52.3809 100.0000) (90.4762 0.0000) + OPEN 2 (28.5714 33.3333) (76.1905 33.3333) +INDEX 66 STROKE 3 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (19.0476 100.0000) (19.0476 0.0000) + OPEN 9 (19.0476 100.0000) (61.9047 100.0000) (76.1905 95.2381) + (80.9524 90.4762) (85.7143 80.9524) (85.7143 71.4286) (80.9524 61.9048) + (76.1905 57.1429) (61.9047 52.3810) + OPEN 10 (19.0476 52.3810) (61.9047 52.3810) (76.1905 47.6190) + (80.9524 42.8571) (85.7143 33.3333) (85.7143 19.0476) (80.9524 9.5238) + (76.1905 4.7619) (61.9047 0.0000) (19.0476 0.0000) +INDEX 67 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 18 (88.0952 76.1905) (83.3334 85.7143) (73.8096 95.2381) + (64.2857 100.0000) (45.2381 100.0000) (35.7143 95.2381) (26.1905 85.7143) + (21.4286 76.1905) (16.6667 61.9048) (16.6667 38.0952) (21.4286 23.8095) + (26.1905 14.2857) (35.7143 4.7619) (45.2381 0.0000) (64.2857 0.0000) + (73.8096 4.7619) (83.3334 14.2857) (88.0952 23.8095) +INDEX 68 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (19.0476 100.0000) (19.0476 0.0000) + OPEN 12 (19.0476 100.0000) (52.3809 100.0000) (66.6666 95.2381) + (76.1905 85.7143) (80.9524 76.1905) (85.7143 61.9048) (85.7143 38.0952) + (80.9524 23.8095) (76.1905 14.2857) (66.6666 4.7619) (52.3809 0.0000) + (19.0476 0.0000) +INDEX 69 STROKE 4 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (21.4286 100.0000) (21.4286 0.0000) + OPEN 2 (21.4286 100.0000) (83.3334 100.0000) + OPEN 2 (21.4286 52.3810) (59.5238 52.3810) + OPEN 2 (21.4286 0.0000) (83.3334 0.0000) +INDEX 70 STROKE 3 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (21.4286 100.0000) (21.4286 0.0000) + OPEN 2 (21.4286 100.0000) (83.3334 100.0000) + OPEN 2 (21.4286 52.3810) (59.5238 52.3810) +INDEX 71 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 19 (88.0952 76.1905) (83.3334 85.7143) (73.8096 95.2381) + (64.2857 100.0000) (45.2381 100.0000) (35.7143 95.2381) (26.1905 85.7143) + (21.4286 76.1905) (16.6667 61.9048) (16.6667 38.0952) (21.4286 23.8095) + (26.1905 14.2857) (35.7143 4.7619) (45.2381 0.0000) (64.2857 0.0000) + (73.8096 4.7619) (83.3334 14.2857) (88.0952 23.8095) (88.0952 38.0952) + OPEN 2 (64.2857 38.0952) (88.0952 38.0952) +INDEX 72 STROKE 3 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (19.0476 100.0000) (19.0476 0.0000) + OPEN 2 (85.7143 100.0000) (85.7143 0.0000) + OPEN 2 (19.0476 52.3810) (85.7143 52.3810) +INDEX 73 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (52.3810 100.0000) (52.3810 0.0000) +INDEX 74 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 10 (76.1905 100.0000) (76.1905 23.8095) (71.4286 9.5238) + (66.6667 4.7619) (57.1429 0.0000) (47.6191 0.0000) (38.0953 4.7619) + (33.3334 9.5238) (28.5715 23.8095) (28.5715 33.3333) +INDEX 75 STROKE 3 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (19.0476 100.0000) (19.0476 0.0000) + OPEN 2 (85.7143 100.0000) (19.0476 33.3333) + OPEN 2 (42.8571 57.1429) (85.7143 0.0000) +INDEX 76 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (23.8095 100.0000) (23.8095 0.0000) + OPEN 2 (23.8095 0.0000) (80.9524 0.0000) +INDEX 77 STROKE 4 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (14.2857 100.0000) (14.2857 0.0000) + OPEN 2 (14.2857 100.0000) (52.3809 0.0000) + OPEN 2 (90.4762 100.0000) (52.3809 0.0000) + OPEN 2 (90.4762 100.0000) (90.4762 0.0000) +INDEX 78 STROKE 3 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (19.0476 100.0000) (19.0476 0.0000) + OPEN 2 (19.0476 100.0000) (85.7143 0.0000) + OPEN 2 (85.7143 100.0000) (85.7143 0.0000) +INDEX 79 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 21 (42.8571 100.0000) (33.3333 95.2381) (23.8095 85.7143) + (19.0476 76.1905) (14.2857 61.9048) (14.2857 38.0952) (19.0476 23.8095) + (23.8095 14.2857) (33.3333 4.7619) (42.8571 0.0000) (61.9047 0.0000) + (71.4286 4.7619) (80.9524 14.2857) (85.7143 23.8095) (90.4762 38.0952) + (90.4762 61.9048) (85.7143 76.1905) (80.9524 85.7143) (71.4286 95.2381) + (61.9047 100.0000) (42.8571 100.0000) +INDEX 80 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (19.0476 100.0000) (19.0476 0.0000) + OPEN 10 (19.0476 100.0000) (61.9047 100.0000) (76.1905 95.2381) + (80.9524 90.4762) (85.7143 80.9524) (85.7143 66.6667) (80.9524 57.1429) + (76.1905 52.3810) (61.9047 47.6190) (19.0476 47.6190) +INDEX 81 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 21 (42.8571 100.0000) (33.3333 95.2381) (23.8095 85.7143) + (19.0476 76.1905) (14.2857 61.9048) (14.2857 38.0952) (19.0476 23.8095) + (23.8095 14.2857) (33.3333 4.7619) (42.8571 0.0000) (61.9047 0.0000) + (71.4286 4.7619) (80.9524 14.2857) (85.7143 23.8095) (90.4762 38.0952) + (90.4762 61.9048) (85.7143 76.1905) (80.9524 85.7143) (71.4286 95.2381) + (61.9047 100.0000) (42.8571 100.0000) + OPEN 2 (57.1428 19.0476) (85.7143 -9.5238) +INDEX 82 STROKE 3 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (19.0476 100.0000) (19.0476 0.0000) + OPEN 10 (19.0476 100.0000) (61.9047 100.0000) (76.1905 95.2381) + (80.9524 90.4762) (85.7143 80.9524) (85.7143 71.4286) (80.9524 61.9048) + (76.1905 57.1429) (61.9047 52.3810) (19.0476 52.3810) + OPEN 2 (52.3809 52.3810) (85.7143 0.0000) +INDEX 83 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 20 (85.7143 85.7143) (76.1905 95.2381) (61.9047 100.0000) + (42.8571 100.0000) (28.5714 95.2381) (19.0476 85.7143) (19.0476 76.1905) + (23.8095 66.6667) (28.5714 61.9048) (38.0952 57.1429) (66.6666 47.6190) + (76.1905 42.8571) (80.9524 38.0952) (85.7143 28.5714) (85.7143 14.2857) + (76.1905 4.7619) (61.9047 0.0000) (42.8571 0.0000) (28.5714 4.7619) + (19.0476 14.2857) +INDEX 84 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (52.3809 100.0000) (52.3809 0.0000) + OPEN 2 (19.0476 100.0000) (85.7143 100.0000) +INDEX 85 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 10 (19.0476 100.0000) (19.0476 28.5714) (23.8095 14.2857) + (33.3333 4.7619) (47.6190 0.0000) (57.1428 0.0000) (71.4286 4.7619) + (80.9524 14.2857) (85.7143 28.5714) (85.7143 100.0000) +INDEX 86 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (14.2857 100.0000) (52.3809 0.0000) + OPEN 2 (90.4762 100.0000) (52.3809 0.0000) +INDEX 87 STROKE 4 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (4.7619 100.0000) (28.5714 0.0000) + OPEN 2 (52.3809 100.0000) (28.5714 0.0000) + OPEN 2 (52.3809 100.0000) (76.1905 0.0000) + OPEN 2 (100.0000 100.0000) (76.1905 0.0000) +INDEX 88 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (19.0476 100.0000) (85.7143 0.0000) + OPEN 2 (85.7143 100.0000) (19.0476 0.0000) +INDEX 89 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 3 (14.2857 100.0000) (52.3809 52.3810) (52.3809 0.0000) + OPEN 2 (90.4762 100.0000) (52.3809 52.3810) +INDEX 90 STROKE 3 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (85.7143 100.0000) (19.0476 0.0000) + OPEN 2 (19.0476 100.0000) (85.7143 100.0000) + OPEN 2 (19.0476 0.0000) (85.7143 0.0000) +INDEX 91 STROKE 4 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (35.7143 119.0476) (35.7143 -33.3333) + OPEN 2 (40.4762 119.0476) (40.4762 -33.3333) + OPEN 2 (35.7143 119.0476) (69.0476 119.0476) + OPEN 2 (35.7143 -33.3333) (69.0476 -33.3333) +INDEX 92 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (19.0476 100.0000) (85.7143 -14.2857) +INDEX 93 STROKE 4 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (64.2857 119.0476) (64.2857 -33.3333) + OPEN 2 (69.0476 119.0476) (69.0476 -33.3333) + OPEN 2 (35.7143 119.0476) (69.0476 119.0476) + OPEN 2 (35.7143 -33.3333) (69.0476 -33.3333) +INDEX 94 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (52.3809 109.5238) (14.2857 42.8571) + OPEN 2 (52.3809 109.5238) (90.4762 42.8571) +INDEX 95 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 5 (0.0000 -33.3333) (104.7619 -33.3333) (104.7619 -28.5714) + (0.0000 -28.5714) (0.0000 -33.3333) +INDEX 96 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (42.8572 100.0000) (66.6667 71.4286) + OPEN 3 (42.8572 100.0000) (38.0953 95.2381) (66.6667 71.4286) +INDEX 97 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (80.9524 66.6667) (80.9524 0.0000) + OPEN 14 (80.9524 52.3810) (71.4285 61.9048) (61.9047 66.6667) + (47.6190 66.6667) (38.0952 61.9048) (28.5714 52.3810) (23.8095 38.0952) + (23.8095 28.5714) (28.5714 14.2857) (38.0952 4.7619) (47.6190 0.0000) + (61.9047 0.0000) (71.4285 4.7619) (80.9524 14.2857) +INDEX 98 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (23.8095 100.0000) (23.8095 0.0000) + OPEN 14 (23.8095 52.3810) (33.3333 61.9048) (42.8571 66.6667) + (57.1428 66.6667) (66.6666 61.9048) (76.1905 52.3810) (80.9524 38.0952) + (80.9524 28.5714) (76.1905 14.2857) (66.6666 4.7619) (57.1428 0.0000) + (42.8571 0.0000) (33.3333 4.7619) (23.8095 14.2857) +INDEX 99 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 14 (80.9524 52.3810) (71.4285 61.9048) (61.9047 66.6667) + (47.6190 66.6667) (38.0952 61.9048) (28.5714 52.3810) (23.8095 38.0952) + (23.8095 28.5714) (28.5714 14.2857) (38.0952 4.7619) (47.6190 0.0000) + (61.9047 0.0000) (71.4285 4.7619) (80.9524 14.2857) +INDEX 100 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (80.9524 100.0000) (80.9524 0.0000) + OPEN 14 (80.9524 52.3810) (71.4285 61.9048) (61.9047 66.6667) + (47.6190 66.6667) (38.0952 61.9048) (28.5714 52.3810) (23.8095 38.0952) + (23.8095 28.5714) (28.5714 14.2857) (38.0952 4.7619) (47.6190 0.0000) + (61.9047 0.0000) (71.4285 4.7619) (80.9524 14.2857) +INDEX 101 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 17 (23.8095 38.0952) (80.9524 38.0952) (80.9524 47.6190) + (76.1905 57.1429) (71.4285 61.9048) (61.9047 66.6667) (47.6190 66.6667) + (38.0952 61.9048) (28.5714 52.3810) (23.8095 38.0952) (23.8095 28.5714) + (28.5714 14.2857) (38.0952 4.7619) (47.6190 0.0000) (61.9047 0.0000) + (71.4285 4.7619) (80.9524 14.2857) +INDEX 102 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 5 (71.4286 100.0000) (61.9048 100.0000) (52.3810 95.2381) + (47.6191 80.9524) (47.6191 0.0000) + OPEN 2 (33.3334 66.6667) (66.6667 66.6667) +INDEX 103 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 7 (80.9524 66.6667) (80.9524 -9.5238) (76.1905 -23.8095) + (71.4285 -28.5714) (61.9047 -33.3333) (47.6190 -33.3333) (38.0952 -28.5714) + OPEN 14 (80.9524 52.3810) (71.4285 61.9048) (61.9047 66.6667) + (47.6190 66.6667) (38.0952 61.9048) (28.5714 52.3810) (23.8095 38.0952) + (23.8095 28.5714) (28.5714 14.2857) (38.0952 4.7619) (47.6190 0.0000) + (61.9047 0.0000) (71.4285 4.7619) (80.9524 14.2857) +INDEX 104 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (26.1905 100.0000) (26.1905 0.0000) + OPEN 7 (26.1905 47.6190) (40.4762 61.9048) (50.0000 66.6667) + (64.2857 66.6667) (73.8095 61.9048) (78.5715 47.6190) (78.5715 0.0000) +INDEX 105 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 5 (47.6191 100.0000) (52.3810 95.2381) (57.1429 100.0000) + (52.3810 104.7619) (47.6191 100.0000) + OPEN 2 (52.3810 66.6667) (52.3810 0.0000) +INDEX 106 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 5 (57.1429 100.0000) (61.9048 95.2381) (66.6667 100.0000) + (61.9048 104.7619) (57.1429 100.0000) + OPEN 5 (61.9048 66.6667) (61.9048 -14.2857) (57.1429 -28.5714) + (47.6191 -33.3333) (38.0953 -33.3333) +INDEX 107 STROKE 3 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (26.1905 100.0000) (26.1905 0.0000) + OPEN 2 (73.8095 66.6667) (26.1905 19.0476) + OPEN 2 (45.2381 38.0952) (78.5715 0.0000) +INDEX 108 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (52.3810 100.0000) (52.3810 0.0000) +INDEX 109 STROKE 3 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (0.0000 66.6667) (0.0000 0.0000) + OPEN 7 (0.0000 47.6190) (14.2857 61.9048) (23.8095 66.6667) + (38.0952 66.6667) (47.6190 61.9048) (52.3810 47.6190) (52.3810 0.0000) + OPEN 7 (52.3810 47.6190) (66.6667 61.9048) (76.1905 66.6667) + (90.4762 66.6667) (100.0000 61.9048) (104.7619 47.6190) (104.7619 0.0000) +INDEX 110 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (26.1905 66.6667) (26.1905 0.0000) + OPEN 7 (26.1905 47.6190) (40.4762 61.9048) (50.0000 66.6667) + (64.2857 66.6667) (73.8095 61.9048) (78.5715 47.6190) (78.5715 0.0000) +INDEX 111 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 17 (45.2381 66.6667) (35.7143 61.9048) (26.1905 52.3810) + (21.4286 38.0952) (21.4286 28.5714) (26.1905 14.2857) (35.7143 4.7619) + (45.2381 0.0000) (59.5238 0.0000) (69.0476 4.7619) (78.5714 14.2857) + (83.3334 28.5714) (83.3334 38.0952) (78.5714 52.3810) (69.0476 61.9048) + (59.5238 66.6667) (45.2381 66.6667) +INDEX 112 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (23.8095 66.6667) (23.8095 -33.3333) + OPEN 14 (23.8095 52.3810) (33.3333 61.9048) (42.8571 66.6667) + (57.1428 66.6667) (66.6666 61.9048) (76.1905 52.3810) (80.9524 38.0952) + (80.9524 28.5714) (76.1905 14.2857) (66.6666 4.7619) (57.1428 0.0000) + (42.8571 0.0000) (33.3333 4.7619) (23.8095 14.2857) +INDEX 113 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (80.9524 66.6667) (80.9524 -33.3333) + OPEN 14 (80.9524 52.3810) (71.4285 61.9048) (61.9047 66.6667) + (47.6190 66.6667) (38.0952 61.9048) (28.5714 52.3810) (23.8095 38.0952) + (23.8095 28.5714) (28.5714 14.2857) (38.0952 4.7619) (47.6190 0.0000) + (61.9047 0.0000) (71.4285 4.7619) (80.9524 14.2857) +INDEX 114 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (33.3334 66.6667) (33.3334 0.0000) + OPEN 5 (33.3334 38.0952) (38.0953 52.3810) (47.6191 61.9048) + (57.1429 66.6667) (71.4286 66.6667) +INDEX 115 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 17 (78.5715 52.3810) (73.8095 61.9048) (59.5238 66.6667) + (45.2381 66.6667) (30.9524 61.9048) (26.1905 52.3810) (30.9524 42.8571) + (40.4762 38.0952) (64.2857 33.3333) (73.8095 28.5714) (78.5715 19.0476) + (78.5715 14.2857) (73.8095 4.7619) (59.5238 0.0000) (45.2381 0.0000) + (30.9524 4.7619) (26.1905 14.2857) +INDEX 116 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 5 (47.6191 100.0000) (47.6191 19.0476) (52.3810 4.7619) + (61.9048 0.0000) (71.4286 0.0000) + OPEN 2 (33.3334 66.6667) (66.6667 66.6667) +INDEX 117 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 7 (26.1905 66.6667) (26.1905 19.0476) (30.9524 4.7619) + (40.4762 0.0000) (54.7619 0.0000) (64.2857 4.7619) (78.5715 19.0476) + OPEN 2 (78.5715 66.6667) (78.5715 0.0000) +INDEX 118 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (23.8095 66.6667) (52.3809 0.0000) + OPEN 2 (80.9524 66.6667) (52.3809 0.0000) +INDEX 119 STROKE 4 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (14.2857 66.6667) (33.3333 0.0000) + OPEN 2 (52.3809 66.6667) (33.3333 0.0000) + OPEN 2 (52.3809 66.6667) (71.4286 0.0000) + OPEN 2 (90.4762 66.6667) (71.4286 0.0000) +INDEX 120 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (26.1905 66.6667) (78.5715 0.0000) + OPEN 2 (78.5715 66.6667) (26.1905 0.0000) +INDEX 121 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (26.1905 66.6667) (54.7619 0.0000) + OPEN 6 (83.3334 66.6667) (54.7619 0.0000) (45.2381 -19.0476) + (35.7143 -28.5714) (26.1905 -33.3333) (21.4286 -33.3333) +INDEX 122 STROKE 3 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (78.5715 66.6667) (26.1905 0.0000) + OPEN 2 (26.1905 66.6667) (78.5715 66.6667) + OPEN 2 (26.1905 0.0000) (78.5715 0.0000) +INDEX 123 STROKE 3 CENTER 52.3810 RIGHT 104.7619 + OPEN 10 (64.2857 119.0476) (54.7619 114.2857) (50.0000 109.5238) + (45.2381 100.0000) (45.2381 90.4762) (50.0000 80.9524) (54.7619 76.1905) + (59.5238 66.6667) (59.5238 57.1429) (50.0000 47.6190) + OPEN 17 (54.7619 114.2857) (50.0000 104.7619) (50.0000 95.2381) + (54.7619 85.7143) (59.5238 80.9524) (64.2857 71.4286) (64.2857 61.9048) + (59.5238 52.3810) (40.4762 42.8571) (59.5238 33.3333) (64.2857 23.8095) + (64.2857 14.2857) (59.5238 4.7619) (54.7619 0.0000) (50.0000 -9.5238) + (50.0000 -19.0476) (54.7619 -28.5714) + OPEN 10 (50.0000 38.0952) (59.5238 28.5714) (59.5238 19.0476) + (54.7619 9.5238) (50.0000 4.7619) (45.2381 -4.7619) (45.2381 -14.2857) + (50.0000 -23.8095) (54.7619 -28.5714) (64.2857 -33.3333) +INDEX 124 STROKE 1 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (52.3810 119.0476) (52.3810 -33.3333) +INDEX 125 STROKE 3 CENTER 52.3810 RIGHT 104.7619 + OPEN 10 (40.4762 119.0476) (50.0000 114.2857) (54.7619 109.5238) + (59.5238 100.0000) (59.5238 90.4762) (54.7619 80.9524) (50.0000 76.1905) + (45.2381 66.6667) (45.2381 57.1429) (54.7619 47.6190) + OPEN 17 (50.0000 114.2857) (54.7619 104.7619) (54.7619 95.2381) + (50.0000 85.7143) (45.2381 80.9524) (40.4762 71.4286) (40.4762 61.9048) + (45.2381 52.3810) (64.2857 42.8571) (45.2381 33.3333) (40.4762 23.8095) + (40.4762 14.2857) (45.2381 4.7619) (50.0000 0.0000) (54.7619 -9.5238) + (54.7619 -19.0476) (50.0000 -28.5714) + OPEN 10 (54.7619 38.0952) (45.2381 28.5714) (45.2381 19.0476) + (50.0000 9.5238) (54.7619 4.7619) (59.5238 -4.7619) (59.5238 -14.2857) + (54.7619 -23.8095) (50.0000 -28.5714) (40.4762 -33.3333) +INDEX 126 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 11 (9.5238 28.5714) (9.5238 38.0952) (14.2857 52.3810) + (23.8095 57.1429) (33.3333 57.1429) (42.8571 52.3810) (61.9048 38.0952) + (71.4286 33.3333) (80.9524 33.3333) (90.4762 38.0952) (95.2381 47.6190) + OPEN 11 (9.5238 38.0952) (14.2857 47.6190) (23.8095 52.3810) + (33.3333 52.3810) (42.8571 47.6190) (61.9048 33.3333) (71.4286 28.5714) + (80.9524 28.5714) (90.4762 33.3333) (95.2381 47.6190) (95.2381 57.1429) +INDEX 127 STROKE 2 CENTER 52.3810 RIGHT 104.7619 + OPEN 2 (71.4286 100.0000) (33.3333 -33.3333) + OPEN 17 (47.6190 66.6667) (33.3333 61.9048) (23.8095 52.3810) + (19.0476 38.0952) (19.0476 23.8095) (23.8095 14.2857) (33.3333 4.7619) + (47.6190 0.0000) (57.1428 0.0000) (71.4286 4.7619) (80.9524 14.2857) + (85.7143 28.5714) (85.7143 42.8571) (80.9524 52.3810) (71.4286 61.9048) + (57.1428 66.6667) (47.6190 66.6667) diff --git a/freeglut/freeglut/genfonts/genfonts.c b/freeglut/freeglut/genfonts/genfonts.c new file mode 100644 index 0000000..83cd3b3 --- /dev/null +++ b/freeglut/freeglut/genfonts/genfonts.c @@ -0,0 +1,473 @@ +/* + * main.c + * + * A simple utility to generate the bitmap fonts to be used in freeglut. + * + * Copyright (c) 1999-2000 by Pawel W. Olszta + * Written by Pawel W. Olszta, + * Creation date: nie gru 26 21:52:36 CET 1999 + * + * 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 Sotware. + * + * 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 + * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifdef HAVE_CONFIG_H + #include +#endif + +#include +#include +#include + +#include +#include +#include + +/* + * Define the log domain + */ +#undef G_LOG_DOMAIN +#define G_LOG_DOMAIN "genfonts" + +/* + * The alphabet we want to export. + */ +gchar* g_Alphabet = " abcdefghijklmnopqrstuwvxyzABCDEFGHIJKLMNOPQRSTUWVXYZ0123456789`~!@#$%^&*()-_=+[{}];:,.<>/?\\\""; +gint g_AlphabetLength = 0; + +/* + * All undefined characters will get replaced by this one: + */ +gchar g_NoChar = '*'; + +/* + * The stream we want to redirect our output to + */ +FILE* g_Output = NULL; + +/* + * The display we're getting the fonts from + */ +Display* g_Display; + +/* + * This function outputs the font file prologue + */ +void OutputPrologue( gchar* fileName ) +{ + /* + * Output the copyright and permission notices: + */ + fprintf( g_Output, "/*\n * %s\n *\n * This file has been automatically generated by the genfonts utility.\n *\n", fileName ); + fprintf( g_Output, " * Copyright (c) 1999-2000 by Pawel W. Olszta\n * Written by Pawel W. Olszta, \n * \n" ); + fprintf( g_Output, " * Permission is hereby granted, free of charge, to any person obtaining a\n" ); + fprintf( g_Output, " * copy of this software and associated documentation files (the \"Software\"),\n" ); + fprintf( g_Output, " * to deal in the Software without restriction, including without limitation\n" ); + fprintf( g_Output, " * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n" ); + fprintf( g_Output, " * and/or sell copies of the Software, and to permit persons to whom the\n" ); + fprintf( g_Output, " * Software is furnished to do so, subject to the following conditions:\n *\n" ); + fprintf( g_Output, " * The above copyright notice and this permission notice shall be included\n" ); + fprintf( g_Output, " * in all copies or substantial portions of the Sotware.\n *\n" ); + fprintf( g_Output, " * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n" ); + fprintf( g_Output, " * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n" ); + fprintf( g_Output, " * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n" ); + fprintf( g_Output, " * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n" ); + fprintf( g_Output, " * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n" ); + fprintf( g_Output, " * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n" ); + + /* + * The obvious include headers + */ + fprintf( g_Output, "\n#ifdef HAVE_CONFIG_H\n#include \"config.h\"\n#endif\n\n#include \"../include/GL/freeglut.h\"\n#include \"../include/GL/freeglut_internal.h\"\n" ); +} + +/* + * This function outputs a font set + */ +void OutputFont( gchar* freeglutFontName, gchar* fontName ) +{ + gint character, lineWidth, maxWidth = 0, maxHeight = 0; + XFontStruct* fontStruct = NULL; + XGCValues contextValues; + XImage* image = NULL; + guchar* lineBuffer; + Pixmap buffer; + GC context; + + /* + * Check if there is a font that meets our requirements + */ + fontStruct = XLoadQueryFont( g_Display, fontName ); + + if( fontStruct == NULL ) + { + /* + * Whoops, the font was not found + */ + g_error( "couldn't get font `%s' using local display", fontName ); + } + + /* + * Get the maximum size of the font characters + */ + maxWidth = fontStruct->max_bounds.rbearing - fontStruct->min_bounds.lbearing; + maxHeight = fontStruct->max_bounds.ascent + fontStruct->max_bounds.descent; + + /* + * Allocate the line buffer for storing the font bitmap lines + */ + lineBuffer = g_new0( guchar, maxWidth ); + + /* + * Create a pixmap buffer where we'll be rendering our fonts to. + */ + buffer = XCreatePixmap( + g_Display, + RootWindow( g_Display, DefaultScreen( g_Display ) ), + maxWidth, + maxHeight, + 1 + ); + + /* + * We'll need a graphics context to handle the font writes and buffer clears + */ + context = XCreateGC( + g_Display, + buffer, + 0, + &contextValues + ); + + /* + * Have the font assigned to the graphics context + */ + XSetFont( g_Display, context, fontStruct->fid ); + + /* + * For every character we want to have outputted... + */ + for( character=0; charactermin_bounds.lbearing, + fontStruct->max_bounds.ascent, + (g_Alphabet + character), + 1 + ); + + /* + * We need some a way to access the font we've just drawn: + */ + image = XGetImage( + g_Display, + buffer, + 0, 0, + maxWidth, maxHeight, + 1, XYPixmap + ); + + /* + * Find the first non-empty column: + */ + start_x = -1; stop_x = -1; + + for( x=0; x=0; x-- ) + for( y=0; y=0; y-- ) + { + /* + * Prepare the line buffer for being used again + */ + memset( lineBuffer, 0, maxWidth ); + + /* + * Grab the rasterized character face into the line buffer + */ + for( x=start_x, lineWidth=0; x -- the display to connect to + * -file -- the destination file name + */ + while( i < argc ) + { + /* + * See what the current token is + */ + if( g_strcasecmp( argv[ i ], "-display" ) == 0 ) + { + g_assert( (i + 1) < argc ); + g_free( displayName ); + + /* + * The next token is expected to contain the X display name to use + */ + displayName = g_strdup( (gchar *) argv[ ++i ] ); + } + else if( g_strcasecmp( argv[ i ], "-file" ) == 0 ) + { + g_assert( (i + 1) < argc ); + g_free( outputFileName ); + + /* + * The next token is expected to contain the destination file name + */ + outputFileName = g_strdup( (gchar *) argv[ ++i ] ); + } + + /* + * Get to the next argument + */ + i++; + } + + /* + * Connect to the X display + */ + g_Display = XOpenDisplay( displayName ); + g_assert( g_Display != NULL ); + + /* + * Have the destination file opened + */ + g_Output = fopen( outputFileName, "wt" ); + g_assert( g_Output != NULL ); + + /* + * Output the file header first + */ + OutputPrologue( outputFileName ); + + /* + * In the file header, have the list of the fonts written: + */ + fprintf( g_Output, "\n/*\n * Following fonts are defined in this file:\n * \n" ); + + for( i=0; i\n", + i + 1, fontsList[ i*2 + 0 ], fontsList[ i*2 + 1 ] + ); + + fprintf( g_Output, " */\n\n" ); + + /* + * Output all of the fonts we want to output + */ + for( i=0; i + * Creation date: czw sty 06 19:42:30 CET 2000 + * + * 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 Sotware. + * + * 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 + * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +#ifdef HAVE_CONFIG_H + #include +#endif + +#include + +#include +#include +#include + +/* + * Define the log domain + */ +#undef G_LOG_DOMAIN +#define G_LOG_DOMAIN "genstroke" + +/* + * The alphabet we want to export. + */ +gchar* g_Alphabet = " abcdefghijklmnopqrstuwvxyzABCDEFGHIJKLMNOPQRSTUWVXYZ0123456789`~!@#$%^&*()-_=+[{}];:,.<>/?\\\""; +gint g_AlphabetLength = 0; + +/* + * All undefined characters will get replaced by this one: + */ +gchar g_NoChar = '*'; + +/* + * The stream we want to redirect our output to + */ +FILE* g_Output = NULL; + +/* + * This function outputs the font file prologue + */ +void OutputPrologue( gchar* fileName ) +{ + /* + * Output the copyright and permission notices: + */ + fprintf( g_Output, "/*\n * %s\n *\n * This file has been automatically generated by the genfonts utility.\n *\n", fileName ); + fprintf( g_Output, " * Copyright (c) 1999-2000 by Pawel W. Olszta\n * Written by Pawel W. Olszta, \n * \n" ); + fprintf( g_Output, " * Permission is hereby granted, free of charge, to any person obtaining a\n" ); + fprintf( g_Output, " * copy of this software and associated documentation files (the \"Software\"),\n" ); + fprintf( g_Output, " * to deal in the Software without restriction, including without limitation\n" ); + fprintf( g_Output, " * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n" ); + fprintf( g_Output, " * and/or sell copies of the Software, and to permit persons to whom the\n" ); + fprintf( g_Output, " * Software is furnished to do so, subject to the following conditions:\n *\n" ); + fprintf( g_Output, " * The above copyright notice and this permission notice shall be included\n" ); + fprintf( g_Output, " * in all copies or substantial portions of the Sotware.\n *\n" ); + fprintf( g_Output, " * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n" ); + fprintf( g_Output, " * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n" ); + fprintf( g_Output, " * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n" ); + fprintf( g_Output, " * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n" ); + fprintf( g_Output, " * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n" ); + fprintf( g_Output, " * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n" ); + + /* + * The obvious include headers + */ + fprintf( g_Output, "\n#ifdef HAVE_CONFIG_H\n#include \"config.h\"\n#endif\n\n#include \"../include/GL/freeglut.h\"\n#include \"../include/GL/freeglut_internal.h\"\n" ); +} + +/* + * This function outputs a font set + */ +void OutputFont( gchar* freeglutFontName, gchar* fontName ) +{ + /* + * This is an easy one. I just have to write a parser for the SRC files + * and dump their contents to the output file. Expect this to be done + * this weekend. The output data should be organized just like the bitmap + * fonts data, as it shown to be good. + */ +} + +/* + * This function outputs the font file epilogue + */ +void OutputEpilogue( void ) +{ + fprintf( g_Output, "/*** END OF FILE ***/\n" ); +} + +/* + * The main function processes the command line arguments + * and outputs all the fonts we need to have rasterized. + */ +int main( int argc, char** argv ) +{ + gchar ourCharacter[ 2 ] = { 0, 0 }; + gchar* outputFileName = NULL; + gint i = 1; + + /* + * Initialize the alphabet's length + */ + g_AlphabetLength = strlen( g_Alphabet ); + + /* + * Make sure that the no-character character is in the alphabet + */ + ourCharacter[ 0 ] = g_NoChar; + + if( strstr( g_Alphabet, ourCharacter ) == NULL ) + g_error( "the g_NoChar `%c' character not found in the alphabet `%s'", g_NoChar, g_Alphabet ); + + /* + * Define the default output file name + */ + outputFileName = g_strdup( "freeglut_font_stroke.c" ); + + /* + * Process the command line arguments now. Command line arguments expected: + * + * -file -- the destination file name + */ + while( i < argc ) + { + /* + * See what the current token is + */ + if( g_strcasecmp( argv[ i ], "-file" ) == 0 ) + { + g_assert( (i + 1) < argc ); + g_free( outputFileName ); + + /* + * The next token is expected to contain the destination file name + */ + outputFileName = g_strdup( (gchar *) argv[ ++i ] ); + } + + /* + * Get to the next argument + */ + i++; + } + + /* + * Have the destination file opened + */ + g_Output = fopen( outputFileName, "wt" ); + g_assert( g_Output != NULL ); + + /* + * Output the file header first + */ + OutputPrologue( outputFileName ); + + /* + * Output all of the fonts we want to output + */ + OutputFont( "Roman", "Roman.src" ); + OutputFont( "RomanMono", "Roman_M.src" ); + + /* + * Finally, have the file epilogue outputted + */ + OutputEpilogue(); + + /* + * Close the output stream + */ + fclose( g_Output ); + + /* + * Clean up all the rest of the mess + */ + g_free( outputFileName ); + + /* + * Return successful! + */ + return( EXIT_SUCCESS ); +} + +/*** END OF FILE ***/ diff --git a/freeglut/freeglut/include/GL/Makefile b/freeglut/freeglut/include/GL/Makefile new file mode 100644 index 0000000..0a889bf --- /dev/null +++ b/freeglut/freeglut/include/GL/Makefile @@ -0,0 +1,233 @@ +# Generated automatically from Makefile.in by configure. +# Makefile.in generated automatically by automake 1.4 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + +SHELL = /bin/sh + +srcdir = . +top_srcdir = ../.. +prefix = /usr/local +exec_prefix = ${prefix} + +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 +infodir = ${prefix}/info +mandir = ${prefix}/man +includedir = ${prefix}/include +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/freeglut +pkglibdir = $(libdir)/freeglut +pkgincludedir = $(includedir)/freeglut + +top_builddir = ../.. + +ACLOCAL = aclocal +AUTOCONF = autoconf +AUTOMAKE = automake +AUTOHEADER = autoheader + +INSTALL = /usr/bin/ginstall -c +INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_SCRIPT = ${INSTALL_PROGRAM} +transform = s,x,x, + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = i686-suse-linux +host_triplet = i686-suse-linux-gnu +AS = @AS@ +CC = gcc +DLLTOOL = @DLLTOOL@ +EXEEXT = +LIBM = -lm +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIBTOOL_DEPS = ./ltconfig ./ltmain.sh +LN_S = ln -s +MAKEINFO = makeinfo +OBJDUMP = @OBJDUMP@ +PACKAGE = freeglut +RANLIB = ranlib +VERSION = 0.1 + +GLincludedir = $(includedir)/GL + +EXTRA_DIST = freeglut.h freeglut_internal.h +GLinclude_HEADERS = freeglut.h +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = ../../config.h +CONFIG_CLEAN_FILES = +HEADERS = $(GLinclude_HEADERS) + +DIST_COMMON = Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP_ENV = --best +all: all-redirect +.SUFFIXES: +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --gnu include/GL/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +install-GLincludeHEADERS: $(GLinclude_HEADERS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(GLincludedir) + @list='$(GLinclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \ + echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(GLincludedir)/$$p"; \ + $(INSTALL_DATA) $$d$$p $(DESTDIR)$(GLincludedir)/$$p; \ + done + +uninstall-GLincludeHEADERS: + @$(NORMAL_UNINSTALL) + list='$(GLinclude_HEADERS)'; for p in $$list; do \ + rm -f $(DESTDIR)$(GLincludedir)/$$p; \ + done + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = include/GL + +distdir: $(DISTFILES) + here=`cd $(top_builddir) && pwd`; \ + top_distdir=`cd $(top_distdir) && pwd`; \ + distdir=`cd $(distdir) && pwd`; \ + cd $(top_srcdir) \ + && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu include/GL/Makefile + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done +info-am: +info: info-am +dvi-am: +dvi: dvi-am +check-am: all-am +check: check-am +installcheck-am: +installcheck: installcheck-am +install-exec-am: +install-exec: install-exec-am + +install-data-am: install-GLincludeHEADERS +install-data: install-data-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-am +uninstall-am: uninstall-GLincludeHEADERS +uninstall: uninstall-am +all-am: Makefile $(HEADERS) +all-redirect: all-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: + $(mkinstalldirs) $(DESTDIR)$(GLincludedir) + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-tags mostlyclean-generic + +mostlyclean: mostlyclean-am + +clean-am: clean-tags clean-generic mostlyclean-am + +clean: clean-am + +distclean-am: distclean-tags distclean-generic clean-am + -rm -f libtool + +distclean: distclean-am + +maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ + distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-am + +.PHONY: uninstall-GLincludeHEADERS install-GLincludeHEADERS tags \ +mostlyclean-tags distclean-tags clean-tags maintainer-clean-tags \ +distdir info-am info dvi-am dvi check check-am installcheck-am \ +installcheck install-exec-am install-exec install-data-am install-data \ +install-am install uninstall-am uninstall all-redirect all-am all \ +installdirs mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/freeglut/freeglut/include/GL/Makefile.am b/freeglut/freeglut/include/GL/Makefile.am new file mode 100644 index 0000000..6b12e46 --- /dev/null +++ b/freeglut/freeglut/include/GL/Makefile.am @@ -0,0 +1,7 @@ +## Process this file with automake to produce Makefile.in + +GLincludedir = $(includedir)/GL + +EXTRA_DIST = freeglut.h freeglut_internal.h +GLinclude_HEADERS = freeglut.h + diff --git a/freeglut/freeglut/include/GL/Makefile.in b/freeglut/freeglut/include/GL/Makefile.in new file mode 100644 index 0000000..0cecf12 --- /dev/null +++ b/freeglut/freeglut/include/GL/Makefile.in @@ -0,0 +1,233 @@ +# Makefile.in generated automatically by automake 1.4 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = ../.. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +AS = @AS@ +CC = @CC@ +DLLTOOL = @DLLTOOL@ +EXEEXT = @EXEEXT@ +LIBM = @LIBM@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_DEPS = @LIBTOOL_DEPS@ +LN_S = @LN_S@ +MAKEINFO = @MAKEINFO@ +OBJDUMP = @OBJDUMP@ +PACKAGE = @PACKAGE@ +RANLIB = @RANLIB@ +VERSION = @VERSION@ + +GLincludedir = $(includedir)/GL + +EXTRA_DIST = freeglut.h freeglut_internal.h +GLinclude_HEADERS = freeglut.h +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = ../../config.h +CONFIG_CLEAN_FILES = +HEADERS = $(GLinclude_HEADERS) + +DIST_COMMON = Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP_ENV = --best +all: all-redirect +.SUFFIXES: +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --gnu include/GL/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +install-GLincludeHEADERS: $(GLinclude_HEADERS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(GLincludedir) + @list='$(GLinclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \ + echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(GLincludedir)/$$p"; \ + $(INSTALL_DATA) $$d$$p $(DESTDIR)$(GLincludedir)/$$p; \ + done + +uninstall-GLincludeHEADERS: + @$(NORMAL_UNINSTALL) + list='$(GLinclude_HEADERS)'; for p in $$list; do \ + rm -f $(DESTDIR)$(GLincludedir)/$$p; \ + done + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = include/GL + +distdir: $(DISTFILES) + here=`cd $(top_builddir) && pwd`; \ + top_distdir=`cd $(top_distdir) && pwd`; \ + distdir=`cd $(distdir) && pwd`; \ + cd $(top_srcdir) \ + && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu include/GL/Makefile + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done +info-am: +info: info-am +dvi-am: +dvi: dvi-am +check-am: all-am +check: check-am +installcheck-am: +installcheck: installcheck-am +install-exec-am: +install-exec: install-exec-am + +install-data-am: install-GLincludeHEADERS +install-data: install-data-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-am +uninstall-am: uninstall-GLincludeHEADERS +uninstall: uninstall-am +all-am: Makefile $(HEADERS) +all-redirect: all-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: + $(mkinstalldirs) $(DESTDIR)$(GLincludedir) + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-tags mostlyclean-generic + +mostlyclean: mostlyclean-am + +clean-am: clean-tags clean-generic mostlyclean-am + +clean: clean-am + +distclean-am: distclean-tags distclean-generic clean-am + -rm -f libtool + +distclean: distclean-am + +maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ + distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-am + +.PHONY: uninstall-GLincludeHEADERS install-GLincludeHEADERS tags \ +mostlyclean-tags distclean-tags clean-tags maintainer-clean-tags \ +distdir info-am info dvi-am dvi check check-am installcheck-am \ +installcheck install-exec-am install-exec install-data-am install-data \ +install-am install uninstall-am uninstall all-redirect all-am all \ +installdirs mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/freeglut/freeglut/include/GL/freeglut.h b/freeglut/freeglut/include/GL/freeglut.h new file mode 100644 index 0000000..b4d6acb --- /dev/null +++ b/freeglut/freeglut/include/GL/freeglut.h @@ -0,0 +1,526 @@ +/* + * freeglut.h + * + * The freeglut library include file + * + * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved. + * Written by Pawel W. Olszta, + * Creation date: Thu Dec 2 1999 + * + * 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 + * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef FREEGLUT_H +#define FREEGLUT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* + * Under windows, we've got some issues to solve + */ +#if defined(WIN32) +# if defined(FREEGLUT_LIBRARY_BUILD) +# define FGAPI __declspec(dllexport) +# else +# define FGAPI __declspec(dllimport) +# endif +# define FGAPIENTRY __stdcall +#else +# define FGAPI +# define FGAPIENTRY +#endif + +/* + * The freeglut and GLUT API versions + */ +#define FREEGLUT 1 +#define GLUT_API_VERSION 4 + +/* + * Always include OpenGL and GLU headers + */ +#include +#include + +/* + * GLUT API macro definitions -- the special key codes: + */ +#define GLUT_KEY_F1 0x0001 +#define GLUT_KEY_F2 0x0002 +#define GLUT_KEY_F3 0x0003 +#define GLUT_KEY_F4 0x0004 +#define GLUT_KEY_F5 0x0005 +#define GLUT_KEY_F6 0x0006 +#define GLUT_KEY_F7 0x0007 +#define GLUT_KEY_F8 0x0008 +#define GLUT_KEY_F9 0x0009 +#define GLUT_KEY_F10 0x000A +#define GLUT_KEY_F11 0x000B +#define GLUT_KEY_F12 0x000C +#define GLUT_KEY_LEFT 0x0064 +#define GLUT_KEY_UP 0x0065 +#define GLUT_KEY_RIGHT 0x0066 +#define GLUT_KEY_DOWN 0x0067 +#define GLUT_KEY_PAGE_UP 0x0068 +#define GLUT_KEY_PAGE_DOWN 0x0069 +#define GLUT_KEY_HOME 0x006A +#define GLUT_KEY_END 0x006B +#define GLUT_KEY_INSERT 0x006C + +/* + * GLUT API macro definitions -- mouse state definitions + */ +#define GLUT_LEFT_BUTTON 0x0000 +#define GLUT_MIDDLE_BUTTON 0x0001 +#define GLUT_RIGHT_BUTTON 0x0002 +#define GLUT_DOWN 0x0000 +#define GLUT_UP 0x0001 +#define GLUT_LEFT 0x0000 +#define GLUT_ENTERED 0x0001 + +/* + * GLUT API macro definitions -- the display mode definitions + */ +#define GLUT_RGB 0x0000 +#define GLUT_RGBA 0x0000 +#define GLUT_INDEX 0x0001 +#define GLUT_SINGLE 0x0000 +#define GLUT_DOUBLE 0x0002 +#define GLUT_ACCUM 0x0004 +#define GLUT_ALPHA 0x0008 +#define GLUT_DEPTH 0x0010 +#define GLUT_STENCIL 0x0020 +#define GLUT_MULTISAMPLE 0x0080 +#define GLUT_STEREO 0x0100 +#define GLUT_LUMINANCE 0x0200 + +/* + * GLUT API macro definitions -- windows and menu related definitions + */ +#define GLUT_MENU_NOT_IN_USE 0x0000 +#define GLUT_MENU_IN_USE 0x0001 +#define GLUT_NOT_VISIBLE 0x0000 +#define GLUT_VISIBLE 0x0001 +#define GLUT_HIDDEN 0x0000 +#define GLUT_FULLY_RETAINED 0x0001 +#define GLUT_PARTIALLY_RETAINED 0x0002 +#define GLUT_FULLY_COVERED 0x0003 + +/* + * GLUT API macro definitions -- fonts definitions + * + * Steve Baker suggested to make it binary compatible with GLUT: + */ +#if defined(WIN32) +# define GLUT_STROKE_ROMAN ((void *)0x0000) +# define GLUT_STROKE_MONO_ROMAN ((void *)0x0001) +# define GLUT_BITMAP_9_BY_15 ((void *)0x0002) +# define GLUT_BITMAP_8_BY_13 ((void *)0x0003) +# define GLUT_BITMAP_TIMES_ROMAN_10 ((void *)0x0004) +# define GLUT_BITMAP_TIMES_ROMAN_24 ((void *)0x0005) +# define GLUT_BITMAP_HELVETICA_10 ((void *)0x0006) +# define GLUT_BITMAP_HELVETICA_12 ((void *)0x0007) +# define GLUT_BITMAP_HELVETICA_18 ((void *)0x0008) +#else + /* + * I don't really know if it's a good idea... But here it goes: + */ + extern void* glutStrokeRoman; + extern void* glutStrokeMonoRoman; + extern void* glutBitmap9By15; + extern void* glutBitmap8By13; + extern void* glutBitmapTimesRoman10; + extern void* glutBitmapTimesRoman24; + extern void* glutBitmapHelvetica10; + extern void* glutBitmapHelvetica12; + extern void* glutBitmapHelvetica18; + + /* + * Those pointers will be used by following definitions: + */ +# define GLUT_STROKE_ROMAN ((void *) &glutStrokeRoman) +# define GLUT_STROKE_MONO_ROMAN ((void *) &glutStrokeMonoRoman) +# define GLUT_BITMAP_9_BY_15 ((void *) &glutBitmap9By15) +# define GLUT_BITMAP_8_BY_13 ((void *) &glutBitmap8By13) +# define GLUT_BITMAP_TIMES_ROMAN_10 ((void *) &glutBitmapTimesRoman10) +# define GLUT_BITMAP_TIMES_ROMAN_24 ((void *) &glutBitmapTimesRoman24) +# define GLUT_BITMAP_HELVETICA_10 ((void *) &glutBitmapHelvetica10) +# define GLUT_BITMAP_HELVETICA_12 ((void *) &glutBitmapHelvetica12) +# define GLUT_BITMAP_HELVETICA_18 ((void *) &glutBitmapHelvetica18) +#endif + +/* + * GLUT API macro definitions -- the glutGet parameters + */ +#define GLUT_WINDOW_X 0x0064 +#define GLUT_WINDOW_Y 0x0065 +#define GLUT_WINDOW_WIDTH 0x0066 +#define GLUT_WINDOW_HEIGHT 0x0067 +#define GLUT_WINDOW_BUFFER_SIZE 0x0068 +#define GLUT_WINDOW_STENCIL_SIZE 0x0069 +#define GLUT_WINDOW_DEPTH_SIZE 0x006A +#define GLUT_WINDOW_RED_SIZE 0x006B +#define GLUT_WINDOW_GREEN_SIZE 0x006C +#define GLUT_WINDOW_BLUE_SIZE 0x006D +#define GLUT_WINDOW_ALPHA_SIZE 0x006E +#define GLUT_WINDOW_ACCUM_RED_SIZE 0x006F +#define GLUT_WINDOW_ACCUM_GREEN_SIZE 0x0070 +#define GLUT_WINDOW_ACCUM_BLUE_SIZE 0x0071 +#define GLUT_WINDOW_ACCUM_ALPHA_SIZE 0x0072 +#define GLUT_WINDOW_DOUBLEBUFFER 0x0073 +#define GLUT_WINDOW_RGBA 0x0074 +#define GLUT_WINDOW_PARENT 0x0075 +#define GLUT_WINDOW_NUM_CHILDREN 0x0076 +#define GLUT_WINDOW_COLORMAP_SIZE 0x0077 +#define GLUT_WINDOW_NUM_SAMPLES 0x0078 +#define GLUT_WINDOW_STEREO 0x0079 +#define GLUT_WINDOW_CURSOR 0x007A + +#define GLUT_SCREEN_WIDTH 0x00C8 +#define GLUT_SCREEN_HEIGHT 0x00C9 +#define GLUT_SCREEN_WIDTH_MM 0x00CA +#define GLUT_SCREEN_HEIGHT_MM 0x00CB +#define GLUT_MENU_NUM_ITEMS 0x012C +#define GLUT_DISPLAY_MODE_POSSIBLE 0x0190 +#define GLUT_INIT_WINDOW_X 0x01F4 +#define GLUT_INIT_WINDOW_Y 0x01F5 +#define GLUT_INIT_WINDOW_WIDTH 0x01F6 +#define GLUT_INIT_WINDOW_HEIGHT 0x01F7 +#define GLUT_INIT_DISPLAY_MODE 0x01F8 +#define GLUT_ELAPSED_TIME 0x02BC +#define GLUT_WINDOW_FORMAT_ID 0x007B + +/* + * GLUT API macro definitions -- the glutDeviceGet parameters + */ +#define GLUT_HAS_KEYBOARD 0x0258 +#define GLUT_HAS_MOUSE 0x0259 +#define GLUT_HAS_SPACEBALL 0x025A +#define GLUT_HAS_DIAL_AND_BUTTON_BOX 0x025B +#define GLUT_HAS_TABLET 0x025C +#define GLUT_NUM_MOUSE_BUTTONS 0x025D +#define GLUT_NUM_SPACEBALL_BUTTONS 0x025E +#define GLUT_NUM_BUTTON_BOX_BUTTONS 0x025F +#define GLUT_NUM_DIALS 0x0260 +#define GLUT_NUM_TABLET_BUTTONS 0x0261 +#define GLUT_DEVICE_IGNORE_KEY_REPEAT 0x0262 +#define GLUT_DEVICE_KEY_REPEAT 0x0263 +#define GLUT_HAS_JOYSTICK 0x0264 +#define GLUT_OWNS_JOYSTICK 0x0265 +#define GLUT_JOYSTICK_BUTTONS 0x0266 +#define GLUT_JOYSTICK_AXES 0x0267 +#define GLUT_JOYSTICK_POLL_RATE 0x0268 + +/* + * GLUT API macro definitions -- the glutLayerGet parameters + */ +#define GLUT_OVERLAY_POSSIBLE 0x0320 +#define GLUT_LAYER_IN_USE 0x0321 +#define GLUT_HAS_OVERLAY 0x0322 +#define GLUT_TRANSPARENT_INDEX 0x0323 +#define GLUT_NORMAL_DAMAGED 0x0324 +#define GLUT_OVERLAY_DAMAGED 0x0325 + +/* + * GLUT API macro definitions -- the glutVideoResizeGet parameters + */ +#define GLUT_VIDEO_RESIZE_POSSIBLE 0x0384 +#define GLUT_VIDEO_RESIZE_IN_USE 0x0385 +#define GLUT_VIDEO_RESIZE_X_DELTA 0x0386 +#define GLUT_VIDEO_RESIZE_Y_DELTA 0x0387 +#define GLUT_VIDEO_RESIZE_WIDTH_DELTA 0x0388 +#define GLUT_VIDEO_RESIZE_HEIGHT_DELTA 0x0389 +#define GLUT_VIDEO_RESIZE_X 0x038A +#define GLUT_VIDEO_RESIZE_Y 0x038B +#define GLUT_VIDEO_RESIZE_WIDTH 0x038C +#define GLUT_VIDEO_RESIZE_HEIGHT 0x038D + +/* + * GLUT API macro definitions -- the glutUseLayer parameters + */ +#define GLUT_NORMAL 0x0000 +#define GLUT_OVERLAY 0x0001 + +/* + * GLUT API macro definitions -- the glutGetModifiers parameters + */ +#define GLUT_ACTIVE_SHIFT 0x0001 +#define GLUT_ACTIVE_CTRL 0x0004 +#define GLUT_ACTIVE_ALT 0x0008 + +/* + * GLUT API macro definitions -- the glutSetCursor parameters + */ +#define GLUT_CURSOR_RIGHT_ARROW 0x0000 +#define GLUT_CURSOR_LEFT_ARROW 0x0001 +#define GLUT_CURSOR_INFO 0x0002 +#define GLUT_CURSOR_DESTROY 0x0003 +#define GLUT_CURSOR_HELP 0x0004 +#define GLUT_CURSOR_CYCLE 0x0005 +#define GLUT_CURSOR_SPRAY 0x0006 +#define GLUT_CURSOR_WAIT 0x0007 +#define GLUT_CURSOR_TEXT 0x0008 +#define GLUT_CURSOR_CROSSHAIR 0x0009 +#define GLUT_CURSOR_UP_DOWN 0x000A +#define GLUT_CURSOR_LEFT_RIGHT 0x000B +#define GLUT_CURSOR_TOP_SIDE 0x000C +#define GLUT_CURSOR_BOTTOM_SIDE 0x000D +#define GLUT_CURSOR_LEFT_SIDE 0x000E +#define GLUT_CURSOR_RIGHT_SIDE 0x000F +#define GLUT_CURSOR_TOP_LEFT_CORNER 0x0010 +#define GLUT_CURSOR_TOP_RIGHT_CORNER 0x0011 +#define GLUT_CURSOR_BOTTOM_RIGHT_CORNER 0x0012 +#define GLUT_CURSOR_BOTTOM_LEFT_CORNER 0x0013 +#define GLUT_CURSOR_INHERIT 0x0064 +#define GLUT_CURSOR_NONE 0x0065 +#define GLUT_CURSOR_FULL_CROSSHAIR 0x0066 + +/* + * GLUT API macro definitions -- RGB color component specification definitions + */ +#define GLUT_RED 0x0000 +#define GLUT_GREEN 0x0001 +#define GLUT_BLUE 0x0002 + +/* + * GLUT API macro definitions -- additional keyboard and joystick definitions + */ +#define GLUT_KEY_REPEAT_OFF 0x0000 +#define GLUT_KEY_REPEAT_ON 0x0001 +#define GLUT_KEY_REPEAT_DEFAULT 0x0002 + +#define GLUT_JOYSTICK_BUTTON_A 0x0001 +#define GLUT_JOYSTICK_BUTTON_B 0x0002 +#define GLUT_JOYSTICK_BUTTON_C 0x0004 +#define GLUT_JOYSTICK_BUTTON_D 0x0008 + +/* + * GLUT API macro definitions -- game mode definitions + */ +#define GLUT_GAME_MODE_ACTIVE 0x0000 +#define GLUT_GAME_MODE_POSSIBLE 0x0001 +#define GLUT_GAME_MODE_WIDTH 0x0002 +#define GLUT_GAME_MODE_HEIGHT 0x0003 +#define GLUT_GAME_MODE_PIXEL_DEPTH 0x0004 +#define GLUT_GAME_MODE_REFRESH_RATE 0x0005 +#define GLUT_GAME_MODE_DISPLAY_CHANGED 0x0006 + +/* + * Initialization functions, see fglut_init.c + */ +FGAPI void FGAPIENTRY glutInit( int* pargc, char** argv ); +FGAPI void FGAPIENTRY glutInitWindowPosition( int x, int y ); +FGAPI void FGAPIENTRY glutInitWindowSize( int width, int height ); +FGAPI void FGAPIENTRY glutInitDisplayMode( int displayMode ); +FGAPI void FGAPIENTRY glutInitDisplayString( char* displayMode ); + +/* + * Process loop function, see freeglut_main.c + */ +FGAPI void FGAPIENTRY glutMainLoop( void ); + +/* + * Window management functions, see freeglut_window.c + */ +FGAPI int FGAPIENTRY glutCreateWindow( const char* title ); +FGAPI int FGAPIENTRY glutCreateSubWindow( int window, int x, int y, int width, int height ); +FGAPI void FGAPIENTRY glutDestroyWindow( int window ); +FGAPI void FGAPIENTRY glutSetWindow( int window ); +FGAPI int FGAPIENTRY glutGetWindow( void ); +FGAPI void FGAPIENTRY glutSetWindowTitle( char* title ); +FGAPI void FGAPIENTRY glutSetIconTitle( char* title ); +FGAPI void FGAPIENTRY glutReshapeWindow( int width, int height ); +FGAPI void FGAPIENTRY glutPositionWindow( int x, int y ); +FGAPI void FGAPIENTRY glutShowWindow( void ); +FGAPI void FGAPIENTRY glutHideWindow( void ); +FGAPI void FGAPIENTRY glutIconifyWindow( void ); +FGAPI void FGAPIENTRY glutPushWindow( void ); +FGAPI void FGAPIENTRY glutPopWindow( void ); +FGAPI void FGAPIENTRY glutFullScreen( void ); + +/* + * Display-connected functions, see freeglut_display.c + */ +FGAPI void FGAPIENTRY glutPostWindowRedisplay( int window ); +FGAPI void FGAPIENTRY glutPostRedisplay( void ); +FGAPI void FGAPIENTRY glutSwapBuffers( void ); + +/* + * Mouse cursor functions, see freeglut_cursor.c + */ +FGAPI void FGAPIENTRY glutWarpPointer( int x, int y ); +FGAPI void FGAPIENTRY glutSetCursor( int cursor ); + +/* + * Overlay stuff, see freeglut_overlay.c + */ +FGAPI void FGAPIENTRY glutEstablishOverlay( void ); +FGAPI void FGAPIENTRY glutRemoveOverlay( void ); +FGAPI void FGAPIENTRY glutUseLayer( GLenum layer ); +FGAPI void FGAPIENTRY glutPostOverlayRedisplay( void ); +FGAPI void FGAPIENTRY glutPostWindowOverlayRedisplay( int window ); +FGAPI void FGAPIENTRY glutShowOverlay( void ); +FGAPI void FGAPIENTRY glutHideOverlay( void ); + +/* + * Menu stuff, see freeglut_menu.c + */ +FGAPI int FGAPIENTRY glutCreateMenu( void (* callback)( int menu ) ); +FGAPI void FGAPIENTRY glutDestroyMenu( int menu ); +FGAPI int FGAPIENTRY glutGetMenu( void ); +FGAPI void FGAPIENTRY glutSetMenu( int menu ); +FGAPI void FGAPIENTRY glutAddMenuEntry( const char* label, int value ); +FGAPI void FGAPIENTRY glutAddSubMenu( const char* label, int subMenu ); +FGAPI void FGAPIENTRY glutChangeToMenuEntry( int item, const char* label, int value ); +FGAPI void FGAPIENTRY glutChangeToSubMenu( int item, const char* label, int value ); +FGAPI void FGAPIENTRY glutRemoveMenuItem( int item ); +FGAPI void FGAPIENTRY glutAttachMenu( int button ); +FGAPI void FGAPIENTRY glutDetachMenu( int button ); + +/* + * Global callback functions, see freeglut_callbacks.c + */ +FGAPI void FGAPIENTRY glutTimerFunc( unsigned int time, void (* callback)( int ), int value ); +FGAPI void FGAPIENTRY glutIdleFunc( void (* callback)( void ) ); + +/* + * Window-specific callback functions, see freeglut_callbacks.c + */ +FGAPI void FGAPIENTRY glutKeyboardFunc( void (* callback)( unsigned char, int, int ) ); +FGAPI void FGAPIENTRY glutSpecialFunc( void (* callback)( int, int, int ) ); +FGAPI void FGAPIENTRY glutReshapeFunc( void (* callback)( int, int ) ); +FGAPI void FGAPIENTRY glutVisibilityFunc( void (* callback)( int ) ); +FGAPI void FGAPIENTRY glutDisplayFunc( void (* callback)( void ) ); +FGAPI void FGAPIENTRY glutMouseFunc( void (* callback)( int, int, int, int ) ); +FGAPI void FGAPIENTRY glutMotionFunc( void (* callback)( int, int ) ); +FGAPI void FGAPIENTRY glutPassiveMotionFunc( void (* callback)( int, int ) ); +FGAPI void FGAPIENTRY glutEntryFunc( void (* callback)( int ) ); + +FGAPI void FGAPIENTRY glutKeyboardUpFunc( void (* callback)( unsigned char, int, int ) ); +FGAPI void FGAPIENTRY glutSpecialUpFunc( void (* callback)( int, int, int ) ); +FGAPI void FGAPIENTRY glutJoystickFunc( void (* callback)( unsigned int, int, int, int ), int pollInterval ); +FGAPI void FGAPIENTRY glutMenuStateFunc( void (* callback)( int ) ); +FGAPI void FGAPIENTRY glutMenuStatusFunc( void (* callback)( int, int, int ) ); +FGAPI void FGAPIENTRY glutOverlayDisplayFunc( void (* callback)( void ) ); +FGAPI void FGAPIENTRY glutWindowStatusFunc( void (* callback)( int ) ); + +FGAPI void FGAPIENTRY glutSpaceballMotionFunc( void (* callback)( int, int, int ) ); +FGAPI void FGAPIENTRY glutSpaceballRotateFunc( void (* callback)( int, int, int ) ); +FGAPI void FGAPIENTRY glutSpaceballButtonFunc( void (* callback)( int, int ) ); +FGAPI void FGAPIENTRY glutBottonBoxFunc( void (* callback)( int, int ) ); +FGAPI void FGAPIENTRY glutDialsFunc( void (* callback)( int, int ) ); +FGAPI void FGAPIENTRY glutTabletMotionFunc( void (* callback)( int, int ) ); +FGAPI void FGAPIENTRY glutTabletButtonFunc( void (* callback)( int, int, int, int ) ); + +/* + * State retrieval functions, see freeglut_state.c + */ +FGAPI int FGAPIENTRY glutGet( GLenum query ); +FGAPI int FGAPIENTRY glutDeviceGet( GLenum query ); +FGAPI int FGAPIENTRY glutGetModifiers( void ); +FGAPI int FGAPIENTRY glutLayerGet( GLenum query ); + +/* + * Font stuff, see freeglut_font.c + */ +FGAPI void FGAPIENTRY glutBitmapCharacter( void* font, int character ); +FGAPI int FGAPIENTRY glutBitmapWidth( void* font, int character ); +FGAPI void FGAPIENTRY glutStrokeCharacter( void* font, int character ); +FGAPI int FGAPIENTRY glutStrokeWidth( void* font, int character ); +FGAPI int FGAPIENTRY glutBitmapLength( void* font, const char* string ); +FGAPI int FGAPIENTRY glutStrokeLength( void* font, const char* string ); +FGAPI int FGAPIENTRY glutBitmapHeight( void* font ); +FGAPI int FGAPIENTRY glutStrokeHeight( void* font ); + +/* + * Geometry functions, see freeglut_geometry.c + */ +FGAPI void FGAPIENTRY glutWireCube( GLdouble size ); +FGAPI void FGAPIENTRY glutSolidCube( GLdouble size ); +FGAPI void FGAPIENTRY glutWireSphere( GLdouble radius, GLint slices, GLint stacks ); +FGAPI void FGAPIENTRY glutSolidSphere( GLdouble radius, GLint slices, GLint stacks ); +FGAPI void FGAPIENTRY glutWireCone( GLdouble base, GLdouble height, GLint slices, GLint stacks ); +FGAPI void FGAPIENTRY glutSolidCone( GLdouble base, GLdouble height, GLint slices, GLint stacks ); + +FGAPI void FGAPIENTRY glutWireTorus( GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings ); +FGAPI void FGAPIENTRY glutSolidTorus( GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings ); +FGAPI void FGAPIENTRY glutWireDodecahedron( void ); +FGAPI void FGAPIENTRY glutSolidDodecahedron( void ); +FGAPI void FGAPIENTRY glutWireOctahedron( void ); +FGAPI void FGAPIENTRY glutSolidOctahedron( void ); +FGAPI void FGAPIENTRY glutWireTetrahedron( void ); +FGAPI void FGAPIENTRY glutSolidTetrahedron( void ); +FGAPI void FGAPIENTRY glutWireIcosahedron( void ); +FGAPI void FGAPIENTRY glutSolidIcosahedron( void ); + +/* + * Teapot rendering functions, found in freeglut_teapot.c + */ +FGAPI void FGAPIENTRY glutWireTeapot( GLdouble size ); +FGAPI void FGAPIENTRY glutSolidTeapot( GLdouble size ); + +/* + * Game mode functions, see freeglut_gamemode.c + */ +FGAPI void FGAPIENTRY glutGameModeString( const char* string ); +FGAPI int FGAPIENTRY glutEnterGameMode( void ); +FGAPI void FGAPIENTRY glutLeaveGameMode( void ); +FGAPI int FGAPIENTRY glutGameModeGet( GLenum query ); + +/* + * Video resize functions, see freeglut_videoresize.c + */ +FGAPI int FGAPIENTRY glutVideoResizeGet( GLenum query ); +FGAPI void FGAPIENTRY glutSetupVideoResizing( void ); +FGAPI void FGAPIENTRY glutStopVideoResizing( void ); +FGAPI void FGAPIENTRY glutVideoResize( int x, int y, int width, int height ); +FGAPI void FGAPIENTRY glutVideoPan( int x, int y, int width, int height ); + +/* + * Colormap functions, see freeglut_misc.c + */ +FGAPI void FGAPIENTRY glutSetColor( int color, GLfloat red, GLfloat green, GLfloat blue ); +FGAPI GLfloat FGAPIENTRY glutGetColor( int color, int component ); +FGAPI void FGAPIENTRY glutCopyColormap( int window ); + +/* + * Misc keyboard and joystick functions, see freeglut_misc.c + */ +FGAPI void FGAPIENTRY glutIgnoreKeyRepeat( int ignore ); +FGAPI void FGAPIENTRY glutSetKeyRepeat( int repeatMode ); +FGAPI void FGAPIENTRY glutForceJoystickFunc( void ); + +/* + * Misc functions, see freeglut_misc.c + */ +FGAPI int FGAPIENTRY glutExtensionSupported( const char* extension ); +FGAPI void FGAPIENTRY glutReportErrors( void ); + +#ifdef __cplusplus + } +#endif + +#endif /* FREEGLUT_H */ + +/*** END OF FILE ***/ + + + + diff --git a/freeglut/freeglut/include/GL/freeglut_internal.h b/freeglut/freeglut/include/GL/freeglut_internal.h new file mode 100644 index 0000000..9438888 --- /dev/null +++ b/freeglut/freeglut/include/GL/freeglut_internal.h @@ -0,0 +1,562 @@ +/* + * freeglut_internal.h + * + * The freeglut library private include file. + * + * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved. + * Written by Pawel W. Olszta, + * Creation date: Thu Dec 2 1999 + * + * 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 + * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef FREEGLUT_INTERNAL_H +#define FREEGLUT_INTERNAL_H + +/* + * Freeglut is meant to be available under all Unix/X11 and Win32 platforms. + */ +#if !defined(_WIN32) +# define TARGET_HOST_UNIX_X11 1 +# define TARGET_HOST_WIN32 0 +#else +# define TARGET_HOST_UNIX_X11 0 +# define TARGET_HOST_WIN32 1 +#endif + +#define FREEGLUT_MAX_MENUS 3 +#define FREEGLUT_DEBUG 1 + +#if FREEGLUT_DEBUG + #undef G_DISABLE_ASSERT + #undef G_DISABLE_CHECKS +#else + #define G_DISABLE_ASSERT + #define G_DISABLE_CHECKS +#endif + +/* + * Somehow all Win32 include headers depend on this one: + */ +#if TARGET_HOST_WIN32 + #include + #include +#endif + +/* + * Those files should be available on every platform. GLib can be + * downloaded from ftp.gtk.org. Ports are available for most Unix + * systems and Win32 (for both native and posix-emulation modes). + */ +#include +#include +#include +#include +#include +#include + +/* + * The system-dependant include files should go here: + */ +#if TARGET_HOST_UNIX_X11 + #include + #include + #include + #include + + /* + * This will generate errors, but I don't have any idea how to fix it (will autoconf help?) + */ + #include +#endif + +/* + * Microsoft VisualC++ 5.0's does not define the PI + */ +#ifndef M_PI +# define M_PI 3.14159265358979323846 +#endif + + +/* -- GLOBAL TYPE DEFINITIONS ---------------------------------------------- */ + +/* + * Freeglut callbacks type definitions + */ +typedef void (* FGCBdisplay )( void ); +typedef void (* FGCBreshape )( int, int ); +typedef void (* FGCBvisibility )( int ); +typedef void (* FGCBkeyboard )( unsigned char, int, int ); +typedef void (* FGCBspecial )( int, int, int ); +typedef void (* FGCBmouse )( int, int, int, int ); +typedef void (* FGCBmotion )( int, int ); +typedef void (* FGCBpassive )( int, int ); +typedef void (* FGCBentry )( int ); +typedef void (* FGCBwindowStatus )( int ); +typedef void (* FGCBmenuState )( int ); +typedef void (* FGCBmenuStatus )( int, int, int ); +typedef void (* FGCBselect )( int, int, int ); +typedef void (* FGCBjoystick )( unsigned int, int, int, int ); +typedef void (* FGCBkeyboardUp )( unsigned char, int, int ); +typedef void (* FGCBspecialUp )( int, int, int ); +typedef void (* FGCBoverlayDisplay)( void ); +typedef void (* FGCBspaceMotion )( int, int, int ); +typedef void (* FGCBspaceRotate )( int, int, int ); +typedef void (* FGCBspaceButton )( int, int ); +typedef void (* FGCBdials )( int, int ); +typedef void (* FGCBbuttonBox )( int, int ); +typedef void (* FGCBtabletMotion )( int, int ); +typedef void (* FGCBtabletButton )( int, int, int, int ); + +/* + * The global callbacks type definitions + */ +typedef void (* FGCBidle )( void ); +typedef void (* FGCBtimer )( int ); + +/* + * The callback used when creating/using menus + */ +typedef void (* FGCBmenu )( int ); + +/* + * A helper structure holding two ints and a boolean + */ +typedef struct tagSFG_XYUse SFG_XYUse; +struct tagSFG_XYUse +{ + gint X, Y; /* The two integers... */ + gboolean Use; /* ...and a single boolean. */ +}; + +/* + * This structure holds different freeglut settings + */ +typedef struct tagSFG_State SFG_State; +struct tagSFG_State +{ + SFG_XYUse Position; /* The default windows' position */ + SFG_XYUse Size; /* The default windows' size */ + guint DisplayMode; /* The display mode for new windows */ + + gboolean ForceDirectContext; /* Should we force direct contexts? */ + gboolean TryDirectContext; /* What about giving a try to? */ + + gboolean ForceIconic; /* All new top windows are iconified */ + + gboolean GLDebugSwitch; /* OpenGL state debugging switch */ + gboolean XSyncSwitch; /* X11 sync protocol switch */ + + gboolean IgnoreKeyRepeat; /* Whether to ignore key repeat... */ + + GTimer* Timer; /* This timer is started on glutInit */ + GList* Timers; /* The freeglut timer hooks */ + + FGCBidle IdleCallback; /* The global idle callback */ + + SFG_XYUse GameModeSize; /* The game mode screen's dimensions */ + gint GameModeDepth; /* The pixel depth for game mode */ + gint GameModeRefresh; /* The refresh rate for game mode */ +}; + +/* + * The structure used by display initialization in freeglut_init.c + */ +typedef struct tagSFG_Display SFG_Display; +struct tagSFG_Display +{ +#if TARGET_HOST_UNIX_X11 + Display* Display; /* The display we are being run in. */ + gint Screen; /* The screen we are about to use. */ + Window RootWindow; /* The screen's root window. */ + gint Connection; /* The display's connection number */ + Atom DeleteWindow; /* The window deletion atom */ + +#ifdef X_XF86VidModeGetModeLine + XF86VidModeModeLine DisplayMode; /* Current screen's display settings */ + gint DisplayModeClock; /* The display mode's refresh rate */ +#endif + +#elif TARGET_HOST_WIN32 + HINSTANCE Instance; /* The application's instance */ + DEVMODE DisplayMode; /* Desktop's display settings */ + +#endif + + gint ScreenWidth; /* The screen's width in pixels */ + gint ScreenHeight; /* The screen's height in pixels */ + gint ScreenWidthMM; /* The screen's width in milimeters */ + gint ScreenHeightMM; /* The screen's height in milimeters */ +}; + + +/* + * The user can create any number of timer hooks + */ +typedef struct tagSFG_Timer SFG_Timer; +struct tagSFG_Timer +{ + gint32 ID; /* The timer ID integer */ + FGCBtimer Callback; /* The timer callback */ + double TriggerTime; /* The timer trigger time */ +}; + +/* + * A window and it's OpenGL context. The contents of this structure + * are highly dependant on the target operating system we aim at... + */ +typedef struct tagSFG_Context SFG_Context; +struct tagSFG_Context +{ +#if TARGET_HOST_UNIX_X11 + Window Handle; /* The window's handle */ + GLXContext Context; /* The OpenGL context */ + XVisualInfo* VisualInfo; /* The window's visual information */ + +#elif TARGET_HOST_WIN32 + HWND Handle; /* The window's handle */ + HDC Device; /* The window's device context */ + HGLRC Context; /* The window's WGL context */ + +#endif +}; + +/* + * Window's state description. This structure should be kept portable. + */ +typedef struct tagSFG_WindowState SFG_WindowState; +struct tagSFG_WindowState +{ + gint Width; /* Window's width in pixels */ + gint Height; /* The same about the height */ + + gboolean Redisplay; /* Do we have to redisplay? */ + gboolean Visible; /* Is the window visible now */ + + gint Cursor; /* The currently selected cursor */ + guint32 Modifiers; /* The current ALT/SHIFT/CTRL state */ + + double JoystickPollRate; /* The joystick polling rate */ + double JoystickLastPoll; /* When the last poll has happened */ + + gint MouseX, MouseY; /* The most recent mouse position */ + + gboolean IsGameMode; /* Is this the game mode window? */ + +#if TARGET_HOST_WIN32 + gboolean NeedToResize; /* Do we need to explicitly resize? */ +#endif +}; + +/* + * The window callbacks the user can supply us with. Should be kept portable. + */ +typedef struct tagSFG_WindowCallbacks SFG_WindowCallbacks; +struct tagSFG_WindowCallbacks +{ + /* + * Following callbacks are fully supported right now + * and are ready to be tested for GLUT conformance: + */ + FGCBdisplay Display; + FGCBreshape Reshape; + FGCBkeyboard Keyboard; + FGCBspecial Special; + FGCBmouse Mouse; + FGCBmotion Motion; + FGCBpassive Passive; + FGCBentry Entry; + FGCBvisibility Visibility; + FGCBwindowStatus WindowStatus; + + /* + * Those callbacks are required for the initial version + */ + FGCBmenuState MenuState; + FGCBmenuStatus MenuStatus; + FGCBselect Select; + FGCBjoystick Joystick; + FGCBkeyboardUp KeyboardUp; + FGCBspecialUp SpecialUp; + + /* + * Those callbacks are being ignored for the moment + */ + FGCBoverlayDisplay OverlayDisplay; + FGCBspaceMotion SpaceMotion; + FGCBspaceRotate SpaceRotation; + FGCBspaceButton SpaceButton; + FGCBdials Dials; + FGCBbuttonBox ButtonBox; + FGCBtabletMotion TabletMotion; + FGCBtabletButton TabletButton; +}; + +/* + * This structure describes a menu + */ +typedef struct tagSFG_Menu SFG_Menu; +struct tagSFG_Menu +{ + gint ID; /* The global menu ID */ + GList* Entries; /* The menu entries list */ + FGCBmenu Callback; /* The menu callback */ + gboolean IsActive; /* Is the menu selected? */ + gint Width; /* Menu box width in pixels */ + gint Height; /* Menu box height in pixels */ + gint X, Y; /* Menu box raster position */ +}; + +/* + * This is a menu entry + */ +typedef struct tagSFG_MenuEntry SFG_MenuEntry; +struct tagSFG_MenuEntry +{ + gint ID; /* The menu entry ID (local) */ + gint Ordinal; /* The menu's ordinal number */ + GString* Text; /* The text to be displayed */ + SFG_Menu* SubMenu; /* Optional sub-menu tree */ + gboolean IsActive; /* Is the entry highlighted? */ + gint Width; /* Label's width in pixels */ +}; + +/* + * A window, making part of FreeGLUT windows hierarchy. Should be kept portable. + */ +typedef struct tagSFG_Window SFG_Window; +struct tagSFG_Window +{ + gint ID; /* Window's ID number */ + + SFG_Context Window; /* Window and OpenGL context */ + SFG_WindowState State; /* The window state */ + SFG_WindowCallbacks Callbacks; /* The window callbacks */ + + SFG_Menu* Menu[ FREEGLUT_MAX_MENUS ]; /* Menus appended to window */ + gboolean MenuActive[ FREEGLUT_MAX_MENUS ]; /* The menus activity flags */ + + SFG_Window* Parent; /* The parent to this window */ + GList* Children; /* The subwindows d.l. list */ +}; + +/* + * This holds information about all the windows, menus etc. + */ +typedef struct tagSFG_Structure SFG_Structure; +struct tagSFG_Structure +{ + GList* Windows; /* The global windows list */ + GList* Menus; /* The global menus list */ + + SFG_Window* Window; /* The currently active win. */ + SFG_Menu* Menu; /* Same, but menu... */ + + SFG_Window* GameMode; /* The game mode window */ + + gint WindowID; /* The new current window ID */ + gint MenuID; /* The new current menu ID */ +}; + +/* + * This structure is used for the enumeration purposes. + * You can easily extend it's functionalities by declaring + * a structure containing enumerator's contents and custom + * data, then casting it's pointer to (SFG_Enumerator *). + */ +typedef struct tagSFG_Enumerator SFG_Enumerator; +struct tagSFG_Enumerator +{ + gboolean found; /* Used to terminate search */ + gpointer data; /* Custom data pointer */ +}; + +/* + * The bitmap font structure + */ +typedef struct tagSFG_Font SFG_Font; +struct tagSFG_Font +{ + gchar* Name; /* The source font name */ + gint Quantity; /* Number of chars in font */ + gint Height; /* Height of the characters */ + const guchar** Characters; /* The characters mapping */ +}; + + +/* -- GLOBAL VARIABLES EXPORTS --------------------------------------------- */ + +/* + * Freeglut display related stuff (initialized once per session) + */ +extern SFG_Display fgDisplay; + +/* + * Freeglut internal structure + */ +extern SFG_Structure fgStructure; + +/* + * The current freeglut settings + */ +extern SFG_State fgState; + + +/* -- PRIVATE FUNCTION DECLARATIONS ---------------------------------------- */ + +/* + * A call to this function makes us sure that the Display and Structure + * subsystems have been properly initialized and are ready to be used + */ +#define freeglut_assert_ready g_assert( fgState.Timer != NULL ); + +/* + * Following definitions are somewhat similiar to GLib's, + * but do not generate any log messages: + */ +#define freeglut_return_if_fail( expr ) if( !(expr) ) return; +#define freeglut_return_val_if_fail( expr, val ) if( !(expr) ) return( val ); + +/* + * A call to those macros assures us that there is a current + * window and menu set, respectively: + */ +#define freeglut_assert_window g_assert( fgStructure.Window != NULL ); +#define freeglut_assert_menu g_assert( fgStructure.Menu != NULL ); + +/* + * The initialize and deinitialize functions get called on glutInit() + * and glutMainLoop() end respectively. They should create/clean up + * everything inside of the freeglut + */ +void fgInitialize( const gchar* displayName ); +void fgDeinitialize( void ); + +/* + * Those two functions are used to create/destroy the freeglut internal + * structures. This actually happens when calling glutInit() and when + * quitting the glutMainLoop() (which actually happens, when all windows + * have been closed). + */ +void fgCreateStructure( void ); +void fgDestroyStructure( void ); + +/* + * A helper function to check if a display mode is possible to use + */ +#if TARGET_HOST_UNIX_X11 +XVisualInfo* fgChooseVisual( void ); +#endif + +/* + * The window procedure for Win32 events handling + */ +#if TARGET_HOST_WIN32 +LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); +gboolean fgSetupPixelFormat( SFG_Window* window, gboolean checkOnly ); +#endif + +/* + * Window creation, opening, closing and destruction. + * Defined in freeglut_structure.c, freeglut_window.c. + */ +SFG_Window* fgCreateWindow( SFG_Window* parent, const gchar* title, gint x, gint y, gint w, gint h, gboolean gameMode ); +void fgOpenWindow( SFG_Window* window, const gchar* title, gint x, gint y, gint w, gint h, gboolean gameMode ); +void fgCloseWindow( SFG_Window* window ); +void fgDestroyWindow( SFG_Window* window, gboolean needToClose ); + +/* + * Menu creation and destruction. Defined in freeglut_structure.c + */ +SFG_Menu* fgCreateMenu( FGCBmenu menuCallback ); +void fgDestroyMenu( SFG_Menu* menu ); + +/* + * Joystick device management functions, defined in freeglut_joystick.c + */ +void fgJoystickInit( gint ident ); +void fgJoystickClose( void ); +void fgJoystickPollWindow( SFG_Window* window ); + +/* + * Helper function to enumerate through all registered windows + * and one to enumerate all of a window's subwindows... + * + * The GFunc callback for those functions will be defined as: + * + * void enumCallback( gpointer window, gpointer enumerator ); + * + * where window is the enumerated (sub)window pointer (SFG_Window *), + * and userData is the a custom user-supplied pointer. Functions + * are defined and exported from freeglut_structure.c file. + */ +void fgEnumWindows( GFunc enumCallback, SFG_Enumerator* enumerator ); +void fgEnumSubWindows( SFG_Window* window, GFunc enumCallback, SFG_Enumerator* enumerator ); + +/* + * fgWindowByHandle returns a (SFG_Window *) value pointing to the + * first window in the queue matching the specified window handle. + * The function is defined in freeglut_structure.c file. + */ +#if TARGET_HOST_UNIX_X11 + SFG_Window* fgWindowByHandle( Window hWindow ); +#elif TARGET_HOST_WIN32 + + SFG_Window* fgWindowByHandle( HWND hWindow ); +#endif + +/* + * This function is similiar to the previous one, except it is + * looking for a specified (sub)window identifier. The function + * is defined in freeglut_structure.c file. + */ +SFG_Window* fgWindowByID( gint windowID ); + +/* + * Looks up a menu given it's ID. This is easier that fgWindowByXXX + * as all menus are placed in a single doubly linked list... + */ +SFG_Menu* fgMenuByID( gint menuID ); + +/* + * The menu activation and deactivation the code. This is the meat + * of the menu user interface handling code... + */ +void fgActivateMenu( gint button ); +void fgDeactivateMenu( gint button ); + +/* + * This function gets called just before the buffers swap, so that + * freeglut can display the pull-down menus via OpenGL. The function + * is defined in freeglut_menu.c file. + */ +void fgDisplayMenu( void ); + +/* + * Display the mouse cursor using OpenGL calls. The function + * is defined in freeglut_cursor.c file. + */ +void fgDisplayCursor( void ); + +#endif /* FREEGLUT_INTERNAL_H */ + +/*** END OF FILE ***/ + + + + diff --git a/freeglut/freeglut/include/Makefile b/freeglut/freeglut/include/Makefile new file mode 100644 index 0000000..44565b0 --- /dev/null +++ b/freeglut/freeglut/include/Makefile @@ -0,0 +1,288 @@ +# Generated automatically from Makefile.in by configure. +# Makefile.in generated automatically by automake 1.4 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + +SHELL = /bin/sh + +srcdir = . +top_srcdir = .. +prefix = /usr/local +exec_prefix = ${prefix} + +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 +infodir = ${prefix}/info +mandir = ${prefix}/man +includedir = ${prefix}/include +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/freeglut +pkglibdir = $(libdir)/freeglut +pkgincludedir = $(includedir)/freeglut + +top_builddir = .. + +ACLOCAL = aclocal +AUTOCONF = autoconf +AUTOMAKE = automake +AUTOHEADER = autoheader + +INSTALL = /usr/bin/ginstall -c +INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_SCRIPT = ${INSTALL_PROGRAM} +transform = s,x,x, + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = i686-suse-linux +host_triplet = i686-suse-linux-gnu +AS = @AS@ +CC = gcc +DLLTOOL = @DLLTOOL@ +EXEEXT = +LIBM = -lm +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIBTOOL_DEPS = ./ltconfig ./ltmain.sh +LN_S = ln -s +MAKEINFO = makeinfo +OBJDUMP = @OBJDUMP@ +PACKAGE = freeglut +RANLIB = ranlib +VERSION = 0.1 + +SUBDIRS = GL +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = +DIST_COMMON = Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP_ENV = --best +all: all-redirect +.SUFFIXES: +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. + + + +all-recursive install-data-recursive install-exec-recursive \ +installdirs-recursive install-recursive uninstall-recursive \ +check-recursive installcheck-recursive info-recursive dvi-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + dot_seen=no; \ + rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ + rev="$$subdir $$rev"; \ + test "$$subdir" = "." && dot_seen=yes; \ + done; \ + test "$$dot_seen" = "no" && rev=". $$rev"; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = include + +distdir: $(DISTFILES) + here=`cd $(top_builddir) && pwd`; \ + top_distdir=`cd $(top_distdir) && pwd`; \ + distdir=`cd $(distdir) && pwd`; \ + cd $(top_srcdir) \ + && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu include/Makefile + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done + for subdir in $(SUBDIRS); do \ + if test "$$subdir" = .; then :; else \ + test -d $(distdir)/$$subdir \ + || mkdir $(distdir)/$$subdir \ + || exit 1; \ + chmod 777 $(distdir)/$$subdir; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ + || exit 1; \ + fi; \ + done +info-am: +info: info-recursive +dvi-am: +dvi: dvi-recursive +check-am: all-am +check: check-recursive +installcheck-am: +installcheck: installcheck-recursive +install-exec-am: +install-exec: install-exec-recursive + +install-data-am: +install-data: install-data-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-recursive +uninstall-am: +uninstall: uninstall-recursive +all-am: Makefile +all-redirect: all-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: installdirs-recursive +installdirs-am: + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-tags mostlyclean-generic + +mostlyclean: mostlyclean-recursive + +clean-am: clean-tags clean-generic mostlyclean-am + +clean: clean-recursive + +distclean-am: distclean-tags distclean-generic clean-am + -rm -f libtool + +distclean: distclean-recursive + +maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ + distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-recursive + +.PHONY: install-data-recursive uninstall-data-recursive \ +install-exec-recursive uninstall-exec-recursive installdirs-recursive \ +uninstalldirs-recursive all-recursive check-recursive \ +installcheck-recursive info-recursive dvi-recursive \ +mostlyclean-recursive distclean-recursive clean-recursive \ +maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ +dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ +install-exec install-data-am install-data install-am install \ +uninstall-am uninstall all-redirect all-am all installdirs-am \ +installdirs mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/freeglut/freeglut/include/Makefile.am b/freeglut/freeglut/include/Makefile.am new file mode 100644 index 0000000..90f2094 --- /dev/null +++ b/freeglut/freeglut/include/Makefile.am @@ -0,0 +1,3 @@ +## Process this file with automake to produce Makefile.in + +SUBDIRS = GL diff --git a/freeglut/freeglut/include/Makefile.in b/freeglut/freeglut/include/Makefile.in new file mode 100644 index 0000000..aa95680 --- /dev/null +++ b/freeglut/freeglut/include/Makefile.in @@ -0,0 +1,288 @@ +# Makefile.in generated automatically by automake 1.4 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +AS = @AS@ +CC = @CC@ +DLLTOOL = @DLLTOOL@ +EXEEXT = @EXEEXT@ +LIBM = @LIBM@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_DEPS = @LIBTOOL_DEPS@ +LN_S = @LN_S@ +MAKEINFO = @MAKEINFO@ +OBJDUMP = @OBJDUMP@ +PACKAGE = @PACKAGE@ +RANLIB = @RANLIB@ +VERSION = @VERSION@ + +SUBDIRS = GL +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = +DIST_COMMON = Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP_ENV = --best +all: all-redirect +.SUFFIXES: +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. + +@SET_MAKE@ + +all-recursive install-data-recursive install-exec-recursive \ +installdirs-recursive install-recursive uninstall-recursive \ +check-recursive installcheck-recursive info-recursive dvi-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + dot_seen=no; \ + rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ + rev="$$subdir $$rev"; \ + test "$$subdir" = "." && dot_seen=yes; \ + done; \ + test "$$dot_seen" = "no" && rev=". $$rev"; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = include + +distdir: $(DISTFILES) + here=`cd $(top_builddir) && pwd`; \ + top_distdir=`cd $(top_distdir) && pwd`; \ + distdir=`cd $(distdir) && pwd`; \ + cd $(top_srcdir) \ + && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu include/Makefile + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done + for subdir in $(SUBDIRS); do \ + if test "$$subdir" = .; then :; else \ + test -d $(distdir)/$$subdir \ + || mkdir $(distdir)/$$subdir \ + || exit 1; \ + chmod 777 $(distdir)/$$subdir; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ + || exit 1; \ + fi; \ + done +info-am: +info: info-recursive +dvi-am: +dvi: dvi-recursive +check-am: all-am +check: check-recursive +installcheck-am: +installcheck: installcheck-recursive +install-exec-am: +install-exec: install-exec-recursive + +install-data-am: +install-data: install-data-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-recursive +uninstall-am: +uninstall: uninstall-recursive +all-am: Makefile +all-redirect: all-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: installdirs-recursive +installdirs-am: + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-tags mostlyclean-generic + +mostlyclean: mostlyclean-recursive + +clean-am: clean-tags clean-generic mostlyclean-am + +clean: clean-recursive + +distclean-am: distclean-tags distclean-generic clean-am + -rm -f libtool + +distclean: distclean-recursive + +maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ + distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-recursive + +.PHONY: install-data-recursive uninstall-data-recursive \ +install-exec-recursive uninstall-exec-recursive installdirs-recursive \ +uninstalldirs-recursive all-recursive check-recursive \ +installcheck-recursive info-recursive dvi-recursive \ +mostlyclean-recursive distclean-recursive clean-recursive \ +maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ +dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ +install-exec install-data-am install-data install-am install \ +uninstall-am uninstall all-redirect all-am all installdirs-am \ +installdirs mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/freeglut/freeglut/install-sh b/freeglut/freeglut/install-sh new file mode 100755 index 0000000..e843669 --- /dev/null +++ b/freeglut/freeglut/install-sh @@ -0,0 +1,250 @@ +#!/bin/sh +# +# install - install a program, script, or datafile +# This comes from X11R5 (mit/util/scripts/install.sh). +# +# Copyright 1991 by the Massachusetts Institute of Technology +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of M.I.T. not be used in advertising or +# publicity pertaining to distribution of the software without specific, +# written prior permission. M.I.T. makes no representations about the +# suitability of this software for any purpose. It is provided "as is" +# without express or implied warranty. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. It can only install one file at a time, a restriction +# shared with many OS's install programs. + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +transformbasename="" +transform_arg="" +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" +dir_arg="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd="$cpprog" + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd="$stripprog" + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "install: no input file specified" + exit 1 +else + true +fi + +if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d $dst ]; then + instcmd=: + else + instcmd=mkdir + fi +else + +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command +# might cause directories to be created, which would be especially bad +# if $src (and thus $dsttmp) contains '*'. + + if [ -f $src -o -d $src ] + then + true + else + echo "install: $src does not exist" + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "install: no destination specified" + exit 1 + else + true + fi + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + + if [ -d $dst ] + then + dst="$dst"/`basename $src` + else + true + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# this part is taken from Noah Friedman's mkinstalldirs script + +# Skip lots of stat calls in the usual case. +if [ ! -d "$dstdir" ]; then +defaultIFS=' +' +IFS="${IFS-${defaultIFS}}" + +oIFS="${IFS}" +# Some sh's can't handle IFS=/ for some reason. +IFS='%' +set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS="${oIFS}" + +pathcomp='' + +while [ $# -ne 0 ] ; do + pathcomp="${pathcomp}${1}" + shift + + if [ ! -d "${pathcomp}" ] ; + then + $mkdirprog "${pathcomp}" + else + true + fi + + pathcomp="${pathcomp}/" +done +fi + +if [ x"$dir_arg" != x ] +then + $doit $instcmd $dst && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi +else + +# If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename $dst` + else + dstfile=`basename $dst $transformbasename | + sed $transformarg`$transformbasename + fi + +# don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename $dst` + else + true + fi + +# Make a temp file name in the proper directory. + + dsttmp=$dstdir/#inst.$$# + +# Move or copy the file name to the temp name + + $doit $instcmd $src $dsttmp && + + trap "rm -f ${dsttmp}" 0 && + +# and set any options; do chmod last to preserve setuid bits + +# If any of these fail, we abort the whole thing. If we want to +# ignore errors from any of these, just make sure not to ignore +# errors from the above "$doit $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && + +# Now rename the file to the real destination. + + $doit $rmcmd -f $dstdir/$dstfile && + $doit $mvcmd $dsttmp $dstdir/$dstfile + +fi && + + +exit 0 diff --git a/freeglut/freeglut/mkinstalldirs b/freeglut/freeglut/mkinstalldirs new file mode 100755 index 0000000..d0fd194 --- /dev/null +++ b/freeglut/freeglut/mkinstalldirs @@ -0,0 +1,40 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman +# Created: 1993-05-16 +# Public domain + +# $Id$ + +errstatus=0 + +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" 1>&2 + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + fi + fi + + pathcomp="$pathcomp/" + done +done + +exit $errstatus + +# mkinstalldirs ends here diff --git a/freeglut/freeglut/stamp-h b/freeglut/freeglut/stamp-h new file mode 100644 index 0000000..9788f70 --- /dev/null +++ b/freeglut/freeglut/stamp-h @@ -0,0 +1 @@ +timestamp diff --git a/freeglut/freeglut/stamp-h.in b/freeglut/freeglut/stamp-h.in new file mode 100644 index 0000000..9788f70 --- /dev/null +++ b/freeglut/freeglut/stamp-h.in @@ -0,0 +1 @@ +timestamp diff --git a/freeglut/freeglut/tests/.deps/one.P b/freeglut/freeglut/tests/.deps/one.P new file mode 100644 index 0000000..fafa85c --- /dev/null +++ b/freeglut/freeglut/tests/.deps/one.P @@ -0,0 +1,40 @@ +one.o: one.c ../config.h /usr/include/stdio.h /usr/include/features.h \ + /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \ + /usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/stddef.h \ + /usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/stdarg.h \ + /usr/include/bits/types.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/bits/stdio_lim.h \ + /usr/include/bits/stdio.h /usr/include/stdlib.h \ + /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/sys/select.h \ + /usr/include/bits/select.h /usr/include/bits/sigset.h \ + /usr/include/sys/sysmacros.h /usr/include/alloca.h \ + ../include/GL/freeglut.h /usr/include/GL/gl.h /usr/include/GL/glext.h \ + /usr/include/GL/glu.h +one.c : +../config.h : +/usr/include/stdio.h : +/usr/include/features.h : +/usr/include/sys/cdefs.h : +/usr/include/gnu/stubs.h : +/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/stddef.h : +/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/stdarg.h : +/usr/include/bits/types.h : +/usr/include/libio.h : +/usr/include/_G_config.h : +/usr/include/bits/stdio_lim.h : +/usr/include/bits/stdio.h : +/usr/include/stdlib.h : +/usr/include/sys/types.h : +/usr/include/time.h : +/usr/include/endian.h : +/usr/include/bits/endian.h : +/usr/include/sys/select.h : +/usr/include/bits/select.h : +/usr/include/bits/sigset.h : +/usr/include/sys/sysmacros.h : +/usr/include/alloca.h : +../include/GL/freeglut.h : +/usr/include/GL/gl.h : +/usr/include/GL/glext.h : +/usr/include/GL/glu.h : diff --git a/freeglut/freeglut/tests/Makefile b/freeglut/freeglut/tests/Makefile new file mode 100644 index 0000000..fba95dd --- /dev/null +++ b/freeglut/freeglut/tests/Makefile @@ -0,0 +1,342 @@ +# Generated automatically from Makefile.in by configure. +# Makefile.in generated automatically by automake 1.4 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + +SHELL = /bin/sh + +srcdir = . +top_srcdir = .. +prefix = /usr/local +exec_prefix = ${prefix} + +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 +infodir = ${prefix}/info +mandir = ${prefix}/man +includedir = ${prefix}/include +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/freeglut +pkglibdir = $(libdir)/freeglut +pkgincludedir = $(includedir)/freeglut + +top_builddir = .. + +ACLOCAL = aclocal +AUTOCONF = autoconf +AUTOMAKE = automake +AUTOHEADER = autoheader + +INSTALL = /usr/bin/ginstall -c +INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_SCRIPT = ${INSTALL_PROGRAM} +transform = s,x,x, + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = i686-suse-linux +host_triplet = i686-suse-linux-gnu +AS = @AS@ +CC = gcc +DLLTOOL = @DLLTOOL@ +EXEEXT = +LIBM = -lm +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIBTOOL_DEPS = ./ltconfig ./ltmain.sh +LN_S = ln -s +MAKEINFO = makeinfo +OBJDUMP = @OBJDUMP@ +PACKAGE = freeglut +RANLIB = ranlib +VERSION = 0.1 + +bin_PROGRAMS = one +one_SOURCES = one.c +one_LDFLAGS = -export-dynamic -dlpreopen ../freeglut-1.3/libfreeglut-1.3.la +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = +bin_PROGRAMS = one$(EXEEXT) +PROGRAMS = $(bin_PROGRAMS) + + +DEFS = -DHAVE_CONFIG_H -I. -I$(srcdir) -I.. +CPPFLAGS = +LDFLAGS = +LIBS = +one_OBJECTS = one.o +one_LDADD = $(LDADD) +one_DEPENDENCIES = +CFLAGS = -g -O2 +COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ +DIST_COMMON = Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP_ENV = --best +DEP_FILES = .deps/one.P +SOURCES = $(one_SOURCES) +OBJECTS = $(one_OBJECTS) + +all: all-redirect +.SUFFIXES: +.SUFFIXES: .S .c .lo .o .s +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +mostlyclean-binPROGRAMS: + +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) + +distclean-binPROGRAMS: + +maintainer-clean-binPROGRAMS: + +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(bindir) + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + if test -f $$p; then \ + echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \ + $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ + else :; fi; \ + done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + list='$(bin_PROGRAMS)'; for p in $$list; do \ + rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ + done + +.s.o: + $(COMPILE) -c $< + +.S.o: + $(COMPILE) -c $< + +mostlyclean-compile: + -rm -f *.o core *.core + +clean-compile: + +distclean-compile: + -rm -f *.tab.c + +maintainer-clean-compile: + +.s.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.S.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + +maintainer-clean-libtool: + +one$(EXEEXT): $(one_OBJECTS) $(one_DEPENDENCIES) + @rm -f one$(EXEEXT) + $(LINK) $(one_LDFLAGS) $(one_OBJECTS) $(one_LDADD) $(LIBS) + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = tests + +distdir: $(DISTFILES) + here=`cd $(top_builddir) && pwd`; \ + top_distdir=`cd $(top_distdir) && pwd`; \ + distdir=`cd $(distdir) && pwd`; \ + cd $(top_srcdir) \ + && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu tests/Makefile + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done + +DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) + +-include $(DEP_FILES) + +mostlyclean-depend: + +clean-depend: + +distclean-depend: + -rm -rf .deps + +maintainer-clean-depend: + +%.o: %.c + @echo '$(COMPILE) -c $<'; \ + $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-cp .deps/$(*F).pp .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm .deps/$(*F).pp + +%.lo: %.c + @echo '$(LTCOMPILE) -c $<'; \ + $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ + < .deps/$(*F).pp > .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm -f .deps/$(*F).pp +info-am: +info: info-am +dvi-am: +dvi: dvi-am +check-am: all-am +check: check-am +installcheck-am: +installcheck: installcheck-am +install-exec-am: install-binPROGRAMS +install-exec: install-exec-am + +install-data-am: +install-data: install-data-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-am +uninstall-am: uninstall-binPROGRAMS +uninstall: uninstall-am +all-am: Makefile $(PROGRAMS) +all-redirect: all-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: + $(mkinstalldirs) $(DESTDIR)$(bindir) + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-binPROGRAMS mostlyclean-compile \ + mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ + mostlyclean-generic + +mostlyclean: mostlyclean-am + +clean-am: clean-binPROGRAMS clean-compile clean-libtool clean-tags \ + clean-depend clean-generic mostlyclean-am + +clean: clean-am + +distclean-am: distclean-binPROGRAMS distclean-compile distclean-libtool \ + distclean-tags distclean-depend distclean-generic \ + clean-am + -rm -f libtool + +distclean: distclean-am + +maintainer-clean-am: maintainer-clean-binPROGRAMS \ + maintainer-clean-compile maintainer-clean-libtool \ + maintainer-clean-tags maintainer-clean-depend \ + maintainer-clean-generic distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-am + +.PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \ +maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \ +mostlyclean-compile distclean-compile clean-compile \ +maintainer-clean-compile mostlyclean-libtool distclean-libtool \ +clean-libtool maintainer-clean-libtool tags mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir \ +mostlyclean-depend distclean-depend clean-depend \ +maintainer-clean-depend info-am info dvi-am dvi check check-am \ +installcheck-am installcheck install-exec-am install-exec \ +install-data-am install-data install-am install uninstall-am uninstall \ +all-redirect all-am all installdirs mostlyclean-generic \ +distclean-generic clean-generic maintainer-clean-generic clean \ +mostlyclean distclean maintainer-clean + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/freeglut/freeglut/tests/Makefile.am b/freeglut/freeglut/tests/Makefile.am new file mode 100644 index 0000000..cf66858 --- /dev/null +++ b/freeglut/freeglut/tests/Makefile.am @@ -0,0 +1,6 @@ +## Process this file with automake to produce Makefile.im + +bin_PROGRAMS = one +one_SOURCES = one.c +one_LDFLAGS = -export-dynamic -dlpreopen ../freeglut-1.3/libfreeglut-1.3.la + diff --git a/freeglut/freeglut/tests/Makefile.in b/freeglut/freeglut/tests/Makefile.in new file mode 100644 index 0000000..ab06b5f --- /dev/null +++ b/freeglut/freeglut/tests/Makefile.in @@ -0,0 +1,342 @@ +# Makefile.in generated automatically by automake 1.4 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +AS = @AS@ +CC = @CC@ +DLLTOOL = @DLLTOOL@ +EXEEXT = @EXEEXT@ +LIBM = @LIBM@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_DEPS = @LIBTOOL_DEPS@ +LN_S = @LN_S@ +MAKEINFO = @MAKEINFO@ +OBJDUMP = @OBJDUMP@ +PACKAGE = @PACKAGE@ +RANLIB = @RANLIB@ +VERSION = @VERSION@ + +bin_PROGRAMS = one +one_SOURCES = one.c +one_LDFLAGS = -export-dynamic -dlpreopen ../freeglut-1.3/libfreeglut-1.3.la +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = +bin_PROGRAMS = one$(EXEEXT) +PROGRAMS = $(bin_PROGRAMS) + + +DEFS = @DEFS@ -I. -I$(srcdir) -I.. +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +one_OBJECTS = one.o +one_LDADD = $(LDADD) +one_DEPENDENCIES = +CFLAGS = @CFLAGS@ +COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ +DIST_COMMON = Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP_ENV = --best +DEP_FILES = .deps/one.P +SOURCES = $(one_SOURCES) +OBJECTS = $(one_OBJECTS) + +all: all-redirect +.SUFFIXES: +.SUFFIXES: .S .c .lo .o .s +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +mostlyclean-binPROGRAMS: + +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) + +distclean-binPROGRAMS: + +maintainer-clean-binPROGRAMS: + +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(bindir) + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + if test -f $$p; then \ + echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \ + $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ + else :; fi; \ + done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + list='$(bin_PROGRAMS)'; for p in $$list; do \ + rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ + done + +.s.o: + $(COMPILE) -c $< + +.S.o: + $(COMPILE) -c $< + +mostlyclean-compile: + -rm -f *.o core *.core + +clean-compile: + +distclean-compile: + -rm -f *.tab.c + +maintainer-clean-compile: + +.s.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.S.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + +maintainer-clean-libtool: + +one$(EXEEXT): $(one_OBJECTS) $(one_DEPENDENCIES) + @rm -f one$(EXEEXT) + $(LINK) $(one_LDFLAGS) $(one_OBJECTS) $(one_LDADD) $(LIBS) + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = tests + +distdir: $(DISTFILES) + here=`cd $(top_builddir) && pwd`; \ + top_distdir=`cd $(top_distdir) && pwd`; \ + distdir=`cd $(distdir) && pwd`; \ + cd $(top_srcdir) \ + && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu tests/Makefile + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done + +DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) + +-include $(DEP_FILES) + +mostlyclean-depend: + +clean-depend: + +distclean-depend: + -rm -rf .deps + +maintainer-clean-depend: + +%.o: %.c + @echo '$(COMPILE) -c $<'; \ + $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-cp .deps/$(*F).pp .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm .deps/$(*F).pp + +%.lo: %.c + @echo '$(LTCOMPILE) -c $<'; \ + $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ + < .deps/$(*F).pp > .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm -f .deps/$(*F).pp +info-am: +info: info-am +dvi-am: +dvi: dvi-am +check-am: all-am +check: check-am +installcheck-am: +installcheck: installcheck-am +install-exec-am: install-binPROGRAMS +install-exec: install-exec-am + +install-data-am: +install-data: install-data-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-am +uninstall-am: uninstall-binPROGRAMS +uninstall: uninstall-am +all-am: Makefile $(PROGRAMS) +all-redirect: all-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: + $(mkinstalldirs) $(DESTDIR)$(bindir) + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-binPROGRAMS mostlyclean-compile \ + mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ + mostlyclean-generic + +mostlyclean: mostlyclean-am + +clean-am: clean-binPROGRAMS clean-compile clean-libtool clean-tags \ + clean-depend clean-generic mostlyclean-am + +clean: clean-am + +distclean-am: distclean-binPROGRAMS distclean-compile distclean-libtool \ + distclean-tags distclean-depend distclean-generic \ + clean-am + -rm -f libtool + +distclean: distclean-am + +maintainer-clean-am: maintainer-clean-binPROGRAMS \ + maintainer-clean-compile maintainer-clean-libtool \ + maintainer-clean-tags maintainer-clean-depend \ + maintainer-clean-generic distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-am + +.PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \ +maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \ +mostlyclean-compile distclean-compile clean-compile \ +maintainer-clean-compile mostlyclean-libtool distclean-libtool \ +clean-libtool maintainer-clean-libtool tags mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir \ +mostlyclean-depend distclean-depend clean-depend \ +maintainer-clean-depend info-am info dvi-am dvi check check-am \ +installcheck-am installcheck install-exec-am install-exec \ +install-data-am install-data install-am install uninstall-am uninstall \ +all-redirect all-am all installdirs mostlyclean-generic \ +distclean-generic clean-generic maintainer-clean-generic clean \ +mostlyclean distclean maintainer-clean + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/freeglut/freeglut/tests/one.c b/freeglut/freeglut/tests/one.c new file mode 100644 index 0000000..6b22673 --- /dev/null +++ b/freeglut/freeglut/tests/one.c @@ -0,0 +1,327 @@ +/* + * one.c + * + * Hey! This was the original file where freeglut development started. Just + * note what I have written here at the time. And see the creation date :) + * + * : This is a wrapper. I still have to figure out + * : how to build shared libraries under *nix :) + * + * Copyright (c) 1999 by Pawel W. Olszta + * Written by Pawel W. Olszta, + * Creation date: czw gru 2 11:58:41 CET 1999 + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#include "../include/GL/freeglut.h" + +int g_LeaveGameMode = 0; +int g_InGameMode = 1; + +/* + * Call this function to have some text drawn at given coordinates + */ +void PrintText( int nX, int nY, char* pszText ) +{ + int lines; + char *p; + + /* + * Prepare the OpenGL state + */ + glDisable( GL_DEPTH_TEST ); + glMatrixMode( GL_PROJECTION ); + glPushMatrix(); + glLoadIdentity(); + + /* + * Have an orthogonal projection matrix set + */ + glOrtho( 0, glutGet( GLUT_WINDOW_WIDTH ), + 0, glutGet( GLUT_WINDOW_HEIGHT ), + -1, +1 + ); + + /* + * Now the matrix mode + */ + glMatrixMode( GL_MODELVIEW ); + glPushMatrix(); + glLoadIdentity(); + + /* + * Now the main text + */ + glColor3ub( 0, 0, 0 ); + glRasterPos2i( nX, nY ); + + for( p=pszText, lines=0; *p; p++ ) + { + if( *p == '\n' ) + { + lines++; + glRasterPos2i( nX, nY-(lines*18) ); + } + + glutBitmapCharacter( GLUT_BITMAP_HELVETICA_18, *p ); + } + + /* + * Revert to the old matrix modes + */ + glMatrixMode( GL_PROJECTION ); + glPopMatrix(); + + glMatrixMode( GL_MODELVIEW ); + glPopMatrix(); + + /* + * Restore the old OpenGL states + */ + glColor4f( 1.0f, 1.0f, 1.0f, 1.0f ); + glEnable( GL_DEPTH_TEST ); +} + +/* + * This is the display routine for our sample FreeGLUT windows + */ +static float g_fTime = 0.0f; + +void SampleDisplay( void ) +{ + /* + * Clear the screen + */ + glClearColor( 0, 0.5, 1, 1 ); + glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); + + /* + * Have the cube rotated + */ + glMatrixMode( GL_MODELVIEW ); + glPushMatrix(); + + glRotatef( g_fTime, 0, 0, 1 ); + glRotatef( g_fTime, 0, 1, 0 ); + glRotatef( g_fTime, 1, 0, 0 ); + + /* + * And then drawn... + */ + glColor3f( 1, 1, 0 ); + //glutWireCube( 20.0 ); + glutWireTeapot( 20.0 ); + //glutWireSpher( 15.0, 15, 15 ); + //glColor3f( 0, 1, 0 ); + //glutWireCube( 30.0 ); + //glutSolidCone( 10, 20, 10, 2 ); + + /* + * Don't forget about the model-view matrix + */ + glPopMatrix(); + + /* + * Draw a silly text + */ + if( g_InGameMode == 0 ) + PrintText( 20, 20, "Hello there cruel world!" ); + else + PrintText( 20, 20, "Press ESC to leave the game mode!" ); + + /* + * And swap this context's buffers + */ + glutSwapBuffers(); +} + +/* + * This is a sample idle function + */ +void SampleIdle( void ) +{ + g_fTime += 0.5f; + + if( g_LeaveGameMode == 1 ) + { + glutLeaveGameMode(); + g_LeaveGameMode = 0; + g_InGameMode = 0; + } +} + +/* + * The reshape function + */ +void SampleReshape( int nWidth, int nHeight ) +{ + GLfloat fAspect = (GLfloat) nHeight / (GLfloat) nWidth; + GLfloat fPos[ 4 ] = { 0.0f, 0.0f, 10.0f, 0.0f }; + GLfloat fCol[ 4 ] = { 0.5f, 1.0f, 0.0f, 1.0f }; + + /* + * Update the viewport first + */ + glViewport( 0, 0, nWidth, nHeight ); + + /* + * Then the projection matrix + */ + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + glFrustum( -1.0, 1.0, -fAspect, fAspect, 1.0, 80.0 ); + + /* + * Move back the camera a bit + */ + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); + glTranslatef( 0.0, 0.0, -40.0f ); + + /* + * Enable some features... + */ + glEnable( GL_CULL_FACE ); + glEnable( GL_DEPTH_TEST ); + glEnable( GL_NORMALIZE ); + + /* + * Set up some lighting + */ + glLightfv( GL_LIGHT0, GL_POSITION, fPos ); + glEnable( GL_LIGHTING ); + glEnable( GL_LIGHT0 ); + + /* + * Set up a sample material + */ + glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, fCol ); +} + +/* + * A sample keyboard callback + */ +void SampleKeyboard( unsigned char cChar, int nMouseX, int nMouseY ) +{ + printf( "SampleKeyboard(): keypress '%c' at (%i,%i)\n", cChar, nMouseX, nMouseY ); +} + +/* + * A sample keyboard callback (for game mode window) + */ +void SampleGameModeKeyboard( unsigned char cChar, int nMouseX, int nMouseY ) +{ + if( cChar == 27 ) + g_LeaveGameMode = 1; +} + + +/* + * A sample special callback + */ +void SampleSpecial( int nSpecial, int nMouseX, int nMouseY ) +{ + printf( "SampleSpecial(): special keypress %i at (%i,%i)\n", nSpecial, nMouseX, nMouseY ); +} + +/* + * A sample menu callback + */ +void SampleMenu( int menuID ) +{ + /* + * Just print something funny + */ + printf( "SampleMenu() callback executed, menuID is %i\n", menuID ); +} + +/* + * The sample's entry point + */ +int main( int argc, char** argv ) +{ + int menuID, subMenuA, subMenuB; + + glutInit( &argc, argv ); + + glutInitDisplayString( "stencil~2 rgb double depth>=16 samples" ); + glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH ); + glutInitWindowPosition( 100, 100 ); + + subMenuA = glutCreateMenu( SampleMenu ); + glutAddMenuEntry( "Sub menu A1 (01)", 1 ); + glutAddMenuEntry( "Sub menu A2 (02)", 2 ); + glutAddMenuEntry( "Sub menu A3 (03)", 3 ); + + subMenuB = glutCreateMenu( SampleMenu ); + glutAddMenuEntry( "Sub menu B1 (04)", 4 ); + glutAddMenuEntry( "Sub menu B2 (05)", 5 ); + glutAddMenuEntry( "Sub menu B3 (06)", 6 ); + glutAddSubMenu( "Going to sub menu A", subMenuA ); + + menuID = glutCreateMenu( SampleMenu ); + glutAddMenuEntry( "Entry one", 1 ); + glutAddMenuEntry( "Entry two", 2 ); + glutAddMenuEntry( "Entry three", 3 ); + glutAddMenuEntry( "Entry four", 4 ); + glutAddMenuEntry( "Entry five", 5 ); + glutAddSubMenu( "Enter sub menu A", subMenuA ); + glutAddSubMenu( "Enter sub menu B", subMenuB ); + + glutCreateWindow( "Hello world!" ); + glutDisplayFunc( SampleDisplay ); + glutReshapeFunc( SampleReshape ); + glutKeyboardFunc( SampleKeyboard ); + glutSpecialFunc( SampleSpecial ); + glutIdleFunc( SampleIdle ); + glutAttachMenu( GLUT_LEFT_BUTTON ); + + glutInitWindowPosition( 200, 200 ); + glutCreateWindow( "I am not Jan B." ); + glutDisplayFunc( SampleDisplay ); + glutReshapeFunc( SampleReshape ); + glutKeyboardFunc( SampleKeyboard ); + glutSpecialFunc( SampleSpecial ); + glutIdleFunc( SampleIdle ); + glutAttachMenu( GLUT_LEFT_BUTTON ); + + printf( "Testing game mode string parsing, don't panic!\n" ); + glutGameModeString( "320x240:32@100" ); + glutGameModeString( "640x480:16@72" ); + glutGameModeString( "1024x768" ); + glutGameModeString( ":32@120" ); + glutGameModeString( "Toudi glupcze, Danwin bedzie moj!" ); + glutGameModeString( "640x480:16@72" ); + + glutEnterGameMode(); + glutDisplayFunc( SampleDisplay ); + glutReshapeFunc( SampleReshape ); + glutKeyboardFunc( SampleGameModeKeyboard ); + glutIdleFunc( SampleIdle ); + glutAttachMenu( GLUT_LEFT_BUTTON ); + + printf( "current window is %ix%i+%i+%i", + glutGet( GLUT_WINDOW_X ), glutGet( GLUT_WINDOW_Y ), + glutGet( GLUT_WINDOW_WIDTH ), glutGet( GLUT_WINDOW_HEIGHT ) + ); + + /* + * Enter the main FreeGLUT processing loop + */ + glutMainLoop(); + + printf( "glutMainLoop() termination works fine!\n" ); + + /* + * This is never reached in FreeGLUT. Is that good? + */ + return( EXIT_SUCCESS ); +} + +/*** END OF FILE ***/