Commit 4fc2b759 authored by Sam Lantinga's avatar Sam Lantinga

Getting ready for a new Xcode project from Eric Wing

--HG--
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%403892
parent 8c7dddc1
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>SDL</string>
<key>CFBundleGetInfoString</key>
<string>http://www.libsdl.org</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>SDL</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Simple DirectMedia Layer</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.2.9</string>
<key>CFBundleSignature</key>
<string>SDLX</string>
<key>CFBundleVersion</key>
<string>1.2.10</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>SDL</string>
<key>CFBundleGetInfoString</key>
<string>http://www.libsdl.org</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>SDL</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Simple DirectMedia Layer</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.2.9</string>
<key>CFBundleSignature</key>
<string>SDLX</string>
<key>CFBundleVersion</key>
<string>1.2.10</string>
</dict>
</plist>
This source diff could not be displayed because it is too large. You can view the blob instead.
SDL Mac OS X Developer Notes:
This is an optional developer package to provide extras that an
SDL developer might benefit from.
Make sure you have already installed the SDL.framework
from the SDL.dmg.
For more complete documentation, please see READMEs included
with the SDL source code. Also, don't forget about the API
documentation (also included with this package).
This package contains:
- SDL API Documentation
- A variety of SDLMain and .Nib files to choose from
- Xcode/Project Builder project templates
SDL API Documentation:
We include both the HTML documentation and the man files. For
the HTML documentation, we have previously been installing to
/Develoepr/Documentation, but Apple explicitly says this is not
intended for 3rd party documentation. Xcode installs/updates
reserve the right and have been known to completely purge the
/Developer directory before installation, so if you place stuff
there, be aware that it could be deleted.
SDLMain:
We include several different variations of SDLMain and the
.Nibs. (Each of these are demonstrated by the different PB/Xcode
project templates.) You get to pick which one you want to use,
or you can write your own to meet your own specific needs. We do
not currently provide a libSDLMain.a. You can build it yourself
once you decide which one you want to use though it is easier and
recommended in the SDL FAQ that you just copy the SDLMain.h and
SDLMain.m directly into your project. If you are puzzled by this,
we strongly recommend you look at the different PB/Xcode project
templates to understand their uses and differences. (See Project
Template info below.) Note that the "Nibless" version is the same
version of SDLMain we include the the devel-lite section of the
main SDL.dmg.
Project Builder/Xocde Project Templates:
For convenience, we provide Project Templates for Xcode and
Project Builder. Using Xcode is *not* a requirement for using
the SDL.framework. However, for newbies, we do recommend trying
out the Xcode templates first (and work your way back to raw gcc
if you desire), as the Xcode templates try to setup everything
for you in a working state. This avoids the need to ask those
many reoccuring questions that appear on the mailing list
or the SDL FAQ.
Xcode 2.1+ users may use the templates in TemplatesForXcode folder.
Project Builder and Xcode <= 2.0 users will need to use the
templates in TemplatesForProjectBuilder folder.
We have provided 4 different kinds of SDL templates for Xcode.
We recommend you copy each of the template folders to:
/Library/Application Support/Apple/Developer Tools/Project Templates/Appllcation (for system-wide)
or
~/Library/Application Support/Apple/Developer Tools/Project Templates/Appllcation (for per-user)
(Project Builder users will need to copy to /Developer/ProjectBuilder Extras).
After doing this, when doing a File->New Project, you will see the
projects under the Application category.
How to create a new SDL project:
1. Open Xcode (or Project Builder)
2. Select File->New Project
3. Select SDL Application
4. Name, Save, and Finish
5. Add your sources.
*6. That's it!
* If you installed the SDL.framework to $(HOME)/Library/Frameworks
instead of /Library/Frameworks, you will need to update the
location of the SDL.framework in the "Groups & Files" browser.
** For Xcode users using Project Builder templates, you may
want to convert the project to native Xcode targets since
our current templates are Project Builder based.
Go to the Menu->Project->Upgrade All Targets to Native
The project templates we provide are:
- SDL Application
This is the barebones, most basic version. There is no
customized .Nib file. While still utilizing Cocoa under
the hood, this version may be best suited for fullscreen
applications.
- SDL Cocoa Application
This demonstrates the integration of using native
Cocoa Menus with an SDL Application. For applications
designed to run in Windowed mode, Mac users may appreciate
having access to standard menus for things
like Preferences and Quiting (among other things).
- SDL Custom Cocoa Application
This application demonstrates the integration of SDL with
native Cocoa widgets. This shows how
you can get native Cocoa widgets like buttons, sliders,
etc. to interact/integrate with your SDL application.
- SDL OpenGL Application
This reuses the same SDLMain from the "SDL Application"
temmplate, but also demonstrates how to
bring OpenGL into the mix.
Project Builder/Xcode Tips and Tricks:
- Building from command line
Use pbxbuild in the same directory as your .pbproj file
(Xcode has xcodebuild)
- Running your app
You can send command line args to your app by either
invoking it from the command line (in *.app/Contents/MacOS)
or by entering them in the "Executables" panel of the target
settings, or the "Executables" tab in the main window
in Project Builder 2.0.
- Working directory
As defined in the SDLMain.m file, the working directory of
your SDL app is by default set to its parent. You may wish to
change this to better suit your needs.
Partial History:
2006-03-17 - Changed the package format from a .pkg based
installer to a .dmg to avoid requiring administrator/root
to access contents, for better transparency, and to allow
users to more easily control which components
they actually want to install.
Introduced and updated documentation.
Created brand new Xcode project templates for Xcode 2.1
based on the old Project Builder templates as they
required Xcode users to "Upgrade to Native Target". The new
templates try to leveage more default options and leverage
more Xcode conventions. The major change that may introduce
some breakage is that I now link to the SDL framework
via the "Group & Files" browser instead of using build
options. The downside to this is that if the user
installs the SDL.framework to a place other than
/Library/Frameworks (e.g. $(HOME)/Library/Frameworks),
the framework will not be found to link to and the user
has to manually fix this. But the upshot is (in addition to
being visually displayed in the forefront) is that it is
really easy to copy (embed) the framework automatically
into the .app bundle on build. So I have added this
feature, which makes the application potentially
drag-and-droppable ready. The Project Builder templates
are mostly unchanged due to the fact that I don't have
Project Builder. I did rename a file extension to .pbxproj
for the SDL Custom Cocoa Application template because
the .pbx extension would not load in my version of Xcode.
For both Project Builder and Xcode templates, I resync'd
the SDLMain.* files for the SDL App and OpenGL App
templates. I think people forget that we have 2 other
SDLMain's (and .Nib's) and somebody needs to go
through them and merge the new changes into those.
I also wrote a fix for the SDL Custom Cocoa App
template in MyController.m. The sprite loading code
needed to be able to find the icon.bmp in the .app
bundle's Resources folder. This change was needed to get
the app to run out of the box. This might change is untested
with Project Builder though and might break it.
There also seemed to be some corruption in the .nib itself.
Merely opening it and saving (allowing IB to correct the
.nib) seemed to correct things.
(Eric Wing)
Title SDL 1.2.9
Version 1
Description SDL Library for Mac OS X (http://www.libsdl.org)
DefaultLocation /Developer/Documentation/SDL
Diskname (null)
DeleteWarning
NeedsAuthorization YES
DisableStop NO
UseUserMask YES
Application NO
Relocatable NO
Required NO
InstallOnly NO
RequiresReboot NO
InstallFat NO
Title SDL 1.2.8
Version 1
Description SDL Library for Mac OS X (http://www.libsdl.org)
DefaultLocation /Library/Frameworks
Diskname (null)
DeleteWarning
NeedsAuthorization NO
DisableStop NO
UseUserMask NO
Application NO
Relocatable YES
Required NO
InstallOnly NO
RequiresReboot NO
InstallFat NO
The Simple DirectMedia Layer (SDL for short) is a cross-platform library designed to make it easy to write multi-media software, such as games and emulators.
The Simple DirectMedia Layer library source code is available from: http://www.libsdl.org/
This library is distributed under the terms of the GNU LGPL license: http://www.gnu.org/copyleft/lesser.html
\ No newline at end of file
This package installs documentation and Project Builder stationary for the SDL framework.
The SDL documentation is installed into /Developer/Documentation/SDL.
The SDL Mac OS X Readme is installed into your home directory.
#!/bin/sh
# finish up the installation
# this script should be executed using the sudo command
# this file is copied to SDL-devel.post_install and SDL-devel.post_upgrade
# inside the .pkg bundle
echo "Running post-install script"
umask 022
USER=`basename ~`
echo "User is \"$USER\""
ROOT=/Developer/Documentation/SDL
echo "Fixing framework permissions"
find $ROOT -type d -exec chmod a+rx {} \;
find $ROOT -type f -exec chmod a+r {} \;
## We're not installing frameworks here anymore. The single
## framework should be installed to /Library/Frameworks which
## is handled by the standard package (not developer package).
## Using the home directory here is problematic for multi-user systems too.
# echo "Moving SDL.framework to ~/Library/Frameworks"
# move SDL to its proper home, so the target stationary works
#sudo -u $USER mkdir -p ~/Library/Frameworks
#sudo -u $USER /Developer/Tools/CpMac -r $ROOT/SDL.framework ~/Library/Frameworks
## I'm not sure where this gets created and what's put in there.
rm -rf $ROOT/SDL.framework
## I think precompiled headers have changed through the revisions of Apple's gcc.
## I don't know how useful this is anymore w.r.t. Apple's newest system for precompiled headers.
## I'm removing this for now.
# echo "Precompiling Header"
# precompile header for speedier compiles
#sudo -u $USER /usr/bin/cc -precomp ~/Library/Frameworks/SDL.framework/Headers/SDL.h -o ~/Library/Frameworks/SDL.framework/Headers/SDL.p
# find the directory to store stationary in
if [ -e "/Library/Application Support/Apple/Developer Tools" ] ; then
echo "Installing project stationary for XCode"
PBXDIR="/Library/Application Support/Apple/Developer Tools"
else
echo "Installing project stationary for Project Builder"
PBXDIR="/Developer/ProjectBuilder Extras"
fi
# move stationary to its proper home
mkdir -p "$PBXDIR/Project Templates/Application"
mkdir -p "$PBXDIR/Target Templates/SDL"
cp -r "$ROOT/Project Stationary/SDL Application" "$PBXDIR/Project Templates/Application/"
cp -r "$ROOT/Project Stationary/SDL Cocoa Application" "$PBXDIR/Project Templates/Application/"
cp -r "$ROOT/Project Stationary/SDL Custom Cocoa Application" "$PBXDIR/Project Templates/Application/"
cp -r "$ROOT/Project Stationary/SDL OpenGL Application" "$PBXDIR/Project Templates/Application/"
cp "$ROOT/Project Stationary/Application.trgttmpl" "$PBXDIR/Target Templates/SDL/"
rm -rf "$ROOT/Project Stationary"
# Actually, man doesn't check this directory by default, so this isn't
# very helpful anymore.
#echo "Installing Man Pages"
## remove old man pages
#rm -rf "/Developer/Documentation/ManPages/man3/SDL"*
#
## install man pages
#mkdir -p "/Developer/Documentation/ManPages/man3"
#cp "$ROOT/docs/man3/SDL"* "/Developer/Documentation/ManPages/man3/"
#rm -rf "$ROOT/docs/man3"
#
#echo "Rebuilding Apropos Database"
## rebuild apropos database
#/usr/libexec/makewhatis
# copy README file to your home directory
sudo -u $USER cp "$ROOT/Readme SDL Developer.txt" ~/
# open up the README file
sudo -u $USER open ~/"Readme SDL Developer.txt"
{\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;\f1\fswiss\fcharset77 Helvetica;\f2\fswiss\fcharset77 Helvetica-Oblique;
}
{\colortbl;\red255\green255\blue255;\red64\green64\blue64;}
\paperw11900\paperh16840\margl1440\margr1440\vieww9080\viewh13160\viewkind0
\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\qc
\f0\b\fs36 \cf0 GNU LESSER GENERAL PUBLIC LICENSE
\fs24 \
Version 2.1, February 1999
\f1\b0 \
\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
\cf0 \
\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\qc
\f2\i \cf0 Copyright (C) 1991, 1999 Free Software Foundation, Inc.\
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\
Everyone is permitted to copy and distribute verbatim copies\
of this license document, but changing it is not allowed.\
\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
\f1\i0 \cf0 \
\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
\cf2 [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.]\cf0 \
\
\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\qc
\f0\b \cf0 Preamble
\f1\b0 \
\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
\cf0 \
The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users.\
\
This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below.\
\
When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things.\
\
To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it.\
\
For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights.\
\
We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library.\
\
To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others.\
\
Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license.\
\
Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We this license for certain libraries in order to permit linking those libraries into non-free programs.\
\
When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library.\
\
We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances.\
\
For example, on rare occasions, there may be a special need to encourage widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License.\
\
Another cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system.\
\
Although the Lesser General Public License is Less protective of the users' freedom, it does insure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library.\
\
The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run.\
\
\
\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\qc
\f0\b \cf0 GNU LESSER GENERAL PUBLIC LICENSE\
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\
\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
\f1\b0 \cf0 \
\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
\f0\b \cf0 0.
\f1\b0 This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you".\
\
A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables.\
\
The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".)\
\
"Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library.\
\
Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does.\
\
\f0\b 1.
\f1\b0 You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library.\
\
You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.\
\
\f0\b 2.
\f1\b0 You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:\
\
\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\li240\ql\qnatural
\f0\b \cf0 a)
\f1\b0 The modified work must itself be a software library.\
\
\f0\b b)
\f1\b0 You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change.\
\
\f0\b c)
\f1\b0 You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License.\
\
\f0\b d)
\f1\b0 If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful.\
\
(For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.)\
\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
\cf0 \
These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.\
\
Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library.\
\
In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.\
\
\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
\f0\b \cf0 3.
\f1\b0 You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices.\
\
Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy.\
\
This option is useful when you wish to copy part of the code of the Library into a program that is not a library.\
\
\f0\b 4.
\f1\b0 You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange.\
\
If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code.\
\
\f0\b 5.
\f1\b0 A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License.\
\
However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables.\
\
When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law.\
\
If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.)\
\
Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself.\
\
\f0\b 6.
\f1\b0 As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications.\
\
You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things:\
\
\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\li240\ql\qnatural
\f0\b \cf0 a)
\f1\b0 Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.)\
\
\f0\b b)
\f1\b0 Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with.\
\
\f0\b c)
\f1\b0 Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution.\
\
\f0\b d)
\f1\b0 If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place.\
\
\f0\b e)
\f1\b0 Verify that the user has already received a copy of these materials or that you have already sent this user a copy.\
\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
\cf0 \
For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.\
\
It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute.\
\
\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
\f0\b \cf0 7.
\f1\b0 You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things:\
\
\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\li240\ql\qnatural
\f0\b \cf0 a)
\f1\b0 Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above.\
\
\f0\b b)
\f1\b0 Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work.\
\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
\cf0 \
\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
\f0\b \cf0 8.
\f1\b0 You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.\
\
\f0\b 9.
\f1\b0 You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it.\
\
\f0\b 10.
\f1\b0 Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License.\
\
\f0\b 11.
\f1\b0 If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library.\
\
If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances.\
\
It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.\
\
This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.\
\
\f0\b 12.
\f1\b0 If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.\
\
\f0\b 13.
\f1\b0 The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.\
\
Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation.\
\
\f0\b 14.
\f1\b0 If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.\
\
\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\qc
\f0\b \cf0 NO WARRANTY
\f1\b0 \
\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
\cf0 \
\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
\f0\b \cf0 15.
\f1\b0 BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\
\
\f0\b 16.
\f1\b0 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\
\
\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\qc
\f0\b \cf0 END OF TERMS AND CONDITIONS
\f1\b0 \
\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
\cf0 \
\
How to Apply These Terms to Your New Libraries\
\
If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License).\
\
To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.\
\
\pard\tx220\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\li240\ql\qnatural
\cf0 <one line to give the library's name and a brief idea of what it does.>\
Copyright (C) <year> <name of author>\
\
This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\
\
This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.\
\
You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\
\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
\cf0 \
Also add information on how to contact you by electronic and paper mail.\
\
You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names:\
\
\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\li240\ql\qnatural
\cf0 Yoyodyne, Inc., hereby disclaims all copyright interest in the library\
`Frob' (a library for tweaking knobs) written by James Random Hacker.\
\
<signature of Ty Coon>, 1 April 1990\
Ty Coon, President of Vice\
\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
\cf0 \
That's all there is to it!\
\
}
\ No newline at end of file
The Simple DirectMedia Layer (SDL for short) is a cross-platform
library designed to make it easy to write multi-media software,
such as games and emulators.
The Simple DirectMedia Layer library source code is available from:
http://www.libsdl.org/
This library is distributed under the terms of the GNU LGPL license:
http://www.gnu.org/copyleft/lesser.html
This packages contains the SDL.framework for OS X.
Conforming with Apple guidelines, this framework
contains both the SDL runtime component and development header files.
To Install:
Copy the SDL.framework to /Library/Frameworks
You may alternatively install it in <Your home directory>/Library/Frameworks
if your access privileges are not high enough.
(Be aware that the Xcode templates we provide in the SDL Developer Extras
package may require some adjustment for your system if you do this.)
Known Issues:
???
(Partial) History of PB/Xcode projects:
2006-05-09 - Added shell script phase to deal with new SDL_config.h
behavior. Encountered what seems to be an Xcode bug with
multiple files of the same name, even when conditional compiling
is controlled by custom #defines (SDL_sysloadso.c). Multiple or
undefined symbols are the result of this.
Recommended that macosx/SDL_sysloadso.c be modified to directly
include the dlopen version of the file via #ifdef's so only
one version needs to exist. Filed a formal bug report with Apple
about this (4542369).
2006-03-22 - gcc 4 visibility features have been added to the code base so I
enabled the switch in Xcode to take advantage of it. Be aware that only
our x86 builds will be exposed to this feature as we still build ppc
with gcc 3.3.
Christian Walther has sent me some great feedback on things that are
broken, so I have made some of these fixes. Among the issues are
compatibility and current library versions are not set to 1 (breaks
backwards compatibility), documentation errors, resource copying
location problems for the SDLTest apps, missing HAVE_OPENGL and
OpenGL.framework linking in testgl.
(Eric Wing)
2006-03-17 - Because the X11 headers are not installed by default with Xcode,
we decided to offer two variants of the same targets (one with X11 stuff
and one without). By default, since the X11 stuff does not necessarily
conflict with the native stuff, we build the libraries with the X11 stuff
so advanced developers can access it by default. However, in the case
that a developer did not install X11 (or just doesn't want the extra bloat),
the user may directly select those targets and build those instead.
Once again, we are attempting to remove the exported symbols file. If
I recall correctly, the clashing symbol problems we got were related
to the CD-ROM code which was formerly in C++. Now that the C++ code
has been purged, we are speculating that we might be able to remove
the exports file safely. The long term solution is to utilize gcc 4's
visibility features.
For the developer extras package, I changed the package format
from a .pkg based installer to a .dmg to avoid requiring
administrator/root to access contents, for better
transparency, and to allow users to more easily control which components
they actually want to install.
I also made changes and updates to the PB/Xcode project templates (see Developer ReadMe).
(Eric Wing)
2006-03-07 - The entire code base has been reorganized and platform specific
defines have been pushed into header files (SDL_config_*.h). This means
that defines that previously had to be defined in the Xcode projects can
be removed (which I have started doing). Furthermore, it appears that the
MMX/SSE code has been rewritten and refactored so it now compiles without
nasm and without making us do strange things to support OS X. However, this
Xcode project still employs architecture specific build options in order to
achieve the mandated 10.2 compatibility. As a result of the code base changes,
there are new public headers. But also as a result of these changes, there are
also new headers that qualify as "PrivateHeaders". Private Headers are headers
that must be exported because a public header includes them, but users shouldn't
directly invoke these. SDL_config_macosx.h is an example of this.
We have considered marking these headers as Private, but it
requires that the public headers invoke them via framework conventions, i.e.
#include <FrameworkName/Header.h>
e.g.
#include <SDL/SDL_config_macosx.h>
and not
#include "SDL_config_macosx.h"
However this imposes the restriction that non-framework distributions must
place their headers in a directory called SDL/ (and not SDL11/ like FreeBSD).
Currently, I do not believe this would pose a problem for any of the current
distributions (Fink, DarwinPorts). Or alternatively, users could be
expected/forced to also include the header path:
-I/Library/Frameworks/SDL.framework/PrivateHeaders,
but most people would probably not read the documentation on this.
But currently, we have decided to be conservative and have opted not to
use the PrivateHeaders feature.
(Eric Wing)
2006-01-31 - Updates to build Universal Binaries while retaining 10.2 compatibility.
We were unable to get MMX/SSE support enabled. It is believed that a rewrite of
the assembly code will be necessary to make it position independent and not
require nasm. Altivec has finally been enabled for PPC. (Eric Wing)
2005-09-?? - Had to add back the exports file because it was causing build problems
for some cases. (Eric Wing)
2005-08-21 - First entry in history. Updated for SDL 1.2.9 and Xcode 2.1. Getting
ready for Universal Binaries. Removed the .pkg system for .dmg for due to problems
with broken packages in the past several SDL point releases. Removed usage of SDL
exports file because it has become another point of failure. Introduced new documentation
about SDLMain and how to compile in an devel-lite section of the SDL.dmg. (Eric Wing)
Before history:
SDL 1.2.6? to 1.2.8
Started updating Project Builder projects to Xcode for Panther and Tiger. Also removed
the system that split the single framework into separate runtime and headers frameworks.
This is against Apple conventions and causes problems on multiuser systems.
We now distribute a single framework.
The .pkg system has repeatedly been broken with every new release of OS X.
With 1.2.8, started migrating stuff to .dmg based system to simplify distribution process.
Tried updating the exports file and Perl script generation system for changing syntax. (Eric Wing)
Pre-SDL 1.2.6
Created Project Builder projects for SDL and .pkg based distribution system. (Darrell Walisser)
This directory is for developers. This directory contains some basic essentials you will need for developing SDL based applications on OS X. The SDL-devel package contains all of this stuff plus more, so you can ignore this if you install the SDL-devel.pkg. The SDL-devel package contains Project Builder/Xcode templates, SDL documentation, and different variations of SDLmain and NIB files for SDL.
To compile an SDL based application on OS X, SDLMain.m must be compiled into your program. (See the SDL FAQ). The SDL-devel.pkg includes Project Builder/Xcode templates which already do this for you. But for those who may not want to install the dev package, an SDLMain is provided here as a convenience. Be aware that there are different variations of SDLMain.m depending on what class of SDL application you make and they are intended to work with NIB files. Only one SDLMain variant is provided here and without any NIB files. You should look to the SDL-devel package for the others. We currently do not provide a SDLMain.a file, partly to call to attention that there are different variations of SDLmain.
To build from the command line, your gcc line will look something like this:
gcc -I/Library/Frameworks/SDL.framework/Headers MyProgram.c SDLmain.m -framework SDL -framework Cocoa
An SDL/OpenGL based application might look like:
gcc -I/Library/Frameworks/SDL.framework/Headers -I/System/Library/Frameworks/OpenGL.framework/Headers MyProgram.c SDLmain.m -framework SDL -framework Cocoa -framework OpenGL
{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330
{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;\f1\fswiss\fcharset77 Helvetica;\f2\fnil\fcharset77 LucidaGrande;
\f3\fmodern\fcharset77 Courier-Oblique;}
{\colortbl;\red255\green255\blue255;}
{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid1}}
{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}}
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural
\f0\b\fs24 \cf0 Universal Binary Notes:\
\f1\b0 \
Below is an overview of what we had to do to build Universal Binaries for SDL (and satellites). The document is provided to help others understand what the heck we had to do to get this to work so they know (and don't break) any settings we have set to accomplish this. It also describes areas of problems for those who might attempt to fix them after us.\
\
\
It turns out that developing a Universal Binary for SDL was a painful process, but not for the typical reasons affecting most other developers. SDL is already platform clean and has an Xcode project which are usually the two biggest obstacles. (The only real code bug we had to fix was in SDL_mixer, but that was due to a Quicktime issue so we can blame the Quicktime authors.)\
\
But developing a Universal Binary was painful to us for several reasons:\
\
\pard\tx220\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\li720\fi-720\ql\qnatural\pardirnatural
\ls1\ilvl0\cf0 {\listtext \'a5 }SDL must retain compatibility with 10.2 (Jaguar)\
\
{\listtext \'a5 }SDL has processor specific optimizations (Altivec, MMX/SSE)\
\
{\listtext \'a5 }The SDL satellites (SDL_mixer, SDL_image, SDL_ttf) have 3rd party dependencies which we currently statically link against. All of these dependencies needed to be updated/recompiled with the same above constraints.\
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural
\cf0 \
For retaining compatibility with 10.2, we have experimentally determined that there is no reliable way to use gcc 4.0.x to compile a binary that works under Jaguar. With the gcc 4.0 that shipped in Xcode 2.1, libgcc_s was automatically linked against. This library does not exist on systems prior to 10.3.9. After filing a bug report, Apple removed this automatic linking in gcc 4.0.1 which shipped with Xcode 2.2, but we discovered that we suffered from undefined symbols to things in the printf family library. (They seem to be new symbols related to printing long doubles, etc.)\
\
So to accomplish our compatibility goals, we had to find and exploit some lesser known features of Xcode that allow us to specify architecture specific build flags found here:\
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural
{\field{\*\fldinst{HYPERLINK "http://developer.apple.com/documentation/DeveloperTools/Conceptual/XcodeUserGuide/Contents/Resources/en.lproj/05_07_bs_building_product/chapter_33_section_6.html#//apple_ref/doc/uid/TP40002693-SW3"}}{\fldrslt \cf0 http://developer.apple.com/documentation/DeveloperTools/Conceptual/XcodeUserGuide/Contents/Resources/en.lproj/05_07_bs_building_product/chapter_33_section_6.html#//apple_ref/doc/uid/TP40002693-SW3}}\
\
The first and most important of these is the
\f2 GCC_VERSION flag which lets us set gcc 3.3 for PowerPC and gcc 4.0 for Intel.\
\
But we also needed to verify other options such as the deployment target and SDK. Experimentally, we found that the Deployment target did very little for us except retain prebinding. Setting it to anything less than 10.4 allows for prebinding to remain active.\
\
For the SDK's, we found that Apple does link against different versions of system components. But experimentally, we discovered we could still link to the 10.4u SDK and things would still work on Jaguar. Ideally we should probably link to the 10.2.8 SDK for PowerPC. But in reality, most people don't install the 10.2.8 SDK on their system (it is not a default component) so we didn't want to confuse people as setting this would likely cause people's compile to fail the first time they try and they would have to understand the reason for this. We did leave the architecture specific SDKROOT option set explicitly to make it easy to change in case we need to.\
\
For the Altivec and MMX/SSE options, we had to use architecture specific build flags. Furthermore, to use SSE, we also had to include the assembly code. This caused us problems because there is no easy way to tell Xcode to use files only for a specific architecture. So the PowerPC side got confused on the .asm files and would fail to compile. \
\
Pushing forward, we ignored PPC for the moment to see if we could at least build an optimized x86 build and then use lipo manually to merge the results. We encountered additional problems. First the alignment needed to be changed for reasons outside my knowledge base. We changed all instances of .align 16 to .align 8. This seemed to fix the compile problems. But at the linking stage, we got errors such as:\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li640\fi-640\ql\qnatural\pardirnatural
\f3\i\fs22 \cf0 ld: /Users/ewing/DEVELOPMENT/CODETEST/UniversalBinarySDL/SDL12/Xcode/SDL/build/SDL.build/Deployment/Framework.build/Objects-normal/i386/SDL_yuv_mmx.o has local relocation entries in non-writable section (__TEXT,__text)\
/usr/bin/libtool: internal link edit command failed\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural
\f2\i0\fs24 \cf0 \
Our belief is that the assembly code is not position independent and thus will not work for us. We double checked for any OS X gcc flags that control position independence, but everything seemed to be in order. As such, we cannot compile MMX/SSE optimizations until they are rewritten, preferably without the nasm requirement to accommodate the dual PPC/x86 Xcode limitations.\
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural
\cf0 \
So for now, we have unchecked (checkbox) the assembly specific files in the Xcode project and have removed the -DUSE_ASMBLIT flag from OTHER_CFLAGS_i386. To reactivate this stuff, you will need to recheck the boxes and re-add the flag.\
\
The files are\
SDL_mixer_MMX.c/h\
The files under hermes\
and SDL_yuv_mmx.c\
\
\
\
For the SDL satellites, it was more of the same. The painful part was that the 3rd library dependencies needed to be rebuilt. (Some of our libraries were out of date, so this was an opportunity to update them.) But this meant changing those build systems as well. \
\
These are the versions I used:\
libpng-1.2.8\
libjpeg-6b\
libogg-1.1.3\
libvorbis-1.1.2\
smpeg cvs\
\
We found that Apple already had a libfreetype in the 10.4u SDK so we just used that one which seemed to work. (For the record, the question did come up of why we statically link against this when it seems to be a standard component on Panther and Tiger. We double checked, and it did not seem to be in Jaguar. So that's why.)\
\
The old libpng turned out to be from the 1.0.x branch so we needed to replace all the headers we had as well. Updating to the 1.2.x branch didn't seem to cause any problems we could detect.\
\
libpng and libjpeg lack an Xcode project so we mucked with their build system to produce Universal Binaries. But since we needed PPC to be compiled with 3.3 and Intel to be compiled with 4.0, it ended up that we built multiple times changing the compiler, and then using lipo to strip and combine the binaries.\
\
libogg/libvorbis did contain Xcode projects, but didn't build static libraries so we had to add that. We also discovered that not building with gcc 3.3 caused us addition missing symbol runtime problems with float versions of math functions (sinf, sqrtf, etc).\
\
It seems that once upon a time, the SDL_mixer framework supported MP3's via SMPEG, but this disappeared at some point. I don't know why or how this happened. But I also don't know how SMPEG was ever used with the framework as there was no preexisting infrastructure as with the other libraries. So I have attempted to correct this oversight, however, the SMPEG framework itself has MMX code which has also turned out to be problematic. I am getting compiler errors of "
\f3\i\fs22 Unknown pseudo-op:"
\f2\i0\fs24 for
\f3\i\fs22 .type
\f2\i0\fs24 and
\f3\i\fs22 .size.
\f2\i0\fs24 \
So SMPEG is currently compiled without MMX optimizations.\
\
\
\
\
Addendum: \
2006-03-06:\
The main SDL code base (not the satellites) have undergone an overhaul. The required platform specific defines have been moved out of the build system into platform specific header files (SDL_config_*.h). This allows us to simplify the Xcode projects somewhat, but we still must maintain the architecture specific build options to invoke gcc 3.3 to maintain our mandated 10.2 compatibilty requirement.\
\
Also it appears that the MMX/SSE code has been rewritten as well so that the obstacles we faced in compiling in these optimizations are no longer problems. The binaries we produce should now contain the processor specific optimizations. (Remember this note only applies to SDL and not the satellites, such as SMPEG.)\
\
\
\
Contributers:\
Eric Wing (Xcode projects, 3rd party dependencies, documentation)\
Christian Walther (10.2.8 and 10.3.9 testing/verification)\
Ryan Gordon (converted C++ code in SDL/OSX code base to pure C)\
Martin Storsj\'9a (libgcc_s testing/verification)\
Stephane Marchesin (MMX/SSE code expert)\
\
\
\
\
\
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural
\f1 \cf0 \
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>checkkeys</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>graywin</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>loopwave</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>testalpha</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>testalpha</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>testbitmap</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>testalpha</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>testcdrom</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>testalpha</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>testerror</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>testalpha</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>testgamma</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>testgl</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>testalpha</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>testjoystick</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>testkeys</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>testlock</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>testalpha</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string></string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>testpalette</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>testalpha</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>testsem</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>testsprite</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>testthread</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>testtimer</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>testtypes</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>testversion</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>testvidinfo</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>testwin</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>com.yourcompany.testwm2</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>com.yourcompany.testwm2</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>testwm</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>threadwin</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>torturethread</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
This source diff could not be displayed because it is too large. You can view the blob instead.
/*
* libsdlmain_prefix.h
* SDLTest
*
* Created by Darrell Walisser on Wed Aug 06 2003.
* Copyright (c) 2003 __MyCompanyName__. All rights reserved.
*
*/
#include <Cocoa/Cocoa.h>
#include <Carbon/Carbon.h>
#include "SDL.h"
#include "SDLMain.h"
\ No newline at end of file
{
Class = Application;
Description = "Target for building a SDL application.";
CustomBuildSettings = {
WRAPPER_EXTENSION = "app";
FRAMEWORK_SEARCH_PATHS = "\"/Library/Frameworks\"";
HEADER_SEARCH_PATHS = "\"/Library/Frameworks/SDL.framework/Headers\"";
OTHER_LDFLAGS = "-framework Cocoa -framework SDL";
};
CustomProductSettings = {
NSPrincipalClass = "NSApplication";
NSMainNibFile = "SDLMain.nib";
};
InstallationPath = "$(SYSTEM_APPS_DIR)";
WrapperExtension = "app";
}
Binary files a/Xcode/TemplatesForProjectBuilder/SDL Application/English.lproj/InfoPlist.strings and /dev/null differ Binary files a/Xcode/TemplatesForProjectBuilder/SDL Application/English.lproj/InfoPlist.strings and /dev/null differ
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Description</key>
<string>This project builds an SDL-based application.</string>
<key>FilesToMacroExpand</key>
<array>
<string>English.lproj/InfoPlist.strings</string>
</array>
</dict>
</plist>
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 34;
objects = {
080E96DDFE201D6D7F000001 = {
children = (
F5A47A9D01A0482F01D3D55B,
F5A47A9E01A0483001D3D55B,
);
isa = PBXGroup;
name = Classes;
refType = 4;
};
089C165CFE840E0CC02AAC07 = {
children = (
089C165DFE840E0CC02AAC07,
);
isa = PBXVariantGroup;
name = InfoPlist.strings;
refType = 4;
};
089C165DFE840E0CC02AAC07 = {
fileEncoding = 10;
isa = PBXFileReference;
name = English;
path = English.lproj/InfoPlist.strings;
refType = 4;
};
089C165EFE840E0CC02AAC07 = {
fileRef = 089C165CFE840E0CC02AAC07;
isa = PBXBuildFile;
settings = {
};
};
//080
//081
//082
//083
//084
//100
//101
//102
//103
//104
1058C7A0FEA54F0111CA2CBB = {
children = (
1058C7A1FEA54F0111CA2CBB,
);
isa = PBXGroup;
name = "Linked Frameworks";
refType = 4;
};
1058C7A1FEA54F0111CA2CBB = {
isa = PBXFrameworkReference;
name = Cocoa.framework;
path = /System/Library/Frameworks/Cocoa.framework;
refType = 0;
};
1058C7A2FEA54F0111CA2CBB = {
children = (
29B97325FDCFA39411CA2CEA,
29B97324FDCFA39411CA2CEA,
);
isa = PBXGroup;
name = "Other Frameworks";
refType = 4;
};
1058C7A3FEA54F0111CA2CBB = {
fileRef = 1058C7A1FEA54F0111CA2CBB;
isa = PBXBuildFile;
settings = {
};
};
//100
//101
//102
//103
//104
//170
//171
//172
//173
//174
17587328FF379C6511CA2CBB = {
isa = PBXApplicationReference;
path = "«PROJECTNAME».app";
refType = 3;
};
//170
//171
//172
//173
//174
//190
//191
//192
//193
//194
19C28FACFE9D520D11CA2CBB = {
children = (
17587328FF379C6511CA2CBB,
);
isa = PBXGroup;
name = Products;
refType = 4;
};
//190
//191
//192
//193
//194
//290
//291
//292
//293
//294
29B97313FDCFA39411CA2CEA = {
buildStyles = (
4A9504CCFFE6A4B311CA0CBA,
4A9504CDFFE6A4B311CA0CBA,
);
isa = PBXProject;
mainGroup = 29B97314FDCFA39411CA2CEA;
projectDirPath = "";
targets = (
29B97326FDCFA39411CA2CEA,
);
};
29B97314FDCFA39411CA2CEA = {
children = (
080E96DDFE201D6D7F000001,
29B97315FDCFA39411CA2CEA,
29B97317FDCFA39411CA2CEA,
29B97323FDCFA39411CA2CEA,
19C28FACFE9D520D11CA2CBB,
);
isa = PBXGroup;
name = "«PROJECTNAMEASXML»";
path = "";
refType = 4;
};
29B97315FDCFA39411CA2CEA = {
children = (
F5A47A9F01A0483001D3D55B,
);
isa = PBXGroup;
name = "Other Sources";
path = "";
refType = 4;
};
29B97317FDCFA39411CA2CEA = {
children = (
089C165CFE840E0CC02AAC07,
);
isa = PBXGroup;
name = Resources;
path = "";
refType = 4;
};
29B97323FDCFA39411CA2CEA = {
children = (
1058C7A0FEA54F0111CA2CBB,
1058C7A2FEA54F0111CA2CBB,
);
isa = PBXGroup;
name = Frameworks;
path = "";
refType = 4;
};
29B97324FDCFA39411CA2CEA = {
isa = PBXFrameworkReference;
name = AppKit.framework;
path = /System/Library/Frameworks/AppKit.framework;
refType = 0;
};
29B97325FDCFA39411CA2CEA = {
isa = PBXFrameworkReference;
name = Foundation.framework;
path = /System/Library/Frameworks/Foundation.framework;
refType = 0;
};
29B97326FDCFA39411CA2CEA = {
buildPhases = (
29B97327FDCFA39411CA2CEA,
29B97328FDCFA39411CA2CEA,
29B9732BFDCFA39411CA2CEA,
29B9732DFDCFA39411CA2CEA,
);
buildSettings = {
FRAMEWORK_SEARCH_PATHS = "\"/Library/Frameworks\"";
HEADER_SEARCH_PATHS = "\"/Library/Frameworks/SDL.framework/Headers\"";
INSTALL_PATH = "$(HOME)/Applications";
LIBRARY_SEARCH_PATHS = "";
OTHER_LDFLAGS = "-framework SDL";
PRODUCT_NAME = "«PROJECTNAME»";
SECTORDER_FLAGS = "";
WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas";
WRAPPER_EXTENSION = app;
};
dependencies = (
);
isa = PBXApplicationTarget;
name = "«PROJECTNAME»";
productInstallPath = "$(HOME)/Applications";
productName = "«PROJECTNAME»";
productReference = 17587328FF379C6511CA2CBB;
productSettingsXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<!DOCTYPE plist SYSTEM \"file://localhost/System/Library/DTDs/PropertyList.dtd\">
<plist version=\"0.9\">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>«PROJECTNAMEASXML»</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.1</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
";
shouldUseHeadermap = 1;
};
29B97327FDCFA39411CA2CEA = {
buildActionMask = 2147483647;
files = (
F5A47AA101A0483001D3D55B,
);
isa = PBXHeadersBuildPhase;
name = Headers;
};
29B97328FDCFA39411CA2CEA = {
buildActionMask = 2147483647;
files = (
089C165EFE840E0CC02AAC07,
);
isa = PBXResourcesBuildPhase;
name = "Bundle Resources";
};
29B9732BFDCFA39411CA2CEA = {
buildActionMask = 2147483647;
files = (
F5A47AA301A0483001D3D55B,
F5A47AA401A0483001D3D55B,
);
isa = PBXSourcesBuildPhase;
name = Sources;
};
29B9732DFDCFA39411CA2CEA = {
buildActionMask = 2147483647;
files = (
1058C7A3FEA54F0111CA2CBB,
);
isa = PBXFrameworksBuildPhase;
name = "Frameworks & Libraries";
};
//290
//291
//292
//293
//294
//4A0
//4A1
//4A2
//4A3
//4A4
4A9504CCFFE6A4B311CA0CBA = {
buildRules = (
);
buildSettings = {
COPY_PHASE_STRIP = NO;
OPTIMIZATION_CFLAGS = "-O0";
};
isa = PBXBuildStyle;
name = Development;
};
4A9504CDFFE6A4B311CA0CBA = {
buildRules = (
);
buildSettings = {
COPY_PHASE_STRIP = YES;
};
isa = PBXBuildStyle;
name = Deployment;
};
//4A0
//4A1
//4A2
//4A3
//4A4
//F50
//F51
//F52
//F53
//F54
F5A47A9D01A0482F01D3D55B = {
isa = PBXFileReference;
path = SDLMain.h;
refType = 2;
};
F5A47A9E01A0483001D3D55B = {
isa = PBXFileReference;
path = SDLMain.m;
refType = 2;
};
F5A47A9F01A0483001D3D55B = {
isa = PBXFileReference;
path = main.c;
refType = 2;
};
F5A47AA101A0483001D3D55B = {
fileRef = F5A47A9D01A0482F01D3D55B;
isa = PBXBuildFile;
settings = {
};
};
F5A47AA301A0483001D3D55B = {
fileRef = F5A47A9E01A0483001D3D55B;
isa = PBXBuildFile;
settings = {
};
};
F5A47AA401A0483001D3D55B = {
fileRef = F5A47A9F01A0483001D3D55B;
isa = PBXBuildFile;
settings = {
};
};
};
rootObject = 29B97313FDCFA39411CA2CEA;
}
/* SDLMain.m - main entry point for our Cocoa-ized SDL app
Initial Version: Darrell Walisser <dwaliss1@purdue.edu>
Non-NIB-Code & other changes: Max Horn <max@quendi.de>
Feel free to customize this file to suit your needs
*/
#import <Cocoa/Cocoa.h>
@interface SDLMain : NSObject
@end
/* SDLMain.m - main entry point for our Cocoa-ized SDL app
Initial Version: Darrell Walisser <dwaliss1@purdue.edu>
Non-NIB-Code & other changes: Max Horn <max@quendi.de>
Feel free to customize this file to suit your needs
*/
#import "SDL.h"
#import "SDLMain.h"
#import <sys/param.h> /* for MAXPATHLEN */
#import <unistd.h>
/* For some reaon, Apple removed setAppleMenu from the headers in 10.4,
but the method still is there and works. To avoid warnings, we declare
it ourselves here. */
@interface NSApplication(SDL_Missing_Methods)
- (void)setAppleMenu:(NSMenu *)menu;
@end
/* Use this flag to determine whether we use SDLMain.nib or not */
#define SDL_USE_NIB_FILE 0
/* Use this flag to determine whether we use CPS (docking) or not */
#define SDL_USE_CPS 1
#ifdef SDL_USE_CPS
/* Portions of CPS.h */
typedef struct CPSProcessSerNum
{
UInt32 lo;
UInt32 hi;
} CPSProcessSerNum;
extern OSErr CPSGetCurrentProcess( CPSProcessSerNum *psn);
extern OSErr CPSEnableForegroundOperation( CPSProcessSerNum *psn, UInt32 _arg2, UInt32 _arg3, UInt32 _arg4, UInt32 _arg5);
extern OSErr CPSSetFrontProcess( CPSProcessSerNum *psn);
#endif /* SDL_USE_CPS */
static int gArgc;
static char **gArgv;
static BOOL gFinderLaunch;
static BOOL gCalledAppMainline = FALSE;
static NSString *getApplicationName(void)
{
NSDictionary *dict;
NSString *appName = 0;
/* Determine the application name */
dict = (NSDictionary *)CFBundleGetInfoDictionary(CFBundleGetMainBundle());
if (dict)
appName = [dict objectForKey: @"CFBundleName"];
if (![appName length])
appName = [[NSProcessInfo processInfo] processName];
return appName;
}
#if SDL_USE_NIB_FILE
/* A helper category for NSString */
@interface NSString (ReplaceSubString)
- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString;
@end
#endif
@interface SDLApplication : NSApplication
@end
@implementation SDLApplication
/* Invoked from the Quit menu item */
- (void)terminate:(id)sender
{
/* Post a SDL_QUIT event */
SDL_Event event;
event.type = SDL_QUIT;
SDL_PushEvent(&event);
}
@end
/* The main class of the application, the application's delegate */
@implementation SDLMain
/* Set the working directory to the .app's parent directory */
- (void) setupWorkingDirectory:(BOOL)shouldChdir
{
if (shouldChdir)
{
char parentdir[MAXPATHLEN];
CFURLRef url = CFBundleCopyBundleURL(CFBundleGetMainBundle());
CFURLRef url2 = CFURLCreateCopyDeletingLastPathComponent(0, url);
if (CFURLGetFileSystemRepresentation(url2, true, (UInt8 *)parentdir, MAXPATHLEN)) {
assert ( chdir (parentdir) == 0 ); /* chdir to the binary app's parent */
}
CFRelease(url);
CFRelease(url2);
}
}
#if SDL_USE_NIB_FILE
/* Fix menu to contain the real app name instead of "SDL App" */
- (void)fixMenu:(NSMenu *)aMenu withAppName:(NSString *)appName
{
NSRange aRange;
NSEnumerator *enumerator;
NSMenuItem *menuItem;
aRange = [[aMenu title] rangeOfString:@"SDL App"];
if (aRange.length != 0)
[aMenu setTitle: [[aMenu title] stringByReplacingRange:aRange with:appName]];
enumerator = [[aMenu itemArray] objectEnumerator];
while ((menuItem = [enumerator nextObject]))
{
aRange = [[menuItem title] rangeOfString:@"SDL App"];
if (aRange.length != 0)
[menuItem setTitle: [[menuItem title] stringByReplacingRange:aRange with:appName]];
if ([menuItem hasSubmenu])
[self fixMenu:[menuItem submenu] withAppName:appName];
}
[ aMenu sizeToFit ];
}
#else
static void setApplicationMenu(void)
{
/* warning: this code is very odd */
NSMenu *appleMenu;
NSMenuItem *menuItem;
NSString *title;
NSString *appName;
appName = getApplicationName();
appleMenu = [[NSMenu alloc] initWithTitle:@""];
/* Add menu items */
title = [@"About " stringByAppendingString:appName];
[appleMenu addItemWithTitle:title action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""];
[appleMenu addItem:[NSMenuItem separatorItem]];
title = [@"Hide " stringByAppendingString:appName];
[appleMenu addItemWithTitle:title action:@selector(hide:) keyEquivalent:@"h"];
menuItem = (NSMenuItem *)[appleMenu addItemWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@"h"];
[menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)];
[appleMenu addItemWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@""];
[appleMenu addItem:[NSMenuItem separatorItem]];
title = [@"Quit " stringByAppendingString:appName];
[appleMenu addItemWithTitle:title action:@selector(terminate:) keyEquivalent:@"q"];
/* Put menu into the menubar */
menuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""];
[menuItem setSubmenu:appleMenu];
[[NSApp mainMenu] addItem:menuItem];
/* Tell the application object that this is now the application menu */
[NSApp setAppleMenu:appleMenu];
/* Finally give up our references to the objects */
[appleMenu release];
[menuItem release];
}
/* Create a window menu */
static void setupWindowMenu(void)
{
NSMenu *windowMenu;
NSMenuItem *windowMenuItem;
NSMenuItem *menuItem;
windowMenu = [[NSMenu alloc] initWithTitle:@"Window"];
/* "Minimize" item */
menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"];
[windowMenu addItem:menuItem];
[menuItem release];
/* Put menu into the menubar */
windowMenuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""];
[windowMenuItem setSubmenu:windowMenu];
[[NSApp mainMenu] addItem:windowMenuItem];
/* Tell the application object that this is now the window menu */
[NSApp setWindowsMenu:windowMenu];
/* Finally give up our references to the objects */
[windowMenu release];
[windowMenuItem release];
}
/* Replacement for NSApplicationMain */
static void CustomApplicationMain (int argc, char **argv)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
SDLMain *sdlMain;
/* Ensure the application object is initialised */
[SDLApplication sharedApplication];
#ifdef SDL_USE_CPS
{
CPSProcessSerNum PSN;
/* Tell the dock about us */
if (!CPSGetCurrentProcess(&PSN))
if (!CPSEnableForegroundOperation(&PSN,0x03,0x3C,0x2C,0x1103))
if (!CPSSetFrontProcess(&PSN))
[SDLApplication sharedApplication];
}
#endif /* SDL_USE_CPS */
/* Set up the menubar */
[NSApp setMainMenu:[[NSMenu alloc] init]];
setApplicationMenu();
setupWindowMenu();
/* Create SDLMain and make it the app delegate */
sdlMain = [[SDLMain alloc] init];
[NSApp setDelegate:sdlMain];
/* Start the main event loop */
[NSApp run];
[sdlMain release];
[pool release];
}
#endif
/*
* Catch document open requests...this lets us notice files when the app
* was launched by double-clicking a document, or when a document was
* dragged/dropped on the app's icon. You need to have a
* CFBundleDocumentsType section in your Info.plist to get this message,
* apparently.
*
* Files are added to gArgv, so to the app, they'll look like command line
* arguments. Previously, apps launched from the finder had nothing but
* an argv[0].
*
* This message may be received multiple times to open several docs on launch.
*
* This message is ignored once the app's mainline has been called.
*/
- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
{
const char *temparg;
size_t arglen;
char *arg;
char **newargv;
if (!gFinderLaunch) /* MacOS is passing command line args. */
return FALSE;
if (gCalledAppMainline) /* app has started, ignore this document. */
return FALSE;
temparg = [filename UTF8String];
arglen = SDL_strlen(temparg) + 1;
arg = (char *) SDL_malloc(arglen);
if (arg == NULL)
return FALSE;
newargv = (char **) realloc(gArgv, sizeof (char *) * (gArgc + 2));
if (newargv == NULL)
{
SDL_free(arg);
return FALSE;
}
gArgv = newargv;
SDL_strlcpy(arg, temparg, arglen);
gArgv[gArgc++] = arg;
gArgv[gArgc] = NULL;
return TRUE;
}
/* Called when the internal event loop has just started running */
- (void) applicationDidFinishLaunching: (NSNotification *) note
{
int status;
/* Set the working directory to the .app's parent directory */
[self setupWorkingDirectory:gFinderLaunch];
#if SDL_USE_NIB_FILE
/* Set the main menu to contain the real app name instead of "SDL App" */
[self fixMenu:[NSApp mainMenu] withAppName:getApplicationName()];
#endif
/* Hand off to main application code */
gCalledAppMainline = TRUE;
status = SDL_main (gArgc, gArgv);
/* We're done, thank you for playing */
exit(status);
}
@end
@implementation NSString (ReplaceSubString)
- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString
{
unsigned int bufferSize;
unsigned int selfLen = [self length];
unsigned int aStringLen = [aString length];
unichar *buffer;
NSRange localRange;
NSString *result;
bufferSize = selfLen + aStringLen - aRange.length;
buffer = NSAllocateMemoryPages(bufferSize*sizeof(unichar));
/* Get first part into buffer */
localRange.location = 0;
localRange.length = aRange.location;
[self getCharacters:buffer range:localRange];
/* Get middle part into buffer */
localRange.location = 0;
localRange.length = aStringLen;
[aString getCharacters:(buffer+aRange.location) range:localRange];
/* Get last part into buffer */
localRange.location = aRange.location + aRange.length;
localRange.length = selfLen - localRange.location;
[self getCharacters:(buffer+aRange.location+aStringLen) range:localRange];
/* Build output string */
result = [NSString stringWithCharacters:buffer length:bufferSize];
NSDeallocateMemoryPages(buffer, bufferSize);
return result;
}
@end
#ifdef main
# undef main
#endif
/* Main entry point to executable - should *not* be SDL_main! */
int main (int argc, char **argv)
{
/* Copy the arguments into a global variable */
/* This is passed if we are launched by double-clicking */
if ( argc >= 2 && strncmp (argv[1], "-psn", 4) == 0 ) {
gArgv = (char **) SDL_malloc(sizeof (char *) * 2);
gArgv[0] = argv[0];
gArgv[1] = NULL;
gArgc = 1;
gFinderLaunch = YES;
} else {
int i;
gArgc = argc;
gArgv = (char **) SDL_malloc(sizeof (char *) * (argc+1));
for (i = 0; i <= argc; i++)
gArgv[i] = argv[i];
gFinderLaunch = NO;
}
#if SDL_USE_NIB_FILE
[SDLApplication poseAsClass:[NSApplication class]];
NSApplicationMain (argc, argv);
#else
CustomApplicationMain (argc, argv);
#endif
return 0;
}
/* Simple program: Create a blank window, wait for keypress, quit.
Please see the SDL documentation for details on using the SDL API:
/Developer/Documentation/SDL/docs.html
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "SDL.h"
int main(int argc, char *argv[])
{
Uint32 initflags = SDL_INIT_VIDEO; /* See documentation for details */
SDL_Surface *screen;
Uint8 video_bpp = 0;
Uint32 videoflags = SDL_SWSURFACE;
int done;
SDL_Event event;
/* Initialize the SDL library */
if ( SDL_Init(initflags) < 0 ) {
fprintf(stderr, "Couldn't initialize SDL: %s\n",
SDL_GetError());
exit(1);
}
/* Set 640x480 video mode */
screen=SDL_SetVideoMode(640,480, video_bpp, videoflags);
if (screen == NULL) {
fprintf(stderr, "Couldn't set 640x480x%d video mode: %s\n",
video_bpp, SDL_GetError());
SDL_Quit();
exit(2);
}
done = 0;
while ( !done ) {
/* Check for events */
while ( SDL_PollEvent(&event) ) {
switch (event.type) {
case SDL_MOUSEMOTION:
break;
case SDL_MOUSEBUTTONDOWN:
break;
case SDL_KEYDOWN:
/* Any keypress quits the app... */
case SDL_QUIT:
done = 1;
break;
default:
break;
}
}
}
/* Clean up the SDL library */
SDL_Quit();
return(0);
}
Binary files a/Xcode/TemplatesForProjectBuilder/SDL Cocoa Application/English.lproj/InfoPlist.strings and /dev/null differ Binary files a/Xcode/TemplatesForProjectBuilder/SDL Cocoa Application/English.lproj/InfoPlist.strings and /dev/null differ
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Description</key>
<string>This project builds an SDL-based application with Cocoa menus.</string>
<key>FilesToMacroExpand</key>
<array>
<string>English.lproj/InfoPlist.strings</string>
</array>
</dict>
</plist>
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 38;
objects = {
080E96DDFE201D6D7F000001 = {
children = (
F5A47A9D01A0482F01D3D55B,
F5A47A9E01A0483001D3D55B,
);
isa = PBXGroup;
name = Classes;
refType = 4;
};
089C165CFE840E0CC02AAC07 = {
children = (
089C165DFE840E0CC02AAC07,
);
isa = PBXVariantGroup;
name = InfoPlist.strings;
refType = 4;
};
089C165DFE840E0CC02AAC07 = {
fileEncoding = 10;
isa = PBXFileReference;
name = English;
path = English.lproj/InfoPlist.strings;
refType = 4;
};
089C165EFE840E0CC02AAC07 = {
fileRef = 089C165CFE840E0CC02AAC07;
isa = PBXBuildFile;
settings = {
};
};
//080
//081
//082
//083
//084
//100
//101
//102
//103
//104
1058C7A0FEA54F0111CA2CBB = {
children = (
1058C7A1FEA54F0111CA2CBB,
);
isa = PBXGroup;
name = "Linked Frameworks";
refType = 4;
};
1058C7A1FEA54F0111CA2CBB = {
isa = PBXFrameworkReference;
name = Cocoa.framework;
path = /System/Library/Frameworks/Cocoa.framework;
refType = 0;
};
1058C7A2FEA54F0111CA2CBB = {
children = (
29B97325FDCFA39411CA2CEA,
29B97324FDCFA39411CA2CEA,
);
isa = PBXGroup;
name = "Other Frameworks";
refType = 4;
};
1058C7A3FEA54F0111CA2CBB = {
fileRef = 1058C7A1FEA54F0111CA2CBB;
isa = PBXBuildFile;
settings = {
};
};
//100
//101
//102
//103
//104
//170
//171
//172
//173
//174
17587328FF379C6511CA2CBB = {
isa = PBXApplicationReference;
path = "«PROJECTNAME».app";
refType = 3;
};
//170
//171
//172
//173
//174
//190
//191
//192
//193
//194
19C28FACFE9D520D11CA2CBB = {
children = (
17587328FF379C6511CA2CBB,
);
isa = PBXGroup;
name = Products;
refType = 4;
};
//190
//191
//192
//193
//194
//290
//291
//292
//293
//294
29B97313FDCFA39411CA2CEA = {
buildStyles = (
4A9504CCFFE6A4B311CA0CBA,
4A9504CDFFE6A4B311CA0CBA,
);
hasScannedForEncodings = 1;
isa = PBXProject;
mainGroup = 29B97314FDCFA39411CA2CEA;
projectDirPath = "";
targets = (
29B97326FDCFA39411CA2CEA,
);
};
29B97314FDCFA39411CA2CEA = {
children = (
080E96DDFE201D6D7F000001,
29B97315FDCFA39411CA2CEA,
29B97317FDCFA39411CA2CEA,
29B97323FDCFA39411CA2CEA,
19C28FACFE9D520D11CA2CBB,
);
isa = PBXGroup;
name = "«PROJECTNAMEASXML»";
path = "";
refType = 4;
};
29B97315FDCFA39411CA2CEA = {
children = (
F5A47A9F01A0483001D3D55B,
);
isa = PBXGroup;
name = "Other Sources";
path = "";
refType = 4;
};
29B97317FDCFA39411CA2CEA = {
children = (
089C165CFE840E0CC02AAC07,
B2F367C504C7ADC700A80002,
);
isa = PBXGroup;
name = Resources;
path = "";
refType = 4;
};
29B97323FDCFA39411CA2CEA = {
children = (
1058C7A0FEA54F0111CA2CBB,
1058C7A2FEA54F0111CA2CBB,
);
isa = PBXGroup;
name = Frameworks;
path = "";
refType = 4;
};
29B97324FDCFA39411CA2CEA = {
isa = PBXFrameworkReference;
name = AppKit.framework;
path = /System/Library/Frameworks/AppKit.framework;
refType = 0;
};
29B97325FDCFA39411CA2CEA = {
isa = PBXFrameworkReference;
name = Foundation.framework;
path = /System/Library/Frameworks/Foundation.framework;
refType = 0;
};
29B97326FDCFA39411CA2CEA = {
buildPhases = (
29B97327FDCFA39411CA2CEA,
29B97328FDCFA39411CA2CEA,
29B9732BFDCFA39411CA2CEA,
29B9732DFDCFA39411CA2CEA,
);
buildSettings = {
FRAMEWORK_SEARCH_PATHS = "\"/Library/Frameworks\"";
HEADER_SEARCH_PATHS = "\"/Library/Frameworks/SDL.framework/Headers\"";
INSTALL_PATH = "$(HOME)/Applications";
LIBRARY_SEARCH_PATHS = "";
OTHER_LDFLAGS = "-framework SDL";
PRODUCT_NAME = "«PROJECTNAME»";
SECTORDER_FLAGS = "";
WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas";
WRAPPER_EXTENSION = app;
};
dependencies = (
);
isa = PBXApplicationTarget;
name = "«PROJECTNAME»";
productInstallPath = "$(HOME)/Applications";
productName = "«PROJECTNAME»";
productReference = 17587328FF379C6511CA2CBB;
productSettingsXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">
<plist version=\"1.0\">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>«PROJECTNAMEASXML»</key>
<string>SDL Cocoa App</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>SDLApplication</string>
</dict>
</plist>
";
};
29B97327FDCFA39411CA2CEA = {
buildActionMask = 2147483647;
files = (
F5A47AA101A0483001D3D55B,
);
isa = PBXHeadersBuildPhase;
runOnlyForDeploymentPostprocessing = 0;
};
29B97328FDCFA39411CA2CEA = {
buildActionMask = 2147483647;
files = (
089C165EFE840E0CC02AAC07,
B2F367C604C7ADC700A80002,
);
isa = PBXResourcesBuildPhase;
runOnlyForDeploymentPostprocessing = 0;
};
29B9732BFDCFA39411CA2CEA = {
buildActionMask = 2147483647;
files = (
F5A47AA301A0483001D3D55B,
F5A47AA401A0483001D3D55B,
);
isa = PBXSourcesBuildPhase;
runOnlyForDeploymentPostprocessing = 0;
};
29B9732DFDCFA39411CA2CEA = {
buildActionMask = 2147483647;
files = (
1058C7A3FEA54F0111CA2CBB,
);
isa = PBXFrameworksBuildPhase;
runOnlyForDeploymentPostprocessing = 0;
};
//290
//291
//292
//293
//294
//4A0
//4A1
//4A2
//4A3
//4A4
4A9504CCFFE6A4B311CA0CBA = {
buildRules = (
);
buildSettings = {
COPY_PHASE_STRIP = NO;
OPTIMIZATION_CFLAGS = "-O0";
};
isa = PBXBuildStyle;
name = Development;
};
4A9504CDFFE6A4B311CA0CBA = {
buildRules = (
);
buildSettings = {
COPY_PHASE_STRIP = YES;
};
isa = PBXBuildStyle;
name = Deployment;
};
//4A0
//4A1
//4A2
//4A3
//4A4
//B20
//B21
//B22
//B23
//B24
B2F367C504C7ADC700A80002 = {
isa = PBXFileReference;
path = SDLMain.nib;
refType = 4;
};
B2F367C604C7ADC700A80002 = {
fileRef = B2F367C504C7ADC700A80002;
isa = PBXBuildFile;
settings = {
};
};
//B20
//B21
//B22
//B23
//B24
//F50
//F51
//F52
//F53
//F54
F5A47A9D01A0482F01D3D55B = {
fileEncoding = 30;
isa = PBXFileReference;
path = SDLMain.h;
refType = 2;
};
F5A47A9E01A0483001D3D55B = {
fileEncoding = 30;
isa = PBXFileReference;
path = SDLMain.m;
refType = 2;
};
F5A47A9F01A0483001D3D55B = {
fileEncoding = 30;
isa = PBXFileReference;
path = main.c;
refType = 2;
};
F5A47AA101A0483001D3D55B = {
fileRef = F5A47A9D01A0482F01D3D55B;
isa = PBXBuildFile;
settings = {
};
};
F5A47AA301A0483001D3D55B = {
fileRef = F5A47A9E01A0483001D3D55B;
isa = PBXBuildFile;
settings = {
};
};
F5A47AA401A0483001D3D55B = {
fileRef = F5A47A9F01A0483001D3D55B;
isa = PBXBuildFile;
settings = {
};
};
};
rootObject = 29B97313FDCFA39411CA2CEA;
}
/* SDLMain.m - main entry point for our Cocoa-ized SDL app
Initial Version: Darrell Walisser <dwaliss1@purdue.edu>
Non-NIB-Code & other changes: Max Horn <max@quendi.de>
Feel free to customize this file to suit your needs
*/
#import <Cocoa/Cocoa.h>
@interface SDLMain : NSObject
- (IBAction)prefsMenu:(id)sender;
- (IBAction)newGame:(id)sender;
- (IBAction)openGame:(id)sender;
- (IBAction)saveGame:(id)sender;
- (IBAction)saveGameAs:(id)sender;
- (IBAction)help:(id)sender;
@end
/* SDLMain.m - main entry point for our Cocoa-ized SDL app
Initial Version: Darrell Walisser <dwaliss1@purdue.edu>
Non-NIB-Code & other changes: Max Horn <max@quendi.de>
Feel free to customize this file to suit your needs
*/
#import "SDL.h"
#import "SDLMain.h"
#import <sys/param.h> /* for MAXPATHLEN */
#import <unistd.h>
/* For some reaon, Apple removed setAppleMenu from the headers in 10.4,
but the method still is there and works. To avoid warnings, we declare
it ourselves here. */
@interface NSApplication(SDL_Missing_Methods)
- (void)setAppleMenu:(NSMenu *)menu;
@end
/* Use this flag to determine whether we use SDLMain.nib or not */
#define SDL_USE_NIB_FILE 1
/* Use this flag to determine whether we use CPS (docking) or not */
#define SDL_USE_CPS 1
#ifdef SDL_USE_CPS
/* Portions of CPS.h */
typedef struct CPSProcessSerNum
{
UInt32 lo;
UInt32 hi;
} CPSProcessSerNum;
extern OSErr CPSGetCurrentProcess( CPSProcessSerNum *psn);
extern OSErr CPSEnableForegroundOperation( CPSProcessSerNum *psn, UInt32 _arg2, UInt32 _arg3, UInt32 _arg4, UInt32 _arg5);
extern OSErr CPSSetFrontProcess( CPSProcessSerNum *psn);
#endif /* SDL_USE_CPS */
static int gArgc;
static char **gArgv;
static BOOL gFinderLaunch;
static BOOL gCalledAppMainline = FALSE;
static NSString *getApplicationName(void)
{
NSDictionary *dict;
NSString *appName = 0;
/* Determine the application name */
dict = (NSDictionary *)CFBundleGetInfoDictionary(CFBundleGetMainBundle());
if (dict)
appName = [dict objectForKey: @"CFBundleName"];
if (![appName length])
appName = [[NSProcessInfo processInfo] processName];
return appName;
}
#if SDL_USE_NIB_FILE
/* A helper category for NSString */
@interface NSString (ReplaceSubString)
- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString;
@end
#endif
@interface SDLApplication : NSApplication
@end
@implementation SDLApplication
/* Invoked from the Quit menu item */
- (void)terminate:(id)sender
{
/* Post a SDL_QUIT event */
SDL_Event event;
event.type = SDL_QUIT;
SDL_PushEvent(&event);
}
@end
/* The main class of the application, the application's delegate */
@implementation SDLMain
- (IBAction)prefsMenu:(id)sender
{
printf ("prefs menu\n");
}
- (IBAction)newGame:(id)sender
{
printf ("new game\n");
NSRunAlertPanel (@"Get ready to blow up some... stuff!",
@"Click OK to begin total carnage. Click Cancel to prevent total carnage.", @"OK", @"Cancel", nil);
}
- (IBAction)openGame:(id)sender
{
NSString *path = nil;
NSOpenPanel *openPanel = [ NSOpenPanel openPanel ];
if ( [ openPanel runModalForDirectory:nil
file:@"SavedGame" types:nil ] ) {
path = [ [ openPanel filenames ] objectAtIndex:0 ];
}
printf ("open game: %s\n", [ path cString ]);
}
- (IBAction)saveGame:(id)sender
{
NSString *path = nil;
NSSavePanel *savePanel = [ NSSavePanel savePanel ];
if ( [ savePanel runModalForDirectory:nil
file:@"SaveGameFile" ] ) {
path = [ savePanel filename ];
}
printf ("save game: %s\n", [ path cString ]);
}
- (IBAction)saveGameAs:(id)sender
{
printf ("save game as\n");
}
- (IBAction)help:(id)sender
{
NSRunAlertPanel (@"Oh help, where have ye gone?",
@"Sorry, there is no help available.\n\nThis message brought to you by We Don't Document, Inc.\n\n", @"Rats", @"Good, I never read it anyway", nil);
}
/* Set the working directory to the .app's parent directory */
- (void) setupWorkingDirectory:(BOOL)shouldChdir
{
if (shouldChdir)
{
char parentdir[MAXPATHLEN];
CFURLRef url = CFBundleCopyBundleURL(CFBundleGetMainBundle());
CFURLRef url2 = CFURLCreateCopyDeletingLastPathComponent(0, url);
if (CFURLGetFileSystemRepresentation(url2, true, (UInt8 *)parentdir, MAXPATHLEN)) {
assert ( chdir (parentdir) == 0 ); /* chdir to the binary app's parent */
}
CFRelease(url);
CFRelease(url2);
}
}
#if SDL_USE_NIB_FILE
/* Fix menu to contain the real app name instead of "SDL App" */
- (void)fixMenu:(NSMenu *)aMenu withAppName:(NSString *)appName
{
NSRange aRange;
NSEnumerator *enumerator;
NSMenuItem *menuItem;
aRange = [[aMenu title] rangeOfString:@"SDL App"];
if (aRange.length != 0)
[aMenu setTitle: [[aMenu title] stringByReplacingRange:aRange with:appName]];
enumerator = [[aMenu itemArray] objectEnumerator];
while ((menuItem = [enumerator nextObject]))
{
aRange = [[menuItem title] rangeOfString:@"SDL App"];
if (aRange.length != 0)
[menuItem setTitle: [[menuItem title] stringByReplacingRange:aRange with:appName]];
if ([menuItem hasSubmenu])
[self fixMenu:[menuItem submenu] withAppName:appName];
}
[ aMenu sizeToFit ];
}
#else
static void setApplicationMenu(void)
{
/* warning: this code is very odd */
NSMenu *appleMenu;
NSMenuItem *menuItem;
NSString *title;
NSString *appName;
appName = getApplicationName();
appleMenu = [[NSMenu alloc] initWithTitle:@""];
/* Add menu items */
title = [@"About " stringByAppendingString:appName];
[appleMenu addItemWithTitle:title action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""];
[appleMenu addItem:[NSMenuItem separatorItem]];
title = [@"Hide " stringByAppendingString:appName];
[appleMenu addItemWithTitle:title action:@selector(hide:) keyEquivalent:@"h"];
menuItem = (NSMenuItem *)[appleMenu addItemWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@"h"];
[menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)];
[appleMenu addItemWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@""];
[appleMenu addItem:[NSMenuItem separatorItem]];
title = [@"Quit " stringByAppendingString:appName];
[appleMenu addItemWithTitle:title action:@selector(terminate:) keyEquivalent:@"q"];
/* Put menu into the menubar */
menuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""];
[menuItem setSubmenu:appleMenu];
[[NSApp mainMenu] addItem:menuItem];
/* Tell the application object that this is now the application menu */
[NSApp setAppleMenu:appleMenu];
/* Finally give up our references to the objects */
[appleMenu release];
[menuItem release];
}
/* Create a window menu */
static void setupWindowMenu(void)
{
NSMenu *windowMenu;
NSMenuItem *windowMenuItem;
NSMenuItem *menuItem;
windowMenu = [[NSMenu alloc] initWithTitle:@"Window"];
/* "Minimize" item */
menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"];
[windowMenu addItem:menuItem];
[menuItem release];
/* Put menu into the menubar */
windowMenuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""];
[windowMenuItem setSubmenu:windowMenu];
[[NSApp mainMenu] addItem:windowMenuItem];
/* Tell the application object that this is now the window menu */
[NSApp setWindowsMenu:windowMenu];
/* Finally give up our references to the objects */
[windowMenu release];
[windowMenuItem release];
}
/* Replacement for NSApplicationMain */
static void CustomApplicationMain (int argc, char **argv)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
SDLMain *sdlMain;
/* Ensure the application object is initialised */
[SDLApplication sharedApplication];
#ifdef SDL_USE_CPS
{
CPSProcessSerNum PSN;
/* Tell the dock about us */
if (!CPSGetCurrentProcess(&PSN))
if (!CPSEnableForegroundOperation(&PSN,0x03,0x3C,0x2C,0x1103))
if (!CPSSetFrontProcess(&PSN))
[SDLApplication sharedApplication];
}
#endif /* SDL_USE_CPS */
/* Set up the menubar */
[NSApp setMainMenu:[[NSMenu alloc] init]];
setApplicationMenu();
setupWindowMenu();
/* Create SDLMain and make it the app delegate */
sdlMain = [[SDLMain alloc] init];
[NSApp setDelegate:sdlMain];
/* Start the main event loop */
[NSApp run];
[sdlMain release];
[pool release];
}
#endif
/*
* Catch document open requests...this lets us notice files when the app
* was launched by double-clicking a document, or when a document was
* dragged/dropped on the app's icon. You need to have a
* CFBundleDocumentsType section in your Info.plist to get this message,
* apparently.
*
* Files are added to gArgv, so to the app, they'll look like command line
* arguments. Previously, apps launched from the finder had nothing but
* an argv[0].
*
* This message may be received multiple times to open several docs on launch.
*
* This message is ignored once the app's mainline has been called.
*/
- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
{
const char *temparg;
size_t arglen;
char *arg;
char **newargv;
if (!gFinderLaunch) /* MacOS is passing command line args. */
return FALSE;
if (gCalledAppMainline) /* app has started, ignore this document. */
return FALSE;
temparg = [filename UTF8String];
arglen = SDL_strlen(temparg) + 1;
arg = (char *) SDL_malloc(arglen);
if (arg == NULL)
return FALSE;
newargv = (char **) realloc(gArgv, sizeof (char *) * (gArgc + 2));
if (newargv == NULL)
{
SDL_free(arg);
return FALSE;
}
gArgv = newargv;
SDL_strlcpy(arg, temparg, arglen);
gArgv[gArgc++] = arg;
gArgv[gArgc] = NULL;
return TRUE;
}
/* Called when the internal event loop has just started running */
- (void) applicationDidFinishLaunching: (NSNotification *) note
{
int status;
/* Set the working directory to the .app's parent directory */
[self setupWorkingDirectory:gFinderLaunch];
#if SDL_USE_NIB_FILE
/* Set the main menu to contain the real app name instead of "SDL App" */
[self fixMenu:[NSApp mainMenu] withAppName:getApplicationName()];
#endif
/* Hand off to main application code */
gCalledAppMainline = TRUE;
status = SDL_main (gArgc, gArgv);
/* We're done, thank you for playing */
exit(status);
}
@end
@implementation NSString (ReplaceSubString)
- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString
{
unsigned int bufferSize;
unsigned int selfLen = [self length];
unsigned int aStringLen = [aString length];
unichar *buffer;
NSRange localRange;
NSString *result;
bufferSize = selfLen + aStringLen - aRange.length;
buffer = NSAllocateMemoryPages(bufferSize*sizeof(unichar));
/* Get first part into buffer */
localRange.location = 0;
localRange.length = aRange.location;
[self getCharacters:buffer range:localRange];
/* Get middle part into buffer */
localRange.location = 0;
localRange.length = aStringLen;
[aString getCharacters:(buffer+aRange.location) range:localRange];
/* Get last part into buffer */
localRange.location = aRange.location + aRange.length;
localRange.length = selfLen - localRange.location;
[self getCharacters:(buffer+aRange.location+aStringLen) range:localRange];
/* Build output string */
result = [NSString stringWithCharacters:buffer length:bufferSize];
NSDeallocateMemoryPages(buffer, bufferSize);
return result;
}
@end
#ifdef main
# undef main
#endif
/* Main entry point to executable - should *not* be SDL_main! */
int main (int argc, char **argv)
{
/* Copy the arguments into a global variable */
/* This is passed if we are launched by double-clicking */
if ( argc >= 2 && strncmp (argv[1], "-psn", 4) == 0 ) {
gArgv = (char **) SDL_malloc(sizeof (char *) * 2);
gArgv[0] = argv[0];
gArgv[1] = NULL;
gArgc = 1;
gFinderLaunch = YES;
} else {
int i;
gArgc = argc;
gArgv = (char **) SDL_malloc(sizeof (char *) * (argc+1));
for (i = 0; i <= argc; i++)
gArgv[i] = argv[i];
gFinderLaunch = NO;
}
#if SDL_USE_NIB_FILE
[SDLApplication poseAsClass:[NSApplication class]];
NSApplicationMain (argc, argv);
#else
CustomApplicationMain (argc, argv);
#endif
return 0;
}
{
IBClasses = (
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
{
ACTIONS = {
help = id;
newGame = id;
openGame = id;
prefsMenu = id;
saveGame = id;
saveGameAs = id;
};
CLASS = SDLMain;
LANGUAGE = ObjC;
SUPERCLASS = NSObject;
}
);
IBVersion = 1;
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IBDocumentLocation</key>
<string>62 117 356 240 0 0 1152 848 </string>
<key>IBEditorPositions</key>
<dict>
<key>29</key>
<string>62 362 195 44 0 0 1152 848 </string>
</dict>
<key>IBFramework Version</key>
<string>291.0</string>
<key>IBOpenObjects</key>
<array>
<integer>29</integer>
</array>
<key>IBSystem Version</key>
<string>6L60</string>
</dict>
</plist>
/* Simple program: Create a blank window, wait for keypress, quit.
Please see the SDL documentation for details on using the SDL API:
/Developer/Documentation/SDL/docs.html
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "SDL.h"
int main(int argc, char *argv[])
{
Uint32 initflags = SDL_INIT_VIDEO; /* See documentation for details */
SDL_Surface *screen;
Uint8 video_bpp = 0;
Uint32 videoflags = SDL_SWSURFACE;
int done;
SDL_Event event;
/* Initialize the SDL library */
if ( SDL_Init(initflags) < 0 ) {
fprintf(stderr, "Couldn't initialize SDL: %s\n",
SDL_GetError());
exit(1);
}
/* Set 640x480 video mode */
screen=SDL_SetVideoMode(640,480, video_bpp, videoflags);
if (screen == NULL) {
fprintf(stderr, "Couldn't set 640x480x%d video mode: %s\n",
video_bpp, SDL_GetError());
SDL_Quit();
exit(2);
}
done = 0;
while ( !done ) {
/* Check for events */
while ( SDL_PollEvent(&event) ) {
switch (event.type) {
case SDL_MOUSEMOTION:
break;
case SDL_MOUSEBUTTONDOWN:
break;
case SDL_KEYDOWN:
/* Any keypress quits the app... */
case SDL_QUIT:
done = 1;
break;
default:
break;
}
}
}
/* Clean up the SDL library */
SDL_Quit();
return(0);
}
Binary files a/Xcode/TemplatesForProjectBuilder/SDL Custom Cocoa Application/English.lproj/InfoPlist.strings and /dev/null differ Binary files a/Xcode/TemplatesForProjectBuilder/SDL Custom Cocoa Application/English.lproj/InfoPlist.strings and /dev/null differ
//
// MyController.h
// SDL Custom Cocoa App
//
// Created by Darrell Walisser on Fri Jul 18 2003.
// Copyright (c) 2003 __MyCompanyName__. All rights reserved.
//
#import <Cocoa/Cocoa.h>
#import "SDL.h"
extern id gController; // instance of this class from nib
// Declare SDL_QuartzWindowDelegate (defined in SDL.framework)
@interface SDL_QuartzWindowDelegate : NSObject
@end
@interface MyController : NSObject
{
// Interface Builder Outlets
IBOutlet id _framesPerSecond;
IBOutlet id _numSprites;
IBOutlet id _window;
IBOutlet id _view;
// Private instance variables
int _nSprites;
int _max_speed;
int _doFlip;
Uint8* _mem;
SDL_Surface* _screen;
SDL_Surface* _sprite;
SDL_Rect* _sprite_rects;
SDL_Rect* _positions;
SDL_Rect* _velocities;
int _sprites_visible;
Uint16 _sprite_w, _sprite_h;
int _mouse_x, _mouse_y;
}
// Interface Builder Actions
- (IBAction)changeNumberOfSprites:(id)sender;
- (IBAction)selectUpdateMode:(id)sender;
@end
//
// MyController.m
// SDL Custom Cocoa App
//
// Created by Darrell Walisser on Fri Jul 18 2003.
// Copyright (c) 2003 __MyCompanyName__. All rights reserved.
//
#import "MyController.h"
#import "SDL.h"
id gController;
@implementation MyController
- (id)init
{
self = [ super init ];
if (self) {
_nSprites = 10;
_max_speed = 4;
_doFlip = 0;
_mem = NULL;
_screen = NULL;
_sprite_rects = NULL;
_positions = NULL;
_velocities = NULL;
_sprites_visible = 1;
_sprite_w = 0;
_sprite_h = 0;
_mouse_x = 0;
_mouse_y = 0;
}
return self;
}
- (void)setupCocoaWindow
{
// If you want the close button to send SDL_Quit,
// you can attach the SDL_QuartzWindowDelegate to the window
[ _window setDelegate:
[ [ [ SDL_QuartzWindowDelegate alloc ] init ] autorelease ] ];
// Make the window visible and the frontmost window
[ _window makeKeyAndOrderFront:nil ];
// Make the window accept passive motion events (when the button is released)
[ _window setAcceptsMouseMovedEvents:YES ];
}
- (void)setCocoaEnvironmentVariables
{
// Export cocoa objects to environment
// SDL will use these when you call SDL_SetVideoMode
// The window must be visible when you call SDL_SetVideoMode,
// and the view must lie completely within the window.
//
// The width and height passed to SDL_SetVideoMode should match
// the width/height of the view (the window can be any size)
//
// For resizing to work, you must set the appropriate
// attributes on the window and view. Then the SDL_RESIZABLE
// flag will be set automatically
//
// SDL will retain a reference to the window, and
// will release it when unsetting the video mode
//
// The view is not retained (the window object manages this).
//
char buffer[256];
printf ("NSWindow=%p\n", _window);
sprintf (buffer, "%d", (int)_window);
setenv ("SDL_NSWindowPointer", buffer, 1);
printf ("NSQuickDrawView=%p\n", _view);
sprintf (buffer, "%d", (int)_view);
setenv ("SDL_NSQuickDrawViewPointer", buffer, 1);
// Also tell SDL to pass keyboard events to Cocoa
// In this case, Cocoa will get the event before SDL_PollEvent returns it
// Note that mouse events (button, motion) will always be passed, regardless of this setting
setenv ("SDL_ENABLEAPPEVENTS", "1", 1);
}
- (void)printFlags:(Uint32)flags withName:(const char*)name
{
printf ("%s", name);
if (flags & SDL_SWSURFACE)
printf (" - SDL_SWSURFACE");
if (flags & SDL_HWSURFACE)
printf (" - SDL_HWSURFACE");
if (flags & SDL_ASYNCBLIT)
printf (" - SDL_ASYNCBLIT");
if (flags & SDL_ANYFORMAT)
printf (" - SDL_ANYFORMAT");
if (flags & SDL_HWPALETTE)
printf (" - SDL_HWPALETTE");
if (flags & SDL_DOUBLEBUF)
printf (" - SDL_DOUBLEBUF");
if (flags & SDL_FULLSCREEN)
printf (" - SDL_FULLSCREEN");
if (flags & SDL_OPENGL)
printf (" - SDL_OPENGL");
if (flags & SDL_OPENGLBLIT)
printf (" - SDL_OPENGLBLIT");
if (flags & SDL_RESIZABLE)
printf (" - SDL_RESIZABLE");
if (flags & SDL_NOFRAME)
printf (" - SDL_NOFRAME");
printf ("\n");
}
// This is a way of telling whether or not to use hardware surfaces
// Note: this does nothing on Mac OS X at the moment - there is no
// hardware-accelerated blitting support.
- (Uint32)fastestFlags:(Uint32)flags :(int)width :(int)height :(int)bpp
{
const SDL_VideoInfo *info;
// Hardware acceleration is only used in fullscreen mode
flags |= SDL_FULLSCREEN;
// Check for various video capabilities
info = SDL_GetVideoInfo();
if ( info->blit_hw_CC && info->blit_fill ) {
// We use accelerated colorkeying and color filling
flags |= SDL_HWSURFACE;
}
// If we have enough video memory, and will use accelerated
// blits directly to it, then use page flipping.
if ( (flags & SDL_HWSURFACE) == SDL_HWSURFACE ) {
// Direct hardware blitting without double-buffering
// causes really bad flickering.
if ( info->video_mem*1024 > (height*width*bpp/8) ) {
flags |= SDL_DOUBLEBUF;
} else {
flags &= ~SDL_HWSURFACE;
}
}
// Return the flags
return flags;
}
- (int)loadSpriteFromFile:(const char*)file
{
SDL_Surface *temp;
// Load the sprite image
_sprite = SDL_LoadBMP (file);
if ( _sprite == NULL ) {
fprintf (stderr, "Couldn't load %s: %s", file, SDL_GetError ());
return (-1);
}
// Set transparent pixel as the pixel at (0,0)
if ( _sprite->format->palette ) {
SDL_SetColorKey (_sprite, (SDL_SRCCOLORKEY|SDL_RLEACCEL),
*(Uint8 *)_sprite->pixels);
}
/* Convert sprite to video format */
temp = SDL_DisplayFormat (_sprite);
SDL_FreeSurface (_sprite);
if ( temp == NULL ) {
fprintf(stderr, "Couldn't convert background: %s\n",
SDL_GetError ());
return (-1);
}
_sprite = temp;
// We're ready to roll. :)
return 0;
}
- (void)allocSprites
{
/* Allocate memory for the sprite info */
_mem = (Uint8 *)malloc (4*sizeof(SDL_Rect)*_nSprites);
if ( _mem == NULL ) {
fprintf (stderr, "Out of memory!\n");
exit (2);
}
_sprite_rects = (SDL_Rect *)_mem;
_positions = _sprite_rects;
_sprite_rects += _nSprites;
_velocities = _sprite_rects;
_sprite_rects += _nSprites;
_sprite_w = _sprite->w;
_sprite_h = _sprite->h;
}
- (void)freeSprites
{
free (_mem);
_mem = NULL;
}
- (void)initSprites
{
// Give each sprite a random starting position and velocity
int i;
srand(time(NULL));
for ( i=0; i < _nSprites; ++i ) {
_positions[i].x = rand()%(_screen->w - _sprite->w);
_positions[i].y = rand()%(_screen->h - _sprite->h);
_positions[i].w = _sprite->w;
_positions[i].h = _sprite->h;
_velocities[i].x = 0;
_velocities[i].y = 0;
while ( ! _velocities[i].x && ! _velocities[i].y ) {
_velocities[i].x = (rand()%(_max_speed*2+1)) - _max_speed;
_velocities[i].y = (rand()%(_max_speed*2+1)) - _max_speed;
}
}
}
- (void)moveSprites:(int)backgroundColor;
{
int i, nupdates;
SDL_Rect area, *position, *velocity;
nupdates = 0;
// Erase all the sprites if necessary
if ( _sprites_visible ) {
SDL_FillRect (_screen, NULL, backgroundColor);
}
// Move the sprite, bounce at the wall, and draw
for ( i=0; i < _nSprites; ++i ) {
position = &_positions[i];
velocity = &_velocities[i];
position->x += velocity->x;
if ( (position->x < 0) || (position->x >= (_screen->w - _sprite_w)) ) {
velocity->x = -velocity->x;
position->x += velocity->x;
}
position->y += velocity->y;
if ( (position->y < 0) || (position->y >= (_screen->h - _sprite_w)) ) {
velocity->y = -velocity->y;
position->y += velocity->y;
}
// Blit the sprite onto the screen
area = *position;
SDL_BlitSurface (_sprite, NULL, _screen, &area);
_sprite_rects[nupdates++] = area;
}
// Update the screen!
if ( _doFlip ) {
SDL_Flip (_screen);
} else {
SDL_UpdateRects (_screen, nupdates, _sprite_rects);
}
_sprites_visible = 1;
}
- (int)run:(int)argc argv:(char*[])argv
{
int width, height;
Uint8 video_bpp;
Uint32 videoflags;
Uint32 background;
int done;
SDL_Event event;
Uint32 then, now, frames;
// Initialize SDL
if ( SDL_Init (SDL_INIT_VIDEO) < 0 ) {
fprintf (stderr, "Couldn't initialize SDL: %s\n", SDL_GetError ());
exit (1);
}
atexit(SDL_Quit);
videoflags = SDL_SWSURFACE|SDL_ANYFORMAT;
width = 640;
height = 480;
video_bpp = 8;
while ( argc > 1 ) {
--argc;
if ( strcmp(argv[argc-1], "-width") == 0 ) {
width = atoi (argv[argc]);
--argc;
} else
if ( strcmp(argv[argc-1], "-height") == 0 ) {
height = atoi (argv[argc]);
--argc;
} else
if ( strcmp(argv[argc-1], "-bpp") == 0 ) {
video_bpp = atoi (argv[argc]);
videoflags &= ~SDL_ANYFORMAT;
--argc;
} else
if ( strcmp (argv[argc], "-fast") == 0 ) {
videoflags = [ self fastestFlags:videoflags :width :height :video_bpp ];
} else
if ( strcmp (argv[argc], "-hw") == 0 ) {
videoflags ^= SDL_HWSURFACE;
} else
if ( strcmp (argv[argc], "-flip") == 0 ) {
videoflags ^= SDL_DOUBLEBUF;
} else
if ( strcmp (argv[argc], "-fullscreen") == 0 ) {
videoflags ^= SDL_FULLSCREEN;
} else
if ( isdigit(argv[argc][0]) ) {
_nSprites = atoi (argv[argc]);
} else {
fprintf (stderr,
"Usage: %s [-bpp N] [-hw] [-flip] [-fast] [-fullscreen] [numSprites]\n",
argv[0]);
exit (1);
}
}
// The width/height passed to SDL_SetVideoMode should match the size of the NSView
width = [ _view frame ].size.width;
height = [ _view frame ].size.height;
videoflags &= ~SDL_FULLSCREEN; // this only for windowed mode
if ( [ _window styleMask ] & NSResizableWindowMask ) // enable resizable window
videoflags |= SDL_RESIZABLE;
[ self setupCocoaWindow ];
[ self setCocoaEnvironmentVariables ];
_mouse_x = width/2;
_mouse_y = width/2;
// Set video mode
_screen = SDL_SetVideoMode (width, height, video_bpp, videoflags);
if ( ! _screen ) {
fprintf (stderr, "Couldn't set %dx%d video mode: %s\n",
width, height, SDL_GetError());
exit (2);
}
// Print out surface info
[ self printFlags:videoflags withName:"Requested flags: " ];
[ self printFlags:_screen->flags withName:"Got flags: " ];
// Load the sprite
// The sprite is located in the Resources section of the .app bundle.
// SDL does not seem aware of bundle paths, so we must construct the path manually.
NSString* resource_path = [[NSBundle mainBundle] resourcePath];
NSString* icon_path = [resource_path stringByAppendingString:@"/icon.bmp"];
if ( [ self loadSpriteFromFile:[icon_path UTF8String] ] < 0 ) {
exit (1);
}
[ self allocSprites ];
[ self initSprites ];
background = SDL_MapRGB (_screen->format, 0x00, 0x00, 0x00);
// Print out information about our surfaces
printf("Screen is at %d bits per pixel\n", _screen->format->BitsPerPixel);
if ( (_screen->flags & SDL_HWSURFACE) == SDL_HWSURFACE ) {
printf ("Screen is in video memory\n");
} else {
printf ("Screen is in system memory\n");
}
if ( (_screen->flags & SDL_DOUBLEBUF) == SDL_DOUBLEBUF ) {
printf ("Screen has double-buffering enabled\n");
}
if ( (_sprite->flags & SDL_HWSURFACE) == SDL_HWSURFACE ) {
printf ("Sprite is in video memory\n");
} else {
printf ("Sprite is in system memory\n");
}
// Run a sample blit to trigger blit acceleration
{
SDL_Rect dst;
dst.x = 0;
dst.y = 0;
dst.w = _sprite->w;
dst.h = _sprite->h;
SDL_BlitSurface (_sprite, NULL, _screen, &dst);
SDL_FillRect (_screen, &dst, background);
}
if ( (_sprite->flags & SDL_HWACCEL) == SDL_HWACCEL ) {
printf("Sprite blit uses hardware acceleration\n");
}
if ( (_sprite->flags & SDL_RLEACCEL) == SDL_RLEACCEL ) {
printf("Sprite blit uses RLE acceleration\n");
}
// Loop, blitting sprites and waiting for a keystroke
frames = 0;
then = SDL_GetTicks();
done = 0;
_sprites_visible = 0;
while ( !done ) {
// Check for events
++frames;
while ( SDL_PollEvent(&event) ) {
switch (event.type) {
case SDL_VIDEORESIZE:
// Recreate the video mode. Use the same bpp and flags
// that the original window was created with
_screen = SDL_SetVideoMode (event.resize.w, event.resize.h,
video_bpp, videoflags);
// Clear screen and reinit sprite positions
SDL_FillRect (_screen, NULL, 0);
[ self initSprites ];
break;
case SDL_MOUSEMOTION:
_velocities[_nSprites-1].x = 0;
_velocities[_nSprites-1].y = 0;
_positions[_nSprites-1].x = event.motion.x - _sprite->w/2;
_positions[_nSprites-1].y = event.motion.y - _sprite->h/2;
//printf ("motion: %d %d\n", event.motion.x, event.motion.y);
break;
case SDL_MOUSEBUTTONDOWN:
_velocities[_nSprites-1].x = 0;
_velocities[_nSprites-1].y = 0;
_positions[_nSprites-1].x = event.button.x;
_positions[_nSprites-1].y = event.button.y;
//printf ("button: %d %d\n", event.button.x, event.button.y);
break;
case SDL_KEYDOWN:
// Escape also quits the app
if (event.key.keysym.sym == SDLK_ESCAPE)
done = 1;
// Control-W warps the cursor
if (event.key.keysym.sym == SDLK_w &&
( SDL_GetModState () & KMOD_LCTRL ) )
SDL_WarpMouse (_screen->w/2, _screen->h/2);
// Control-G toggles input grabbing
if (event.key.keysym.sym == SDLK_g &&
( SDL_GetModState () & KMOD_LCTRL ) )
if ( SDL_WM_GrabInput (SDL_GRAB_QUERY) == SDL_GRAB_OFF )
SDL_WM_GrabInput (SDL_GRAB_ON);
else
SDL_WM_GrabInput (SDL_GRAB_OFF);
break;
case SDL_QUIT:
done = 1;
break;
default:
break;
}
}
// Draw sprites
[ self moveSprites:background ];
// Update fps counter every 100 frames
if ((frames % 100) == 0) {
now = SDL_GetTicks ();
[ _framesPerSecond setFloatValue:((float)frames*1000)/(now-then) ];
frames = 0;
then = now;
}
}
[ self freeSprites ];
SDL_FreeSurface (_sprite);
SDL_Quit ();
return 0;
}
- (IBAction)changeNumberOfSprites:(id)sender
{
[ _numSprites setIntValue:[ sender intValue ] ];
[ self freeSprites ];
_nSprites = [ sender intValue ];
[ self allocSprites ];
[ self initSprites ];
SDL_FillRect (_screen, NULL, 0);
SDL_Flip (_screen);
}
- (IBAction)selectUpdateMode:(id)sender
{
_doFlip = ![ sender selectedRow ]; // row is 0 or 1
}
@end
int main(int argc, char *argv[])
{
// Hand off to instance of MyController
// This instance is created when SDLMain.nib is loaded,
// and the global variable is set in [SDLMain applicationDidFinishLaunching:]
return [ gController run:argc argv:argv ];
}
\ No newline at end of file
//
// MyCustomView.h
// SDL Custom View App
//
// Created by Darrell Walisser on Fri Jul 18 2003.
// Copyright (c) 2003 __MyCompanyName__. All rights reserved.
//
#import <AppKit/AppKit.h>
@interface MyCustomView : NSQuickDrawView
{
}
@end
//
// MyCustomView.m
// SDL Custom View App
//
// Created by Darrell Walisser on Fri Jul 18 2003.
// Copyright (c) 2003 __MyCompanyName__. All rights reserved.
//
#import "MyCustomView.h"
@implementation MyCustomView
- (id)initWithFrame:(NSRect)frame
{
self = [ super initWithFrame:frame ];
if (self) {
// Initialization code here.
}
return self;
}
- (void)drawRect:(NSRect)rect
{
// Drawing code here.
}
- (BOOL)mouseDownCanMoveWindow
{
// If you use textured windows, this disables
// moving the window by dragging in the view
return NO;
}
@end
//
// MyCustomWindow.h
// SDL Custom View App
//
// Created by Darrell Walisser on Fri Jul 18 2003.
// Copyright (c) 2003 __MyCompanyName__. All rights reserved.
//
#import <AppKit/AppKit.h>
// Be a subclass of SDL_QuartzWindow so SDL will
// handle the redraw problems when minimizing the window
// This class is defined in SDL.framework
@interface SDL_QuartzWindow : NSWindow
@end
// Also assign SDL_QuartzWindowDelegate to the window
// to perform other tasks. You can subclass this delegate
// if you want to add your own delegation methods
// This class is defined in SDL.framework
@interface SDL_QuartzWindowDelegate : NSObject
@end
// Declare our custom class
@interface MyCustomWindow : SDL_QuartzWindow
@end
//
// MyCustomWindow.m
// SDL Custom View App
//
// Created by Darrell Walisser on Fri Jul 18 2003.
// Copyright (c) 2003 __MyCompanyName__. All rights reserved.
//
#import "MyCustomWindow.h"
@implementation MyCustomWindow
@end
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Description</key>
<string>This project builds an SDL-based application that draws into a Cocoa window.</string>
<key>FilesToMacroExpand</key>
<array>
<string>English.lproj/InfoPlist.strings</string>
</array>
</dict>
</plist>
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 38;
objects = {
080E96DDFE201D6D7F000001 = {
children = (
F5A47A9D01A0482F01D3D55B,
F5A47A9E01A0483001D3D55B,
B2E5794E04CC967D00A80002,
B2E5794F04CC967D00A80002,
B2F3725904C8695500A80002,
B2F3725A04C8695500A80002,
B2F3725D04C8696800A80002,
B2F3725E04C8696800A80002,
);
isa = PBXGroup;
name = Classes;
refType = 4;
};
089C165CFE840E0CC02AAC07 = {
children = (
089C165DFE840E0CC02AAC07,
);
isa = PBXVariantGroup;
name = InfoPlist.strings;
refType = 4;
};
089C165DFE840E0CC02AAC07 = {
fileEncoding = 10;
isa = PBXFileReference;
name = English;
path = English.lproj/InfoPlist.strings;
refType = 4;
};
089C165EFE840E0CC02AAC07 = {
fileRef = 089C165CFE840E0CC02AAC07;
isa = PBXBuildFile;
settings = {
};
};
//080
//081
//082
//083
//084
//100
//101
//102
//103
//104
1058C7A0FEA54F0111CA2CBB = {
children = (
1058C7A1FEA54F0111CA2CBB,
);
isa = PBXGroup;
name = "Linked Frameworks";
refType = 4;
};
1058C7A1FEA54F0111CA2CBB = {
isa = PBXFrameworkReference;
name = Cocoa.framework;
path = /System/Library/Frameworks/Cocoa.framework;
refType = 0;
};
1058C7A2FEA54F0111CA2CBB = {
children = (
29B97325FDCFA39411CA2CEA,
29B97324FDCFA39411CA2CEA,
);
isa = PBXGroup;
name = "Other Frameworks";
refType = 4;
};
1058C7A3FEA54F0111CA2CBB = {
fileRef = 1058C7A1FEA54F0111CA2CBB;
isa = PBXBuildFile;
settings = {
};
};
//100
//101
//102
//103
//104
//170
//171
//172
//173
//174
17587328FF379C6511CA2CBB = {
isa = PBXApplicationReference;
path = "«PROJECTNAME».app";
refType = 3;
};
//170
//171
//172
//173
//174
//190
//191
//192
//193
//194
19C28FACFE9D520D11CA2CBB = {
children = (
17587328FF379C6511CA2CBB,
);
isa = PBXGroup;
name = Products;
refType = 4;
};
//190
//191
//192
//193
//194
//290
//291
//292
//293
//294
29B97313FDCFA39411CA2CEA = {
buildStyles = (
4A9504CCFFE6A4B311CA0CBA,
4A9504CDFFE6A4B311CA0CBA,
);
hasScannedForEncodings = 1;
isa = PBXProject;
mainGroup = 29B97314FDCFA39411CA2CEA;
projectDirPath = "";
targets = (
29B97326FDCFA39411CA2CEA,
);
};
29B97314FDCFA39411CA2CEA = {
children = (
080E96DDFE201D6D7F000001,
29B97315FDCFA39411CA2CEA,
29B97317FDCFA39411CA2CEA,
29B97323FDCFA39411CA2CEA,
19C28FACFE9D520D11CA2CBB,
);
isa = PBXGroup;
name = "«PROJECTNAMEASXML»";
path = "";
refType = 4;
};
29B97315FDCFA39411CA2CEA = {
children = (
B264D98004C8977900A80002,
);
isa = PBXGroup;
name = "Other Sources";
path = "";
refType = 4;
};
29B97317FDCFA39411CA2CEA = {
children = (
B2F3726904C8830000A80002,
089C165CFE840E0CC02AAC07,
B2F367C504C7ADC700A80002,
);
isa = PBXGroup;
name = Resources;
path = "";
refType = 4;
};
29B97323FDCFA39411CA2CEA = {
children = (
1058C7A0FEA54F0111CA2CBB,
1058C7A2FEA54F0111CA2CBB,
);
isa = PBXGroup;
name = Frameworks;
path = "";
refType = 4;
};
29B97324FDCFA39411CA2CEA = {
isa = PBXFrameworkReference;
name = AppKit.framework;
path = /System/Library/Frameworks/AppKit.framework;
refType = 0;
};
29B97325FDCFA39411CA2CEA = {
isa = PBXFrameworkReference;
name = Foundation.framework;
path = /System/Library/Frameworks/Foundation.framework;
refType = 0;
};
29B97326FDCFA39411CA2CEA = {
buildPhases = (
29B97327FDCFA39411CA2CEA,
29B97328FDCFA39411CA2CEA,
29B9732BFDCFA39411CA2CEA,
29B9732DFDCFA39411CA2CEA,
);
buildSettings = {
FRAMEWORK_SEARCH_PATHS = "\"/Library/Frameworks\"";
HEADER_SEARCH_PATHS = "\"/Library/Frameworks/SDL.framework/Headers\"";
INSTALL_PATH = "$(HOME)/Applications";
LIBRARY_SEARCH_PATHS = "";
OTHER_LDFLAGS = "-framework SDL";
PRECOMPILE_PREFIX_HEADER = YES;
PREFIX_HEADER = prefix.h;
PRODUCT_NAME = "«PROJECTNAME»";
SECTORDER_FLAGS = "";
WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas";
WRAPPER_EXTENSION = app;
};
dependencies = (
);
isa = PBXApplicationTarget;
name = "«PROJECTNAME»";
productInstallPath = "$(HOME)/Applications";
productName = "SDL App";
productReference = 17587328FF379C6511CA2CBB;
productSettingsXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">
<plist version=\"1.0\">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>«PROJECTNAMEASXML»</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.1</string>
<key>NSMainNibFile</key>
<string>SDLMain.nib</string>
<key>NSPrincipalClass</key>
<string>SDLApplication</string>
</dict>
</plist>
";
};
29B97327FDCFA39411CA2CEA = {
buildActionMask = 2147483647;
files = (
F5A47AA101A0483001D3D55B,
B2F3725B04C8695500A80002,
B2F3725F04C8696800A80002,
B2E5795004CC967D00A80002,
);
isa = PBXHeadersBuildPhase;
runOnlyForDeploymentPostprocessing = 0;
};
29B97328FDCFA39411CA2CEA = {
buildActionMask = 2147483647;
files = (
089C165EFE840E0CC02AAC07,
B2F367C604C7ADC700A80002,
B2F3726A04C8830000A80002,
);
isa = PBXResourcesBuildPhase;
runOnlyForDeploymentPostprocessing = 0;
};
29B9732BFDCFA39411CA2CEA = {
buildActionMask = 2147483647;
files = (
F5A47AA301A0483001D3D55B,
B2F3725C04C8695500A80002,
B2F3726004C8696800A80002,
B2E5795104CC967D00A80002,
);
isa = PBXSourcesBuildPhase;
runOnlyForDeploymentPostprocessing = 0;
};
29B9732DFDCFA39411CA2CEA = {
buildActionMask = 2147483647;
files = (
1058C7A3FEA54F0111CA2CBB,
);
isa = PBXFrameworksBuildPhase;
runOnlyForDeploymentPostprocessing = 0;
};
//290
//291
//292
//293
//294
//4A0
//4A1
//4A2
//4A3
//4A4
4A9504CCFFE6A4B311CA0CBA = {
buildRules = (
);
buildSettings = {
COPY_PHASE_STRIP = NO;
OPTIMIZATION_CFLAGS = "-O0";
};
isa = PBXBuildStyle;
name = Development;
};
4A9504CDFFE6A4B311CA0CBA = {
buildRules = (
);
buildSettings = {
COPY_PHASE_STRIP = YES;
DEBUGGING_SYMBOLS = NO;
OPTIMIZATION_CFLAGS = "-O3";
};
isa = PBXBuildStyle;
name = Deployment;
};
//4A0
//4A1
//4A2
//4A3
//4A4
//B20
//B21
//B22
//B23
//B24
B264D98004C8977900A80002 = {
fileEncoding = 30;
isa = PBXFileReference;
path = prefix.h;
refType = 4;
};
B2E5794E04CC967D00A80002 = {
fileEncoding = 30;
isa = PBXFileReference;
path = MyController.h;
refType = 4;
};
B2E5794F04CC967D00A80002 = {
fileEncoding = 30;
isa = PBXFileReference;
path = MyController.m;
refType = 4;
};
B2E5795004CC967D00A80002 = {
fileRef = B2E5794E04CC967D00A80002;
isa = PBXBuildFile;
settings = {
};
};
B2E5795104CC967D00A80002 = {
fileRef = B2E5794F04CC967D00A80002;
isa = PBXBuildFile;
settings = {
};
};
B2F367C504C7ADC700A80002 = {
isa = PBXFileReference;
path = SDLMain.nib;
refType = 4;
};
B2F367C604C7ADC700A80002 = {
fileRef = B2F367C504C7ADC700A80002;
isa = PBXBuildFile;
settings = {
};
};
B2F3725904C8695500A80002 = {
fileEncoding = 4;
isa = PBXFileReference;
path = MyCustomView.h;
refType = 4;
};
B2F3725A04C8695500A80002 = {
fileEncoding = 4;
isa = PBXFileReference;
path = MyCustomView.m;
refType = 4;
};
B2F3725B04C8695500A80002 = {
fileRef = B2F3725904C8695500A80002;
isa = PBXBuildFile;
settings = {
};
};
B2F3725C04C8695500A80002 = {
fileRef = B2F3725A04C8695500A80002;
isa = PBXBuildFile;
settings = {
};
};
B2F3725D04C8696800A80002 = {
fileEncoding = 4;
isa = PBXFileReference;
path = MyCustomWindow.h;
refType = 4;
};
B2F3725E04C8696800A80002 = {
fileEncoding = 4;
isa = PBXFileReference;
path = MyCustomWindow.m;
refType = 4;
};
B2F3725F04C8696800A80002 = {
fileRef = B2F3725D04C8696800A80002;
isa = PBXBuildFile;
settings = {
};
};
B2F3726004C8696800A80002 = {
fileRef = B2F3725E04C8696800A80002;
isa = PBXBuildFile;
settings = {
};
};
B2F3726904C8830000A80002 = {
isa = PBXFileReference;
path = icon.bmp;
refType = 4;
};
B2F3726A04C8830000A80002 = {
fileRef = B2F3726904C8830000A80002;
isa = PBXBuildFile;
settings = {
};
};
//B20
//B21
//B22
//B23
//B24
//F50
//F51
//F52
//F53
//F54
F5A47A9D01A0482F01D3D55B = {
fileEncoding = 30;
isa = PBXFileReference;
path = SDLMain.h;
refType = 2;
};
F5A47A9E01A0483001D3D55B = {
fileEncoding = 30;
isa = PBXFileReference;
path = SDLMain.m;
refType = 2;
};
F5A47AA101A0483001D3D55B = {
fileRef = F5A47A9D01A0482F01D3D55B;
isa = PBXBuildFile;
settings = {
};
};
F5A47AA301A0483001D3D55B = {
fileRef = F5A47A9E01A0483001D3D55B;
isa = PBXBuildFile;
settings = {
};
};
};
rootObject = 29B97313FDCFA39411CA2CEA;
}
/* SDLMain.m - main entry point for our Cocoa-ized SDL app
Initial Version: Darrell Walisser <dwaliss1@purdue.edu>
Non-NIB-Code & other changes: Max Horn <max@quendi.de>
Feel free to customize this file to suit your needs
*/
#import <Cocoa/Cocoa.h>
@interface SDLMain : NSObject
{
IBOutlet id _controller;
}
@end
/* SDLMain.m - main entry point for our Cocoa-ized SDL app
Initial Version: Darrell Walisser <dwaliss1@purdue.edu>
Non-NIB-Code & other changes: Max Horn <max@quendi.de>
Feel free to customize this file to suit your needs
*/
#import "SDL.h"
#import "SDLMain.h"
#import "MyController.h"
#import <sys/param.h> /* for MAXPATHLEN */
#import <unistd.h>
/* For some reaon, Apple removed setAppleMenu from the headers in 10.4,
but the method still is there and works. To avoid warnings, we declare
it ourselves here. */
@interface NSApplication(SDL_Missing_Methods)
- (void)setAppleMenu:(NSMenu *)menu;
@end
/* Use this flag to determine whether we use SDLMain.nib or not */
#define SDL_USE_NIB_FILE 1
/* Use this flag to determine whether we use CPS (docking) or not */
#define SDL_USE_CPS 1
#ifdef SDL_USE_CPS
/* Portions of CPS.h */
typedef struct CPSProcessSerNum
{
UInt32 lo;
UInt32 hi;
} CPSProcessSerNum;
extern OSErr CPSGetCurrentProcess( CPSProcessSerNum *psn);
extern OSErr CPSEnableForegroundOperation( CPSProcessSerNum *psn, UInt32 _arg2, UInt32 _arg3, UInt32 _arg4, UInt32 _arg5);
extern OSErr CPSSetFrontProcess( CPSProcessSerNum *psn);
#endif /* SDL_USE_CPS */
static int gArgc;
static char **gArgv;
static BOOL gFinderLaunch;
static BOOL gCalledAppMainline = FALSE;
static NSString *getApplicationName(void)
{
NSDictionary *dict;
NSString *appName = 0;
/* Determine the application name */
dict = (NSDictionary *)CFBundleGetInfoDictionary(CFBundleGetMainBundle());
if (dict)
appName = [dict objectForKey: @"CFBundleName"];
if (![appName length])
appName = [[NSProcessInfo processInfo] processName];
return appName;
}
#if SDL_USE_NIB_FILE
/* A helper category for NSString */
@interface NSString (ReplaceSubString)
- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString;
@end
#endif
@interface SDLApplication : NSApplication
@end
@implementation SDLApplication
/* Invoked from the Quit menu item */
- (void)terminate:(id)sender
{
/* Post a SDL_QUIT event */
SDL_Event event;
event.type = SDL_QUIT;
SDL_PushEvent(&event);
}
@end
/* The main class of the application, the application's delegate */
@implementation SDLMain
/* Set the working directory to the .app's parent directory */
- (void) setupWorkingDirectory:(BOOL)shouldChdir
{
if (shouldChdir)
{
char parentdir[MAXPATHLEN];
CFURLRef url = CFBundleCopyBundleURL(CFBundleGetMainBundle());
CFURLRef url2 = CFURLCreateCopyDeletingLastPathComponent(0, url);
if (CFURLGetFileSystemRepresentation(url2, true, (UInt8 *)parentdir, MAXPATHLEN)) {
assert ( chdir (parentdir) == 0 ); /* chdir to the binary app's parent */
}
CFRelease(url);
CFRelease(url2);
}
}
#if SDL_USE_NIB_FILE
/* Fix menu to contain the real app name instead of "SDL App" */
- (void)fixMenu:(NSMenu *)aMenu withAppName:(NSString *)appName
{
NSRange aRange;
NSEnumerator *enumerator;
NSMenuItem *menuItem;
aRange = [[aMenu title] rangeOfString:@"SDL App"];
if (aRange.length != 0)
[aMenu setTitle: [[aMenu title] stringByReplacingRange:aRange with:appName]];
enumerator = [[aMenu itemArray] objectEnumerator];
while ((menuItem = [enumerator nextObject]))
{
aRange = [[menuItem title] rangeOfString:@"SDL App"];
if (aRange.length != 0)
[menuItem setTitle: [[menuItem title] stringByReplacingRange:aRange with:appName]];
if ([menuItem hasSubmenu])
[self fixMenu:[menuItem submenu] withAppName:appName];
}
[ aMenu sizeToFit ];
}
#else
static void setApplicationMenu(void)
{
/* warning: this code is very odd */
NSMenu *appleMenu;
NSMenuItem *menuItem;
NSString *title;
NSString *appName;
appName = getApplicationName();
appleMenu = [[NSMenu alloc] initWithTitle:@""];
/* Add menu items */
title = [@"About " stringByAppendingString:appName];
[appleMenu addItemWithTitle:title action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""];
[appleMenu addItem:[NSMenuItem separatorItem]];
title = [@"Hide " stringByAppendingString:appName];
[appleMenu addItemWithTitle:title action:@selector(hide:) keyEquivalent:@"h"];
menuItem = (NSMenuItem *)[appleMenu addItemWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@"h"];
[menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)];
[appleMenu addItemWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@""];
[appleMenu addItem:[NSMenuItem separatorItem]];
title = [@"Quit " stringByAppendingString:appName];
[appleMenu addItemWithTitle:title action:@selector(terminate:) keyEquivalent:@"q"];
/* Put menu into the menubar */
menuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""];
[menuItem setSubmenu:appleMenu];
[[NSApp mainMenu] addItem:menuItem];
/* Tell the application object that this is now the application menu */
[NSApp setAppleMenu:appleMenu];
/* Finally give up our references to the objects */
[appleMenu release];
[menuItem release];
}
/* Create a window menu */
static void setupWindowMenu(void)
{
NSMenu *windowMenu;
NSMenuItem *windowMenuItem;
NSMenuItem *menuItem;
windowMenu = [[NSMenu alloc] initWithTitle:@"Window"];
/* "Minimize" item */
menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"];
[windowMenu addItem:menuItem];
[menuItem release];
/* Put menu into the menubar */
windowMenuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""];
[windowMenuItem setSubmenu:windowMenu];
[[NSApp mainMenu] addItem:windowMenuItem];
/* Tell the application object that this is now the window menu */
[NSApp setWindowsMenu:windowMenu];
/* Finally give up our references to the objects */
[windowMenu release];
[windowMenuItem release];
}
/* Replacement for NSApplicationMain */
static void CustomApplicationMain (int argc, char **argv)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
SDLMain *sdlMain;
/* Ensure the application object is initialised */
[SDLApplication sharedApplication];
#ifdef SDL_USE_CPS
{
CPSProcessSerNum PSN;
/* Tell the dock about us */
if (!CPSGetCurrentProcess(&PSN))
if (!CPSEnableForegroundOperation(&PSN,0x03,0x3C,0x2C,0x1103))
if (!CPSSetFrontProcess(&PSN))
[SDLApplication sharedApplication];
}
#endif /* SDL_USE_CPS */
/* Set up the menubar */
[NSApp setMainMenu:[[NSMenu alloc] init]];
setApplicationMenu();
setupWindowMenu();
/* Create SDLMain and make it the app delegate */
sdlMain = [[SDLMain alloc] init];
[NSApp setDelegate:sdlMain];
/* Start the main event loop */
[NSApp run];
[sdlMain release];
[pool release];
}
#endif
/*
* Catch document open requests...this lets us notice files when the app
* was launched by double-clicking a document, or when a document was
* dragged/dropped on the app's icon. You need to have a
* CFBundleDocumentsType section in your Info.plist to get this message,
* apparently.
*
* Files are added to gArgv, so to the app, they'll look like command line
* arguments. Previously, apps launched from the finder had nothing but
* an argv[0].
*
* This message may be received multiple times to open several docs on launch.
*
* This message is ignored once the app's mainline has been called.
*/
- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
{
const char *temparg;
size_t arglen;
char *arg;
char **newargv;
if (!gFinderLaunch) /* MacOS is passing command line args. */
return FALSE;
if (gCalledAppMainline) /* app has started, ignore this document. */
return FALSE;
temparg = [filename UTF8String];
arglen = SDL_strlen(temparg) + 1;
arg = (char *) SDL_malloc(arglen);
if (arg == NULL)
return FALSE;
newargv = (char **) realloc(gArgv, sizeof (char *) * (gArgc + 2));
if (newargv == NULL)
{
SDL_free(arg);
return FALSE;
}
gArgv = newargv;
SDL_strlcpy(arg, temparg, arglen);
gArgv[gArgc++] = arg;
gArgv[gArgc] = NULL;
return TRUE;
}
/* Called when the internal event loop has just started running */
- (void) applicationDidFinishLaunching: (NSNotification *) note
{
int status;
gController = _controller;
/* Set the working directory to the .app's parent directory */
[self setupWorkingDirectory:gFinderLaunch];
#if SDL_USE_NIB_FILE
/* Set the main menu to contain the real app name instead of "SDL App" */
[self fixMenu:[NSApp mainMenu] withAppName:getApplicationName()];
#endif
/* Hand off to main application code */
gCalledAppMainline = TRUE;
status = SDL_main (gArgc, gArgv);
/* We're done, thank you for playing */
exit(status);
}
@end
@implementation NSString (ReplaceSubString)
- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString
{
unsigned int bufferSize;
unsigned int selfLen = [self length];
unsigned int aStringLen = [aString length];
unichar *buffer;
NSRange localRange;
NSString *result;
bufferSize = selfLen + aStringLen - aRange.length;
buffer = NSAllocateMemoryPages(bufferSize*sizeof(unichar));
/* Get first part into buffer */
localRange.location = 0;
localRange.length = aRange.location;
[self getCharacters:buffer range:localRange];
/* Get middle part into buffer */
localRange.location = 0;
localRange.length = aStringLen;
[aString getCharacters:(buffer+aRange.location) range:localRange];
/* Get last part into buffer */
localRange.location = aRange.location + aRange.length;
localRange.length = selfLen - localRange.location;
[self getCharacters:(buffer+aRange.location+aStringLen) range:localRange];
/* Build output string */
result = [NSString stringWithCharacters:buffer length:bufferSize];
NSDeallocateMemoryPages(buffer, bufferSize);
return result;
}
@end
#ifdef main
# undef main
#endif
/* Main entry point to executable - should *not* be SDL_main! */
int main (int argc, char **argv)
{
/* Copy the arguments into a global variable */
/* This is passed if we are launched by double-clicking */
if ( argc >= 2 && strncmp (argv[1], "-psn", 4) == 0 ) {
gArgv = (char **) SDL_malloc(sizeof (char *) * 2);
gArgv[0] = argv[0];
gArgv[1] = NULL;
gArgc = 1;
gFinderLaunch = YES;
} else {
int i;
gArgc = argc;
gArgv = (char **) SDL_malloc(sizeof (char *) * (argc+1));
for (i = 0; i <= argc; i++)
gArgv[i] = argv[i];
gFinderLaunch = NO;
}
#if SDL_USE_NIB_FILE
[SDLApplication poseAsClass:[NSApplication class]];
NSApplicationMain (argc, argv);
#else
CustomApplicationMain (argc, argv);
#endif
return 0;
}
{
IBClasses = (
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
{
ACTIONS = {changeNumberOfSprites = id; selectUpdateMode = id; };
CLASS = MyController;
LANGUAGE = ObjC;
OUTLETS = {"_framesPerSecond" = id; "_numSprites" = id; "_view" = id; "_window" = id; };
SUPERCLASS = NSObject;
},
{CLASS = MyCustomView; LANGUAGE = ObjC; SUPERCLASS = NSQuickDrawView; },
{CLASS = MyCustomWindow; LANGUAGE = ObjC; SUPERCLASS = NSWindow; },
{
CLASS = SDLMain;
LANGUAGE = ObjC;
OUTLETS = {"_controller" = id; };
SUPERCLASS = NSObject;
}
);
IBVersion = 1;
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IBDocumentLocation</key>
<string>89 138 361 280 0 0 1152 848 </string>
<key>IBEditorPositions</key>
<dict>
<key>29</key>
<string>62 362 233 44 0 0 1152 848 </string>
<key>368</key>
<string>334 280 355 456 0 0 1024 746 </string>
</dict>
<key>IBFramework Version</key>
<string>291.0</string>
<key>IBLockedObjects</key>
<array>
<integer>328</integer>
</array>
<key>IBOpenObjects</key>
<array>
<integer>326</integer>
<integer>368</integer>
</array>
<key>IBSystem Version</key>
<string>6L60</string>
</dict>
</plist>
/*
* prefix.h
* SDL Custom View App
*
* Created by Darrell Walisser on Fri Jul 18 2003.
* Copyright (c) 2003 __MyCompanyName__. All rights reserved.
*
*/
#include <Foundation/Foundation.h>
#include <Cocoa/Cocoa.h>
Binary files a/Xcode/TemplatesForProjectBuilder/SDL OpenGL Application/English.lproj/InfoPlist.strings and /dev/null differ Binary files a/Xcode/TemplatesForProjectBuilder/SDL OpenGL Application/English.lproj/InfoPlist.strings and /dev/null differ
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Description</key>
<string>This project builds an SDL-based application that uses OpenGL.</string>
<key>FilesToMacroExpand</key>
<array>
<string>English.lproj/InfoPlist.strings</string>
</array>
</dict>
</plist>
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 38;
objects = {
080E96DDFE201D6D7F000001 = {
children = (
F5A47A9D01A0482F01D3D55B,
F5A47A9E01A0483001D3D55B,
);
isa = PBXGroup;
name = Classes;
refType = 4;
};
089C165CFE840E0CC02AAC07 = {
children = (
089C165DFE840E0CC02AAC07,
);
isa = PBXVariantGroup;
name = InfoPlist.strings;
refType = 4;
};
089C165DFE840E0CC02AAC07 = {
fileEncoding = 10;
isa = PBXFileReference;
name = English;
path = English.lproj/InfoPlist.strings;
refType = 4;
};
089C165EFE840E0CC02AAC07 = {
fileRef = 089C165CFE840E0CC02AAC07;
isa = PBXBuildFile;
settings = {
};
};
//080
//081
//082
//083
//084
//100
//101
//102
//103
//104
1058C7A0FEA54F0111CA2CBB = {
children = (
1058C7A1FEA54F0111CA2CBB,
B2F67ED704C74A3F00A80002,
B2F67F1E04C773E400A80002,
);
isa = PBXGroup;
name = "Linked Frameworks";
refType = 4;
};
1058C7A1FEA54F0111CA2CBB = {
isa = PBXFrameworkReference;
name = Cocoa.framework;
path = /System/Library/Frameworks/Cocoa.framework;
refType = 0;
};
1058C7A2FEA54F0111CA2CBB = {
children = (
29B97325FDCFA39411CA2CEA,
29B97324FDCFA39411CA2CEA,
);
isa = PBXGroup;
name = "Other Frameworks";
refType = 4;
};
1058C7A3FEA54F0111CA2CBB = {
fileRef = 1058C7A1FEA54F0111CA2CBB;
isa = PBXBuildFile;
settings = {
};
};
//100
//101
//102
//103
//104
//170
//171
//172
//173
//174
17587328FF379C6511CA2CBB = {
isa = PBXApplicationReference;
path = "«PROJECTNAME».app";
refType = 3;
};
//170
//171
//172
//173
//174
//190
//191
//192
//193
//194
19C28FACFE9D520D11CA2CBB = {
children = (
17587328FF379C6511CA2CBB,
);
isa = PBXGroup;
name = Products;
refType = 4;
};
//190
//191
//192
//193
//194
//290
//291
//292
//293
//294
29B97313FDCFA39411CA2CEA = {
buildStyles = (
4A9504CCFFE6A4B311CA0CBA,
4A9504CDFFE6A4B311CA0CBA,
);
hasScannedForEncodings = 1;
isa = PBXProject;
mainGroup = 29B97314FDCFA39411CA2CEA;
projectDirPath = "";
targets = (
29B97326FDCFA39411CA2CEA,
);
};
29B97314FDCFA39411CA2CEA = {
children = (
080E96DDFE201D6D7F000001,
29B97315FDCFA39411CA2CEA,
29B97317FDCFA39411CA2CEA,
29B97323FDCFA39411CA2CEA,
19C28FACFE9D520D11CA2CBB,
);
isa = PBXGroup;
name = "«PROJECTNAMEASXML»";
path = "";
refType = 4;
};
29B97315FDCFA39411CA2CEA = {
children = (
B2F67F1104C7737E00A80002,
F5A47A9F01A0483001D3D55B,
);
isa = PBXGroup;
name = "Other Sources";
path = "";
refType = 4;
};
29B97317FDCFA39411CA2CEA = {
children = (
089C165CFE840E0CC02AAC07,
);
isa = PBXGroup;
name = Resources;
path = "";
refType = 4;
};
29B97323FDCFA39411CA2CEA = {
children = (
1058C7A0FEA54F0111CA2CBB,
1058C7A2FEA54F0111CA2CBB,
);
isa = PBXGroup;
name = Frameworks;
path = "";
refType = 4;
};
29B97324FDCFA39411CA2CEA = {
isa = PBXFrameworkReference;
name = AppKit.framework;
path = /System/Library/Frameworks/AppKit.framework;
refType = 0;
};
29B97325FDCFA39411CA2CEA = {
isa = PBXFrameworkReference;
name = Foundation.framework;
path = /System/Library/Frameworks/Foundation.framework;
refType = 0;
};
29B97326FDCFA39411CA2CEA = {
buildPhases = (
29B97327FDCFA39411CA2CEA,
29B97328FDCFA39411CA2CEA,
29B9732BFDCFA39411CA2CEA,
29B9732DFDCFA39411CA2CEA,
);
buildSettings = {
FRAMEWORK_SEARCH_PATHS = "\"/Library/Frameworks\"";
HEADER_SEARCH_PATHS = "\"/Library/Frameworks/SDL.framework/Headers\"";
INSTALL_PATH = "$(HOME)/Applications";
LIBRARY_SEARCH_PATHS = "";
OPTIMIZATION_CFLAGS = "-O0";
OTHER_LDFLAGS = "-framework SDL";
PRODUCT_NAME = "«PROJECTNAME»";
SECTORDER_FLAGS = "";
WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas";
WRAPPER_EXTENSION = app;
};
dependencies = (
);
isa = PBXApplicationTarget;
name = "«PROJECTNAME»";
productInstallPath = "$(HOME)/Applications";
productName = "«PROJECTNAME»";
productReference = 17587328FF379C6511CA2CBB;
productSettingsXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">
<plist version=\"1.0\">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>«PROJECTNAMEASXML»</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.1</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
";
};
29B97327FDCFA39411CA2CEA = {
buildActionMask = 2147483647;
files = (
F5A47AA101A0483001D3D55B,
B2F67F1904C7737E00A80002,
);
isa = PBXHeadersBuildPhase;
runOnlyForDeploymentPostprocessing = 0;
};
29B97328FDCFA39411CA2CEA = {
buildActionMask = 2147483647;
files = (
089C165EFE840E0CC02AAC07,
);
isa = PBXResourcesBuildPhase;
runOnlyForDeploymentPostprocessing = 0;
};
29B9732BFDCFA39411CA2CEA = {
buildActionMask = 2147483647;
files = (
F5A47AA301A0483001D3D55B,
F5A47AA401A0483001D3D55B,
B2F67F1804C7737E00A80002,
B2F67F1A04C7737E00A80002,
B2F67F1B04C7737E00A80002,
B2F67F1C04C7737E00A80002,
B2F67F1D04C7737E00A80002,
);
isa = PBXSourcesBuildPhase;
runOnlyForDeploymentPostprocessing = 0;
};
29B9732DFDCFA39411CA2CEA = {
buildActionMask = 2147483647;
files = (
1058C7A3FEA54F0111CA2CBB,
B2F67ED804C74A3F00A80002,
B2F67F1F04C773E400A80002,
);
isa = PBXFrameworksBuildPhase;
runOnlyForDeploymentPostprocessing = 0;
};
//290
//291
//292
//293
//294
//4A0
//4A1
//4A2
//4A3
//4A4
4A9504CCFFE6A4B311CA0CBA = {
buildRules = (
);
buildSettings = {
COPY_PHASE_STRIP = NO;
OPTIMIZATION_CFLAGS = "-O0";
};
isa = PBXBuildStyle;
name = Development;
};
4A9504CDFFE6A4B311CA0CBA = {
buildRules = (
);
buildSettings = {
COPY_PHASE_STRIP = YES;
};
isa = PBXBuildStyle;
name = Deployment;
};
//4A0
//4A1
//4A2
//4A3
//4A4
//B20
//B21
//B22
//B23
//B24
B2F67ED704C74A3F00A80002 = {
isa = PBXFrameworkReference;
name = OpenGL.framework;
path = /System/Library/Frameworks/OpenGL.framework;
refType = 0;
};
B2F67ED804C74A3F00A80002 = {
fileRef = B2F67ED704C74A3F00A80002;
isa = PBXBuildFile;
settings = {
};
};
B2F67F1104C7737E00A80002 = {
children = (
B2F67F1204C7737E00A80002,
B2F67F1304C7737E00A80002,
B2F67F1404C7737E00A80002,
B2F67F1504C7737E00A80002,
B2F67F1604C7737E00A80002,
B2F67F1704C7737E00A80002,
);
isa = PBXGroup;
path = atlantis;
refType = 4;
};
B2F67F1204C7737E00A80002 = {
fileEncoding = 30;
isa = PBXFileReference;
path = atlantis.c;
refType = 4;
};
B2F67F1304C7737E00A80002 = {
fileEncoding = 30;
isa = PBXFileReference;
path = atlantis.h;
refType = 4;
};
B2F67F1404C7737E00A80002 = {
fileEncoding = 30;
isa = PBXFileReference;
path = dolphin.c;
refType = 4;
};
B2F67F1504C7737E00A80002 = {
fileEncoding = 30;
isa = PBXFileReference;
path = shark.c;
refType = 4;
};
B2F67F1604C7737E00A80002 = {
fileEncoding = 30;
isa = PBXFileReference;
path = swim.c;
refType = 4;
};
B2F67F1704C7737E00A80002 = {
fileEncoding = 30;
isa = PBXFileReference;
path = whale.c;
refType = 4;
};
B2F67F1804C7737E00A80002 = {
fileRef = B2F67F1204C7737E00A80002;
isa = PBXBuildFile;
settings = {
};
};
B2F67F1904C7737E00A80002 = {
fileRef = B2F67F1304C7737E00A80002;
isa = PBXBuildFile;
settings = {
};
};
B2F67F1A04C7737E00A80002 = {
fileRef = B2F67F1404C7737E00A80002;
isa = PBXBuildFile;
settings = {
};
};
B2F67F1B04C7737E00A80002 = {
fileRef = B2F67F1504C7737E00A80002;
isa = PBXBuildFile;
settings = {
};
};
B2F67F1C04C7737E00A80002 = {
fileRef = B2F67F1604C7737E00A80002;
isa = PBXBuildFile;
settings = {
};
};
B2F67F1D04C7737E00A80002 = {
fileRef = B2F67F1704C7737E00A80002;
isa = PBXBuildFile;
settings = {
};
};
B2F67F1E04C773E400A80002 = {
isa = PBXFrameworkReference;
name = GLUT.framework;
path = /System/Library/Frameworks/GLUT.framework;
refType = 0;
};
B2F67F1F04C773E400A80002 = {
fileRef = B2F67F1E04C773E400A80002;
isa = PBXBuildFile;
settings = {
};
};
//B20
//B21
//B22
//B23
//B24
//F50
//F51
//F52
//F53
//F54
F5A47A9D01A0482F01D3D55B = {
fileEncoding = 30;
isa = PBXFileReference;
path = SDLMain.h;
refType = 2;
};
F5A47A9E01A0483001D3D55B = {
fileEncoding = 30;
isa = PBXFileReference;
path = SDLMain.m;
refType = 2;
};
F5A47A9F01A0483001D3D55B = {
fileEncoding = 30;
isa = PBXFileReference;
path = main.c;
refType = 2;
};
F5A47AA101A0483001D3D55B = {
fileRef = F5A47A9D01A0482F01D3D55B;
isa = PBXBuildFile;
settings = {
};
};
F5A47AA301A0483001D3D55B = {
fileRef = F5A47A9E01A0483001D3D55B;
isa = PBXBuildFile;
settings = {
};
};
F5A47AA401A0483001D3D55B = {
fileRef = F5A47A9F01A0483001D3D55B;
isa = PBXBuildFile;
settings = {
};
};
};
rootObject = 29B97313FDCFA39411CA2CEA;
}
/* SDLMain.m - main entry point for our Cocoa-ized SDL app
Initial Version: Darrell Walisser <dwaliss1@purdue.edu>
Non-NIB-Code & other changes: Max Horn <max@quendi.de>
Feel free to customize this file to suit your needs
*/
#import <Cocoa/Cocoa.h>
@interface SDLMain : NSObject
@end
/* SDLMain.m - main entry point for our Cocoa-ized SDL app
Initial Version: Darrell Walisser <dwaliss1@purdue.edu>
Non-NIB-Code & other changes: Max Horn <max@quendi.de>
Feel free to customize this file to suit your needs
*/
#import "SDL.h"
#import "SDLMain.h"
#import <sys/param.h> /* for MAXPATHLEN */
#import <unistd.h>
/* For some reaon, Apple removed setAppleMenu from the headers in 10.4,
but the method still is there and works. To avoid warnings, we declare
it ourselves here. */
@interface NSApplication(SDL_Missing_Methods)
- (void)setAppleMenu:(NSMenu *)menu;
@end
/* Use this flag to determine whether we use SDLMain.nib or not */
#define SDL_USE_NIB_FILE 0
/* Use this flag to determine whether we use CPS (docking) or not */
#define SDL_USE_CPS 1
#ifdef SDL_USE_CPS
/* Portions of CPS.h */
typedef struct CPSProcessSerNum
{
UInt32 lo;
UInt32 hi;
} CPSProcessSerNum;
extern OSErr CPSGetCurrentProcess( CPSProcessSerNum *psn);
extern OSErr CPSEnableForegroundOperation( CPSProcessSerNum *psn, UInt32 _arg2, UInt32 _arg3, UInt32 _arg4, UInt32 _arg5);
extern OSErr CPSSetFrontProcess( CPSProcessSerNum *psn);
#endif /* SDL_USE_CPS */
static int gArgc;
static char **gArgv;
static BOOL gFinderLaunch;
static BOOL gCalledAppMainline = FALSE;
static NSString *getApplicationName(void)
{
NSDictionary *dict;
NSString *appName = 0;
/* Determine the application name */
dict = (NSDictionary *)CFBundleGetInfoDictionary(CFBundleGetMainBundle());
if (dict)
appName = [dict objectForKey: @"CFBundleName"];
if (![appName length])
appName = [[NSProcessInfo processInfo] processName];
return appName;
}
#if SDL_USE_NIB_FILE
/* A helper category for NSString */
@interface NSString (ReplaceSubString)
- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString;
@end
#endif
@interface SDLApplication : NSApplication
@end
@implementation SDLApplication
/* Invoked from the Quit menu item */
- (void)terminate:(id)sender
{
/* Post a SDL_QUIT event */
SDL_Event event;
event.type = SDL_QUIT;
SDL_PushEvent(&event);
}
@end
/* The main class of the application, the application's delegate */
@implementation SDLMain
/* Set the working directory to the .app's parent directory */
- (void) setupWorkingDirectory:(BOOL)shouldChdir
{
if (shouldChdir)
{
char parentdir[MAXPATHLEN];
CFURLRef url = CFBundleCopyBundleURL(CFBundleGetMainBundle());
CFURLRef url2 = CFURLCreateCopyDeletingLastPathComponent(0, url);
if (CFURLGetFileSystemRepresentation(url2, true, (UInt8 *)parentdir, MAXPATHLEN)) {
assert ( chdir (parentdir) == 0 ); /* chdir to the binary app's parent */
}
CFRelease(url);
CFRelease(url2);
}
}
#if SDL_USE_NIB_FILE
/* Fix menu to contain the real app name instead of "SDL App" */
- (void)fixMenu:(NSMenu *)aMenu withAppName:(NSString *)appName
{
NSRange aRange;
NSEnumerator *enumerator;
NSMenuItem *menuItem;
aRange = [[aMenu title] rangeOfString:@"SDL App"];
if (aRange.length != 0)
[aMenu setTitle: [[aMenu title] stringByReplacingRange:aRange with:appName]];
enumerator = [[aMenu itemArray] objectEnumerator];
while ((menuItem = [enumerator nextObject]))
{
aRange = [[menuItem title] rangeOfString:@"SDL App"];
if (aRange.length != 0)
[menuItem setTitle: [[menuItem title] stringByReplacingRange:aRange with:appName]];
if ([menuItem hasSubmenu])
[self fixMenu:[menuItem submenu] withAppName:appName];
}
[ aMenu sizeToFit ];
}
#else
static void setApplicationMenu(void)
{
/* warning: this code is very odd */
NSMenu *appleMenu;
NSMenuItem *menuItem;
NSString *title;
NSString *appName;
appName = getApplicationName();
appleMenu = [[NSMenu alloc] initWithTitle:@""];
/* Add menu items */
title = [@"About " stringByAppendingString:appName];
[appleMenu addItemWithTitle:title action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""];
[appleMenu addItem:[NSMenuItem separatorItem]];
title = [@"Hide " stringByAppendingString:appName];
[appleMenu addItemWithTitle:title action:@selector(hide:) keyEquivalent:@"h"];
menuItem = (NSMenuItem *)[appleMenu addItemWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@"h"];
[menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)];
[appleMenu addItemWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@""];
[appleMenu addItem:[NSMenuItem separatorItem]];
title = [@"Quit " stringByAppendingString:appName];
[appleMenu addItemWithTitle:title action:@selector(terminate:) keyEquivalent:@"q"];
/* Put menu into the menubar */
menuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""];
[menuItem setSubmenu:appleMenu];
[[NSApp mainMenu] addItem:menuItem];
/* Tell the application object that this is now the application menu */
[NSApp setAppleMenu:appleMenu];
/* Finally give up our references to the objects */
[appleMenu release];
[menuItem release];
}
/* Create a window menu */
static void setupWindowMenu(void)
{
NSMenu *windowMenu;
NSMenuItem *windowMenuItem;
NSMenuItem *menuItem;
windowMenu = [[NSMenu alloc] initWithTitle:@"Window"];
/* "Minimize" item */
menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"];
[windowMenu addItem:menuItem];
[menuItem release];
/* Put menu into the menubar */
windowMenuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""];
[windowMenuItem setSubmenu:windowMenu];
[[NSApp mainMenu] addItem:windowMenuItem];
/* Tell the application object that this is now the window menu */
[NSApp setWindowsMenu:windowMenu];
/* Finally give up our references to the objects */
[windowMenu release];
[windowMenuItem release];
}
/* Replacement for NSApplicationMain */
static void CustomApplicationMain (int argc, char **argv)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
SDLMain *sdlMain;
/* Ensure the application object is initialised */
[SDLApplication sharedApplication];
#ifdef SDL_USE_CPS
{
CPSProcessSerNum PSN;
/* Tell the dock about us */
if (!CPSGetCurrentProcess(&PSN))
if (!CPSEnableForegroundOperation(&PSN,0x03,0x3C,0x2C,0x1103))
if (!CPSSetFrontProcess(&PSN))
[SDLApplication sharedApplication];
}
#endif /* SDL_USE_CPS */
/* Set up the menubar */
[NSApp setMainMenu:[[NSMenu alloc] init]];
setApplicationMenu();
setupWindowMenu();
/* Create SDLMain and make it the app delegate */
sdlMain = [[SDLMain alloc] init];
[NSApp setDelegate:sdlMain];
/* Start the main event loop */
[NSApp run];
[sdlMain release];
[pool release];
}
#endif
/*
* Catch document open requests...this lets us notice files when the app
* was launched by double-clicking a document, or when a document was
* dragged/dropped on the app's icon. You need to have a
* CFBundleDocumentsType section in your Info.plist to get this message,
* apparently.
*
* Files are added to gArgv, so to the app, they'll look like command line
* arguments. Previously, apps launched from the finder had nothing but
* an argv[0].
*
* This message may be received multiple times to open several docs on launch.
*
* This message is ignored once the app's mainline has been called.
*/
- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
{
const char *temparg;
size_t arglen;
char *arg;
char **newargv;
if (!gFinderLaunch) /* MacOS is passing command line args. */
return FALSE;
if (gCalledAppMainline) /* app has started, ignore this document. */
return FALSE;
temparg = [filename UTF8String];
arglen = SDL_strlen(temparg) + 1;
arg = (char *) SDL_malloc(arglen);
if (arg == NULL)
return FALSE;
newargv = (char **) realloc(gArgv, sizeof (char *) * (gArgc + 2));
if (newargv == NULL)
{
SDL_free(arg);
return FALSE;
}
gArgv = newargv;
SDL_strlcpy(arg, temparg, arglen);
gArgv[gArgc++] = arg;
gArgv[gArgc] = NULL;
return TRUE;
}
/* Called when the internal event loop has just started running */
- (void) applicationDidFinishLaunching: (NSNotification *) note
{
int status;
/* Set the working directory to the .app's parent directory */
[self setupWorkingDirectory:gFinderLaunch];
#if SDL_USE_NIB_FILE
/* Set the main menu to contain the real app name instead of "SDL App" */
[self fixMenu:[NSApp mainMenu] withAppName:getApplicationName()];
#endif
/* Hand off to main application code */
gCalledAppMainline = TRUE;
status = SDL_main (gArgc, gArgv);
/* We're done, thank you for playing */
exit(status);
}
@end
@implementation NSString (ReplaceSubString)
- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString
{
unsigned int bufferSize;
unsigned int selfLen = [self length];
unsigned int aStringLen = [aString length];
unichar *buffer;
NSRange localRange;
NSString *result;
bufferSize = selfLen + aStringLen - aRange.length;
buffer = NSAllocateMemoryPages(bufferSize*sizeof(unichar));
/* Get first part into buffer */
localRange.location = 0;
localRange.length = aRange.location;
[self getCharacters:buffer range:localRange];
/* Get middle part into buffer */
localRange.location = 0;
localRange.length = aStringLen;
[aString getCharacters:(buffer+aRange.location) range:localRange];
/* Get last part into buffer */
localRange.location = aRange.location + aRange.length;
localRange.length = selfLen - localRange.location;
[self getCharacters:(buffer+aRange.location+aStringLen) range:localRange];
/* Build output string */
result = [NSString stringWithCharacters:buffer length:bufferSize];
NSDeallocateMemoryPages(buffer, bufferSize);
return result;
}
@end
#ifdef main
# undef main
#endif
/* Main entry point to executable - should *not* be SDL_main! */
int main (int argc, char **argv)
{
/* Copy the arguments into a global variable */
/* This is passed if we are launched by double-clicking */
if ( argc >= 2 && strncmp (argv[1], "-psn", 4) == 0 ) {
gArgv = (char **) SDL_malloc(sizeof (char *) * 2);
gArgv[0] = argv[0];
gArgv[1] = NULL;
gArgc = 1;
gFinderLaunch = YES;
} else {
int i;
gArgc = argc;
gArgv = (char **) SDL_malloc(sizeof (char *) * (argc+1));
for (i = 0; i <= argc; i++)
gArgv[i] = argv[i];
gFinderLaunch = NO;
}
#if SDL_USE_NIB_FILE
[SDLApplication poseAsClass:[NSApplication class]];
NSApplicationMain (argc, argv);
#else
CustomApplicationMain (argc, argv);
#endif
return 0;
}
/* Copyright (c) Mark J. Kilgard, 1994. */
/**
* (c) Copyright 1993, 1994, 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.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <sys/time.h>
#include <GLUT/glut.h>
#include "atlantis.h"
fishRec sharks[NUM_SHARKS];
fishRec momWhale;
fishRec babyWhale;
fishRec dolph;
GLboolean Timing = GL_TRUE;
int w_win = 640;
int h_win = 480;
GLint count = 0;
GLenum StrMode = GL_VENDOR;
GLboolean moving;
static double mtime(void)
{
struct timeval tk_time;
struct timezone tz;
gettimeofday(&tk_time, &tz);
return 4294.967296 * tk_time.tv_sec + 0.000001 * tk_time.tv_usec;
}
static double filter(double in, double *save)
{
static double k1 = 0.9;
static double k2 = 0.05;
save[3] = in;
save[1] = save[0]*k1 + k2*(save[3] + save[2]);
save[0]=save[1];
save[2]=save[3];
return(save[1]);
}
void DrawStr(const char *str)
{
GLint i = 0;
if(!str) return;
while(str[i])
{
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, str[i]);
i++;
}
}
void
InitFishs(void)
{
int i;
for (i = 0; i < NUM_SHARKS; i++) {
sharks[i].x = 70000.0 + rand() % 6000;
sharks[i].y = rand() % 6000;
sharks[i].z = rand() % 6000;
sharks[i].psi = rand() % 360 - 180.0;
sharks[i].v = 1.0;
}
dolph.x = 30000.0;
dolph.y = 0.0;
dolph.z = 6000.0;
dolph.psi = 90.0;
dolph.theta = 0.0;
dolph.v = 3.0;
momWhale.x = 70000.0;
momWhale.y = 0.0;
momWhale.z = 0.0;
momWhale.psi = 90.0;
momWhale.theta = 0.0;
momWhale.v = 3.0;
babyWhale.x = 60000.0;
babyWhale.y = -2000.0;
babyWhale.z = -2000.0;
babyWhale.psi = 90.0;
babyWhale.theta = 0.0;
babyWhale.v = 3.0;
}
void
Atlantis_Init(void)
{
static float ambient[] = {0.2, 0.2, 0.2, 1.0};
static float diffuse[] = {1.0, 1.0, 1.0, 1.0};
static float position[] = {0.0, 1.0, 0.0, 0.0};
static float mat_shininess[] = {90.0};
static float mat_specular[] = {0.8, 0.8, 0.8, 1.0};
static float mat_diffuse[] = {0.46, 0.66, 0.795, 1.0};
static float mat_ambient[] = {0.3, 0.4, 0.5, 1.0};
static float lmodel_ambient[] = {0.4, 0.4, 0.4, 1.0};
static float lmodel_localviewer[] = {0.0};
//GLfloat map1[4] = {0.0, 0.0, 0.0, 0.0};
//GLfloat map2[4] = {0.0, 0.0, 0.0, 0.0};
static float fog_color[] = {0.0, 0.5, 0.9, 1.0};
glFrontFace(GL_CCW);
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
glLightfv(GL_LIGHT0, GL_POSITION, position);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);
glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, lmodel_localviewer);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mat_shininess);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mat_diffuse);
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, mat_ambient);
InitFishs();
glEnable(GL_FOG);
glFogi(GL_FOG_MODE, GL_EXP);
glFogf(GL_FOG_DENSITY, 0.0000025);
glFogfv(GL_FOG_COLOR, fog_color);
glClearColor(0.0, 0.5, 0.9, 1.0);
}
void
Atlantis_Reshape(int width, int height)
{
w_win = width;
h_win = height;
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0, (GLfloat) width / (GLfloat) height, 20000.0, 300000.0);
glMatrixMode(GL_MODELVIEW);
}
void
Atlantis_Animate(void)
{
int i;
for (i = 0; i < NUM_SHARKS; i++) {
SharkPilot(&sharks[i]);
SharkMiss(i);
}
WhalePilot(&dolph);
dolph.phi++;
//glutPostRedisplay();
WhalePilot(&momWhale);
momWhale.phi++;
WhalePilot(&babyWhale);
babyWhale.phi++;
}
void
Atlantis_Key(unsigned char key, int x, int y)
{
switch (key) {
case 't':
Timing = !Timing;
break;
case ' ':
switch(StrMode)
{
case GL_EXTENSIONS:
StrMode = GL_VENDOR;
break;
case GL_VENDOR:
StrMode = GL_RENDERER;
break;
case GL_RENDERER:
StrMode = GL_VERSION;
break;
case GL_VERSION:
StrMode = GL_EXTENSIONS;
break;
}
break;
case 27: /* Esc will quit */
exit(1);
break;
case 's': /* "s" start animation */
moving = GL_TRUE;
//glutIdleFunc(Animate);
break;
case 'a': /* "a" stop animation */
moving = GL_FALSE;
//glutIdleFunc(NULL);
break;
case '.': /* "." will advance frame */
if (!moving) {
Atlantis_Animate();
}
}
}
/*
void Display(void)
{
static float P123[3] = {-448.94, -203.14, 9499.60};
static float P124[3] = {-442.64, -185.20, 9528.07};
static float P125[3] = {-441.07, -148.05, 9528.07};
static float P126[3] = {-443.43, -128.84, 9499.60};
static float P127[3] = {-456.87, -146.78, 9466.67};
static float P128[3] = {-453.68, -183.93, 9466.67};
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
FishTransform(&dolph);
DrawDolphin(&dolph);
glPopMatrix();
glutSwapBuffers();
}
*/
void
Atlantis_Display(void)
{
int i;
static double th[4] = {0.0, 0.0, 0.0, 0.0};
static double t1 = 0.0, t2 = 0.0, t;
char num_str[128];
t1 = t2;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
for (i = 0; i < NUM_SHARKS; i++) {
glPushMatrix();
FishTransform(&sharks[i]);
DrawShark(&sharks[i]);
glPopMatrix();
}
glPushMatrix();
FishTransform(&dolph);
DrawDolphin(&dolph);
glPopMatrix();
glPushMatrix();
FishTransform(&momWhale);
DrawWhale(&momWhale);
glPopMatrix();
glPushMatrix();
FishTransform(&babyWhale);
glScalef(0.45, 0.45, 0.3);
DrawWhale(&babyWhale);
glPopMatrix();
if(Timing)
{
t2 = mtime();
t = t2 - t1;
if(t > 0.0001) t = 1.0 / t;
glDisable(GL_LIGHTING);
//glDisable(GL_DEPTH_TEST);
glColor3f(1.0, 0.0, 0.0);
glMatrixMode (GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0, w_win, 0, h_win, -10.0, 10.0);
glRasterPos2f(5.0, 5.0);
switch(StrMode)
{
case GL_VENDOR:
sprintf(num_str, "%0.2f Hz, %dx%d, VENDOR: ", filter(t, th), w_win, h_win);
DrawStr(num_str);
DrawStr(glGetString(GL_VENDOR));
break;
case GL_RENDERER:
sprintf(num_str, "%0.2f Hz, %dx%d, RENDERER: ", filter(t, th), w_win, h_win);
DrawStr(num_str);
DrawStr(glGetString(GL_RENDERER));
break;
case GL_VERSION:
sprintf(num_str, "%0.2f Hz, %dx%d, VERSION: ", filter(t, th), w_win, h_win);
DrawStr(num_str);
DrawStr(glGetString(GL_VERSION));
break;
case GL_EXTENSIONS:
sprintf(num_str, "%0.2f Hz, %dx%d, EXTENSIONS: ", filter(t, th), w_win, h_win);
DrawStr(num_str);
DrawStr(glGetString(GL_EXTENSIONS));
break;
}
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glEnable(GL_LIGHTING);
//glEnable(GL_DEPTH_TEST);
}
count++;
glutSwapBuffers();
}
/*
void
Visible(int state)
{
if (state == GLUT_VISIBLE) {
if (moving)
glutIdleFunc(Animate);
} else {
if (moving)
glutIdleFunc(NULL);
}
}
void
timingSelect(int value)
{
switch(value)
{
case 1:
StrMode = GL_VENDOR;
break;
case 2:
StrMode = GL_RENDERER;
break;
case 3:
StrMode = GL_VERSION;
break;
case 4:
StrMode = GL_EXTENSIONS;
break;
}
}
void
menuSelect(int value)
{
switch (value) {
case 1:
moving = GL_TRUE;
glutIdleFunc(Animate);
break;
case 2:
moving = GL_FALSE;
glutIdleFunc(NULL);
break;
case 4:
exit(0);
break;
}
}
int
main(int argc, char **argv)
{
GLboolean fullscreen = GL_FALSE;
GLint time_menu;
srand(0);
glutInit(&argc, argv);
if (argc > 1 && !strcmp(argv[1], "-w"))
fullscreen = GL_FALSE;
//glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutInitDisplayString("rgba double depth=24");
if (fullscreen) {
glutGameModeString("1024x768:32");
glutEnterGameMode();
} else {
glutInitWindowSize(320, 240);
glutCreateWindow("Atlantis Timing");
}
Init();
glutDisplayFunc(Display);
glutReshapeFunc(Reshape);
glutKeyboardFunc(Key);
moving = GL_TRUE;
glutIdleFunc(Animate);
glutVisibilityFunc(Visible);
time_menu = glutCreateMenu(timingSelect);
glutAddMenuEntry("GL_VENDOR", 1);
glutAddMenuEntry("GL_RENDERER", 2);
glutAddMenuEntry("GL_VERSION", 3);
glutAddMenuEntry("GL_EXTENSIONS", 4);
glutCreateMenu(menuSelect);
glutAddMenuEntry("Start motion", 1);
glutAddMenuEntry("Stop motion", 2);
glutAddSubMenu("Timing Mode", time_menu);
glutAddMenuEntry("Quit", 4);
//glutAttachMenu(GLUT_RIGHT_BUTTON);
glutAttachMenu(GLUT_RIGHT_BUTTON);
glutMainLoop();
return 0; // ANSI C requires main to return int.
}
*/
\ No newline at end of file
/**
* (c) Copyright 1993, 1994, 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.
*/
#define RAD 57.295
#define RRAD 0.01745
#define NUM_SHARKS 4
#define SHARKSIZE 6000
#define SHARKSPEED 100.0
#define WHALESPEED 250.0
typedef struct _fishRec {
float x, y, z, phi, theta, psi, v;
float xt, yt, zt;
float htail, vtail;
float dtheta;
int spurt, attack;
} fishRec;
extern fishRec sharks[NUM_SHARKS];
extern fishRec momWhale;
extern fishRec babyWhale;
extern fishRec dolph;
extern void FishTransform(fishRec *);
extern void WhalePilot(fishRec *);
extern void SharkPilot(fishRec *);
extern void SharkMiss(int);
extern void DrawWhale(fishRec *);
extern void DrawShark(fishRec *);
extern void DrawDolphin(fishRec *);
/**
* (c) Copyright 1993, 1994, 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.
*/
#include <math.h>
#include <GLUT/glut.h>
#include "atlantis.h"
/* *INDENT-OFF* */
static float N001[3] = {-0.005937 ,-0.101998 ,-0.994767};
static float N002[3] = {0.936780 ,-0.200803 ,0.286569};
static float N003[3] = {-0.233062 ,0.972058 ,0.028007};
static float N005[3] = {0.898117 ,0.360171 ,0.252315};
static float N006[3] = {-0.915437 ,0.348456 ,0.201378};
static float N007[3] = {0.602263 ,-0.777527 ,0.180920};
static float N008[3] = {-0.906912 ,-0.412015 ,0.088061};
static float N012[3] = {0.884408 ,-0.429417 ,-0.182821};
static float N013[3] = {0.921121 ,0.311084 ,-0.234016};
static float N014[3] = {0.382635 ,0.877882 ,-0.287948};
static float N015[3] = {-0.380046 ,0.888166 ,-0.258316};
static float N016[3] = {-0.891515 ,0.392238 ,-0.226607};
static float N017[3] = {-0.901419 ,-0.382002 ,-0.203763};
static float N018[3] = {-0.367225 ,-0.911091 ,-0.187243};
static float N019[3] = {0.339539 ,-0.924846 ,-0.171388};
static float N020[3] = {0.914706 ,-0.378617 ,-0.141290};
static float N021[3] = {0.950662 ,0.262713 ,-0.164994};
static float N022[3] = {0.546359 ,0.801460 ,-0.243218};
static float N023[3] = {-0.315796 ,0.917068 ,-0.243431};
static float N024[3] = {-0.825687 ,0.532277 ,-0.186875};
static float N025[3] = {-0.974763 ,-0.155232 ,-0.160435};
static float N026[3] = {-0.560596 ,-0.816658 ,-0.137119};
static float N027[3] = {0.380210 ,-0.910817 ,-0.160786};
static float N028[3] = {0.923772 ,-0.358322 ,-0.135093};
static float N029[3] = {0.951202 ,0.275053 ,-0.139859};
static float N030[3] = {0.686099 ,0.702548 ,-0.188932};
static float N031[3] = {-0.521865 ,0.826719 ,-0.210220};
static float N032[3] = {-0.923820 ,0.346739 ,-0.162258};
static float N033[3] = {-0.902095 ,-0.409995 ,-0.134646};
static float N034[3] = {-0.509115 ,-0.848498 ,-0.144404};
static float N035[3] = {0.456469 ,-0.880293 ,-0.129305};
static float N036[3] = {0.873401 ,-0.475489 ,-0.105266};
static float N037[3] = {0.970825 ,0.179861 ,-0.158584};
static float N038[3] = {0.675609 ,0.714187 ,-0.183004};
static float N039[3] = {-0.523574 ,0.830212 ,-0.191360};
static float N040[3] = {-0.958895 ,0.230808 ,-0.165071};
static float N041[3] = {-0.918285 ,-0.376803 ,-0.121542};
static float N042[3] = {-0.622467 ,-0.774167 ,-0.114888};
static float N043[3] = {0.404497 ,-0.908807 ,-0.102231};
static float N044[3] = {0.930538 ,-0.365155 ,-0.027588};
static float N045[3] = {0.921920 ,0.374157 ,-0.100345};
static float N046[3] = {0.507346 ,0.860739 ,0.041562};
static float N047[3] = {-0.394646 ,0.918815 ,-0.005730};
static float N048[3] = {-0.925411 ,0.373024 ,-0.066837};
static float N049[3] = {-0.945337 ,-0.322309 ,-0.049551};
static float N050[3] = {-0.660437 ,-0.750557 ,-0.022072};
static float N051[3] = {0.488835 ,-0.871950 ,-0.027261};
static float N052[3] = {0.902599 ,-0.421397 ,0.087969};
static float N053[3] = {0.938636 ,0.322606 ,0.122020};
static float N054[3] = {0.484605 ,0.871078 ,0.079878};
static float N055[3] = {-0.353607 ,0.931559 ,0.084619};
static float N056[3] = {-0.867759 ,0.478564 ,0.134054};
static float N057[3] = {-0.951583 ,-0.296030 ,0.082794};
static float N058[3] = {-0.672355 ,-0.730209 ,0.121384};
static float N059[3] = {0.528336 ,-0.842452 ,0.105525};
static float N060[3] = {0.786913 ,-0.564760 ,0.248627};
static float N062[3] = {0.622098 ,0.765230 ,0.165584};
static float N063[3] = {-0.631711 ,0.767816 ,0.106773};
static float N064[3] = {-0.687886 ,0.606351 ,0.398938};
static float N065[3] = {-0.946327 ,-0.281623 ,0.158598};
static float N066[3] = {-0.509549 ,-0.860437 ,0.002776};
static float N067[3] = {0.462594 ,-0.876692 ,0.131977};
static float N071[3] = {0.000000 ,1.000000 ,0.000000};
static float N077[3] = {-0.880770 ,0.461448 ,0.106351};
static float N078[3] = {-0.880770 ,0.461448 ,0.106351};
static float N079[3] = {-0.880770 ,0.461448 ,0.106351};
static float N080[3] = {-0.880770 ,0.461448 ,0.106351};
static float N081[3] = {-0.571197 ,0.816173 ,0.087152};
static float N082[3] = {-0.880770 ,0.461448 ,0.106351};
static float N083[3] = {-0.571197 ,0.816173 ,0.087152};
static float N084[3] = {-0.571197 ,0.816173 ,0.087152};
static float N085[3] = {-0.880770 ,0.461448 ,0.106351};
static float N086[3] = {-0.571197 ,0.816173 ,0.087152};
static float N087[3] = {-0.880770 ,0.461448 ,0.106351};
static float N088[3] = {-0.880770 ,0.461448 ,0.106351};
static float N089[3] = {-0.880770 ,0.461448 ,0.106351};
static float N090[3] = {-0.880770 ,0.461448 ,0.106351};
static float N091[3] = {0.000000 ,1.000000 ,0.000000};
static float N092[3] = {0.000000 ,1.000000 ,0.000000};
static float N093[3] = {0.000000 ,1.000000 ,0.000000};
static float N094[3] = {1.000000 ,0.000000 ,0.000000};
static float N095[3] = {-1.000000 ,0.000000 ,0.000000};
static float N097[3] = {-0.697296 ,0.702881 ,0.140491};
static float N098[3] = {0.918864 ,0.340821 ,0.198819};
static float N099[3] = {-0.932737 ,0.201195 ,0.299202};
static float N100[3] = {0.029517 ,0.981679 ,0.188244};
static float N102[3] = {0.813521 ,-0.204936 ,0.544229};
static float N110[3] = {-0.781480 ,-0.384779 ,0.491155};
static float N111[3] = {-0.722243 ,0.384927 ,0.574627};
static float N112[3] = {-0.752278 ,0.502679 ,0.425901};
static float N113[3] = {0.547257 ,0.367910 ,0.751766};
static float N114[3] = {0.725949 ,-0.232568 ,0.647233};
static float N115[3] = {-0.747182 ,-0.660786 ,0.071280};
static float N116[3] = {0.931519 ,0.200748 ,0.303270};
static float N117[3] = {-0.828928 ,0.313757 ,0.463071};
static float N118[3] = {0.902554 ,-0.370967 ,0.218587};
static float N119[3] = {-0.879257 ,-0.441851 ,0.177973};
static float N120[3] = {0.642327 ,0.611901 ,0.461512};
static float N121[3] = {0.964817 ,-0.202322 ,0.167910};
static float N122[3] = {0.000000 ,1.000000 ,0.000000};
static float P001[3] = {5.68, -300.95, 1324.70};
static float P002[3] = {338.69, -219.63, 9677.03};
static float P003[3] = {12.18, 474.59, 9138.14};
static float P005[3] = {487.51, 198.05, 9350.78};
static float P006[3] = {-457.61, 68.74, 9427.85};
static float P007[3] = {156.52, -266.72, 10311.68};
static float P008[3] = {-185.56, -266.51, 10310.47};
static float P009[3] = {124.39, -261.46, 1942.34};
static float P010[3] = {-130.05, -261.46, 1946.03};
static float P011[3] = {141.07, -320.11, 1239.38};
static float P012[3] = {156.48, -360.12, 2073.41};
static float P013[3] = {162.00, -175.88, 2064.44};
static float P014[3] = {88.16, -87.72, 2064.02};
static float P015[3] = {-65.21, -96.13, 2064.02};
static float P016[3] = {-156.48, -180.96, 2064.44};
static float P017[3] = {-162.00, -368.93, 2082.39};
static float P018[3] = {-88.16, -439.22, 2082.39};
static float P019[3] = {65.21, -440.32, 2083.39};
static float P020[3] = {246.87, -356.02, 2576.95};
static float P021[3] = {253.17, -111.15, 2567.15};
static float P022[3] = {132.34, 51.41, 2559.84};
static float P023[3] = {-97.88, 40.44, 2567.15};
static float P024[3] = {-222.97, -117.49, 2567.15};
static float P025[3] = {-252.22, -371.53, 2569.92};
static float P026[3] = {-108.44, -518.19, 2586.75};
static float P027[3] = {97.88, -524.79, 2586.75};
static float P028[3] = {370.03, -421.19, 3419.70};
static float P029[3] = {351.15, -16.98, 3423.17};
static float P030[3] = {200.66, 248.46, 3430.37};
static float P031[3] = {-148.42, 235.02, 3417.91};
static float P032[3] = {-360.21, -30.27, 3416.84};
static float P033[3] = {-357.90, -414.89, 3407.04};
static float P034[3] = {-148.88, -631.35, 3409.90};
static float P035[3] = {156.38, -632.59, 3419.70};
static float P036[3] = {462.61, -469.21, 4431.51};
static float P037[3] = {466.60, 102.25, 4434.98};
static float P038[3] = {243.05, 474.34, 4562.02};
static float P039[3] = {-191.23, 474.40, 4554.42};
static float P040[3] = {-476.12, 111.05, 4451.11};
static float P041[3] = {-473.36, -470.74, 4444.78};
static float P042[3] = {-266.95, -748.41, 4447.78};
static float P043[3] = {211.14, -749.91, 4429.73};
static float P044[3] = {680.57, -370.27, 5943.46};
static float P045[3] = {834.01, 363.09, 6360.63};
static float P046[3] = {371.29, 804.51, 6486.26};
static float P047[3] = {-291.43, 797.22, 6494.28};
static float P048[3] = {-784.13, 370.75, 6378.01};
static float P049[3] = {-743.29, -325.82, 5943.46};
static float P050[3] = {-383.24, -804.77, 5943.46};
static float P051[3] = {283.47, -846.09, 5943.46};
static float iP001[3] = {5.68, -300.95, 1324.70};
static float iP009[3] = {124.39, -261.46, 1942.34};
static float iP010[3] = {-130.05, -261.46, 1946.03};
static float iP011[3] = {141.07, -320.11, 1239.38};
static float iP012[3] = {156.48, -360.12, 2073.41};
static float iP013[3] = {162.00, -175.88, 2064.44};
static float iP014[3] = {88.16, -87.72, 2064.02};
static float iP015[3] = {-65.21, -96.13, 2064.02};
static float iP016[3] = {-156.48, -180.96, 2064.44};
static float iP017[3] = {-162.00, -368.93, 2082.39};
static float iP018[3] = {-88.16, -439.22, 2082.39};
static float iP019[3] = {65.21, -440.32, 2083.39};
static float iP020[3] = {246.87, -356.02, 2576.95};
static float iP021[3] = {253.17, -111.15, 2567.15};
static float iP022[3] = {132.34, 51.41, 2559.84};
static float iP023[3] = {-97.88, 40.44, 2567.15};
static float iP024[3] = {-222.97, -117.49, 2567.15};
static float iP025[3] = {-252.22, -371.53, 2569.92};
static float iP026[3] = {-108.44, -518.19, 2586.75};
static float iP027[3] = {97.88, -524.79, 2586.75};
static float iP028[3] = {370.03, -421.19, 3419.70};
static float iP029[3] = {351.15, -16.98, 3423.17};
static float iP030[3] = {200.66, 248.46, 3430.37};
static float iP031[3] = {-148.42, 235.02, 3417.91};
static float iP032[3] = {-360.21, -30.27, 3416.84};
static float iP033[3] = {-357.90, -414.89, 3407.04};
static float iP034[3] = {-148.88, -631.35, 3409.90};
static float iP035[3] = {156.38, -632.59, 3419.70};
static float iP036[3] = {462.61, -469.21, 4431.51};
static float iP037[3] = {466.60, 102.25, 4434.98};
static float iP038[3] = {243.05, 474.34, 4562.02};
static float iP039[3] = {-191.23, 474.40, 4554.42};
static float iP040[3] = {-476.12, 111.05, 4451.11};
static float iP041[3] = {-473.36, -470.74, 4444.78};
static float iP042[3] = {-266.95, -748.41, 4447.78};
static float iP043[3] = {211.14, -749.91, 4429.73};
static float iP044[3] = {680.57, -370.27, 5943.46};
static float iP045[3] = {834.01, 363.09, 6360.63};
static float iP046[3] = {371.29, 804.51, 6486.26};
static float iP047[3] = {-291.43, 797.22, 6494.28};
static float iP048[3] = {-784.13, 370.75, 6378.01};
static float iP049[3] = {-743.29, -325.82, 5943.46};
static float iP050[3] = {-383.24, -804.77, 5943.46};
static float iP051[3] = {283.47, -846.09, 5943.46};
static float P052[3] = {599.09, -300.15, 7894.03};
static float P053[3] = {735.48, 306.26, 7911.92};
static float P054[3] = {246.22, 558.53, 8460.50};
static float P055[3] = {-230.41, 559.84, 8473.23};
static float P056[3] = {-698.66, 320.83, 7902.59};
static float P057[3] = {-643.29, -299.16, 7902.59};
static float P058[3] = {-341.47, -719.30, 7902.59};
static float P059[3] = {252.57, -756.12, 7902.59};
static float P060[3] = {458.39, -265.31, 9355.44};
static float P062[3] = {224.04, 338.75, 9450.30};
static float P063[3] = {-165.71, 341.04, 9462.35};
static float P064[3] = {-298.11, 110.13, 10180.37};
static float P065[3] = {-473.99, -219.71, 9355.44};
static float P066[3] = {-211.97, -479.87, 9355.44};
static float P067[3] = {192.86, -491.45, 9348.73};
static float P068[3] = {-136.29, -319.84, 1228.73};
static float P069[3] = {1111.17, -314.14, 1314.19};
static float P070[3] = {-1167.34, -321.61, 1319.45};
static float P071[3] = {1404.86, -306.66, 1235.45};
static float P072[3] = {-1409.73, -314.14, 1247.66};
static float P073[3] = {1254.01, -296.87, 1544.58};
static float P074[3] = {-1262.09, -291.70, 1504.26};
static float P075[3] = {965.71, -269.26, 1742.65};
static float P076[3] = {-900.97, -276.74, 1726.07};
static float iP068[3] = {-136.29, -319.84, 1228.73};
static float iP069[3] = {1111.17, -314.14, 1314.19};
static float iP070[3] = {-1167.34, -321.61, 1319.45};
static float iP071[3] = {1404.86, -306.66, 1235.45};
static float iP072[3] = {-1409.73, -314.14, 1247.66};
static float iP073[3] = {1254.01, -296.87, 1544.58};
static float iP074[3] = {-1262.09, -291.70, 1504.26};
static float iP075[3] = {965.71, -269.26, 1742.65};
static float iP076[3] = {-900.97, -276.74, 1726.07};
static float P077[3] = {1058.00, -448.81, 8194.66};
static float P078[3] = {-1016.51, -456.43, 8190.62};
static float P079[3] = {-1515.96, -676.45, 7754.93};
static float P080[3] = {1856.75, -830.34, 7296.56};
static float P081[3] = {1472.16, -497.38, 7399.68};
static float P082[3] = {-1775.26, -829.51, 7298.46};
static float P083[3] = {911.09, -252.51, 7510.99};
static float P084[3] = {-1451.94, -495.62, 7384.30};
static float P085[3] = {1598.75, -669.26, 7769.90};
static float P086[3] = {-836.53, -250.08, 7463.25};
static float P087[3] = {722.87, -158.18, 8006.41};
static float P088[3] = {-688.86, -162.28, 7993.89};
static float P089[3] = {-626.92, -185.30, 8364.98};
static float P090[3] = {647.72, -189.46, 8354.99};
static float P091[3] = {0.00, 835.01, 5555.62};
static float P092[3] = {0.00, 1350.18, 5220.86};
static float P093[3] = {0.00, 1422.94, 5285.27};
static float P094[3] = {0.00, 1296.75, 5650.19};
static float P095[3] = {0.00, 795.63, 6493.88};
static float iP091[3] = {0.00, 835.01, 5555.62};
static float iP092[3] = {0.00, 1350.18, 5220.86};
static float iP093[3] = {0.00, 1422.94, 5285.27};
static float iP094[3] = {0.00, 1296.75, 5650.19};
static float iP095[3] = {0.00, 795.63, 6493.88};
static float P097[3] = {-194.91, -357.14, 10313.32};
static float P098[3] = {135.35, -357.66, 10307.94};
static float iP097[3] = {-194.91, -357.14, 10313.32};
static float iP098[3] = {135.35, -357.66, 10307.94};
static float P099[3] = {-380.53, -221.14, 9677.98};
static float P100[3] = {0.00, 412.99, 9629.33};
static float P102[3] = {59.51, -412.55, 10677.58};
static float iP102[3] = {59.51, -412.55, 10677.58};
static float P103[3] = {6.50, 484.74, 9009.94};
static float P105[3] = {-41.86, 476.51, 9078.17};
static float P108[3] = {49.20, 476.83, 9078.24};
static float P110[3] = {-187.62, -410.04, 10674.12};
static float iP110[3] = {-187.62, -410.04, 10674.12};
static float P111[3] = {-184.25, -318.70, 10723.88};
static float iP111[3] = {-184.25, -318.70, 10723.88};
static float P112[3] = {-179.61, -142.81, 10670.26};
static float P113[3] = {57.43, -147.94, 10675.26};
static float P114[3] = {54.06, -218.90, 10712.44};
static float P115[3] = {-186.35, -212.09, 10713.76};
static float P116[3] = {205.90, -84.61, 10275.97};
static float P117[3] = {-230.96, -83.26, 10280.09};
static float iP118[3] = {216.78, -509.17, 10098.94};
static float iP119[3] = {-313.21, -510.79, 10102.62};
static float P118[3] = {216.78, -509.17, 10098.94};
static float P119[3] = {-313.21, -510.79, 10102.62};
static float P120[3] = {217.95, 96.34, 10161.62};
static float P121[3] = {71.99, -319.74, 10717.70};
static float iP121[3] = {71.99, -319.74, 10717.70};
static float P122[3] = {0.00, 602.74, 5375.84};
static float iP122[3] = {0.00, 602.74, 5375.84};
static float P123[3] = {-448.94, -203.14, 9499.60};
static float P124[3] = {-442.64, -185.20, 9528.07};
static float P125[3] = {-441.07, -148.05, 9528.07};
static float P126[3] = {-443.43, -128.84, 9499.60};
static float P127[3] = {-456.87, -146.78, 9466.67};
static float P128[3] = {-453.68, -183.93, 9466.67};
static float P129[3] = {428.43, -124.08, 9503.03};
static float P130[3] = {419.73, -142.14, 9534.56};
static float P131[3] = {419.92, -179.96, 9534.56};
static float P132[3] = {431.20, -199.73, 9505.26};
static float P133[3] = {442.28, -181.67, 9475.96};
static float P134[3] = {442.08, -143.84, 9475.96};
/* *INDENT-ON* */
void
Dolphin001(void)
{
glNormal3fv(N071);
glBegin(GL_POLYGON);
glVertex3fv(P001);
glVertex3fv(P068);
glVertex3fv(P010);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P068);
glVertex3fv(P076);
glVertex3fv(P010);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P068);
glVertex3fv(P070);
glVertex3fv(P076);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P076);
glVertex3fv(P070);
glVertex3fv(P074);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P070);
glVertex3fv(P072);
glVertex3fv(P074);
glEnd();
glNormal3fv(N119);
glBegin(GL_POLYGON);
glVertex3fv(P072);
glVertex3fv(P070);
glVertex3fv(P074);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P074);
glVertex3fv(P070);
glVertex3fv(P076);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P070);
glVertex3fv(P068);
glVertex3fv(P076);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P076);
glVertex3fv(P068);
glVertex3fv(P010);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P068);
glVertex3fv(P001);
glVertex3fv(P010);
glEnd();
}
void
Dolphin002(void)
{
glNormal3fv(N071);
glBegin(GL_POLYGON);
glVertex3fv(P011);
glVertex3fv(P001);
glVertex3fv(P009);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P075);
glVertex3fv(P011);
glVertex3fv(P009);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P069);
glVertex3fv(P011);
glVertex3fv(P075);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P069);
glVertex3fv(P075);
glVertex3fv(P073);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P071);
glVertex3fv(P069);
glVertex3fv(P073);
glEnd();
glNormal3fv(N119);
glBegin(GL_POLYGON);
glVertex3fv(P001);
glVertex3fv(P011);
glVertex3fv(P009);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P009);
glVertex3fv(P011);
glVertex3fv(P075);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P011);
glVertex3fv(P069);
glVertex3fv(P075);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P069);
glVertex3fv(P073);
glVertex3fv(P075);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P069);
glVertex3fv(P071);
glVertex3fv(P073);
glEnd();
}
void
Dolphin003(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N018);
glVertex3fv(P018);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N019);
glVertex3fv(P019);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N019);
glVertex3fv(P019);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N012);
glVertex3fv(P012);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N017);
glVertex3fv(P017);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N018);
glVertex3fv(P018);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N017);
glVertex3fv(P017);
glNormal3fv(N016);
glVertex3fv(P016);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N013);
glVertex3fv(P013);
glNormal3fv(N012);
glVertex3fv(P012);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N016);
glVertex3fv(P016);
glNormal3fv(N015);
glVertex3fv(P015);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N014);
glVertex3fv(P014);
glNormal3fv(N013);
glVertex3fv(P013);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N015);
glVertex3fv(P015);
glNormal3fv(N014);
glVertex3fv(P014);
glEnd();
}
void
Dolphin004(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N014);
glVertex3fv(P014);
glNormal3fv(N015);
glVertex3fv(P015);
glNormal3fv(N023);
glVertex3fv(P023);
glNormal3fv(N022);
glVertex3fv(P022);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N015);
glVertex3fv(P015);
glNormal3fv(N016);
glVertex3fv(P016);
glNormal3fv(N024);
glVertex3fv(P024);
glNormal3fv(N023);
glVertex3fv(P023);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N016);
glVertex3fv(P016);
glNormal3fv(N017);
glVertex3fv(P017);
glNormal3fv(N025);
glVertex3fv(P025);
glNormal3fv(N024);
glVertex3fv(P024);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N017);
glVertex3fv(P017);
glNormal3fv(N018);
glVertex3fv(P018);
glNormal3fv(N026);
glVertex3fv(P026);
glNormal3fv(N025);
glVertex3fv(P025);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N013);
glVertex3fv(P013);
glNormal3fv(N014);
glVertex3fv(P014);
glNormal3fv(N022);
glVertex3fv(P022);
glNormal3fv(N021);
glVertex3fv(P021);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N012);
glVertex3fv(P012);
glNormal3fv(N013);
glVertex3fv(P013);
glNormal3fv(N021);
glVertex3fv(P021);
glNormal3fv(N020);
glVertex3fv(P020);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N018);
glVertex3fv(P018);
glNormal3fv(N019);
glVertex3fv(P019);
glNormal3fv(N027);
glVertex3fv(P027);
glNormal3fv(N026);
glVertex3fv(P026);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N019);
glVertex3fv(P019);
glNormal3fv(N012);
glVertex3fv(P012);
glNormal3fv(N020);
glVertex3fv(P020);
glNormal3fv(N027);
glVertex3fv(P027);
glEnd();
}
void
Dolphin005(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N022);
glVertex3fv(P022);
glNormal3fv(N023);
glVertex3fv(P023);
glNormal3fv(N031);
glVertex3fv(P031);
glNormal3fv(N030);
glVertex3fv(P030);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N021);
glVertex3fv(P021);
glNormal3fv(N022);
glVertex3fv(P022);
glNormal3fv(N030);
glVertex3fv(P030);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N021);
glVertex3fv(P021);
glNormal3fv(N030);
glVertex3fv(P030);
glNormal3fv(N029);
glVertex3fv(P029);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N023);
glVertex3fv(P023);
glNormal3fv(N024);
glVertex3fv(P024);
glNormal3fv(N031);
glVertex3fv(P031);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N024);
glVertex3fv(P024);
glNormal3fv(N032);
glVertex3fv(P032);
glNormal3fv(N031);
glVertex3fv(P031);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N024);
glVertex3fv(P024);
glNormal3fv(N025);
glVertex3fv(P025);
glNormal3fv(N032);
glVertex3fv(P032);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N025);
glVertex3fv(P025);
glNormal3fv(N033);
glVertex3fv(P033);
glNormal3fv(N032);
glVertex3fv(P032);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N020);
glVertex3fv(P020);
glNormal3fv(N021);
glVertex3fv(P021);
glNormal3fv(N029);
glVertex3fv(P029);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N020);
glVertex3fv(P020);
glNormal3fv(N029);
glVertex3fv(P029);
glNormal3fv(N028);
glVertex3fv(P028);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N027);
glVertex3fv(P027);
glNormal3fv(N020);
glVertex3fv(P020);
glNormal3fv(N028);
glVertex3fv(P028);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N027);
glVertex3fv(P027);
glNormal3fv(N028);
glVertex3fv(P028);
glNormal3fv(N035);
glVertex3fv(P035);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N025);
glVertex3fv(P025);
glNormal3fv(N026);
glVertex3fv(P026);
glNormal3fv(N033);
glVertex3fv(P033);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N033);
glVertex3fv(P033);
glNormal3fv(N026);
glVertex3fv(P026);
glNormal3fv(N034);
glVertex3fv(P034);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N026);
glVertex3fv(P026);
glNormal3fv(N027);
glVertex3fv(P027);
glNormal3fv(N035);
glVertex3fv(P035);
glNormal3fv(N034);
glVertex3fv(P034);
glEnd();
}
void
Dolphin006(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N092);
glVertex3fv(P092);
glNormal3fv(N093);
glVertex3fv(P093);
glNormal3fv(N094);
glVertex3fv(P094);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N093);
glVertex3fv(P093);
glNormal3fv(N092);
glVertex3fv(P092);
glNormal3fv(N094);
glVertex3fv(P094);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N092);
glVertex3fv(P092);
glNormal3fv(N091);
glVertex3fv(P091);
glNormal3fv(N095);
glVertex3fv(P095);
glNormal3fv(N094);
glVertex3fv(P094);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N091);
glVertex3fv(P091);
glNormal3fv(N092);
glVertex3fv(P092);
glNormal3fv(N094);
glVertex3fv(P094);
glNormal3fv(N095);
glVertex3fv(P095);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N122);
glVertex3fv(P122);
glNormal3fv(N095);
glVertex3fv(P095);
glNormal3fv(N091);
glVertex3fv(P091);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N122);
glVertex3fv(P122);
glNormal3fv(N091);
glVertex3fv(P091);
glNormal3fv(N095);
glVertex3fv(P095);
glEnd();
}
void
Dolphin007(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N030);
glVertex3fv(P030);
glNormal3fv(N031);
glVertex3fv(P031);
glNormal3fv(N039);
glVertex3fv(P039);
glNormal3fv(N038);
glVertex3fv(P038);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N029);
glVertex3fv(P029);
glNormal3fv(N030);
glVertex3fv(P030);
glNormal3fv(N038);
glVertex3fv(P038);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N029);
glVertex3fv(P029);
glNormal3fv(N038);
glVertex3fv(P038);
glNormal3fv(N037);
glVertex3fv(P037);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N028);
glVertex3fv(P028);
glNormal3fv(N029);
glVertex3fv(P029);
glNormal3fv(N037);
glVertex3fv(P037);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N028);
glVertex3fv(P028);
glNormal3fv(N037);
glVertex3fv(P037);
glNormal3fv(N036);
glVertex3fv(P036);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N035);
glVertex3fv(P035);
glNormal3fv(N028);
glVertex3fv(P028);
glNormal3fv(N036);
glVertex3fv(P036);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N035);
glVertex3fv(P035);
glNormal3fv(N036);
glVertex3fv(P036);
glNormal3fv(N043);
glVertex3fv(P043);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N034);
glVertex3fv(P034);
glNormal3fv(N035);
glVertex3fv(P035);
glNormal3fv(N043);
glVertex3fv(P043);
glNormal3fv(N042);
glVertex3fv(P042);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N033);
glVertex3fv(P033);
glNormal3fv(N034);
glVertex3fv(P034);
glNormal3fv(N042);
glVertex3fv(P042);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N033);
glVertex3fv(P033);
glNormal3fv(N042);
glVertex3fv(P042);
glNormal3fv(N041);
glVertex3fv(P041);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N031);
glVertex3fv(P031);
glNormal3fv(N032);
glVertex3fv(P032);
glNormal3fv(N039);
glVertex3fv(P039);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N039);
glVertex3fv(P039);
glNormal3fv(N032);
glVertex3fv(P032);
glNormal3fv(N040);
glVertex3fv(P040);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N032);
glVertex3fv(P032);
glNormal3fv(N033);
glVertex3fv(P033);
glNormal3fv(N040);
glVertex3fv(P040);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N040);
glVertex3fv(P040);
glNormal3fv(N033);
glVertex3fv(P033);
glNormal3fv(N041);
glVertex3fv(P041);
glEnd();
}
void
Dolphin008(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N042);
glVertex3fv(P042);
glNormal3fv(N043);
glVertex3fv(P043);
glNormal3fv(N051);
glVertex3fv(P051);
glNormal3fv(N050);
glVertex3fv(P050);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N043);
glVertex3fv(P043);
glNormal3fv(N036);
glVertex3fv(P036);
glNormal3fv(N051);
glVertex3fv(P051);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N051);
glVertex3fv(P051);
glNormal3fv(N036);
glVertex3fv(P036);
glNormal3fv(N044);
glVertex3fv(P044);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N041);
glVertex3fv(P041);
glNormal3fv(N042);
glVertex3fv(P042);
glNormal3fv(N050);
glVertex3fv(P050);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N041);
glVertex3fv(P041);
glNormal3fv(N050);
glVertex3fv(P050);
glNormal3fv(N049);
glVertex3fv(P049);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N036);
glVertex3fv(P036);
glNormal3fv(N037);
glVertex3fv(P037);
glNormal3fv(N044);
glVertex3fv(P044);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N044);
glVertex3fv(P044);
glNormal3fv(N037);
glVertex3fv(P037);
glNormal3fv(N045);
glVertex3fv(P045);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N040);
glVertex3fv(P040);
glNormal3fv(N041);
glVertex3fv(P041);
glNormal3fv(N049);
glVertex3fv(P049);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N040);
glVertex3fv(P040);
glNormal3fv(N049);
glVertex3fv(P049);
glNormal3fv(N048);
glVertex3fv(P048);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N039);
glVertex3fv(P039);
glNormal3fv(N040);
glVertex3fv(P040);
glNormal3fv(N048);
glVertex3fv(P048);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N039);
glVertex3fv(P039);
glNormal3fv(N048);
glVertex3fv(P048);
glNormal3fv(N047);
glVertex3fv(P047);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N037);
glVertex3fv(P037);
glNormal3fv(N038);
glVertex3fv(P038);
glNormal3fv(N045);
glVertex3fv(P045);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N038);
glVertex3fv(P038);
glNormal3fv(N046);
glVertex3fv(P046);
glNormal3fv(N045);
glVertex3fv(P045);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N038);
glVertex3fv(P038);
glNormal3fv(N039);
glVertex3fv(P039);
glNormal3fv(N047);
glVertex3fv(P047);
glNormal3fv(N046);
glVertex3fv(P046);
glEnd();
}
void
Dolphin009(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N050);
glVertex3fv(P050);
glNormal3fv(N051);
glVertex3fv(P051);
glNormal3fv(N059);
glVertex3fv(P059);
glNormal3fv(N058);
glVertex3fv(P058);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N051);
glVertex3fv(P051);
glNormal3fv(N044);
glVertex3fv(P044);
glNormal3fv(N059);
glVertex3fv(P059);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N059);
glVertex3fv(P059);
glNormal3fv(N044);
glVertex3fv(P044);
glNormal3fv(N052);
glVertex3fv(P052);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N044);
glVertex3fv(P044);
glNormal3fv(N045);
glVertex3fv(P045);
glNormal3fv(N053);
glVertex3fv(P053);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N044);
glVertex3fv(P044);
glNormal3fv(N053);
glVertex3fv(P053);
glNormal3fv(N052);
glVertex3fv(P052);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N049);
glVertex3fv(P049);
glNormal3fv(N050);
glVertex3fv(P050);
glNormal3fv(N058);
glVertex3fv(P058);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N049);
glVertex3fv(P049);
glNormal3fv(N058);
glVertex3fv(P058);
glNormal3fv(N057);
glVertex3fv(P057);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N048);
glVertex3fv(P048);
glNormal3fv(N049);
glVertex3fv(P049);
glNormal3fv(N057);
glVertex3fv(P057);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N048);
glVertex3fv(P048);
glNormal3fv(N057);
glVertex3fv(P057);
glNormal3fv(N056);
glVertex3fv(P056);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N047);
glVertex3fv(P047);
glNormal3fv(N048);
glVertex3fv(P048);
glNormal3fv(N056);
glVertex3fv(P056);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N047);
glVertex3fv(P047);
glNormal3fv(N056);
glVertex3fv(P056);
glNormal3fv(N055);
glVertex3fv(P055);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N045);
glVertex3fv(P045);
glNormal3fv(N046);
glVertex3fv(P046);
glNormal3fv(N053);
glVertex3fv(P053);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N046);
glVertex3fv(P046);
glNormal3fv(N054);
glVertex3fv(P054);
glNormal3fv(N053);
glVertex3fv(P053);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N046);
glVertex3fv(P046);
glNormal3fv(N047);
glVertex3fv(P047);
glNormal3fv(N055);
glVertex3fv(P055);
glNormal3fv(N054);
glVertex3fv(P054);
glEnd();
}
void
Dolphin010(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N080);
glVertex3fv(P080);
glNormal3fv(N081);
glVertex3fv(P081);
glNormal3fv(N085);
glVertex3fv(P085);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N081);
glVertex3fv(P081);
glNormal3fv(N083);
glVertex3fv(P083);
glNormal3fv(N085);
glVertex3fv(P085);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N085);
glVertex3fv(P085);
glNormal3fv(N083);
glVertex3fv(P083);
glNormal3fv(N077);
glVertex3fv(P077);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N083);
glVertex3fv(P083);
glNormal3fv(N087);
glVertex3fv(P087);
glNormal3fv(N077);
glVertex3fv(P077);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N077);
glVertex3fv(P077);
glNormal3fv(N087);
glVertex3fv(P087);
glNormal3fv(N090);
glVertex3fv(P090);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N081);
glVertex3fv(P081);
glNormal3fv(N080);
glVertex3fv(P080);
glNormal3fv(N085);
glVertex3fv(P085);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N083);
glVertex3fv(P083);
glNormal3fv(N081);
glVertex3fv(P081);
glNormal3fv(N085);
glVertex3fv(P085);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N083);
glVertex3fv(P083);
glNormal3fv(N085);
glVertex3fv(P085);
glNormal3fv(N077);
glVertex3fv(P077);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N087);
glVertex3fv(P087);
glNormal3fv(N083);
glVertex3fv(P083);
glNormal3fv(N077);
glVertex3fv(P077);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N087);
glVertex3fv(P087);
glNormal3fv(N077);
glVertex3fv(P077);
glNormal3fv(N090);
glVertex3fv(P090);
glEnd();
}
void
Dolphin011(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N082);
glVertex3fv(P082);
glNormal3fv(N084);
glVertex3fv(P084);
glNormal3fv(N079);
glVertex3fv(P079);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N084);
glVertex3fv(P084);
glNormal3fv(N086);
glVertex3fv(P086);
glNormal3fv(N079);
glVertex3fv(P079);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N079);
glVertex3fv(P079);
glNormal3fv(N086);
glVertex3fv(P086);
glNormal3fv(N078);
glVertex3fv(P078);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N086);
glVertex3fv(P086);
glNormal3fv(N088);
glVertex3fv(P088);
glNormal3fv(N078);
glVertex3fv(P078);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N078);
glVertex3fv(P078);
glNormal3fv(N088);
glVertex3fv(P088);
glNormal3fv(N089);
glVertex3fv(P089);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N088);
glVertex3fv(P088);
glNormal3fv(N086);
glVertex3fv(P086);
glNormal3fv(N089);
glVertex3fv(P089);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N089);
glVertex3fv(P089);
glNormal3fv(N086);
glVertex3fv(P086);
glNormal3fv(N078);
glVertex3fv(P078);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N086);
glVertex3fv(P086);
glNormal3fv(N084);
glVertex3fv(P084);
glNormal3fv(N078);
glVertex3fv(P078);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N078);
glVertex3fv(P078);
glNormal3fv(N084);
glVertex3fv(P084);
glNormal3fv(N079);
glVertex3fv(P079);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N084);
glVertex3fv(P084);
glNormal3fv(N082);
glVertex3fv(P082);
glNormal3fv(N079);
glVertex3fv(P079);
glEnd();
}
void
Dolphin012(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N058);
glVertex3fv(P058);
glNormal3fv(N059);
glVertex3fv(P059);
glNormal3fv(N067);
glVertex3fv(P067);
glNormal3fv(N066);
glVertex3fv(P066);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N059);
glVertex3fv(P059);
glNormal3fv(N052);
glVertex3fv(P052);
glNormal3fv(N060);
glVertex3fv(P060);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N059);
glVertex3fv(P059);
glNormal3fv(N060);
glVertex3fv(P060);
glNormal3fv(N067);
glVertex3fv(P067);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N058);
glVertex3fv(P058);
glNormal3fv(N066);
glVertex3fv(P066);
glNormal3fv(N065);
glVertex3fv(P065);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N058);
glVertex3fv(P058);
glNormal3fv(N065);
glVertex3fv(P065);
glNormal3fv(N057);
glVertex3fv(P057);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N056);
glVertex3fv(P056);
glNormal3fv(N057);
glVertex3fv(P057);
glNormal3fv(N065);
glVertex3fv(P065);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N056);
glVertex3fv(P056);
glNormal3fv(N065);
glVertex3fv(P065);
glNormal3fv(N006);
glVertex3fv(P006);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N056);
glVertex3fv(P056);
glNormal3fv(N006);
glVertex3fv(P006);
glNormal3fv(N063);
glVertex3fv(P063);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N056);
glVertex3fv(P056);
glNormal3fv(N063);
glVertex3fv(P063);
glNormal3fv(N055);
glVertex3fv(P055);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N054);
glVertex3fv(P054);
glNormal3fv(N062);
glVertex3fv(P062);
glNormal3fv(N005);
glVertex3fv(P005);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N054);
glVertex3fv(P054);
glNormal3fv(N005);
glVertex3fv(P005);
glNormal3fv(N053);
glVertex3fv(P053);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N052);
glVertex3fv(P052);
glNormal3fv(N053);
glVertex3fv(P053);
glNormal3fv(N005);
glVertex3fv(P005);
glNormal3fv(N060);
glVertex3fv(P060);
glEnd();
}
void
Dolphin013(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N116);
glVertex3fv(P116);
glNormal3fv(N117);
glVertex3fv(P117);
glNormal3fv(N112);
glVertex3fv(P112);
glNormal3fv(N113);
glVertex3fv(P113);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N114);
glVertex3fv(P114);
glNormal3fv(N113);
glVertex3fv(P113);
glNormal3fv(N112);
glVertex3fv(P112);
glNormal3fv(N115);
glVertex3fv(P115);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N114);
glVertex3fv(P114);
glNormal3fv(N116);
glVertex3fv(P116);
glNormal3fv(N113);
glVertex3fv(P113);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N114);
glVertex3fv(P114);
glNormal3fv(N007);
glVertex3fv(P007);
glNormal3fv(N116);
glVertex3fv(P116);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N007);
glVertex3fv(P007);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N116);
glVertex3fv(P116);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P002);
glVertex3fv(P007);
glVertex3fv(P008);
glVertex3fv(P099);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P007);
glVertex3fv(P114);
glVertex3fv(P115);
glVertex3fv(P008);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N117);
glVertex3fv(P117);
glNormal3fv(N099);
glVertex3fv(P099);
glNormal3fv(N008);
glVertex3fv(P008);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N117);
glVertex3fv(P117);
glNormal3fv(N008);
glVertex3fv(P008);
glNormal3fv(N112);
glVertex3fv(P112);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N112);
glVertex3fv(P112);
glNormal3fv(N008);
glVertex3fv(P008);
glNormal3fv(N115);
glVertex3fv(P115);
glEnd();
}
void
Dolphin014(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N111);
glVertex3fv(P111);
glNormal3fv(N110);
glVertex3fv(P110);
glNormal3fv(N102);
glVertex3fv(P102);
glNormal3fv(N121);
glVertex3fv(P121);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N111);
glVertex3fv(P111);
glNormal3fv(N097);
glVertex3fv(P097);
glNormal3fv(N110);
glVertex3fv(P110);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N097);
glVertex3fv(P097);
glNormal3fv(N119);
glVertex3fv(P119);
glNormal3fv(N110);
glVertex3fv(P110);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N097);
glVertex3fv(P097);
glNormal3fv(N099);
glVertex3fv(P099);
glNormal3fv(N119);
glVertex3fv(P119);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N099);
glVertex3fv(P099);
glNormal3fv(N065);
glVertex3fv(P065);
glNormal3fv(N119);
glVertex3fv(P119);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N065);
glVertex3fv(P065);
glNormal3fv(N066);
glVertex3fv(P066);
glNormal3fv(N119);
glVertex3fv(P119);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P098);
glVertex3fv(P097);
glVertex3fv(P111);
glVertex3fv(P121);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P002);
glVertex3fv(P099);
glVertex3fv(P097);
glVertex3fv(P098);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N110);
glVertex3fv(P110);
glNormal3fv(N119);
glVertex3fv(P119);
glNormal3fv(N118);
glVertex3fv(P118);
glNormal3fv(N102);
glVertex3fv(P102);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N119);
glVertex3fv(P119);
glNormal3fv(N066);
glVertex3fv(P066);
glNormal3fv(N067);
glVertex3fv(P067);
glNormal3fv(N118);
glVertex3fv(P118);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N067);
glVertex3fv(P067);
glNormal3fv(N060);
glVertex3fv(P060);
glNormal3fv(N002);
glVertex3fv(P002);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N067);
glVertex3fv(P067);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N118);
glVertex3fv(P118);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N118);
glVertex3fv(P118);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N098);
glVertex3fv(P098);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N118);
glVertex3fv(P118);
glNormal3fv(N098);
glVertex3fv(P098);
glNormal3fv(N102);
glVertex3fv(P102);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N102);
glVertex3fv(P102);
glNormal3fv(N098);
glVertex3fv(P098);
glNormal3fv(N121);
glVertex3fv(P121);
glEnd();
}
void
Dolphin015(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N055);
glVertex3fv(P055);
glNormal3fv(N003);
glVertex3fv(P003);
glNormal3fv(N054);
glVertex3fv(P054);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N003);
glVertex3fv(P003);
glNormal3fv(N055);
glVertex3fv(P055);
glNormal3fv(N063);
glVertex3fv(P063);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N003);
glVertex3fv(P003);
glNormal3fv(N063);
glVertex3fv(P063);
glNormal3fv(N100);
glVertex3fv(P100);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N003);
glVertex3fv(P003);
glNormal3fv(N100);
glVertex3fv(P100);
glNormal3fv(N054);
glVertex3fv(P054);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N054);
glVertex3fv(P054);
glNormal3fv(N100);
glVertex3fv(P100);
glNormal3fv(N062);
glVertex3fv(P062);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N100);
glVertex3fv(P100);
glNormal3fv(N064);
glVertex3fv(P064);
glNormal3fv(N120);
glVertex3fv(P120);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N100);
glVertex3fv(P100);
glNormal3fv(N063);
glVertex3fv(P063);
glNormal3fv(N064);
glVertex3fv(P064);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N063);
glVertex3fv(P063);
glNormal3fv(N006);
glVertex3fv(P006);
glNormal3fv(N064);
glVertex3fv(P064);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N064);
glVertex3fv(P064);
glNormal3fv(N006);
glVertex3fv(P006);
glNormal3fv(N099);
glVertex3fv(P099);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N064);
glVertex3fv(P064);
glNormal3fv(N099);
glVertex3fv(P099);
glNormal3fv(N117);
glVertex3fv(P117);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N120);
glVertex3fv(P120);
glNormal3fv(N064);
glVertex3fv(P064);
glNormal3fv(N117);
glVertex3fv(P117);
glNormal3fv(N116);
glVertex3fv(P116);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N006);
glVertex3fv(P006);
glNormal3fv(N065);
glVertex3fv(P065);
glNormal3fv(N099);
glVertex3fv(P099);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N062);
glVertex3fv(P062);
glNormal3fv(N100);
glVertex3fv(P100);
glNormal3fv(N120);
glVertex3fv(P120);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N005);
glVertex3fv(P005);
glNormal3fv(N062);
glVertex3fv(P062);
glNormal3fv(N120);
glVertex3fv(P120);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N005);
glVertex3fv(P005);
glNormal3fv(N120);
glVertex3fv(P120);
glNormal3fv(N002);
glVertex3fv(P002);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N120);
glVertex3fv(P120);
glNormal3fv(N116);
glVertex3fv(P116);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N060);
glVertex3fv(P060);
glNormal3fv(N005);
glVertex3fv(P005);
glNormal3fv(N002);
glVertex3fv(P002);
glEnd();
}
void
Dolphin016(void)
{
glDisable(GL_DEPTH_TEST);
glBegin(GL_POLYGON);
glVertex3fv(P123);
glVertex3fv(P124);
glVertex3fv(P125);
glVertex3fv(P126);
glVertex3fv(P127);
glVertex3fv(P128);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P129);
glVertex3fv(P130);
glVertex3fv(P131);
glVertex3fv(P132);
glVertex3fv(P133);
glVertex3fv(P134);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P103);
glVertex3fv(P105);
glVertex3fv(P108);
glEnd();
glEnable(GL_DEPTH_TEST);
}
void
DrawDolphin(fishRec * fish)
{
float seg0, seg1, seg2, seg3, seg4, seg5, seg6, seg7;
float pitch, thrash, chomp;
fish->htail = (int) (fish->htail - (int) (10.0 * fish->v)) % 360;
thrash = 70.0 * fish->v;
seg0 = 1.0 * thrash * sin((fish->htail) * RRAD);
seg3 = 1.0 * thrash * sin((fish->htail) * RRAD);
seg1 = 2.0 * thrash * sin((fish->htail + 4.0) * RRAD);
seg2 = 3.0 * thrash * sin((fish->htail + 6.0) * RRAD);
seg4 = 4.0 * thrash * sin((fish->htail + 10.0) * RRAD);
seg5 = 4.5 * thrash * sin((fish->htail + 15.0) * RRAD);
seg6 = 5.0 * thrash * sin((fish->htail + 20.0) * RRAD);
seg7 = 6.0 * thrash * sin((fish->htail + 30.0) * RRAD);
pitch = fish->v * sin((fish->htail + 180.0) * RRAD);
if (fish->v > 2.0) {
chomp = -(fish->v - 2.0) * 200.0;
}
chomp = 100.0;
P012[1] = iP012[1] + seg5;
P013[1] = iP013[1] + seg5;
P014[1] = iP014[1] + seg5;
P015[1] = iP015[1] + seg5;
P016[1] = iP016[1] + seg5;
P017[1] = iP017[1] + seg5;
P018[1] = iP018[1] + seg5;
P019[1] = iP019[1] + seg5;
P020[1] = iP020[1] + seg4;
P021[1] = iP021[1] + seg4;
P022[1] = iP022[1] + seg4;
P023[1] = iP023[1] + seg4;
P024[1] = iP024[1] + seg4;
P025[1] = iP025[1] + seg4;
P026[1] = iP026[1] + seg4;
P027[1] = iP027[1] + seg4;
P028[1] = iP028[1] + seg2;
P029[1] = iP029[1] + seg2;
P030[1] = iP030[1] + seg2;
P031[1] = iP031[1] + seg2;
P032[1] = iP032[1] + seg2;
P033[1] = iP033[1] + seg2;
P034[1] = iP034[1] + seg2;
P035[1] = iP035[1] + seg2;
P036[1] = iP036[1] + seg1;
P037[1] = iP037[1] + seg1;
P038[1] = iP038[1] + seg1;
P039[1] = iP039[1] + seg1;
P040[1] = iP040[1] + seg1;
P041[1] = iP041[1] + seg1;
P042[1] = iP042[1] + seg1;
P043[1] = iP043[1] + seg1;
P044[1] = iP044[1] + seg0;
P045[1] = iP045[1] + seg0;
P046[1] = iP046[1] + seg0;
P047[1] = iP047[1] + seg0;
P048[1] = iP048[1] + seg0;
P049[1] = iP049[1] + seg0;
P050[1] = iP050[1] + seg0;
P051[1] = iP051[1] + seg0;
P009[1] = iP009[1] + seg6;
P010[1] = iP010[1] + seg6;
P075[1] = iP075[1] + seg6;
P076[1] = iP076[1] + seg6;
P001[1] = iP001[1] + seg7;
P011[1] = iP011[1] + seg7;
P068[1] = iP068[1] + seg7;
P069[1] = iP069[1] + seg7;
P070[1] = iP070[1] + seg7;
P071[1] = iP071[1] + seg7;
P072[1] = iP072[1] + seg7;
P073[1] = iP073[1] + seg7;
P074[1] = iP074[1] + seg7;
P091[1] = iP091[1] + seg3;
P092[1] = iP092[1] + seg3;
P093[1] = iP093[1] + seg3;
P094[1] = iP094[1] + seg3;
P095[1] = iP095[1] + seg3;
P122[1] = iP122[1] + seg3 * 1.5;
P097[1] = iP097[1] + chomp;
P098[1] = iP098[1] + chomp;
P102[1] = iP102[1] + chomp;
P110[1] = iP110[1] + chomp;
P111[1] = iP111[1] + chomp;
P121[1] = iP121[1] + chomp;
P118[1] = iP118[1] + chomp;
P119[1] = iP119[1] + chomp;
glPushMatrix();
glRotatef(pitch, 1.0, 0.0, 0.0);
glTranslatef(0.0, 0.0, 7000.0);
glRotatef(180.0, 0.0, 1.0, 0.0);
glEnable(GL_CULL_FACE);
Dolphin014();
Dolphin010();
Dolphin009();
Dolphin012();
Dolphin013();
Dolphin006();
Dolphin002();
Dolphin001();
Dolphin003();
Dolphin015();
Dolphin004();
Dolphin005();
Dolphin007();
Dolphin008();
Dolphin011();
Dolphin016();
glDisable(GL_CULL_FACE);
glPopMatrix();
}
/**
* (c) Copyright 1993, 1994, 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.
*/
#include <GLUT/glut.h>
#include <math.h>
#include "atlantis.h"
/* *INDENT-OFF* */
static float N002[3] = {0.000077 ,-0.020611 ,0.999788};
static float N003[3] = {0.961425 ,0.258729 ,-0.093390};
static float N004[3] = {0.510811 ,-0.769633 ,-0.383063};
static float N005[3] = {0.400123 ,0.855734 ,-0.328055};
static float N006[3] = {-0.770715 ,0.610204 ,-0.183440};
static float N007[3] = {-0.915597 ,-0.373345 ,-0.149316};
static float N008[3] = {-0.972788 ,0.208921 ,-0.100179};
static float N009[3] = {-0.939713 ,-0.312268 ,-0.139383};
static float N010[3] = {-0.624138 ,-0.741047 ,-0.247589};
static float N011[3] = {0.591434 ,-0.768401 ,-0.244471};
static float N012[3] = {0.935152 ,-0.328495 ,-0.132598};
static float N013[3] = {0.997102 ,0.074243 ,-0.016593};
static float N014[3] = {0.969995 ,0.241712 ,-0.026186};
static float N015[3] = {0.844539 ,0.502628 ,-0.184714};
static float N016[3] = {-0.906608 ,0.386308 ,-0.169787};
static float N017[3] = {-0.970016 ,0.241698 ,-0.025516};
static float N018[3] = {-0.998652 ,0.050493 ,-0.012045};
static float N019[3] = {-0.942685 ,-0.333051 ,-0.020556};
static float N020[3] = {-0.660944 ,-0.750276 ,0.015480};
static float N021[3] = {0.503549 ,-0.862908 ,-0.042749};
static float N022[3] = {0.953202 ,-0.302092 ,-0.012089};
static float N023[3] = {0.998738 ,0.023574 ,0.044344};
static float N024[3] = {0.979297 ,0.193272 ,0.060202};
static float N025[3] = {0.798300 ,0.464885 ,0.382883};
static float N026[3] = {-0.756590 ,0.452403 ,0.472126};
static float N027[3] = {-0.953855 ,0.293003 ,0.065651};
static float N028[3] = {-0.998033 ,0.040292 ,0.048028};
static float N029[3] = {-0.977079 ,-0.204288 ,0.059858};
static float N030[3] = {-0.729117 ,-0.675304 ,0.111140};
static float N031[3] = {0.598361 ,-0.792753 ,0.116221};
static float N032[3] = {0.965192 ,-0.252991 ,0.066332};
static float N033[3] = {0.998201 ,-0.002790 ,0.059892};
static float N034[3] = {0.978657 ,0.193135 ,0.070207};
static float N035[3] = {0.718815 ,0.680392 ,0.142733};
static float N036[3] = {-0.383096 ,0.906212 ,0.178936};
static float N037[3] = {-0.952831 ,0.292590 ,0.080647};
static float N038[3] = {-0.997680 ,0.032417 ,0.059861};
static float N039[3] = {-0.982629 ,-0.169881 ,0.074700};
static float N040[3] = {-0.695424 ,-0.703466 ,0.146700};
static float N041[3] = {0.359323 ,-0.915531 ,0.180805};
static float N042[3] = {0.943356 ,-0.319387 ,0.089842};
static float N043[3] = {0.998272 ,-0.032435 ,0.048993};
static float N044[3] = {0.978997 ,0.193205 ,0.065084};
static float N045[3] = {0.872144 ,0.470094 ,-0.135565};
static float N046[3] = {-0.664282 ,0.737945 ,-0.119027};
static float N047[3] = {-0.954508 ,0.288570 ,0.075107};
static float N048[3] = {-0.998273 ,0.032406 ,0.048993};
static float N049[3] = {-0.979908 ,-0.193579 ,0.048038};
static float N050[3] = {-0.858736 ,-0.507202 ,-0.072938};
static float N051[3] = {0.643545 ,-0.763887 ,-0.048237};
static float N052[3] = {0.955580 ,-0.288954 ,0.058068};
static float N058[3] = {0.000050 ,0.793007 ,-0.609213};
static float N059[3] = {0.913510 ,0.235418 ,-0.331779};
static float N060[3] = {-0.807970 ,0.495000 ,-0.319625};
static float N061[3] = {0.000000 ,0.784687 ,-0.619892};
static float N062[3] = {0.000000 ,-1.000000 ,0.000000};
static float N063[3] = {0.000000 ,1.000000 ,0.000000};
static float N064[3] = {0.000000 ,1.000000 ,0.000000};
static float N065[3] = {0.000000 ,1.000000 ,0.000000};
static float N066[3] = {-0.055784 ,0.257059 ,0.964784};
static float N069[3] = {-0.000505 ,-0.929775 ,-0.368127};
static float N070[3] = {0.000000 ,1.000000 ,0.000000};
static float P002[3] = {0.00, -36.59, 5687.72};
static float P003[3] = {90.00, 114.73, 724.38};
static float P004[3] = {58.24, -146.84, 262.35};
static float P005[3] = {27.81, 231.52, 510.43};
static float P006[3] = {-27.81, 230.43, 509.76};
static float P007[3] = {-46.09, -146.83, 265.84};
static float P008[3] = {-90.00, 103.84, 718.53};
static float P009[3] = {-131.10, -165.92, 834.85};
static float P010[3] = {-27.81, -285.31, 500.00};
static float P011[3] = {27.81, -285.32, 500.00};
static float P012[3] = {147.96, -170.89, 845.50};
static float P013[3] = {180.00, 0.00, 2000.00};
static float P014[3] = {145.62, 352.67, 2000.00};
static float P015[3] = {55.62, 570.63, 2000.00};
static float P016[3] = {-55.62, 570.64, 2000.00};
static float P017[3] = {-145.62, 352.68, 2000.00};
static float P018[3] = {-180.00, 0.01, 2000.00};
static float P019[3] = {-178.20, -352.66, 2001.61};
static float P020[3] = {-55.63, -570.63, 2000.00};
static float P021[3] = {55.62, -570.64, 2000.00};
static float P022[3] = {179.91, -352.69, 1998.39};
static float P023[3] = {150.00, 0.00, 3000.00};
static float P024[3] = {121.35, 293.89, 3000.00};
static float P025[3] = {46.35, 502.93, 2883.09};
static float P026[3] = {-46.35, 497.45, 2877.24};
static float P027[3] = {-121.35, 293.90, 3000.00};
static float P028[3] = {-150.00, 0.00, 3000.00};
static float P029[3] = {-152.21, -304.84, 2858.68};
static float P030[3] = {-46.36, -475.52, 3000.00};
static float P031[3] = {46.35, -475.53, 3000.00};
static float P032[3] = {155.64, -304.87, 2863.50};
static float P033[3] = {90.00, 0.00, 4000.00};
static float P034[3] = {72.81, 176.33, 4000.00};
static float P035[3] = {27.81, 285.32, 4000.00};
static float P036[3] = {-27.81, 285.32, 4000.00};
static float P037[3] = {-72.81, 176.34, 4000.00};
static float P038[3] = {-90.00, 0.00, 4000.00};
static float P039[3] = {-72.81, -176.33, 4000.00};
static float P040[3] = {-27.81, -285.31, 4000.00};
static float P041[3] = {27.81, -285.32, 4000.00};
static float P042[3] = {72.81, -176.34, 4000.00};
static float P043[3] = {30.00, 0.00, 5000.00};
static float P044[3] = {24.27, 58.78, 5000.00};
static float P045[3] = {9.27, 95.11, 5000.00};
static float P046[3] = {-9.27, 95.11, 5000.00};
static float P047[3] = {-24.27, 58.78, 5000.00};
static float P048[3] = {-30.00, 0.00, 5000.00};
static float P049[3] = {-24.27, -58.78, 5000.00};
static float P050[3] = {-9.27, -95.10, 5000.00};
static float P051[3] = {9.27, -95.11, 5000.00};
static float P052[3] = {24.27, -58.78, 5000.00};
static float P058[3] = {0.00, 1212.72, 2703.08};
static float P059[3] = {50.36, 0.00, 108.14};
static float P060[3] = {-22.18, 0.00, 108.14};
static float P061[3] = {0.00, 1181.61, 6344.65};
static float P062[3] = {516.45, -887.08, 2535.45};
static float P063[3] = {-545.69, -879.31, 2555.63};
static float P064[3] = {618.89, -1005.64, 2988.32};
static float P065[3] = {-635.37, -1014.79, 2938.68};
static float P066[3] = {0.00, 1374.43, 3064.18};
static float P069[3] = {0.00, -418.25, 5765.04};
static float P070[3] = {0.00, 1266.91, 6629.60};
static float P071[3] = {-139.12, -124.96, 997.98};
static float P072[3] = {-139.24, -110.18, 1020.68};
static float P073[3] = {-137.33, -94.52, 1022.63};
static float P074[3] = {-137.03, -79.91, 996.89};
static float P075[3] = {-135.21, -91.48, 969.14};
static float P076[3] = {-135.39, -110.87, 968.76};
static float P077[3] = {150.23, -78.44, 995.53};
static float P078[3] = {152.79, -92.76, 1018.46};
static float P079[3] = {154.19, -110.20, 1020.55};
static float P080[3] = {151.33, -124.15, 993.77};
static float P081[3] = {150.49, -111.19, 969.86};
static float P082[3] = {150.79, -92.41, 969.70};
static float iP002[3] = {0.00, -36.59, 5687.72};
static float iP004[3] = {58.24, -146.84, 262.35};
static float iP007[3] = {-46.09, -146.83, 265.84};
static float iP010[3] = {-27.81, -285.31, 500.00};
static float iP011[3] = {27.81, -285.32, 500.00};
static float iP023[3] = {150.00, 0.00, 3000.00};
static float iP024[3] = {121.35, 293.89, 3000.00};
static float iP025[3] = {46.35, 502.93, 2883.09};
static float iP026[3] = {-46.35, 497.45, 2877.24};
static float iP027[3] = {-121.35, 293.90, 3000.00};
static float iP028[3] = {-150.00, 0.00, 3000.00};
static float iP029[3] = {-121.35, -304.84, 2853.86};
static float iP030[3] = {-46.36, -475.52, 3000.00};
static float iP031[3] = {46.35, -475.53, 3000.00};
static float iP032[3] = {121.35, -304.87, 2853.86};
static float iP033[3] = {90.00, 0.00, 4000.00};
static float iP034[3] = {72.81, 176.33, 4000.00};
static float iP035[3] = {27.81, 285.32, 4000.00};
static float iP036[3] = {-27.81, 285.32, 4000.00};
static float iP037[3] = {-72.81, 176.34, 4000.00};
static float iP038[3] = {-90.00, 0.00, 4000.00};
static float iP039[3] = {-72.81, -176.33, 4000.00};
static float iP040[3] = {-27.81, -285.31, 4000.00};
static float iP041[3] = {27.81, -285.32, 4000.00};
static float iP042[3] = {72.81, -176.34, 4000.00};
static float iP043[3] = {30.00, 0.00, 5000.00};
static float iP044[3] = {24.27, 58.78, 5000.00};
static float iP045[3] = {9.27, 95.11, 5000.00};
static float iP046[3] = {-9.27, 95.11, 5000.00};
static float iP047[3] = {-24.27, 58.78, 5000.00};
static float iP048[3] = {-30.00, 0.00, 5000.00};
static float iP049[3] = {-24.27, -58.78, 5000.00};
static float iP050[3] = {-9.27, -95.10, 5000.00};
static float iP051[3] = {9.27, -95.11, 5000.00};
static float iP052[3] = {24.27, -58.78, 5000.00};
static float iP061[3] = {0.00, 1181.61, 6344.65};
static float iP069[3] = {0.00, -418.25, 5765.04};
static float iP070[3] = {0.00, 1266.91, 6629.60};
/* *INDENT-ON* */
void
Fish001(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N005);
glVertex3fv(P005);
glNormal3fv(N059);
glVertex3fv(P059);
glNormal3fv(N060);
glVertex3fv(P060);
glNormal3fv(N006);
glVertex3fv(P006);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N015);
glVertex3fv(P015);
glNormal3fv(N005);
glVertex3fv(P005);
glNormal3fv(N006);
glVertex3fv(P006);
glNormal3fv(N016);
glVertex3fv(P016);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N006);
glVertex3fv(P006);
glNormal3fv(N060);
glVertex3fv(P060);
glNormal3fv(N008);
glVertex3fv(P008);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N016);
glVertex3fv(P016);
glNormal3fv(N006);
glVertex3fv(P006);
glNormal3fv(N008);
glVertex3fv(P008);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N016);
glVertex3fv(P016);
glNormal3fv(N008);
glVertex3fv(P008);
glNormal3fv(N017);
glVertex3fv(P017);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N017);
glVertex3fv(P017);
glNormal3fv(N008);
glVertex3fv(P008);
glNormal3fv(N018);
glVertex3fv(P018);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N008);
glVertex3fv(P008);
glNormal3fv(N009);
glVertex3fv(P009);
glNormal3fv(N018);
glVertex3fv(P018);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N008);
glVertex3fv(P008);
glNormal3fv(N060);
glVertex3fv(P060);
glNormal3fv(N009);
glVertex3fv(P009);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N007);
glVertex3fv(P007);
glNormal3fv(N010);
glVertex3fv(P010);
glNormal3fv(N009);
glVertex3fv(P009);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N009);
glVertex3fv(P009);
glNormal3fv(N019);
glVertex3fv(P019);
glNormal3fv(N018);
glVertex3fv(P018);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N009);
glVertex3fv(P009);
glNormal3fv(N010);
glVertex3fv(P010);
glNormal3fv(N019);
glVertex3fv(P019);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N010);
glVertex3fv(P010);
glNormal3fv(N020);
glVertex3fv(P020);
glNormal3fv(N019);
glVertex3fv(P019);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N010);
glVertex3fv(P010);
glNormal3fv(N011);
glVertex3fv(P011);
glNormal3fv(N021);
glVertex3fv(P021);
glNormal3fv(N020);
glVertex3fv(P020);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N004);
glVertex3fv(P004);
glNormal3fv(N011);
glVertex3fv(P011);
glNormal3fv(N010);
glVertex3fv(P010);
glNormal3fv(N007);
glVertex3fv(P007);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N004);
glVertex3fv(P004);
glNormal3fv(N012);
glVertex3fv(P012);
glNormal3fv(N011);
glVertex3fv(P011);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N012);
glVertex3fv(P012);
glNormal3fv(N022);
glVertex3fv(P022);
glNormal3fv(N011);
glVertex3fv(P011);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N011);
glVertex3fv(P011);
glNormal3fv(N022);
glVertex3fv(P022);
glNormal3fv(N021);
glVertex3fv(P021);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N059);
glVertex3fv(P059);
glNormal3fv(N005);
glVertex3fv(P005);
glNormal3fv(N015);
glVertex3fv(P015);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N015);
glVertex3fv(P015);
glNormal3fv(N014);
glVertex3fv(P014);
glNormal3fv(N003);
glVertex3fv(P003);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N015);
glVertex3fv(P015);
glNormal3fv(N003);
glVertex3fv(P003);
glNormal3fv(N059);
glVertex3fv(P059);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N014);
glVertex3fv(P014);
glNormal3fv(N013);
glVertex3fv(P013);
glNormal3fv(N003);
glVertex3fv(P003);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N003);
glVertex3fv(P003);
glNormal3fv(N012);
glVertex3fv(P012);
glNormal3fv(N059);
glVertex3fv(P059);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N013);
glVertex3fv(P013);
glNormal3fv(N012);
glVertex3fv(P012);
glNormal3fv(N003);
glVertex3fv(P003);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N013);
glVertex3fv(P013);
glNormal3fv(N022);
glVertex3fv(P022);
glNormal3fv(N012);
glVertex3fv(P012);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P071);
glVertex3fv(P072);
glVertex3fv(P073);
glVertex3fv(P074);
glVertex3fv(P075);
glVertex3fv(P076);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P077);
glVertex3fv(P078);
glVertex3fv(P079);
glVertex3fv(P080);
glVertex3fv(P081);
glVertex3fv(P082);
glEnd();
}
void
Fish002(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N013);
glVertex3fv(P013);
glNormal3fv(N014);
glVertex3fv(P014);
glNormal3fv(N024);
glVertex3fv(P024);
glNormal3fv(N023);
glVertex3fv(P023);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N014);
glVertex3fv(P014);
glNormal3fv(N015);
glVertex3fv(P015);
glNormal3fv(N025);
glVertex3fv(P025);
glNormal3fv(N024);
glVertex3fv(P024);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N016);
glVertex3fv(P016);
glNormal3fv(N017);
glVertex3fv(P017);
glNormal3fv(N027);
glVertex3fv(P027);
glNormal3fv(N026);
glVertex3fv(P026);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N017);
glVertex3fv(P017);
glNormal3fv(N018);
glVertex3fv(P018);
glNormal3fv(N028);
glVertex3fv(P028);
glNormal3fv(N027);
glVertex3fv(P027);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N020);
glVertex3fv(P020);
glNormal3fv(N021);
glVertex3fv(P021);
glNormal3fv(N031);
glVertex3fv(P031);
glNormal3fv(N030);
glVertex3fv(P030);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N013);
glVertex3fv(P013);
glNormal3fv(N023);
glVertex3fv(P023);
glNormal3fv(N022);
glVertex3fv(P022);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N022);
glVertex3fv(P022);
glNormal3fv(N023);
glVertex3fv(P023);
glNormal3fv(N032);
glVertex3fv(P032);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N022);
glVertex3fv(P022);
glNormal3fv(N032);
glVertex3fv(P032);
glNormal3fv(N031);
glVertex3fv(P031);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N022);
glVertex3fv(P022);
glNormal3fv(N031);
glVertex3fv(P031);
glNormal3fv(N021);
glVertex3fv(P021);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N018);
glVertex3fv(P018);
glNormal3fv(N019);
glVertex3fv(P019);
glNormal3fv(N029);
glVertex3fv(P029);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N018);
glVertex3fv(P018);
glNormal3fv(N029);
glVertex3fv(P029);
glNormal3fv(N028);
glVertex3fv(P028);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N019);
glVertex3fv(P019);
glNormal3fv(N020);
glVertex3fv(P020);
glNormal3fv(N030);
glVertex3fv(P030);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N019);
glVertex3fv(P019);
glNormal3fv(N030);
glVertex3fv(P030);
glNormal3fv(N029);
glVertex3fv(P029);
glEnd();
}
void
Fish003(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N032);
glVertex3fv(P032);
glNormal3fv(N023);
glVertex3fv(P023);
glNormal3fv(N033);
glVertex3fv(P033);
glNormal3fv(N042);
glVertex3fv(P042);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N031);
glVertex3fv(P031);
glNormal3fv(N032);
glVertex3fv(P032);
glNormal3fv(N042);
glVertex3fv(P042);
glNormal3fv(N041);
glVertex3fv(P041);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N023);
glVertex3fv(P023);
glNormal3fv(N024);
glVertex3fv(P024);
glNormal3fv(N034);
glVertex3fv(P034);
glNormal3fv(N033);
glVertex3fv(P033);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N024);
glVertex3fv(P024);
glNormal3fv(N025);
glVertex3fv(P025);
glNormal3fv(N035);
glVertex3fv(P035);
glNormal3fv(N034);
glVertex3fv(P034);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N030);
glVertex3fv(P030);
glNormal3fv(N031);
glVertex3fv(P031);
glNormal3fv(N041);
glVertex3fv(P041);
glNormal3fv(N040);
glVertex3fv(P040);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N025);
glVertex3fv(P025);
glNormal3fv(N026);
glVertex3fv(P026);
glNormal3fv(N036);
glVertex3fv(P036);
glNormal3fv(N035);
glVertex3fv(P035);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N026);
glVertex3fv(P026);
glNormal3fv(N027);
glVertex3fv(P027);
glNormal3fv(N037);
glVertex3fv(P037);
glNormal3fv(N036);
glVertex3fv(P036);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N027);
glVertex3fv(P027);
glNormal3fv(N028);
glVertex3fv(P028);
glNormal3fv(N038);
glVertex3fv(P038);
glNormal3fv(N037);
glVertex3fv(P037);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N028);
glVertex3fv(P028);
glNormal3fv(N029);
glVertex3fv(P029);
glNormal3fv(N039);
glVertex3fv(P039);
glNormal3fv(N038);
glVertex3fv(P038);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N029);
glVertex3fv(P029);
glNormal3fv(N030);
glVertex3fv(P030);
glNormal3fv(N040);
glVertex3fv(P040);
glNormal3fv(N039);
glVertex3fv(P039);
glEnd();
}
void
Fish004(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N040);
glVertex3fv(P040);
glNormal3fv(N041);
glVertex3fv(P041);
glNormal3fv(N051);
glVertex3fv(P051);
glNormal3fv(N050);
glVertex3fv(P050);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N041);
glVertex3fv(P041);
glNormal3fv(N042);
glVertex3fv(P042);
glNormal3fv(N052);
glVertex3fv(P052);
glNormal3fv(N051);
glVertex3fv(P051);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N042);
glVertex3fv(P042);
glNormal3fv(N033);
glVertex3fv(P033);
glNormal3fv(N043);
glVertex3fv(P043);
glNormal3fv(N052);
glVertex3fv(P052);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N033);
glVertex3fv(P033);
glNormal3fv(N034);
glVertex3fv(P034);
glNormal3fv(N044);
glVertex3fv(P044);
glNormal3fv(N043);
glVertex3fv(P043);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N034);
glVertex3fv(P034);
glNormal3fv(N035);
glVertex3fv(P035);
glNormal3fv(N045);
glVertex3fv(P045);
glNormal3fv(N044);
glVertex3fv(P044);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N035);
glVertex3fv(P035);
glNormal3fv(N036);
glVertex3fv(P036);
glNormal3fv(N046);
glVertex3fv(P046);
glNormal3fv(N045);
glVertex3fv(P045);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N036);
glVertex3fv(P036);
glNormal3fv(N037);
glVertex3fv(P037);
glNormal3fv(N047);
glVertex3fv(P047);
glNormal3fv(N046);
glVertex3fv(P046);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N037);
glVertex3fv(P037);
glNormal3fv(N038);
glVertex3fv(P038);
glNormal3fv(N048);
glVertex3fv(P048);
glNormal3fv(N047);
glVertex3fv(P047);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N038);
glVertex3fv(P038);
glNormal3fv(N039);
glVertex3fv(P039);
glNormal3fv(N049);
glVertex3fv(P049);
glNormal3fv(N048);
glVertex3fv(P048);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N039);
glVertex3fv(P039);
glNormal3fv(N040);
glVertex3fv(P040);
glNormal3fv(N050);
glVertex3fv(P050);
glNormal3fv(N049);
glVertex3fv(P049);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N070);
glVertex3fv(P070);
glNormal3fv(N061);
glVertex3fv(P061);
glNormal3fv(N002);
glVertex3fv(P002);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N061);
glVertex3fv(P061);
glNormal3fv(N046);
glVertex3fv(P046);
glNormal3fv(N002);
glVertex3fv(P002);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N045);
glVertex3fv(P045);
glNormal3fv(N046);
glVertex3fv(P046);
glNormal3fv(N061);
glVertex3fv(P061);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N061);
glVertex3fv(P061);
glNormal3fv(N070);
glVertex3fv(P070);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N045);
glVertex3fv(P045);
glNormal3fv(N061);
glVertex3fv(P061);
glEnd();
}
void
Fish005(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N044);
glVertex3fv(P044);
glNormal3fv(N045);
glVertex3fv(P045);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N043);
glVertex3fv(P043);
glNormal3fv(N044);
glVertex3fv(P044);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N052);
glVertex3fv(P052);
glNormal3fv(N043);
glVertex3fv(P043);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N051);
glVertex3fv(P051);
glNormal3fv(N052);
glVertex3fv(P052);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N046);
glVertex3fv(P046);
glNormal3fv(N047);
glVertex3fv(P047);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N047);
glVertex3fv(P047);
glNormal3fv(N048);
glVertex3fv(P048);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N048);
glVertex3fv(P048);
glNormal3fv(N049);
glVertex3fv(P049);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N049);
glVertex3fv(P049);
glNormal3fv(N050);
glVertex3fv(P050);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N050);
glVertex3fv(P050);
glNormal3fv(N051);
glVertex3fv(P051);
glNormal3fv(N069);
glVertex3fv(P069);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N051);
glVertex3fv(P051);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N069);
glVertex3fv(P069);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N050);
glVertex3fv(P050);
glNormal3fv(N069);
glVertex3fv(P069);
glNormal3fv(N002);
glVertex3fv(P002);
glEnd();
}
void
Fish006(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N066);
glVertex3fv(P066);
glNormal3fv(N016);
glVertex3fv(P016);
glNormal3fv(N026);
glVertex3fv(P026);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N015);
glVertex3fv(P015);
glNormal3fv(N066);
glVertex3fv(P066);
glNormal3fv(N025);
glVertex3fv(P025);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N025);
glVertex3fv(P025);
glNormal3fv(N066);
glVertex3fv(P066);
glNormal3fv(N026);
glVertex3fv(P026);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N066);
glVertex3fv(P066);
glNormal3fv(N058);
glVertex3fv(P058);
glNormal3fv(N016);
glVertex3fv(P016);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N015);
glVertex3fv(P015);
glNormal3fv(N058);
glVertex3fv(P058);
glNormal3fv(N066);
glVertex3fv(P066);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N058);
glVertex3fv(P058);
glNormal3fv(N015);
glVertex3fv(P015);
glNormal3fv(N016);
glVertex3fv(P016);
glEnd();
}
void
Fish007(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N062);
glVertex3fv(P062);
glNormal3fv(N022);
glVertex3fv(P022);
glNormal3fv(N032);
glVertex3fv(P032);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N062);
glVertex3fv(P062);
glNormal3fv(N032);
glVertex3fv(P032);
glNormal3fv(N064);
glVertex3fv(P064);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N022);
glVertex3fv(P022);
glNormal3fv(N062);
glVertex3fv(P062);
glNormal3fv(N032);
glVertex3fv(P032);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N062);
glVertex3fv(P062);
glNormal3fv(N064);
glVertex3fv(P064);
glNormal3fv(N032);
glVertex3fv(P032);
glEnd();
}
void
Fish008(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N063);
glVertex3fv(P063);
glNormal3fv(N019);
glVertex3fv(P019);
glNormal3fv(N029);
glVertex3fv(P029);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N019);
glVertex3fv(P019);
glNormal3fv(N063);
glVertex3fv(P063);
glNormal3fv(N029);
glVertex3fv(P029);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N063);
glVertex3fv(P063);
glNormal3fv(N029);
glVertex3fv(P029);
glNormal3fv(N065);
glVertex3fv(P065);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N063);
glVertex3fv(P063);
glNormal3fv(N065);
glVertex3fv(P065);
glNormal3fv(N029);
glVertex3fv(P029);
glEnd();
}
void
Fish009(void)
{
glBegin(GL_POLYGON);
glVertex3fv(P059);
glVertex3fv(P012);
glVertex3fv(P009);
glVertex3fv(P060);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P012);
glVertex3fv(P004);
glVertex3fv(P007);
glVertex3fv(P009);
glEnd();
}
void
Fish_1(void)
{
Fish004();
Fish005();
Fish003();
Fish007();
Fish006();
Fish002();
Fish008();
Fish009();
Fish001();
}
void
Fish_2(void)
{
Fish005();
Fish004();
Fish003();
Fish008();
Fish006();
Fish002();
Fish007();
Fish009();
Fish001();
}
void
Fish_3(void)
{
Fish005();
Fish004();
Fish007();
Fish003();
Fish002();
Fish008();
Fish009();
Fish001();
Fish006();
}
void
Fish_4(void)
{
Fish005();
Fish004();
Fish008();
Fish003();
Fish002();
Fish007();
Fish009();
Fish001();
Fish006();
}
void
Fish_5(void)
{
Fish009();
Fish006();
Fish007();
Fish001();
Fish002();
Fish003();
Fish008();
Fish004();
Fish005();
}
void
Fish_6(void)
{
Fish009();
Fish006();
Fish008();
Fish001();
Fish002();
Fish007();
Fish003();
Fish004();
Fish005();
}
void
Fish_7(void)
{
Fish009();
Fish001();
Fish007();
Fish005();
Fish002();
Fish008();
Fish003();
Fish004();
Fish006();
}
void
Fish_8(void)
{
Fish009();
Fish008();
Fish001();
Fish002();
Fish007();
Fish003();
Fish005();
Fish004();
Fish006();
}
void
DrawShark(fishRec * fish)
{
float mat[4][4];
int n;
float seg1, seg2, seg3, seg4, segup;
float thrash, chomp;
fish->htail = (int) (fish->htail - (int) (5.0 * fish->v)) % 360;
thrash = 50.0 * fish->v;
seg1 = 0.6 * thrash * sin(fish->htail * RRAD);
seg2 = 1.8 * thrash * sin((fish->htail + 45.0) * RRAD);
seg3 = 3.0 * thrash * sin((fish->htail + 90.0) * RRAD);
seg4 = 4.0 * thrash * sin((fish->htail + 110.0) * RRAD);
chomp = 0.0;
if (fish->v > 2.0) {
chomp = -(fish->v - 2.0) * 200.0;
}
P004[1] = iP004[1] + chomp;
P007[1] = iP007[1] + chomp;
P010[1] = iP010[1] + chomp;
P011[1] = iP011[1] + chomp;
P023[0] = iP023[0] + seg1;
P024[0] = iP024[0] + seg1;
P025[0] = iP025[0] + seg1;
P026[0] = iP026[0] + seg1;
P027[0] = iP027[0] + seg1;
P028[0] = iP028[0] + seg1;
P029[0] = iP029[0] + seg1;
P030[0] = iP030[0] + seg1;
P031[0] = iP031[0] + seg1;
P032[0] = iP032[0] + seg1;
P033[0] = iP033[0] + seg2;
P034[0] = iP034[0] + seg2;
P035[0] = iP035[0] + seg2;
P036[0] = iP036[0] + seg2;
P037[0] = iP037[0] + seg2;
P038[0] = iP038[0] + seg2;
P039[0] = iP039[0] + seg2;
P040[0] = iP040[0] + seg2;
P041[0] = iP041[0] + seg2;
P042[0] = iP042[0] + seg2;
P043[0] = iP043[0] + seg3;
P044[0] = iP044[0] + seg3;
P045[0] = iP045[0] + seg3;
P046[0] = iP046[0] + seg3;
P047[0] = iP047[0] + seg3;
P048[0] = iP048[0] + seg3;
P049[0] = iP049[0] + seg3;
P050[0] = iP050[0] + seg3;
P051[0] = iP051[0] + seg3;
P052[0] = iP052[0] + seg3;
P002[0] = iP002[0] + seg4;
P061[0] = iP061[0] + seg4;
P069[0] = iP069[0] + seg4;
P070[0] = iP070[0] + seg4;
fish->vtail += ((fish->dtheta - fish->vtail) * 0.1);
if (fish->vtail > 0.5) {
fish->vtail = 0.5;
} else if (fish->vtail < -0.5) {
fish->vtail = -0.5;
}
segup = thrash * fish->vtail;
P023[1] = iP023[1] + segup;
P024[1] = iP024[1] + segup;
P025[1] = iP025[1] + segup;
P026[1] = iP026[1] + segup;
P027[1] = iP027[1] + segup;
P028[1] = iP028[1] + segup;
P029[1] = iP029[1] + segup;
P030[1] = iP030[1] + segup;
P031[1] = iP031[1] + segup;
P032[1] = iP032[1] + segup;
P033[1] = iP033[1] + segup * 5.0;
P034[1] = iP034[1] + segup * 5.0;
P035[1] = iP035[1] + segup * 5.0;
P036[1] = iP036[1] + segup * 5.0;
P037[1] = iP037[1] + segup * 5.0;
P038[1] = iP038[1] + segup * 5.0;
P039[1] = iP039[1] + segup * 5.0;
P040[1] = iP040[1] + segup * 5.0;
P041[1] = iP041[1] + segup * 5.0;
P042[1] = iP042[1] + segup * 5.0;
P043[1] = iP043[1] + segup * 12.0;
P044[1] = iP044[1] + segup * 12.0;
P045[1] = iP045[1] + segup * 12.0;
P046[1] = iP046[1] + segup * 12.0;
P047[1] = iP047[1] + segup * 12.0;
P048[1] = iP048[1] + segup * 12.0;
P049[1] = iP049[1] + segup * 12.0;
P050[1] = iP050[1] + segup * 12.0;
P051[1] = iP051[1] + segup * 12.0;
P052[1] = iP052[1] + segup * 12.0;
P002[1] = iP002[1] + segup * 17.0;
P061[1] = iP061[1] + segup * 17.0;
P069[1] = iP069[1] + segup * 17.0;
P070[1] = iP070[1] + segup * 17.0;
glPushMatrix();
glTranslatef(0.0, 0.0, -3000.0);
glGetFloatv(GL_MODELVIEW_MATRIX, &mat[0][0]);
n = 0;
if (mat[0][2] >= 0.0) {
n += 1;
}
if (mat[1][2] >= 0.0) {
n += 2;
}
if (mat[2][2] >= 0.0) {
n += 4;
}
glScalef(2.0, 1.0, 1.0);
glEnable(GL_CULL_FACE);
switch (n) {
case 0:
Fish_1();
break;
case 1:
Fish_2();
break;
case 2:
Fish_3();
break;
case 3:
Fish_4();
break;
case 4:
Fish_5();
break;
case 5:
Fish_6();
break;
case 6:
Fish_7();
break;
case 7:
Fish_8();
break;
}
glDisable(GL_CULL_FACE);
glPopMatrix();
}
/**
* (c) Copyright 1993, 1994, 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.
*/
#include <math.h>
#include <stdlib.h> /* For rand(). */
#include <GLUT/glut.h>
#include "atlantis.h"
void
FishTransform(fishRec * fish)
{
glTranslatef(fish->y, fish->z, -fish->x);
glRotatef(-fish->psi, 0.0, 1.0, 0.0);
glRotatef(fish->theta, 1.0, 0.0, 0.0);
glRotatef(-fish->phi, 0.0, 0.0, 1.0);
}
void
WhalePilot(fishRec * fish)
{
fish->phi = -20.0;
fish->theta = 0.0;
fish->psi -= 0.5;
fish->x += WHALESPEED * fish->v * cos(fish->psi / RAD) * cos(fish->theta / RAD);
fish->y += WHALESPEED * fish->v * sin(fish->psi / RAD) * cos(fish->theta / RAD);
fish->z += WHALESPEED * fish->v * sin(fish->theta / RAD);
}
void
SharkPilot(fishRec * fish)
{
static int sign = 1;
float X, Y, Z, tpsi, ttheta, thetal;
fish->xt = 60000.0;
fish->yt = 0.0;
fish->zt = 0.0;
X = fish->xt - fish->x;
Y = fish->yt - fish->y;
Z = fish->zt - fish->z;
thetal = fish->theta;
ttheta = RAD * atan(Z / (sqrt(X * X + Y * Y)));
if (ttheta > fish->theta + 0.25) {
fish->theta += 0.5;
} else if (ttheta < fish->theta - 0.25) {
fish->theta -= 0.5;
}
if (fish->theta > 90.0) {
fish->theta = 90.0;
}
if (fish->theta < -90.0) {
fish->theta = -90.0;
}
fish->dtheta = fish->theta - thetal;
tpsi = RAD * atan2(Y, X);
fish->attack = 0;
if (fabs(tpsi - fish->psi) < 10.0) {
fish->attack = 1;
} else if (fabs(tpsi - fish->psi) < 45.0) {
if (fish->psi > tpsi) {
fish->psi -= 0.5;
if (fish->psi < -180.0) {
fish->psi += 360.0;
}
} else if (fish->psi < tpsi) {
fish->psi += 0.5;
if (fish->psi > 180.0) {
fish->psi -= 360.0;
}
}
} else {
if (rand() % 100 > 98) {
sign = 1 - sign;
}
fish->psi += sign;
if (fish->psi > 180.0) {
fish->psi -= 360.0;
}
if (fish->psi < -180.0) {
fish->psi += 360.0;
}
}
if (fish->attack) {
if (fish->v < 1.1) {
fish->spurt = 1;
}
if (fish->spurt) {
fish->v += 0.2;
}
if (fish->v > 5.0) {
fish->spurt = 0;
}
if ((fish->v > 1.0) && (!fish->spurt)) {
fish->v -= 0.2;
}
} else {
if (!(rand() % 400) && (!fish->spurt)) {
fish->spurt = 1;
}
if (fish->spurt) {
fish->v += 0.05;
}
if (fish->v > 3.0) {
fish->spurt = 0;
}
if ((fish->v > 1.0) && (!fish->spurt)) {
fish->v -= 0.05;
}
}
fish->x += SHARKSPEED * fish->v * cos(fish->psi / RAD) * cos(fish->theta / RAD);
fish->y += SHARKSPEED * fish->v * sin(fish->psi / RAD) * cos(fish->theta / RAD);
fish->z += SHARKSPEED * fish->v * sin(fish->theta / RAD);
}
void
SharkMiss(int i)
{
int j;
float avoid, thetal;
float X, Y, Z, R;
for (j = 0; j < NUM_SHARKS; j++) {
if (j != i) {
X = sharks[j].x - sharks[i].x;
Y = sharks[j].y - sharks[i].y;
Z = sharks[j].z - sharks[i].z;
R = sqrt(X * X + Y * Y + Z * Z);
avoid = 1.0;
thetal = sharks[i].theta;
if (R < SHARKSIZE) {
if (Z > 0.0) {
sharks[i].theta -= avoid;
} else {
sharks[i].theta += avoid;
}
}
sharks[i].dtheta += (sharks[i].theta - thetal);
}
}
}
/**
* (c) Copyright 1993, 1994, 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.
*/
#include <GLUT/glut.h>
#include <math.h>
#include "atlantis.h"
/* *INDENT-OFF* */
static float N001[3] = {0.019249 ,0.011340 ,-0.999750};
static float N002[3] = {-0.132579 ,0.954547 ,0.266952};
static float N003[3] = {-0.196061 ,0.980392 ,-0.019778};
static float N004[3] = {0.695461 ,0.604704 ,0.388158};
static float N005[3] = {0.870600 ,0.425754 ,0.246557};
static float N006[3] = {-0.881191 ,0.392012 ,0.264251};
static float N008[3] = {-0.341437 ,0.887477 ,0.309523};
static float N009[3] = {0.124035 ,-0.992278 ,0.000000};
static float N010[3] = {0.242536 ,0.000000 ,-0.970143};
static float N011[3] = {0.588172 ,0.000000 ,0.808736};
static float N012[3] = {0.929824 ,-0.340623 ,-0.139298};
static float N013[3] = {0.954183 ,0.267108 ,-0.134865};
static float N014[3] = {0.495127 ,0.855436 ,-0.151914};
static float N015[3] = {-0.390199 ,0.906569 ,-0.160867};
static float N016[3] = {-0.923605 ,0.354581 ,-0.145692};
static float N017[3] = {-0.955796 ,-0.260667 ,-0.136036};
static float N018[3] = {-0.501283 ,-0.853462 ,-0.142540};
static float N019[3] = {0.405300 ,-0.901974 ,-0.148913};
static float N020[3] = {0.909913 ,-0.392746 ,-0.133451};
static float N021[3] = {0.936494 ,0.331147 ,-0.115414};
static float N022[3] = {0.600131 ,0.793724 ,-0.099222};
static float N023[3] = {-0.231556 ,0.968361 ,-0.093053};
static float N024[3] = {-0.844369 ,0.525330 ,-0.105211};
static float N025[3] = {-0.982725 ,-0.136329 ,-0.125164};
static float N026[3] = {-0.560844 ,-0.822654 ,-0.093241};
static float N027[3] = {0.263884 ,-0.959981 ,-0.093817};
static float N028[3] = {0.842057 ,-0.525192 ,-0.122938};
static float N029[3] = {0.921620 ,0.367565 ,-0.124546};
static float N030[3] = {0.613927 ,0.784109 ,-0.090918};
static float N031[3] = {-0.448754 ,0.888261 ,-0.098037};
static float N032[3] = {-0.891865 ,0.434376 ,-0.126077};
static float N033[3] = {-0.881447 ,-0.448017 ,-0.149437};
static float N034[3] = {-0.345647 ,-0.922057 ,-0.174183};
static float N035[3] = {0.307998 ,-0.941371 ,-0.137688};
static float N036[3] = {0.806316 ,-0.574647 ,-0.140124};
static float N037[3] = {0.961346 ,0.233646 ,-0.145681};
static float N038[3] = {0.488451 ,0.865586 ,-0.110351};
static float N039[3] = {-0.374290 ,0.921953 ,-0.099553};
static float N040[3] = {-0.928504 ,0.344533 ,-0.138485};
static float N041[3] = {-0.918419 ,-0.371792 ,-0.135189};
static float N042[3] = {-0.520666 ,-0.833704 ,-0.183968};
static float N043[3] = {0.339204 ,-0.920273 ,-0.195036};
static float N044[3] = {0.921475 ,-0.387382 ,-0.028636};
static float N045[3] = {0.842465 ,0.533335 ,-0.076204};
static float N046[3] = {0.380110 ,0.924939 ,0.002073};
static float N047[3] = {-0.276128 ,0.961073 ,-0.009579};
static float N048[3] = {-0.879684 ,0.473001 ,-0.049250};
static float N049[3] = {-0.947184 ,-0.317614 ,-0.044321};
static float N050[3] = {-0.642059 ,-0.764933 ,-0.051363};
static float N051[3] = {0.466794 ,-0.880921 ,-0.077990};
static float N052[3] = {0.898509 ,-0.432277 ,0.076279};
static float N053[3] = {0.938985 ,0.328141 ,0.103109};
static float N054[3] = {0.442420 ,0.895745 ,0.043647};
static float N055[3] = {-0.255163 ,0.966723 ,0.018407};
static float N056[3] = {-0.833769 ,0.540650 ,0.111924};
static float N057[3] = {-0.953653 ,-0.289939 ,0.080507};
static float N058[3] = {-0.672357 ,-0.730524 ,0.119461};
static float N059[3] = {0.522249 ,-0.846652 ,0.102157};
static float N060[3] = {0.885868 ,-0.427631 ,0.179914};
static float N062[3] = {0.648942 ,0.743116 ,0.163255};
static float N063[3] = {-0.578967 ,0.807730 ,0.111219};
static float N065[3] = {-0.909864 ,-0.352202 ,0.219321};
static float N066[3] = {-0.502541 ,-0.818090 ,0.279610};
static float N067[3] = {0.322919 ,-0.915358 ,0.240504};
static float N068[3] = {0.242536 ,0.000000 ,-0.970143};
static float N069[3] = {0.000000 ,1.000000 ,0.000000};
static float N070[3] = {0.000000 ,1.000000 ,0.000000};
static float N071[3] = {0.000000 ,1.000000 ,0.000000};
static float N072[3] = {0.000000 ,1.000000 ,0.000000};
static float N073[3] = {0.000000 ,1.000000 ,0.000000};
static float N074[3] = {0.000000 ,1.000000 ,0.000000};
static float N075[3] = {0.031220 ,0.999025 ,-0.031220};
static float N076[3] = {0.000000 ,1.000000 ,0.000000};
static float N077[3] = {0.446821 ,0.893642 ,0.041889};
static float N078[3] = {0.863035 ,-0.100980 ,0.494949};
static float N079[3] = {0.585597 ,-0.808215 ,0.062174};
static float N080[3] = {0.000000 ,1.000000 ,0.000000};
static float N081[3] = {1.000000 ,0.000000 ,0.000000};
static float N082[3] = {0.000000 ,1.000000 ,0.000000};
static float N083[3] = {-1.000000 ,0.000000 ,0.000000};
static float N084[3] = {-0.478893 ,0.837129 ,-0.264343};
static float N085[3] = {0.000000 ,1.000000 ,0.000000};
static float N086[3] = {0.763909 ,0.539455 ,-0.354163};
static float N087[3] = {0.446821 ,0.893642 ,0.041889};
static float N088[3] = {0.385134 ,-0.908288 ,0.163352};
static float N089[3] = {-0.605952 ,0.779253 ,-0.159961};
static float N090[3] = {0.000000 ,1.000000 ,0.000000};
static float N091[3] = {0.000000 ,1.000000 ,0.000000};
static float N092[3] = {0.000000 ,1.000000 ,0.000000};
static float N093[3] = {0.000000 ,1.000000 ,0.000000};
static float N094[3] = {1.000000 ,0.000000 ,0.000000};
static float N095[3] = {-1.000000 ,0.000000 ,0.000000};
static float N096[3] = {0.644444 ,-0.621516 ,0.445433};
static float N097[3] = {-0.760896 ,-0.474416 ,0.442681};
static float N098[3] = {0.636888 ,-0.464314 ,0.615456};
static float N099[3] = {-0.710295 ,0.647038 ,0.277168};
static float N100[3] = {0.009604 ,0.993655 ,0.112063};
static float iP001[3] = {18.74, 13.19, 3.76};
static float P001[3] = {18.74, 13.19, 3.76};
static float P002[3] = {0.00, 390.42, 10292.57};
static float P003[3] = {55.80, 622.31, 8254.35};
static float P004[3] = {20.80, 247.66, 10652.13};
static float P005[3] = {487.51, 198.05, 9350.78};
static float P006[3] = {-457.61, 199.04, 9353.01};
static float P008[3] = {-34.67, 247.64, 10663.71};
static float iP009[3] = {97.46, 67.63, 593.82};
static float iP010[3] = {-84.33, 67.63, 588.18};
static float iP011[3] = {118.69, 8.98, -66.91};
static float P009[3] = {97.46, 67.63, 593.82};
static float P010[3] = {-84.33, 67.63, 588.18};
static float P011[3] = {118.69, 8.98, -66.91};
static float iP012[3] = {156.48, -31.95, 924.54};
static float iP013[3] = {162.00, 110.22, 924.54};
static float iP014[3] = {88.16, 221.65, 924.54};
static float iP015[3] = {-65.21, 231.16, 924.54};
static float iP016[3] = {-156.48, 121.97, 924.54};
static float iP017[3] = {-162.00, -23.93, 924.54};
static float iP018[3] = {-88.16, -139.10, 924.54};
static float iP019[3] = {65.21, -148.61, 924.54};
static float iP020[3] = {246.87, -98.73, 1783.04};
static float iP021[3] = {253.17, 127.76, 1783.04};
static float iP022[3] = {132.34, 270.77, 1783.04};
static float iP023[3] = {-97.88, 285.04, 1783.04};
static float iP024[3] = {-222.97, 139.80, 1783.04};
static float iP025[3] = {-225.29, -86.68, 1783.04};
static float iP026[3] = {-108.44, -224.15, 1783.04};
static float iP027[3] = {97.88, -221.56, 1783.04};
static float iP028[3] = {410.55, -200.66, 3213.87};
static float iP029[3] = {432.19, 148.42, 3213.87};
static float iP030[3] = {200.66, 410.55, 3213.87};
static float iP031[3] = {-148.42, 432.19, 3213.87};
static float iP032[3] = {-407.48, 171.88, 3213.87};
static float iP033[3] = {-432.19, -148.42, 3213.87};
static float iP034[3] = {-148.88, -309.74, 3213.87};
static float iP035[3] = {156.38, -320.17, 3213.87};
static float iP036[3] = {523.39, -303.81, 4424.57};
static float iP037[3] = {574.66, 276.84, 4424.57};
static float iP038[3] = {243.05, 492.50, 4424.57};
static float iP039[3] = {-191.23, 520.13, 4424.57};
static float iP040[3] = {-523.39, 304.01, 4424.57};
static float iP041[3] = {-574.66, -231.83, 4424.57};
static float iP042[3] = {-266.95, -578.17, 4424.57};
static float iP043[3] = {211.14, -579.67, 4424.57};
static float iP044[3] = {680.57, -370.27, 5943.46};
static float iP045[3] = {834.01, 363.09, 5943.46};
static float iP046[3] = {371.29, 614.13, 5943.46};
static float iP047[3] = {-291.43, 621.86, 5943.46};
static float iP048[3] = {-784.13, 362.60, 5943.46};
static float iP049[3] = {-743.29, -325.82, 5943.46};
static float iP050[3] = {-383.24, -804.77, 5943.46};
static float iP051[3] = {283.47, -846.09, 5943.46};
static float P012[3] = {156.48, -31.95, 924.54};
static float P013[3] = {162.00, 110.22, 924.54};
static float P014[3] = {88.16, 221.65, 924.54};
static float P015[3] = {-65.21, 231.16, 924.54};
static float P016[3] = {-156.48, 121.97, 924.54};
static float P017[3] = {-162.00, -23.93, 924.54};
static float P018[3] = {-88.16, -139.10, 924.54};
static float P019[3] = {65.21, -148.61, 924.54};
static float P020[3] = {246.87, -98.73, 1783.04};
static float P021[3] = {253.17, 127.76, 1783.04};
static float P022[3] = {132.34, 270.77, 1783.04};
static float P023[3] = {-97.88, 285.04, 1783.04};
static float P024[3] = {-222.97, 139.80, 1783.04};
static float P025[3] = {-225.29, -86.68, 1783.04};
static float P026[3] = {-108.44, -224.15, 1783.04};
static float P027[3] = {97.88, -221.56, 1783.04};
static float P028[3] = {410.55, -200.66, 3213.87};
static float P029[3] = {432.19, 148.42, 3213.87};
static float P030[3] = {200.66, 410.55, 3213.87};
static float P031[3] = {-148.42, 432.19, 3213.87};
static float P032[3] = {-407.48, 171.88, 3213.87};
static float P033[3] = {-432.19, -148.42, 3213.87};
static float P034[3] = {-148.88, -309.74, 3213.87};
static float P035[3] = {156.38, -320.17, 3213.87};
static float P036[3] = {523.39, -303.81, 4424.57};
static float P037[3] = {574.66, 276.84, 4424.57};
static float P038[3] = {243.05, 492.50, 4424.57};
static float P039[3] = {-191.23, 520.13, 4424.57};
static float P040[3] = {-523.39, 304.01, 4424.57};
static float P041[3] = {-574.66, -231.83, 4424.57};
static float P042[3] = {-266.95, -578.17, 4424.57};
static float P043[3] = {211.14, -579.67, 4424.57};
static float P044[3] = {680.57, -370.27, 5943.46};
static float P045[3] = {834.01, 363.09, 5943.46};
static float P046[3] = {371.29, 614.13, 5943.46};
static float P047[3] = {-291.43, 621.86, 5943.46};
static float P048[3] = {-784.13, 362.60, 5943.46};
static float P049[3] = {-743.29, -325.82, 5943.46};
static float P050[3] = {-383.24, -804.77, 5943.46};
static float P051[3] = {283.47, -846.09, 5943.46};
static float P052[3] = {599.09, -332.24, 7902.59};
static float P053[3] = {735.48, 306.26, 7911.92};
static float P054[3] = {321.55, 558.53, 7902.59};
static float P055[3] = {-260.54, 559.84, 7902.59};
static float P056[3] = {-698.66, 320.83, 7902.59};
static float P057[3] = {-643.29, -299.16, 7902.59};
static float P058[3] = {-341.47, -719.30, 7902.59};
static float P059[3] = {252.57, -756.12, 7902.59};
static float P060[3] = {458.39, -265.31, 9355.44};
static float P062[3] = {224.04, 438.98, 9364.77};
static float P063[3] = {-165.71, 441.27, 9355.44};
static float P065[3] = {-473.99, -219.71, 9355.44};
static float P066[3] = {-211.97, -479.87, 9355.44};
static float P067[3] = {192.86, -504.03, 9355.44};
static float iP068[3] = {-112.44, 9.25, -64.42};
static float iP069[3] = {1155.63, 0.00, -182.46};
static float iP070[3] = {-1143.13, 0.00, -181.54};
static float iP071[3] = {1424.23, 0.00, -322.09};
static float iP072[3] = {-1368.01, 0.00, -310.38};
static float iP073[3] = {1255.57, 2.31, 114.05};
static float iP074[3] = {-1149.38, 0.00, 117.12};
static float iP075[3] = {718.36, 0.00, 433.36};
static float iP076[3] = {-655.90, 0.00, 433.36};
static float P068[3] = {-112.44, 9.25, -64.42};
static float P069[3] = {1155.63, 0.00, -182.46};
static float P070[3] = {-1143.13, 0.00, -181.54};
static float P071[3] = {1424.23, 0.00, -322.09};
static float P072[3] = {-1368.01, 0.00, -310.38};
static float P073[3] = {1255.57, 2.31, 114.05};
static float P074[3] = {-1149.38, 0.00, 117.12};
static float P075[3] = {718.36, 0.00, 433.36};
static float P076[3] = {-655.90, 0.00, 433.36};
static float P077[3] = {1058.00, -2.66, 7923.51};
static float P078[3] = {-1016.51, -15.47, 7902.87};
static float P079[3] = {-1363.99, -484.50, 7593.38};
static float P080[3] = {1478.09, -861.47, 7098.12};
static float P081[3] = {1338.06, -284.68, 7024.15};
static float P082[3] = {-1545.51, -860.64, 7106.60};
static float P083[3] = {1063.19, -70.46, 7466.60};
static float P084[3] = {-1369.18, -288.11, 7015.34};
static float P085[3] = {1348.44, -482.50, 7591.41};
static float P086[3] = {-1015.45, -96.80, 7474.86};
static float P087[3] = {731.04, 148.38, 7682.58};
static float P088[3] = {-697.03, 151.82, 7668.81};
static float P089[3] = {-686.82, 157.09, 7922.29};
static float P090[3] = {724.73, 147.75, 7931.39};
static float iP091[3] = {0.00, 327.10, 2346.55};
static float iP092[3] = {0.00, 552.28, 2311.31};
static float iP093[3] = {0.00, 721.16, 2166.41};
static float iP094[3] = {0.00, 693.42, 2388.80};
static float iP095[3] = {0.00, 389.44, 2859.97};
static float P091[3] = {0.00, 327.10, 2346.55};
static float P092[3] = {0.00, 552.28, 2311.31};
static float P093[3] = {0.00, 721.16, 2166.41};
static float P094[3] = {0.00, 693.42, 2388.80};
static float P095[3] = {0.00, 389.44, 2859.97};
static float iP096[3] = {222.02, -183.67, 10266.89};
static float iP097[3] = {-128.90, -182.70, 10266.89};
static float iP098[3] = {41.04, 88.31, 10659.36};
static float iP099[3] = {-48.73, 88.30, 10659.36};
static float P096[3] = {222.02, -183.67, 10266.89};
static float P097[3] = {-128.90, -182.70, 10266.89};
static float P098[3] = {41.04, 88.31, 10659.36};
static float P099[3] = {-48.73, 88.30, 10659.36};
static float P100[3] = {0.00, 603.42, 9340.68};
static float P104[3] = {-9.86, 567.62, 7858.65};
static float P105[3] = {31.96, 565.27, 7908.46};
static float P106[3] = {22.75, 568.13, 7782.83};
static float P107[3] = {58.93, 568.42, 7775.94};
static float P108[3] = {55.91, 565.59, 7905.86};
static float P109[3] = {99.21, 566.00, 7858.65};
static float P110[3] = {-498.83, 148.14, 9135.10};
static float P111[3] = {-495.46, 133.24, 9158.48};
static float P112[3] = {-490.82, 146.23, 9182.76};
static float P113[3] = {-489.55, 174.11, 9183.66};
static float P114[3] = {-492.92, 189.00, 9160.28};
static float P115[3] = {-497.56, 176.02, 9136.00};
static float P116[3] = {526.54, 169.68, 9137.70};
static float P117[3] = {523.49, 184.85, 9161.42};
static float P118[3] = {518.56, 171.78, 9186.06};
static float P119[3] = {516.68, 143.53, 9186.98};
static float P120[3] = {519.73, 128.36, 9163.26};
static float P121[3] = {524.66, 141.43, 9138.62};
/* *INDENT-ON* */
void
Whale001(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N068);
glVertex3fv(P068);
glNormal3fv(N010);
glVertex3fv(P010);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N068);
glVertex3fv(P068);
glNormal3fv(N076);
glVertex3fv(P076);
glNormal3fv(N010);
glVertex3fv(P010);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N068);
glVertex3fv(P068);
glNormal3fv(N070);
glVertex3fv(P070);
glNormal3fv(N076);
glVertex3fv(P076);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N076);
glVertex3fv(P076);
glNormal3fv(N070);
glVertex3fv(P070);
glNormal3fv(N074);
glVertex3fv(P074);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N070);
glVertex3fv(P070);
glNormal3fv(N072);
glVertex3fv(P072);
glNormal3fv(N074);
glVertex3fv(P074);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N072);
glVertex3fv(P072);
glNormal3fv(N070);
glVertex3fv(P070);
glNormal3fv(N074);
glVertex3fv(P074);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N074);
glVertex3fv(P074);
glNormal3fv(N070);
glVertex3fv(P070);
glNormal3fv(N076);
glVertex3fv(P076);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N070);
glVertex3fv(P070);
glNormal3fv(N068);
glVertex3fv(P068);
glNormal3fv(N076);
glVertex3fv(P076);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N076);
glVertex3fv(P076);
glNormal3fv(N068);
glVertex3fv(P068);
glNormal3fv(N010);
glVertex3fv(P010);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N068);
glVertex3fv(P068);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N010);
glVertex3fv(P010);
glEnd();
}
void
Whale002(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N011);
glVertex3fv(P011);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N009);
glVertex3fv(P009);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N075);
glVertex3fv(P075);
glNormal3fv(N011);
glVertex3fv(P011);
glNormal3fv(N009);
glVertex3fv(P009);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N069);
glVertex3fv(P069);
glNormal3fv(N011);
glVertex3fv(P011);
glNormal3fv(N075);
glVertex3fv(P075);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N069);
glVertex3fv(P069);
glNormal3fv(N075);
glVertex3fv(P075);
glNormal3fv(N073);
glVertex3fv(P073);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N071);
glVertex3fv(P071);
glNormal3fv(N069);
glVertex3fv(P069);
glNormal3fv(N073);
glVertex3fv(P073);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N011);
glVertex3fv(P011);
glNormal3fv(N009);
glVertex3fv(P009);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N009);
glVertex3fv(P009);
glNormal3fv(N011);
glVertex3fv(P011);
glNormal3fv(N075);
glVertex3fv(P075);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N011);
glVertex3fv(P011);
glNormal3fv(N069);
glVertex3fv(P069);
glNormal3fv(N075);
glVertex3fv(P075);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N069);
glVertex3fv(P069);
glNormal3fv(N073);
glVertex3fv(P073);
glNormal3fv(N075);
glVertex3fv(P075);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N069);
glVertex3fv(P069);
glNormal3fv(N071);
glVertex3fv(P071);
glNormal3fv(N073);
glVertex3fv(P073);
glEnd();
}
void
Whale003(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N018);
glVertex3fv(P018);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N019);
glVertex3fv(P019);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N019);
glVertex3fv(P019);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N012);
glVertex3fv(P012);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N017);
glVertex3fv(P017);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N018);
glVertex3fv(P018);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N017);
glVertex3fv(P017);
glNormal3fv(N016);
glVertex3fv(P016);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N013);
glVertex3fv(P013);
glNormal3fv(N012);
glVertex3fv(P012);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N016);
glVertex3fv(P016);
glNormal3fv(N015);
glVertex3fv(P015);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N014);
glVertex3fv(P014);
glNormal3fv(N013);
glVertex3fv(P013);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N015);
glVertex3fv(P015);
glNormal3fv(N014);
glVertex3fv(P014);
glEnd();
}
void
Whale004(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N014);
glVertex3fv(P014);
glNormal3fv(N015);
glVertex3fv(P015);
glNormal3fv(N023);
glVertex3fv(P023);
glNormal3fv(N022);
glVertex3fv(P022);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N015);
glVertex3fv(P015);
glNormal3fv(N016);
glVertex3fv(P016);
glNormal3fv(N024);
glVertex3fv(P024);
glNormal3fv(N023);
glVertex3fv(P023);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N016);
glVertex3fv(P016);
glNormal3fv(N017);
glVertex3fv(P017);
glNormal3fv(N025);
glVertex3fv(P025);
glNormal3fv(N024);
glVertex3fv(P024);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N017);
glVertex3fv(P017);
glNormal3fv(N018);
glVertex3fv(P018);
glNormal3fv(N026);
glVertex3fv(P026);
glNormal3fv(N025);
glVertex3fv(P025);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N013);
glVertex3fv(P013);
glNormal3fv(N014);
glVertex3fv(P014);
glNormal3fv(N022);
glVertex3fv(P022);
glNormal3fv(N021);
glVertex3fv(P021);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N012);
glVertex3fv(P012);
glNormal3fv(N013);
glVertex3fv(P013);
glNormal3fv(N021);
glVertex3fv(P021);
glNormal3fv(N020);
glVertex3fv(P020);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N018);
glVertex3fv(P018);
glNormal3fv(N019);
glVertex3fv(P019);
glNormal3fv(N027);
glVertex3fv(P027);
glNormal3fv(N026);
glVertex3fv(P026);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N019);
glVertex3fv(P019);
glNormal3fv(N012);
glVertex3fv(P012);
glNormal3fv(N020);
glVertex3fv(P020);
glNormal3fv(N027);
glVertex3fv(P027);
glEnd();
}
void
Whale005(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N022);
glVertex3fv(P022);
glNormal3fv(N023);
glVertex3fv(P023);
glNormal3fv(N031);
glVertex3fv(P031);
glNormal3fv(N030);
glVertex3fv(P030);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N021);
glVertex3fv(P021);
glNormal3fv(N022);
glVertex3fv(P022);
glNormal3fv(N030);
glVertex3fv(P030);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N021);
glVertex3fv(P021);
glNormal3fv(N030);
glVertex3fv(P030);
glNormal3fv(N029);
glVertex3fv(P029);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N023);
glVertex3fv(P023);
glNormal3fv(N024);
glVertex3fv(P024);
glNormal3fv(N031);
glVertex3fv(P031);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N024);
glVertex3fv(P024);
glNormal3fv(N032);
glVertex3fv(P032);
glNormal3fv(N031);
glVertex3fv(P031);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N024);
glVertex3fv(P024);
glNormal3fv(N025);
glVertex3fv(P025);
glNormal3fv(N032);
glVertex3fv(P032);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N025);
glVertex3fv(P025);
glNormal3fv(N033);
glVertex3fv(P033);
glNormal3fv(N032);
glVertex3fv(P032);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N020);
glVertex3fv(P020);
glNormal3fv(N021);
glVertex3fv(P021);
glNormal3fv(N029);
glVertex3fv(P029);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N020);
glVertex3fv(P020);
glNormal3fv(N029);
glVertex3fv(P029);
glNormal3fv(N028);
glVertex3fv(P028);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N027);
glVertex3fv(P027);
glNormal3fv(N020);
glVertex3fv(P020);
glNormal3fv(N028);
glVertex3fv(P028);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N027);
glVertex3fv(P027);
glNormal3fv(N028);
glVertex3fv(P028);
glNormal3fv(N035);
glVertex3fv(P035);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N025);
glVertex3fv(P025);
glNormal3fv(N026);
glVertex3fv(P026);
glNormal3fv(N033);
glVertex3fv(P033);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N033);
glVertex3fv(P033);
glNormal3fv(N026);
glVertex3fv(P026);
glNormal3fv(N034);
glVertex3fv(P034);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N026);
glVertex3fv(P026);
glNormal3fv(N027);
glVertex3fv(P027);
glNormal3fv(N035);
glVertex3fv(P035);
glNormal3fv(N034);
glVertex3fv(P034);
glEnd();
}
void
Whale006(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N092);
glVertex3fv(P092);
glNormal3fv(N093);
glVertex3fv(P093);
glNormal3fv(N094);
glVertex3fv(P094);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N093);
glVertex3fv(P093);
glNormal3fv(N092);
glVertex3fv(P092);
glNormal3fv(N094);
glVertex3fv(P094);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N092);
glVertex3fv(P092);
glNormal3fv(N091);
glVertex3fv(P091);
glNormal3fv(N095);
glVertex3fv(P095);
glNormal3fv(N094);
glVertex3fv(P094);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N091);
glVertex3fv(P091);
glNormal3fv(N092);
glVertex3fv(P092);
glNormal3fv(N094);
glVertex3fv(P094);
glNormal3fv(N095);
glVertex3fv(P095);
glEnd();
}
void
Whale007(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N030);
glVertex3fv(P030);
glNormal3fv(N031);
glVertex3fv(P031);
glNormal3fv(N039);
glVertex3fv(P039);
glNormal3fv(N038);
glVertex3fv(P038);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N029);
glVertex3fv(P029);
glNormal3fv(N030);
glVertex3fv(P030);
glNormal3fv(N038);
glVertex3fv(P038);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N029);
glVertex3fv(P029);
glNormal3fv(N038);
glVertex3fv(P038);
glNormal3fv(N037);
glVertex3fv(P037);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N028);
glVertex3fv(P028);
glNormal3fv(N029);
glVertex3fv(P029);
glNormal3fv(N037);
glVertex3fv(P037);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N028);
glVertex3fv(P028);
glNormal3fv(N037);
glVertex3fv(P037);
glNormal3fv(N036);
glVertex3fv(P036);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N035);
glVertex3fv(P035);
glNormal3fv(N028);
glVertex3fv(P028);
glNormal3fv(N036);
glVertex3fv(P036);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N035);
glVertex3fv(P035);
glNormal3fv(N036);
glVertex3fv(P036);
glNormal3fv(N043);
glVertex3fv(P043);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N034);
glVertex3fv(P034);
glNormal3fv(N035);
glVertex3fv(P035);
glNormal3fv(N043);
glVertex3fv(P043);
glNormal3fv(N042);
glVertex3fv(P042);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N033);
glVertex3fv(P033);
glNormal3fv(N034);
glVertex3fv(P034);
glNormal3fv(N042);
glVertex3fv(P042);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N033);
glVertex3fv(P033);
glNormal3fv(N042);
glVertex3fv(P042);
glNormal3fv(N041);
glVertex3fv(P041);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N031);
glVertex3fv(P031);
glNormal3fv(N032);
glVertex3fv(P032);
glNormal3fv(N039);
glVertex3fv(P039);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N039);
glVertex3fv(P039);
glNormal3fv(N032);
glVertex3fv(P032);
glNormal3fv(N040);
glVertex3fv(P040);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N032);
glVertex3fv(P032);
glNormal3fv(N033);
glVertex3fv(P033);
glNormal3fv(N040);
glVertex3fv(P040);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N040);
glVertex3fv(P040);
glNormal3fv(N033);
glVertex3fv(P033);
glNormal3fv(N041);
glVertex3fv(P041);
glEnd();
}
void
Whale008(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N042);
glVertex3fv(P042);
glNormal3fv(N043);
glVertex3fv(P043);
glNormal3fv(N051);
glVertex3fv(P051);
glNormal3fv(N050);
glVertex3fv(P050);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N043);
glVertex3fv(P043);
glNormal3fv(N036);
glVertex3fv(P036);
glNormal3fv(N051);
glVertex3fv(P051);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N051);
glVertex3fv(P051);
glNormal3fv(N036);
glVertex3fv(P036);
glNormal3fv(N044);
glVertex3fv(P044);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N041);
glVertex3fv(P041);
glNormal3fv(N042);
glVertex3fv(P042);
glNormal3fv(N050);
glVertex3fv(P050);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N041);
glVertex3fv(P041);
glNormal3fv(N050);
glVertex3fv(P050);
glNormal3fv(N049);
glVertex3fv(P049);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N036);
glVertex3fv(P036);
glNormal3fv(N037);
glVertex3fv(P037);
glNormal3fv(N044);
glVertex3fv(P044);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N044);
glVertex3fv(P044);
glNormal3fv(N037);
glVertex3fv(P037);
glNormal3fv(N045);
glVertex3fv(P045);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N040);
glVertex3fv(P040);
glNormal3fv(N041);
glVertex3fv(P041);
glNormal3fv(N049);
glVertex3fv(P049);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N040);
glVertex3fv(P040);
glNormal3fv(N049);
glVertex3fv(P049);
glNormal3fv(N048);
glVertex3fv(P048);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N039);
glVertex3fv(P039);
glNormal3fv(N040);
glVertex3fv(P040);
glNormal3fv(N048);
glVertex3fv(P048);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N039);
glVertex3fv(P039);
glNormal3fv(N048);
glVertex3fv(P048);
glNormal3fv(N047);
glVertex3fv(P047);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N037);
glVertex3fv(P037);
glNormal3fv(N038);
glVertex3fv(P038);
glNormal3fv(N045);
glVertex3fv(P045);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N038);
glVertex3fv(P038);
glNormal3fv(N046);
glVertex3fv(P046);
glNormal3fv(N045);
glVertex3fv(P045);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N038);
glVertex3fv(P038);
glNormal3fv(N039);
glVertex3fv(P039);
glNormal3fv(N047);
glVertex3fv(P047);
glNormal3fv(N046);
glVertex3fv(P046);
glEnd();
}
void
Whale009(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N050);
glVertex3fv(P050);
glNormal3fv(N051);
glVertex3fv(P051);
glNormal3fv(N059);
glVertex3fv(P059);
glNormal3fv(N058);
glVertex3fv(P058);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N051);
glVertex3fv(P051);
glNormal3fv(N044);
glVertex3fv(P044);
glNormal3fv(N059);
glVertex3fv(P059);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N059);
glVertex3fv(P059);
glNormal3fv(N044);
glVertex3fv(P044);
glNormal3fv(N052);
glVertex3fv(P052);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N044);
glVertex3fv(P044);
glNormal3fv(N045);
glVertex3fv(P045);
glNormal3fv(N053);
glVertex3fv(P053);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N044);
glVertex3fv(P044);
glNormal3fv(N053);
glVertex3fv(P053);
glNormal3fv(N052);
glVertex3fv(P052);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N049);
glVertex3fv(P049);
glNormal3fv(N050);
glVertex3fv(P050);
glNormal3fv(N058);
glVertex3fv(P058);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N049);
glVertex3fv(P049);
glNormal3fv(N058);
glVertex3fv(P058);
glNormal3fv(N057);
glVertex3fv(P057);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N048);
glVertex3fv(P048);
glNormal3fv(N049);
glVertex3fv(P049);
glNormal3fv(N057);
glVertex3fv(P057);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N048);
glVertex3fv(P048);
glNormal3fv(N057);
glVertex3fv(P057);
glNormal3fv(N056);
glVertex3fv(P056);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N047);
glVertex3fv(P047);
glNormal3fv(N048);
glVertex3fv(P048);
glNormal3fv(N056);
glVertex3fv(P056);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N047);
glVertex3fv(P047);
glNormal3fv(N056);
glVertex3fv(P056);
glNormal3fv(N055);
glVertex3fv(P055);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N045);
glVertex3fv(P045);
glNormal3fv(N046);
glVertex3fv(P046);
glNormal3fv(N053);
glVertex3fv(P053);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N046);
glVertex3fv(P046);
glNormal3fv(N054);
glVertex3fv(P054);
glNormal3fv(N053);
glVertex3fv(P053);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N046);
glVertex3fv(P046);
glNormal3fv(N047);
glVertex3fv(P047);
glNormal3fv(N055);
glVertex3fv(P055);
glNormal3fv(N054);
glVertex3fv(P054);
glEnd();
}
void
Whale010(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N080);
glVertex3fv(P080);
glNormal3fv(N081);
glVertex3fv(P081);
glNormal3fv(N085);
glVertex3fv(P085);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N081);
glVertex3fv(P081);
glNormal3fv(N083);
glVertex3fv(P083);
glNormal3fv(N085);
glVertex3fv(P085);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N085);
glVertex3fv(P085);
glNormal3fv(N083);
glVertex3fv(P083);
glNormal3fv(N077);
glVertex3fv(P077);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N083);
glVertex3fv(P083);
glNormal3fv(N087);
glVertex3fv(P087);
glNormal3fv(N077);
glVertex3fv(P077);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N077);
glVertex3fv(P077);
glNormal3fv(N087);
glVertex3fv(P087);
glNormal3fv(N090);
glVertex3fv(P090);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N081);
glVertex3fv(P081);
glNormal3fv(N080);
glVertex3fv(P080);
glNormal3fv(N085);
glVertex3fv(P085);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N083);
glVertex3fv(P083);
glNormal3fv(N081);
glVertex3fv(P081);
glNormal3fv(N085);
glVertex3fv(P085);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N083);
glVertex3fv(P083);
glNormal3fv(N085);
glVertex3fv(P085);
glNormal3fv(N077);
glVertex3fv(P077);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N087);
glVertex3fv(P087);
glNormal3fv(N083);
glVertex3fv(P083);
glNormal3fv(N077);
glVertex3fv(P077);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N087);
glVertex3fv(P087);
glNormal3fv(N077);
glVertex3fv(P077);
glNormal3fv(N090);
glVertex3fv(P090);
glEnd();
}
void
Whale011(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N082);
glVertex3fv(P082);
glNormal3fv(N084);
glVertex3fv(P084);
glNormal3fv(N079);
glVertex3fv(P079);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N084);
glVertex3fv(P084);
glNormal3fv(N086);
glVertex3fv(P086);
glNormal3fv(N079);
glVertex3fv(P079);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N079);
glVertex3fv(P079);
glNormal3fv(N086);
glVertex3fv(P086);
glNormal3fv(N078);
glVertex3fv(P078);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N086);
glVertex3fv(P086);
glNormal3fv(N088);
glVertex3fv(P088);
glNormal3fv(N078);
glVertex3fv(P078);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N078);
glVertex3fv(P078);
glNormal3fv(N088);
glVertex3fv(P088);
glNormal3fv(N089);
glVertex3fv(P089);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N088);
glVertex3fv(P088);
glNormal3fv(N086);
glVertex3fv(P086);
glNormal3fv(N089);
glVertex3fv(P089);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N089);
glVertex3fv(P089);
glNormal3fv(N086);
glVertex3fv(P086);
glNormal3fv(N078);
glVertex3fv(P078);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N086);
glVertex3fv(P086);
glNormal3fv(N084);
glVertex3fv(P084);
glNormal3fv(N078);
glVertex3fv(P078);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N078);
glVertex3fv(P078);
glNormal3fv(N084);
glVertex3fv(P084);
glNormal3fv(N079);
glVertex3fv(P079);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N084);
glVertex3fv(P084);
glNormal3fv(N082);
glVertex3fv(P082);
glNormal3fv(N079);
glVertex3fv(P079);
glEnd();
}
void
Whale012(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N058);
glVertex3fv(P058);
glNormal3fv(N059);
glVertex3fv(P059);
glNormal3fv(N067);
glVertex3fv(P067);
glNormal3fv(N066);
glVertex3fv(P066);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N059);
glVertex3fv(P059);
glNormal3fv(N052);
glVertex3fv(P052);
glNormal3fv(N060);
glVertex3fv(P060);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N059);
glVertex3fv(P059);
glNormal3fv(N060);
glVertex3fv(P060);
glNormal3fv(N067);
glVertex3fv(P067);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N058);
glVertex3fv(P058);
glNormal3fv(N066);
glVertex3fv(P066);
glNormal3fv(N065);
glVertex3fv(P065);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N058);
glVertex3fv(P058);
glNormal3fv(N065);
glVertex3fv(P065);
glNormal3fv(N057);
glVertex3fv(P057);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N056);
glVertex3fv(P056);
glNormal3fv(N057);
glVertex3fv(P057);
glNormal3fv(N065);
glVertex3fv(P065);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N056);
glVertex3fv(P056);
glNormal3fv(N065);
glVertex3fv(P065);
glNormal3fv(N006);
glVertex3fv(P006);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N056);
glVertex3fv(P056);
glNormal3fv(N006);
glVertex3fv(P006);
glNormal3fv(N063);
glVertex3fv(P063);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N056);
glVertex3fv(P056);
glNormal3fv(N063);
glVertex3fv(P063);
glNormal3fv(N055);
glVertex3fv(P055);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N054);
glVertex3fv(P054);
glNormal3fv(N062);
glVertex3fv(P062);
glNormal3fv(N005);
glVertex3fv(P005);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N054);
glVertex3fv(P054);
glNormal3fv(N005);
glVertex3fv(P005);
glNormal3fv(N053);
glVertex3fv(P053);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N053);
glVertex3fv(P053);
glNormal3fv(N005);
glVertex3fv(P005);
glNormal3fv(N060);
glVertex3fv(P060);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N053);
glVertex3fv(P053);
glNormal3fv(N060);
glVertex3fv(P060);
glNormal3fv(N052);
glVertex3fv(P052);
glEnd();
}
void
Whale013(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N066);
glVertex3fv(P066);
glNormal3fv(N067);
glVertex3fv(P067);
glNormal3fv(N096);
glVertex3fv(P096);
glNormal3fv(N097);
glVertex3fv(P097);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N097);
glVertex3fv(P097);
glNormal3fv(N096);
glVertex3fv(P096);
glNormal3fv(N098);
glVertex3fv(P098);
glNormal3fv(N099);
glVertex3fv(P099);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N065);
glVertex3fv(P065);
glNormal3fv(N066);
glVertex3fv(P066);
glNormal3fv(N097);
glVertex3fv(P097);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N067);
glVertex3fv(P067);
glNormal3fv(N060);
glVertex3fv(P060);
glNormal3fv(N096);
glVertex3fv(P096);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N060);
glVertex3fv(P060);
glNormal3fv(N005);
glVertex3fv(P005);
glNormal3fv(N096);
glVertex3fv(P096);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N096);
glVertex3fv(P096);
glNormal3fv(N005);
glVertex3fv(P005);
glNormal3fv(N098);
glVertex3fv(P098);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N006);
glVertex3fv(P006);
glNormal3fv(N065);
glVertex3fv(P065);
glNormal3fv(N097);
glVertex3fv(P097);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N006);
glVertex3fv(P006);
glNormal3fv(N097);
glVertex3fv(P097);
glNormal3fv(N099);
glVertex3fv(P099);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P005);
glVertex3fv(P006);
glVertex3fv(P099);
glVertex3fv(P098);
glEnd();
}
void
Whale014(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N062);
glVertex3fv(P062);
glNormal3fv(N004);
glVertex3fv(P004);
glNormal3fv(N005);
glVertex3fv(P005);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P006);
glVertex3fv(P005);
glVertex3fv(P004);
glVertex3fv(P008);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N063);
glVertex3fv(P063);
glNormal3fv(N006);
glVertex3fv(P006);
glNormal3fv(N002);
glVertex3fv(P002);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N006);
glVertex3fv(P006);
glNormal3fv(N008);
glVertex3fv(P008);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N008);
glVertex3fv(P008);
glNormal3fv(N004);
glVertex3fv(P004);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N062);
glVertex3fv(P062);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N004);
glVertex3fv(P004);
glEnd();
}
void
Whale015(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N055);
glVertex3fv(P055);
glNormal3fv(N003);
glVertex3fv(P003);
glNormal3fv(N054);
glVertex3fv(P054);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N003);
glVertex3fv(P003);
glNormal3fv(N055);
glVertex3fv(P055);
glNormal3fv(N063);
glVertex3fv(P063);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N003);
glVertex3fv(P003);
glNormal3fv(N063);
glVertex3fv(P063);
glNormal3fv(N100);
glVertex3fv(P100);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N003);
glVertex3fv(P003);
glNormal3fv(N100);
glVertex3fv(P100);
glNormal3fv(N054);
glVertex3fv(P054);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N054);
glVertex3fv(P054);
glNormal3fv(N100);
glVertex3fv(P100);
glNormal3fv(N062);
glVertex3fv(P062);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N100);
glVertex3fv(P100);
glNormal3fv(N063);
glVertex3fv(P063);
glNormal3fv(N002);
glVertex3fv(P002);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N100);
glVertex3fv(P100);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N062);
glVertex3fv(P062);
glEnd();
}
void
Whale016(void)
{
glBegin(GL_POLYGON);
glVertex3fv(P104);
glVertex3fv(P105);
glVertex3fv(P106);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P107);
glVertex3fv(P108);
glVertex3fv(P109);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P110);
glVertex3fv(P111);
glVertex3fv(P112);
glVertex3fv(P113);
glVertex3fv(P114);
glVertex3fv(P115);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P116);
glVertex3fv(P117);
glVertex3fv(P118);
glVertex3fv(P119);
glVertex3fv(P120);
glVertex3fv(P121);
glEnd();
}
void
DrawWhale(fishRec * fish)
{
float seg0, seg1, seg2, seg3, seg4, seg5, seg6, seg7;
float pitch, thrash, chomp;
fish->htail = (int) (fish->htail - (int) (5.0 * fish->v)) % 360;
thrash = 70.0 * fish->v;
seg0 = 1.5 * thrash * sin((fish->htail) * RRAD);
seg1 = 2.5 * thrash * sin((fish->htail + 10.0) * RRAD);
seg2 = 3.7 * thrash * sin((fish->htail + 15.0) * RRAD);
seg3 = 4.8 * thrash * sin((fish->htail + 23.0) * RRAD);
seg4 = 6.0 * thrash * sin((fish->htail + 28.0) * RRAD);
seg5 = 6.5 * thrash * sin((fish->htail + 35.0) * RRAD);
seg6 = 6.5 * thrash * sin((fish->htail + 40.0) * RRAD);
seg7 = 6.5 * thrash * sin((fish->htail + 55.0) * RRAD);
pitch = fish->v * sin((fish->htail - 160.0) * RRAD);
chomp = 0.0;
if (fish->v > 2.0) {
chomp = -(fish->v - 2.0) * 200.0;
}
P012[1] = iP012[1] + seg5;
P013[1] = iP013[1] + seg5;
P014[1] = iP014[1] + seg5;
P015[1] = iP015[1] + seg5;
P016[1] = iP016[1] + seg5;
P017[1] = iP017[1] + seg5;
P018[1] = iP018[1] + seg5;
P019[1] = iP019[1] + seg5;
P020[1] = iP020[1] + seg4;
P021[1] = iP021[1] + seg4;
P022[1] = iP022[1] + seg4;
P023[1] = iP023[1] + seg4;
P024[1] = iP024[1] + seg4;
P025[1] = iP025[1] + seg4;
P026[1] = iP026[1] + seg4;
P027[1] = iP027[1] + seg4;
P028[1] = iP028[1] + seg2;
P029[1] = iP029[1] + seg2;
P030[1] = iP030[1] + seg2;
P031[1] = iP031[1] + seg2;
P032[1] = iP032[1] + seg2;
P033[1] = iP033[1] + seg2;
P034[1] = iP034[1] + seg2;
P035[1] = iP035[1] + seg2;
P036[1] = iP036[1] + seg1;
P037[1] = iP037[1] + seg1;
P038[1] = iP038[1] + seg1;
P039[1] = iP039[1] + seg1;
P040[1] = iP040[1] + seg1;
P041[1] = iP041[1] + seg1;
P042[1] = iP042[1] + seg1;
P043[1] = iP043[1] + seg1;
P044[1] = iP044[1] + seg0;
P045[1] = iP045[1] + seg0;
P046[1] = iP046[1] + seg0;
P047[1] = iP047[1] + seg0;
P048[1] = iP048[1] + seg0;
P049[1] = iP049[1] + seg0;
P050[1] = iP050[1] + seg0;
P051[1] = iP051[1] + seg0;
P009[1] = iP009[1] + seg6;
P010[1] = iP010[1] + seg6;
P075[1] = iP075[1] + seg6;
P076[1] = iP076[1] + seg6;
P001[1] = iP001[1] + seg7;
P011[1] = iP011[1] + seg7;
P068[1] = iP068[1] + seg7;
P069[1] = iP069[1] + seg7;
P070[1] = iP070[1] + seg7;
P071[1] = iP071[1] + seg7;
P072[1] = iP072[1] + seg7;
P073[1] = iP073[1] + seg7;
P074[1] = iP074[1] + seg7;
P091[1] = iP091[1] + seg3 * 1.1;
P092[1] = iP092[1] + seg3;
P093[1] = iP093[1] + seg3;
P094[1] = iP094[1] + seg3;
P095[1] = iP095[1] + seg3 * 0.9;
P099[1] = iP099[1] + chomp;
P098[1] = iP098[1] + chomp;
P097[1] = iP097[1] + chomp;
P096[1] = iP096[1] + chomp;
glPushMatrix();
glRotatef(pitch, 1.0, 0.0, 0.0);
glTranslatef(0.0, 0.0, 8000.0);
glRotatef(180.0, 0.0, 1.0, 0.0);
glScalef(3.0, 3.0, 3.0);
glEnable(GL_CULL_FACE);
Whale001();
Whale002();
Whale003();
Whale004();
Whale005();
Whale006();
Whale007();
Whale008();
Whale009();
Whale010();
Whale011();
Whale012();
Whale013();
Whale014();
Whale015();
Whale016();
glDisable(GL_CULL_FACE);
glPopMatrix();
}
/* Simple program: Create a blank window, wait for keypress, quit.
Please see the SDL documentation for details on using the SDL API:
/Developer/Documentation/SDL/docs.html
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "SDL.h"
extern void Atlantis_Init ();
extern void Atlantis_Reshape (int w, int h);
extern void Atlantis_Animate ();
extern void Atlantis_Display ();
static SDL_Surface *gScreen;
static void initAttributes ()
{
// Setup attributes we want for the OpenGL context
int value;
// Don't set color bit sizes (SDL_GL_RED_SIZE, etc)
// Mac OS X will always use 8-8-8-8 ARGB for 32-bit screens and
// 5-5-5 RGB for 16-bit screens
// Request a 16-bit depth buffer (without this, there is no depth buffer)
value = 16;
SDL_GL_SetAttribute (SDL_GL_DEPTH_SIZE, value);
// Request double-buffered OpenGL
// The fact that windows are double-buffered on Mac OS X has no effect
// on OpenGL double buffering.
value = 1;
SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, value);
}
static void printAttributes ()
{
// Print out attributes of the context we created
int nAttr;
int i;
int attr[] = { SDL_GL_RED_SIZE, SDL_GL_BLUE_SIZE, SDL_GL_GREEN_SIZE,
SDL_GL_ALPHA_SIZE, SDL_GL_BUFFER_SIZE, SDL_GL_DEPTH_SIZE };
char *desc[] = { "Red size: %d bits\n", "Blue size: %d bits\n", "Green size: %d bits\n",
"Alpha size: %d bits\n", "Color buffer size: %d bits\n",
"Depth bufer size: %d bits\n" };
nAttr = sizeof(attr) / sizeof(int);
for (i = 0; i < nAttr; i++) {
int value;
SDL_GL_GetAttribute (attr[i], &value);
printf (desc[i], value);
}
}
static void createSurface (int fullscreen)
{
Uint32 flags = 0;
flags = SDL_OPENGL;
if (fullscreen)
flags |= SDL_FULLSCREEN;
// Create window
gScreen = SDL_SetVideoMode (640, 480, 0, flags);
if (gScreen == NULL) {
fprintf (stderr, "Couldn't set 640x480 OpenGL video mode: %s\n",
SDL_GetError());
SDL_Quit();
exit(2);
}
}
static void initGL ()
{
Atlantis_Init ();
Atlantis_Reshape (gScreen->w, gScreen->h);
}
static void drawGL ()
{
Atlantis_Animate ();
Atlantis_Display ();
}
static void mainLoop ()
{
SDL_Event event;
int done = 0;
int fps = 24;
int delay = 1000/fps;
int thenTicks = -1;
int nowTicks;
while ( !done ) {
/* Check for events */
while ( SDL_PollEvent (&event) ) {
switch (event.type) {
case SDL_MOUSEMOTION:
break;
case SDL_MOUSEBUTTONDOWN:
break;
case SDL_KEYDOWN:
/* Any keypress quits the app... */
case SDL_QUIT:
done = 1;
break;
default:
break;
}
}
// Draw at 24 hz
// This approach is not normally recommended - it is better to
// use time-based animation and run as fast as possible
drawGL ();
SDL_GL_SwapBuffers ();
// Time how long each draw-swap-delay cycle takes
// and adjust delay to get closer to target framerate
if (thenTicks > 0) {
nowTicks = SDL_GetTicks ();
delay += (1000/fps - (nowTicks-thenTicks));
thenTicks = nowTicks;
if (delay < 0)
delay = 1000/fps;
}
else {
thenTicks = SDL_GetTicks ();
}
SDL_Delay (delay);
}
}
int main(int argc, char *argv[])
{
// Init SDL video subsystem
if ( SDL_Init (SDL_INIT_VIDEO) < 0 ) {
fprintf(stderr, "Couldn't initialize SDL: %s\n",
SDL_GetError());
exit(1);
}
// Set GL context attributes
initAttributes ();
// Create GL context
createSurface (0);
// Get GL context attributes
printAttributes ();
// Init GL state
initGL ();
// Draw, get events...
mainLoop ();
// Cleanup
SDL_Quit();
return 0;
}
Binary files a/Xcode/TemplatesForXcode/SDL Application/English.lproj/InfoPlist.strings and /dev/null differ Binary files a/Xcode/TemplatesForXcode/SDL Application/English.lproj/InfoPlist.strings and /dev/null differ
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>com.yourcompany.«PROJECTNAMEASXML»</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>NSMainNibFile</key>
<string>SDLMain</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
{
FilesToRename = {
"SDLApp_Prefix.pch" = "PROJECTNAME_Prefix.pch";
};
FilesToMacroExpand = (
"PROJECTNAME_Prefix.pch",
"Info.plist",
"English.lproj/InfoPlist.strings",
"main.c",
);
Description = "This project builds an SDL-based application.";
}
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 42;
objects = {
/* Begin PBXBuildFile section */
002F39FA09D0881F00EBEB88 /* SDL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002F39F909D0881F00EBEB88 /* SDL.framework */; };
002F3A0009D0884600EBEB88 /* SDL.framework in Copy Frameworks into .app bundle */ = {isa = PBXBuildFile; fileRef = 002F39F909D0881F00EBEB88 /* SDL.framework */; };
002F3A2E09D0888800EBEB88 /* SDLMain.m in Sources */ = {isa = PBXBuildFile; fileRef = 002F3A2C09D0888800EBEB88 /* SDLMain.m */; };
002F3A3F09D088BA00EBEB88 /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = 002F3A3E09D088BA00EBEB88 /* main.c */; };
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; };
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
/* End PBXBuildFile section */
/* Begin PBXBuildStyle section */
4A9504CCFFE6A4B311CA0CBA /* Debug */ = {
isa = PBXBuildStyle;
buildSettings = {
};
name = Debug;
};
4A9504CDFFE6A4B311CA0CBA /* Release */ = {
isa = PBXBuildStyle;
buildSettings = {
};
name = Release;
};
/* End PBXBuildStyle section */
/* Begin PBXCopyFilesBuildPhase section */
002F39FD09D0883400EBEB88 /* Copy Frameworks into .app bundle */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
002F3A0009D0884600EBEB88 /* SDL.framework in Copy Frameworks into .app bundle */,
);
name = "Copy Frameworks into .app bundle";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
002F39F909D0881F00EBEB88 /* SDL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL.framework; path = /Library/Frameworks/SDL.framework; sourceTree = "<absolute>"; };
002F3A2B09D0888800EBEB88 /* SDLMain.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SDLMain.h; sourceTree = SOURCE_ROOT; };
002F3A2C09D0888800EBEB88 /* SDLMain.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = SDLMain.m; sourceTree = SOURCE_ROOT; };
002F3A3E09D088BA00EBEB88 /* main.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = SOURCE_ROOT; };
089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
32CA4F630368D1EE00C91783 /* «PROJECTNAME»_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file; path = "«PROJECTNAME»_Prefix.pch"; sourceTree = "<group>"; };
8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
8D1107320486CEB800E47090 /* «PROJECTNAME».app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "«PROJECTNAME».app"; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
8D11072E0486CEB800E47090 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
002F39FA09D0881F00EBEB88 /* SDL.framework in Frameworks */,
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
080E96DDFE201D6D7F000001 /* Classes */ = {
isa = PBXGroup;
children = (
002F3A2B09D0888800EBEB88 /* SDLMain.h */,
002F3A2C09D0888800EBEB88 /* SDLMain.m */,
);
name = Classes;
sourceTree = "<group>";
};
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = {
isa = PBXGroup;
children = (
002F39F909D0881F00EBEB88 /* SDL.framework */,
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
);
name = "Linked Frameworks";
sourceTree = "<group>";
};
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = {
isa = PBXGroup;
children = (
29B97324FDCFA39411CA2CEA /* AppKit.framework */,
29B97325FDCFA39411CA2CEA /* Foundation.framework */,
);
name = "Other Frameworks";
sourceTree = "<group>";
};
19C28FACFE9D520D11CA2CBB /* Products */ = {
isa = PBXGroup;
children = (
8D1107320486CEB800E47090 /* «PROJECTNAME».app */,
);
name = Products;
sourceTree = "<group>";
};
29B97314FDCFA39411CA2CEA /* «PROJECTNAMEASXML» */ = {
isa = PBXGroup;
children = (
080E96DDFE201D6D7F000001 /* Classes */,
29B97315FDCFA39411CA2CEA /* Other Sources */,
29B97317FDCFA39411CA2CEA /* Resources */,
29B97323FDCFA39411CA2CEA /* Frameworks */,
19C28FACFE9D520D11CA2CBB /* Products */,
);
name = "«PROJECTNAMEASXML»";
sourceTree = "<group>";
};
29B97315FDCFA39411CA2CEA /* Other Sources */ = {
isa = PBXGroup;
children = (
32CA4F630368D1EE00C91783 /* «PROJECTNAME»_Prefix.pch */,
002F3A3E09D088BA00EBEB88 /* main.c */,
);
name = "Other Sources";
sourceTree = "<group>";
};
29B97317FDCFA39411CA2CEA /* Resources */ = {
isa = PBXGroup;
children = (
8D1107310486CEB800E47090 /* Info.plist */,
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */,
);
name = Resources;
sourceTree = "<group>";
};
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
isa = PBXGroup;
children = (
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */,
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
8D1107260486CEB800E47090 /* «PROJECTNAME» */ = {
isa = PBXNativeTarget;
buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "«PROJECTNAME»" */;
buildPhases = (
8D1107290486CEB800E47090 /* Resources */,
8D11072C0486CEB800E47090 /* Sources */,
8D11072E0486CEB800E47090 /* Frameworks */,
002F39FD09D0883400EBEB88 /* Copy Frameworks into .app bundle */,
);
buildRules = (
);
buildSettings = {
};
dependencies = (
);
name = "«PROJECTNAME»";
productInstallPath = "$(HOME)/Applications";
productName = "«PROJECTNAME»";
productReference = 8D1107320486CEB800E47090 /* «PROJECTNAME».app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
29B97313FDCFA39411CA2CEA /* Project object */ = {
isa = PBXProject;
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "SDLApp" */;
buildSettings = {
};
buildStyles = (
4A9504CCFFE6A4B311CA0CBA /* Debug */,
4A9504CDFFE6A4B311CA0CBA /* Release */,
);
hasScannedForEncodings = 1;
mainGroup = 29B97314FDCFA39411CA2CEA /* «PROJECTNAMEASXML» */;
projectDirPath = "";
targets = (
8D1107260486CEB800E47090 /* «PROJECTNAME» */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
8D1107290486CEB800E47090 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
8D11072C0486CEB800E47090 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
002F3A2E09D0888800EBEB88 /* SDLMain.m in Sources */,
002F3A3F09D088BA00EBEB88 /* main.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
089C165DFE840E0CC02AAC07 /* English */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
C01FCF4B08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
COPY_PHASE_STRIP = NO;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_FIX_AND_CONTINUE = YES;
GCC_MODEL_TUNING = G5;
GCC_OPTIMIZATION_LEVEL = 0;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
PRODUCT_NAME = "«PROJECTNAME»";
WRAPPER_EXTENSION = app;
ZERO_LINK = YES;
};
name = Debug;
};
C01FCF4C08A954540054247B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = (
ppc,
i386,
);
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_MODEL_TUNING = G5;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
PRODUCT_NAME = "«PROJECTNAME»";
WRAPPER_EXTENSION = app;
};
name = Release;
};
C01FCF4F08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
FRAMEWORK_SEARCH_PATHS = (
"$(HOME)/Library/Frameworks",
/Library/Frameworks,
"$(FRAMEWORK_SEARCH_PATHS)",
);
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = (
"$(HOME)/Library/Frameworks/SDL.framework/Headers",
/Library/Frameworks/SDL.framework/Headers,
"$(HEADER_SEARCH_PATHS)",
);
PREBINDING = NO;
SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
};
name = Debug;
};
C01FCF5008A954540054247B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
FRAMEWORK_SEARCH_PATHS = (
"$(HOME)/Library/Frameworks",
/Library/Frameworks,
"$(FRAMEWORK_SEARCH_PATHS)",
);
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = (
"$(HOME)/Library/Frameworks/SDL.framework/Headers",
/Library/Frameworks/SDL.framework/Headers,
"$(HEADER_SEARCH_PATHS)",
);
PREBINDING = NO;
SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "«PROJECTNAME»" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C01FCF4B08A954540054247B /* Debug */,
C01FCF4C08A954540054247B /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
C01FCF4E08A954540054247B /* Build configuration list for PBXProject "SDLApp" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C01FCF4F08A954540054247B /* Debug */,
C01FCF5008A954540054247B /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
}
//
// Prefix header for all source files of the 'PROJECTNAME' target in the 'PROJECTNAME' project
//
#include "SDL.h"
#ifdef __OBJC__
#import <Cocoa/Cocoa.h>
#endif
/* SDLMain.m - main entry point for our Cocoa-ized SDL app
Initial Version: Darrell Walisser <dwaliss1@purdue.edu>
Non-NIB-Code & other changes: Max Horn <max@quendi.de>
Feel free to customize this file to suit your needs
*/
#import <Cocoa/Cocoa.h>
@interface SDLMain : NSObject
@end
/* SDLMain.m - main entry point for our Cocoa-ized SDL app
Initial Version: Darrell Walisser <dwaliss1@purdue.edu>
Non-NIB-Code & other changes: Max Horn <max@quendi.de>
Feel free to customize this file to suit your needs
*/
#import "SDL.h"
#import "SDLMain.h"
#import <sys/param.h> /* for MAXPATHLEN */
#import <unistd.h>
/* For some reaon, Apple removed setAppleMenu from the headers in 10.4,
but the method still is there and works. To avoid warnings, we declare
it ourselves here. */
@interface NSApplication(SDL_Missing_Methods)
- (void)setAppleMenu:(NSMenu *)menu;
@end
/* Use this flag to determine whether we use SDLMain.nib or not */
#define SDL_USE_NIB_FILE 0
/* Use this flag to determine whether we use CPS (docking) or not */
#define SDL_USE_CPS 1
#ifdef SDL_USE_CPS
/* Portions of CPS.h */
typedef struct CPSProcessSerNum
{
UInt32 lo;
UInt32 hi;
} CPSProcessSerNum;
extern OSErr CPSGetCurrentProcess( CPSProcessSerNum *psn);
extern OSErr CPSEnableForegroundOperation( CPSProcessSerNum *psn, UInt32 _arg2, UInt32 _arg3, UInt32 _arg4, UInt32 _arg5);
extern OSErr CPSSetFrontProcess( CPSProcessSerNum *psn);
#endif /* SDL_USE_CPS */
static int gArgc;
static char **gArgv;
static BOOL gFinderLaunch;
static BOOL gCalledAppMainline = FALSE;
static NSString *getApplicationName(void)
{
NSDictionary *dict;
NSString *appName = 0;
/* Determine the application name */
dict = (NSDictionary *)CFBundleGetInfoDictionary(CFBundleGetMainBundle());
if (dict)
appName = [dict objectForKey: @"CFBundleName"];
if (![appName length])
appName = [[NSProcessInfo processInfo] processName];
return appName;
}
#if SDL_USE_NIB_FILE
/* A helper category for NSString */
@interface NSString (ReplaceSubString)
- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString;
@end
#endif
@interface SDLApplication : NSApplication
@end
@implementation SDLApplication
/* Invoked from the Quit menu item */
- (void)terminate:(id)sender
{
/* Post a SDL_QUIT event */
SDL_Event event;
event.type = SDL_QUIT;
SDL_PushEvent(&event);
}
@end
/* The main class of the application, the application's delegate */
@implementation SDLMain
/* Set the working directory to the .app's parent directory */
- (void) setupWorkingDirectory:(BOOL)shouldChdir
{
if (shouldChdir)
{
char parentdir[MAXPATHLEN];
CFURLRef url = CFBundleCopyBundleURL(CFBundleGetMainBundle());
CFURLRef url2 = CFURLCreateCopyDeletingLastPathComponent(0, url);
if (CFURLGetFileSystemRepresentation(url2, true, (UInt8 *)parentdir, MAXPATHLEN)) {
assert ( chdir (parentdir) == 0 ); /* chdir to the binary app's parent */
}
CFRelease(url);
CFRelease(url2);
}
}
#if SDL_USE_NIB_FILE
/* Fix menu to contain the real app name instead of "SDL App" */
- (void)fixMenu:(NSMenu *)aMenu withAppName:(NSString *)appName
{
NSRange aRange;
NSEnumerator *enumerator;
NSMenuItem *menuItem;
aRange = [[aMenu title] rangeOfString:@"SDL App"];
if (aRange.length != 0)
[aMenu setTitle: [[aMenu title] stringByReplacingRange:aRange with:appName]];
enumerator = [[aMenu itemArray] objectEnumerator];
while ((menuItem = [enumerator nextObject]))
{
aRange = [[menuItem title] rangeOfString:@"SDL App"];
if (aRange.length != 0)
[menuItem setTitle: [[menuItem title] stringByReplacingRange:aRange with:appName]];
if ([menuItem hasSubmenu])
[self fixMenu:[menuItem submenu] withAppName:appName];
}
[ aMenu sizeToFit ];
}
#else
static void setApplicationMenu(void)
{
/* warning: this code is very odd */
NSMenu *appleMenu;
NSMenuItem *menuItem;
NSString *title;
NSString *appName;
appName = getApplicationName();
appleMenu = [[NSMenu alloc] initWithTitle:@""];
/* Add menu items */
title = [@"About " stringByAppendingString:appName];
[appleMenu addItemWithTitle:title action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""];
[appleMenu addItem:[NSMenuItem separatorItem]];
title = [@"Hide " stringByAppendingString:appName];
[appleMenu addItemWithTitle:title action:@selector(hide:) keyEquivalent:@"h"];
menuItem = (NSMenuItem *)[appleMenu addItemWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@"h"];
[menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)];
[appleMenu addItemWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@""];
[appleMenu addItem:[NSMenuItem separatorItem]];
title = [@"Quit " stringByAppendingString:appName];
[appleMenu addItemWithTitle:title action:@selector(terminate:) keyEquivalent:@"q"];
/* Put menu into the menubar */
menuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""];
[menuItem setSubmenu:appleMenu];
[[NSApp mainMenu] addItem:menuItem];
/* Tell the application object that this is now the application menu */
[NSApp setAppleMenu:appleMenu];
/* Finally give up our references to the objects */
[appleMenu release];
[menuItem release];
}
/* Create a window menu */
static void setupWindowMenu(void)
{
NSMenu *windowMenu;
NSMenuItem *windowMenuItem;
NSMenuItem *menuItem;
windowMenu = [[NSMenu alloc] initWithTitle:@"Window"];
/* "Minimize" item */
menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"];
[windowMenu addItem:menuItem];
[menuItem release];
/* Put menu into the menubar */
windowMenuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""];
[windowMenuItem setSubmenu:windowMenu];
[[NSApp mainMenu] addItem:windowMenuItem];
/* Tell the application object that this is now the window menu */
[NSApp setWindowsMenu:windowMenu];
/* Finally give up our references to the objects */
[windowMenu release];
[windowMenuItem release];
}
/* Replacement for NSApplicationMain */
static void CustomApplicationMain (int argc, char **argv)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
SDLMain *sdlMain;
/* Ensure the application object is initialised */
[SDLApplication sharedApplication];
#ifdef SDL_USE_CPS
{
CPSProcessSerNum PSN;
/* Tell the dock about us */
if (!CPSGetCurrentProcess(&PSN))
if (!CPSEnableForegroundOperation(&PSN,0x03,0x3C,0x2C,0x1103))
if (!CPSSetFrontProcess(&PSN))
[SDLApplication sharedApplication];
}
#endif /* SDL_USE_CPS */
/* Set up the menubar */
[NSApp setMainMenu:[[NSMenu alloc] init]];
setApplicationMenu();
setupWindowMenu();
/* Create SDLMain and make it the app delegate */
sdlMain = [[SDLMain alloc] init];
[NSApp setDelegate:sdlMain];
/* Start the main event loop */
[NSApp run];
[sdlMain release];
[pool release];
}
#endif
/*
* Catch document open requests...this lets us notice files when the app
* was launched by double-clicking a document, or when a document was
* dragged/dropped on the app's icon. You need to have a
* CFBundleDocumentsType section in your Info.plist to get this message,
* apparently.
*
* Files are added to gArgv, so to the app, they'll look like command line
* arguments. Previously, apps launched from the finder had nothing but
* an argv[0].
*
* This message may be received multiple times to open several docs on launch.
*
* This message is ignored once the app's mainline has been called.
*/
- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
{
const char *temparg;
size_t arglen;
char *arg;
char **newargv;
if (!gFinderLaunch) /* MacOS is passing command line args. */
return FALSE;
if (gCalledAppMainline) /* app has started, ignore this document. */
return FALSE;
temparg = [filename UTF8String];
arglen = SDL_strlen(temparg) + 1;
arg = (char *) SDL_malloc(arglen);
if (arg == NULL)
return FALSE;
newargv = (char **) realloc(gArgv, sizeof (char *) * (gArgc + 2));
if (newargv == NULL)
{
SDL_free(arg);
return FALSE;
}
gArgv = newargv;
SDL_strlcpy(arg, temparg, arglen);
gArgv[gArgc++] = arg;
gArgv[gArgc] = NULL;
return TRUE;
}
/* Called when the internal event loop has just started running */
- (void) applicationDidFinishLaunching: (NSNotification *) note
{
int status;
/* Set the working directory to the .app's parent directory */
[self setupWorkingDirectory:gFinderLaunch];
#if SDL_USE_NIB_FILE
/* Set the main menu to contain the real app name instead of "SDL App" */
[self fixMenu:[NSApp mainMenu] withAppName:getApplicationName()];
#endif
/* Hand off to main application code */
gCalledAppMainline = TRUE;
status = SDL_main (gArgc, gArgv);
/* We're done, thank you for playing */
exit(status);
}
@end
@implementation NSString (ReplaceSubString)
- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString
{
unsigned int bufferSize;
unsigned int selfLen = [self length];
unsigned int aStringLen = [aString length];
unichar *buffer;
NSRange localRange;
NSString *result;
bufferSize = selfLen + aStringLen - aRange.length;
buffer = NSAllocateMemoryPages(bufferSize*sizeof(unichar));
/* Get first part into buffer */
localRange.location = 0;
localRange.length = aRange.location;
[self getCharacters:buffer range:localRange];
/* Get middle part into buffer */
localRange.location = 0;
localRange.length = aStringLen;
[aString getCharacters:(buffer+aRange.location) range:localRange];
/* Get last part into buffer */
localRange.location = aRange.location + aRange.length;
localRange.length = selfLen - localRange.location;
[self getCharacters:(buffer+aRange.location+aStringLen) range:localRange];
/* Build output string */
result = [NSString stringWithCharacters:buffer length:bufferSize];
NSDeallocateMemoryPages(buffer, bufferSize);
return result;
}
@end
#ifdef main
# undef main
#endif
/* Main entry point to executable - should *not* be SDL_main! */
int main (int argc, char **argv)
{
/* Copy the arguments into a global variable */
/* This is passed if we are launched by double-clicking */
if ( argc >= 2 && strncmp (argv[1], "-psn", 4) == 0 ) {
gArgv = (char **) SDL_malloc(sizeof (char *) * 2);
gArgv[0] = argv[0];
gArgv[1] = NULL;
gArgc = 1;
gFinderLaunch = YES;
} else {
int i;
gArgc = argc;
gArgv = (char **) SDL_malloc(sizeof (char *) * (argc+1));
for (i = 0; i <= argc; i++)
gArgv[i] = argv[i];
gFinderLaunch = NO;
}
#if SDL_USE_NIB_FILE
[SDLApplication poseAsClass:[NSApplication class]];
NSApplicationMain (argc, argv);
#else
CustomApplicationMain (argc, argv);
#endif
return 0;
}
/* Simple program: Create a blank window, wait for keypress, quit.
Please see the SDL documentation for details on using the SDL API:
/Developer/Documentation/SDL/docs.html
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "SDL.h"
int main(int argc, char *argv[])
{
Uint32 initflags = SDL_INIT_VIDEO; /* See documentation for details */
SDL_Surface *screen;
Uint8 video_bpp = 0;
Uint32 videoflags = SDL_SWSURFACE;
int done;
SDL_Event event;
/* Initialize the SDL library */
if ( SDL_Init(initflags) < 0 ) {
fprintf(stderr, "Couldn't initialize SDL: %s\n",
SDL_GetError());
exit(1);
}
/* Set 640x480 video mode */
screen=SDL_SetVideoMode(640,480, video_bpp, videoflags);
if (screen == NULL) {
fprintf(stderr, "Couldn't set 640x480x%d video mode: %s\n",
video_bpp, SDL_GetError());
SDL_Quit();
exit(2);
}
done = 0;
while ( !done ) {
/* Check for events */
while ( SDL_PollEvent(&event) ) {
switch (event.type) {
case SDL_MOUSEMOTION:
break;
case SDL_MOUSEBUTTONDOWN:
break;
case SDL_KEYDOWN:
/* Any keypress quits the app... */
case SDL_QUIT:
done = 1;
break;
default:
break;
}
}
}
/* Clean up the SDL library */
SDL_Quit();
return(0);
}
Binary files a/Xcode/TemplatesForXcode/SDL Cocoa Application/English.lproj/InfoPlist.strings and /dev/null differ Binary files a/Xcode/TemplatesForXcode/SDL Cocoa Application/English.lproj/InfoPlist.strings and /dev/null differ
{
IBClasses = (
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
{
ACTIONS = {
help = id;
newGame = id;
openGame = id;
prefsMenu = id;
saveGame = id;
saveGameAs = id;
};
CLASS = SDLMain;
LANGUAGE = ObjC;
SUPERCLASS = NSObject;
}
);
IBVersion = 1;
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IBDocumentLocation</key>
<string>62 117 356 240 0 0 1152 848 </string>
<key>IBEditorPositions</key>
<dict>
<key>29</key>
<string>62 362 195 44 0 0 1152 848 </string>
</dict>
<key>IBFramework Version</key>
<string>291.0</string>
<key>IBOpenObjects</key>
<array>
<integer>29</integer>
</array>
<key>IBSystem Version</key>
<string>6L60</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>com.yourcompany.«PROJECTNAMEASXML»</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>NSMainNibFile</key>
<string>SDLMain</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
//
// Prefix header for all source files of the 'PROJECTNAME' target in the 'PROJECTNAME' project
//
#include "SDL.h"
#ifdef __OBJC__
#import <Cocoa/Cocoa.h>
#endif
{
FilesToRename = {
"SDLApp_Prefix.pch" = "PROJECTNAME_Prefix.pch";
};
FilesToMacroExpand = (
"PROJECTNAME_Prefix.pch",
"Info.plist",
"English.lproj/InfoPlist.strings",
"main.c",
);
Description = "This project builds an SDL-based application with Cocoa menus.";
}
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 42;
objects = {
/* Begin PBXBuildFile section */
002F39FA09D0881F00EBEB88 /* SDL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002F39F909D0881F00EBEB88 /* SDL.framework */; };
002F3A0009D0884600EBEB88 /* SDL.framework in Copy Frameworks into .app bundle */ = {isa = PBXBuildFile; fileRef = 002F39F909D0881F00EBEB88 /* SDL.framework */; };
002F3A2E09D0888800EBEB88 /* SDLMain.m in Sources */ = {isa = PBXBuildFile; fileRef = 002F3A2C09D0888800EBEB88 /* SDLMain.m */; };
002F3A3F09D088BA00EBEB88 /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = 002F3A3E09D088BA00EBEB88 /* main.c */; };
002F3AF109D08F1000EBEB88 /* SDLMain.nib in Resources */ = {isa = PBXBuildFile; fileRef = 002F3AEF09D08F1000EBEB88 /* SDLMain.nib */; };
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; };
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
/* End PBXBuildFile section */
/* Begin PBXBuildStyle section */
4A9504CCFFE6A4B311CA0CBA /* Debug */ = {
isa = PBXBuildStyle;
buildSettings = {
};
name = Debug;
};
4A9504CDFFE6A4B311CA0CBA /* Release */ = {
isa = PBXBuildStyle;
buildSettings = {
};
name = Release;
};
/* End PBXBuildStyle section */
/* Begin PBXCopyFilesBuildPhase section */
002F39FD09D0883400EBEB88 /* Copy Frameworks into .app bundle */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
002F3A0009D0884600EBEB88 /* SDL.framework in Copy Frameworks into .app bundle */,
);
name = "Copy Frameworks into .app bundle";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
002F39F909D0881F00EBEB88 /* SDL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL.framework; path = /Library/Frameworks/SDL.framework; sourceTree = "<absolute>"; };
002F3A2B09D0888800EBEB88 /* SDLMain.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SDLMain.h; sourceTree = SOURCE_ROOT; };
002F3A2C09D0888800EBEB88 /* SDLMain.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = SDLMain.m; sourceTree = SOURCE_ROOT; };
002F3A3E09D088BA00EBEB88 /* main.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = SOURCE_ROOT; };
002F3AF009D08F1000EBEB88 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/SDLMain.nib; sourceTree = "<group>"; };
089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
32CA4F630368D1EE00C91783 /* «PROJECTNAME»_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file; path = "«PROJECTNAME»_Prefix.pch"; sourceTree = "<group>"; };
8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
8D1107320486CEB800E47090 /* «PROJECTNAME».app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "«PROJECTNAME».app"; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
8D11072E0486CEB800E47090 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
002F39FA09D0881F00EBEB88 /* SDL.framework in Frameworks */,
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
080E96DDFE201D6D7F000001 /* Classes */ = {
isa = PBXGroup;
children = (
002F3A2B09D0888800EBEB88 /* SDLMain.h */,
002F3A2C09D0888800EBEB88 /* SDLMain.m */,
);
name = Classes;
sourceTree = "<group>";
};
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = {
isa = PBXGroup;
children = (
002F39F909D0881F00EBEB88 /* SDL.framework */,
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
);
name = "Linked Frameworks";
sourceTree = "<group>";
};
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = {
isa = PBXGroup;
children = (
29B97324FDCFA39411CA2CEA /* AppKit.framework */,
29B97325FDCFA39411CA2CEA /* Foundation.framework */,
);
name = "Other Frameworks";
sourceTree = "<group>";
};
19C28FACFE9D520D11CA2CBB /* Products */ = {
isa = PBXGroup;
children = (
8D1107320486CEB800E47090 /* «PROJECTNAME».app */,
);
name = Products;
sourceTree = "<group>";
};
29B97314FDCFA39411CA2CEA /* «PROJECTNAMEASXML» */ = {
isa = PBXGroup;
children = (
080E96DDFE201D6D7F000001 /* Classes */,
29B97315FDCFA39411CA2CEA /* Other Sources */,
29B97317FDCFA39411CA2CEA /* Resources */,
29B97323FDCFA39411CA2CEA /* Frameworks */,
19C28FACFE9D520D11CA2CBB /* Products */,
);
name = "«PROJECTNAMEASXML»";
sourceTree = "<group>";
};
29B97315FDCFA39411CA2CEA /* Other Sources */ = {
isa = PBXGroup;
children = (
32CA4F630368D1EE00C91783 /* «PROJECTNAME»_Prefix.pch */,
002F3A3E09D088BA00EBEB88 /* main.c */,
);
name = "Other Sources";
sourceTree = "<group>";
};
29B97317FDCFA39411CA2CEA /* Resources */ = {
isa = PBXGroup;
children = (
8D1107310486CEB800E47090 /* Info.plist */,
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */,
002F3AEF09D08F1000EBEB88 /* SDLMain.nib */,
);
name = Resources;
sourceTree = "<group>";
};
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
isa = PBXGroup;
children = (
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */,
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
8D1107260486CEB800E47090 /* «PROJECTNAME» */ = {
isa = PBXNativeTarget;
buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "«PROJECTNAME»" */;
buildPhases = (
8D1107290486CEB800E47090 /* Resources */,
8D11072C0486CEB800E47090 /* Sources */,
8D11072E0486CEB800E47090 /* Frameworks */,
002F39FD09D0883400EBEB88 /* Copy Frameworks into .app bundle */,
);
buildRules = (
);
buildSettings = {
};
dependencies = (
);
name = "«PROJECTNAME»";
productInstallPath = "$(HOME)/Applications";
productName = "«PROJECTNAME»";
productReference = 8D1107320486CEB800E47090 /* «PROJECTNAME».app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
29B97313FDCFA39411CA2CEA /* Project object */ = {
isa = PBXProject;
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "SDLCocoaApp" */;
buildSettings = {
};
buildStyles = (
4A9504CCFFE6A4B311CA0CBA /* Debug */,
4A9504CDFFE6A4B311CA0CBA /* Release */,
);
hasScannedForEncodings = 1;
mainGroup = 29B97314FDCFA39411CA2CEA /* «PROJECTNAMEASXML» */;
projectDirPath = "";
targets = (
8D1107260486CEB800E47090 /* «PROJECTNAME» */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
8D1107290486CEB800E47090 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */,
002F3AF109D08F1000EBEB88 /* SDLMain.nib in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
8D11072C0486CEB800E47090 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
002F3A2E09D0888800EBEB88 /* SDLMain.m in Sources */,
002F3A3F09D088BA00EBEB88 /* main.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
002F3AEF09D08F1000EBEB88 /* SDLMain.nib */ = {
isa = PBXVariantGroup;
children = (
002F3AF009D08F1000EBEB88 /* English */,
);
name = SDLMain.nib;
sourceTree = "<group>";
};
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
089C165DFE840E0CC02AAC07 /* English */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
C01FCF4B08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
COPY_PHASE_STRIP = NO;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_FIX_AND_CONTINUE = YES;
GCC_MODEL_TUNING = G5;
GCC_OPTIMIZATION_LEVEL = 0;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
PRODUCT_NAME = "«PROJECTNAME»";
WRAPPER_EXTENSION = app;
ZERO_LINK = YES;
};
name = Debug;
};
C01FCF4C08A954540054247B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = (
ppc,
i386,
);
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_MODEL_TUNING = G5;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
PRODUCT_NAME = "«PROJECTNAME»";
WRAPPER_EXTENSION = app;
};
name = Release;
};
C01FCF4F08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
FRAMEWORK_SEARCH_PATHS = (
"$(HOME)/Library/Frameworks",
/Library/Frameworks,
"$(FRAMEWORK_SEARCH_PATHS)",
);
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = (
"$(HOME)/Library/Frameworks/SDL.framework/Headers",
/Library/Frameworks/SDL.framework/Headers,
"$(HEADER_SEARCH_PATHS)",
);
PREBINDING = NO;
SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
};
name = Debug;
};
C01FCF5008A954540054247B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
FRAMEWORK_SEARCH_PATHS = (
"$(HOME)/Library/Frameworks",
/Library/Frameworks,
"$(FRAMEWORK_SEARCH_PATHS)",
);
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = (
"$(HOME)/Library/Frameworks/SDL.framework/Headers",
/Library/Frameworks/SDL.framework/Headers,
"$(HEADER_SEARCH_PATHS)",
);
PREBINDING = NO;
SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "«PROJECTNAME»" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C01FCF4B08A954540054247B /* Debug */,
C01FCF4C08A954540054247B /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
C01FCF4E08A954540054247B /* Build configuration list for PBXProject "SDLCocoaApp" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C01FCF4F08A954540054247B /* Debug */,
C01FCF5008A954540054247B /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
}
/* SDLMain.m - main entry point for our Cocoa-ized SDL app
Initial Version: Darrell Walisser <dwaliss1@purdue.edu>
Non-NIB-Code & other changes: Max Horn <max@quendi.de>
Feel free to customize this file to suit your needs
*/
#import <Cocoa/Cocoa.h>
@interface SDLMain : NSObject
- (IBAction)prefsMenu:(id)sender;
- (IBAction)newGame:(id)sender;
- (IBAction)openGame:(id)sender;
- (IBAction)saveGame:(id)sender;
- (IBAction)saveGameAs:(id)sender;
- (IBAction)help:(id)sender;
@end
/* SDLMain.m - main entry point for our Cocoa-ized SDL app
Initial Version: Darrell Walisser <dwaliss1@purdue.edu>
Non-NIB-Code & other changes: Max Horn <max@quendi.de>
Feel free to customize this file to suit your needs
*/
#import "SDL.h"
#import "SDLMain.h"
#import <sys/param.h> /* for MAXPATHLEN */
#import <unistd.h>
/* For some reaon, Apple removed setAppleMenu from the headers in 10.4,
but the method still is there and works. To avoid warnings, we declare
it ourselves here. */
@interface NSApplication(SDL_Missing_Methods)
- (void)setAppleMenu:(NSMenu *)menu;
@end
/* Use this flag to determine whether we use SDLMain.nib or not */
#define SDL_USE_NIB_FILE 1
/* Use this flag to determine whether we use CPS (docking) or not */
#define SDL_USE_CPS 1
#ifdef SDL_USE_CPS
/* Portions of CPS.h */
typedef struct CPSProcessSerNum
{
UInt32 lo;
UInt32 hi;
} CPSProcessSerNum;
extern OSErr CPSGetCurrentProcess( CPSProcessSerNum *psn);
extern OSErr CPSEnableForegroundOperation( CPSProcessSerNum *psn, UInt32 _arg2, UInt32 _arg3, UInt32 _arg4, UInt32 _arg5);
extern OSErr CPSSetFrontProcess( CPSProcessSerNum *psn);
#endif /* SDL_USE_CPS */
static int gArgc;
static char **gArgv;
static BOOL gFinderLaunch;
static BOOL gCalledAppMainline = FALSE;
static NSString *getApplicationName(void)
{
NSDictionary *dict;
NSString *appName = 0;
/* Determine the application name */
dict = (NSDictionary *)CFBundleGetInfoDictionary(CFBundleGetMainBundle());
if (dict)
appName = [dict objectForKey: @"CFBundleName"];
if (![appName length])
appName = [[NSProcessInfo processInfo] processName];
return appName;
}
#if SDL_USE_NIB_FILE
/* A helper category for NSString */
@interface NSString (ReplaceSubString)
- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString;
@end
#endif
@interface SDLApplication : NSApplication
@end
@implementation SDLApplication
/* Invoked from the Quit menu item */
- (void)terminate:(id)sender
{
/* Post a SDL_QUIT event */
SDL_Event event;
event.type = SDL_QUIT;
SDL_PushEvent(&event);
}
@end
/* The main class of the application, the application's delegate */
@implementation SDLMain
- (IBAction)prefsMenu:(id)sender
{
printf ("prefs menu\n");
}
- (IBAction)newGame:(id)sender
{
printf ("new game\n");
NSRunAlertPanel (@"Get ready to blow up some... stuff!",
@"Click OK to begin total carnage. Click Cancel to prevent total carnage.", @"OK", @"Cancel", nil);
}
- (IBAction)openGame:(id)sender
{
NSString *path = nil;
NSOpenPanel *openPanel = [ NSOpenPanel openPanel ];
if ( [ openPanel runModalForDirectory:nil
file:@"SavedGame" types:nil ] ) {
path = [ [ openPanel filenames ] objectAtIndex:0 ];
}
printf ("open game: %s\n", [ path cString ]);
}
- (IBAction)saveGame:(id)sender
{
NSString *path = nil;
NSSavePanel *savePanel = [ NSSavePanel savePanel ];
if ( [ savePanel runModalForDirectory:nil
file:@"SaveGameFile" ] ) {
path = [ savePanel filename ];
}
printf ("save game: %s\n", [ path cString ]);
}
- (IBAction)saveGameAs:(id)sender
{
printf ("save game as\n");
}
- (IBAction)help:(id)sender
{
NSRunAlertPanel (@"Oh help, where have ye gone?",
@"Sorry, there is no help available.\n\nThis message brought to you by We Don't Document, Inc.\n\n", @"Rats", @"Good, I never read it anyway", nil);
}
/* Set the working directory to the .app's parent directory */
- (void) setupWorkingDirectory:(BOOL)shouldChdir
{
if (shouldChdir)
{
char parentdir[MAXPATHLEN];
CFURLRef url = CFBundleCopyBundleURL(CFBundleGetMainBundle());
CFURLRef url2 = CFURLCreateCopyDeletingLastPathComponent(0, url);
if (CFURLGetFileSystemRepresentation(url2, true, (UInt8 *)parentdir, MAXPATHLEN)) {
assert ( chdir (parentdir) == 0 ); /* chdir to the binary app's parent */
}
CFRelease(url);
CFRelease(url2);
}
}
#if SDL_USE_NIB_FILE
/* Fix menu to contain the real app name instead of "SDL App" */
- (void)fixMenu:(NSMenu *)aMenu withAppName:(NSString *)appName
{
NSRange aRange;
NSEnumerator *enumerator;
NSMenuItem *menuItem;
aRange = [[aMenu title] rangeOfString:@"SDL App"];
if (aRange.length != 0)
[aMenu setTitle: [[aMenu title] stringByReplacingRange:aRange with:appName]];
enumerator = [[aMenu itemArray] objectEnumerator];
while ((menuItem = [enumerator nextObject]))
{
aRange = [[menuItem title] rangeOfString:@"SDL App"];
if (aRange.length != 0)
[menuItem setTitle: [[menuItem title] stringByReplacingRange:aRange with:appName]];
if ([menuItem hasSubmenu])
[self fixMenu:[menuItem submenu] withAppName:appName];
}
[ aMenu sizeToFit ];
}
#else
static void setApplicationMenu(void)
{
/* warning: this code is very odd */
NSMenu *appleMenu;
NSMenuItem *menuItem;
NSString *title;
NSString *appName;
appName = getApplicationName();
appleMenu = [[NSMenu alloc] initWithTitle:@""];
/* Add menu items */
title = [@"About " stringByAppendingString:appName];
[appleMenu addItemWithTitle:title action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""];
[appleMenu addItem:[NSMenuItem separatorItem]];
title = [@"Hide " stringByAppendingString:appName];
[appleMenu addItemWithTitle:title action:@selector(hide:) keyEquivalent:@"h"];
menuItem = (NSMenuItem *)[appleMenu addItemWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@"h"];
[menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)];
[appleMenu addItemWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@""];
[appleMenu addItem:[NSMenuItem separatorItem]];
title = [@"Quit " stringByAppendingString:appName];
[appleMenu addItemWithTitle:title action:@selector(terminate:) keyEquivalent:@"q"];
/* Put menu into the menubar */
menuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""];
[menuItem setSubmenu:appleMenu];
[[NSApp mainMenu] addItem:menuItem];
/* Tell the application object that this is now the application menu */
[NSApp setAppleMenu:appleMenu];
/* Finally give up our references to the objects */
[appleMenu release];
[menuItem release];
}
/* Create a window menu */
static void setupWindowMenu(void)
{
NSMenu *windowMenu;
NSMenuItem *windowMenuItem;
NSMenuItem *menuItem;
windowMenu = [[NSMenu alloc] initWithTitle:@"Window"];
/* "Minimize" item */
menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"];
[windowMenu addItem:menuItem];
[menuItem release];
/* Put menu into the menubar */
windowMenuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""];
[windowMenuItem setSubmenu:windowMenu];
[[NSApp mainMenu] addItem:windowMenuItem];
/* Tell the application object that this is now the window menu */
[NSApp setWindowsMenu:windowMenu];
/* Finally give up our references to the objects */
[windowMenu release];
[windowMenuItem release];
}
/* Replacement for NSApplicationMain */
static void CustomApplicationMain (int argc, char **argv)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
SDLMain *sdlMain;
/* Ensure the application object is initialised */
[SDLApplication sharedApplication];
#ifdef SDL_USE_CPS
{
CPSProcessSerNum PSN;
/* Tell the dock about us */
if (!CPSGetCurrentProcess(&PSN))
if (!CPSEnableForegroundOperation(&PSN,0x03,0x3C,0x2C,0x1103))
if (!CPSSetFrontProcess(&PSN))
[SDLApplication sharedApplication];
}
#endif /* SDL_USE_CPS */
/* Set up the menubar */
[NSApp setMainMenu:[[NSMenu alloc] init]];
setApplicationMenu();
setupWindowMenu();
/* Create SDLMain and make it the app delegate */
sdlMain = [[SDLMain alloc] init];
[NSApp setDelegate:sdlMain];
/* Start the main event loop */
[NSApp run];
[sdlMain release];
[pool release];
}
#endif
/*
* Catch document open requests...this lets us notice files when the app
* was launched by double-clicking a document, or when a document was
* dragged/dropped on the app's icon. You need to have a
* CFBundleDocumentsType section in your Info.plist to get this message,
* apparently.
*
* Files are added to gArgv, so to the app, they'll look like command line
* arguments. Previously, apps launched from the finder had nothing but
* an argv[0].
*
* This message may be received multiple times to open several docs on launch.
*
* This message is ignored once the app's mainline has been called.
*/
- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
{
const char *temparg;
size_t arglen;
char *arg;
char **newargv;
if (!gFinderLaunch) /* MacOS is passing command line args. */
return FALSE;
if (gCalledAppMainline) /* app has started, ignore this document. */
return FALSE;
temparg = [filename UTF8String];
arglen = SDL_strlen(temparg) + 1;
arg = (char *) SDL_malloc(arglen);
if (arg == NULL)
return FALSE;
newargv = (char **) realloc(gArgv, sizeof (char *) * (gArgc + 2));
if (newargv == NULL)
{
SDL_free(arg);
return FALSE;
}
gArgv = newargv;
SDL_strlcpy(arg, temparg, arglen);
gArgv[gArgc++] = arg;
gArgv[gArgc] = NULL;
return TRUE;
}
/* Called when the internal event loop has just started running */
- (void) applicationDidFinishLaunching: (NSNotification *) note
{
int status;
/* Set the working directory to the .app's parent directory */
[self setupWorkingDirectory:gFinderLaunch];
#if SDL_USE_NIB_FILE
/* Set the main menu to contain the real app name instead of "SDL App" */
[self fixMenu:[NSApp mainMenu] withAppName:getApplicationName()];
#endif
/* Hand off to main application code */
gCalledAppMainline = TRUE;
status = SDL_main (gArgc, gArgv);
/* We're done, thank you for playing */
exit(status);
}
@end
@implementation NSString (ReplaceSubString)
- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString
{
unsigned int bufferSize;
unsigned int selfLen = [self length];
unsigned int aStringLen = [aString length];
unichar *buffer;
NSRange localRange;
NSString *result;
bufferSize = selfLen + aStringLen - aRange.length;
buffer = NSAllocateMemoryPages(bufferSize*sizeof(unichar));
/* Get first part into buffer */
localRange.location = 0;
localRange.length = aRange.location;
[self getCharacters:buffer range:localRange];
/* Get middle part into buffer */
localRange.location = 0;
localRange.length = aStringLen;
[aString getCharacters:(buffer+aRange.location) range:localRange];
/* Get last part into buffer */
localRange.location = aRange.location + aRange.length;
localRange.length = selfLen - localRange.location;
[self getCharacters:(buffer+aRange.location+aStringLen) range:localRange];
/* Build output string */
result = [NSString stringWithCharacters:buffer length:bufferSize];
NSDeallocateMemoryPages(buffer, bufferSize);
return result;
}
@end
#ifdef main
# undef main
#endif
/* Main entry point to executable - should *not* be SDL_main! */
int main (int argc, char **argv)
{
/* Copy the arguments into a global variable */
/* This is passed if we are launched by double-clicking */
if ( argc >= 2 && strncmp (argv[1], "-psn", 4) == 0 ) {
gArgv = (char **) SDL_malloc(sizeof (char *) * 2);
gArgv[0] = argv[0];
gArgv[1] = NULL;
gArgc = 1;
gFinderLaunch = YES;
} else {
int i;
gArgc = argc;
gArgv = (char **) SDL_malloc(sizeof (char *) * (argc+1));
for (i = 0; i <= argc; i++)
gArgv[i] = argv[i];
gFinderLaunch = NO;
}
#if SDL_USE_NIB_FILE
[SDLApplication poseAsClass:[NSApplication class]];
NSApplicationMain (argc, argv);
#else
CustomApplicationMain (argc, argv);
#endif
return 0;
}
/* Simple program: Create a blank window, wait for keypress, quit.
Please see the SDL documentation for details on using the SDL API:
/Developer/Documentation/SDL/docs.html
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "SDL.h"
int main(int argc, char *argv[])
{
Uint32 initflags = SDL_INIT_VIDEO; /* See documentation for details */
SDL_Surface *screen;
Uint8 video_bpp = 0;
Uint32 videoflags = SDL_SWSURFACE;
int done;
SDL_Event event;
/* Initialize the SDL library */
if ( SDL_Init(initflags) < 0 ) {
fprintf(stderr, "Couldn't initialize SDL: %s\n",
SDL_GetError());
exit(1);
}
/* Set 640x480 video mode */
screen=SDL_SetVideoMode(640,480, video_bpp, videoflags);
if (screen == NULL) {
fprintf(stderr, "Couldn't set 640x480x%d video mode: %s\n",
video_bpp, SDL_GetError());
SDL_Quit();
exit(2);
}
done = 0;
while ( !done ) {
/* Check for events */
while ( SDL_PollEvent(&event) ) {
switch (event.type) {
case SDL_MOUSEMOTION:
break;
case SDL_MOUSEBUTTONDOWN:
break;
case SDL_KEYDOWN:
/* Any keypress quits the app... */
case SDL_QUIT:
done = 1;
break;
default:
break;
}
}
}
/* Clean up the SDL library */
SDL_Quit();
return(0);
}
Binary files a/Xcode/TemplatesForXcode/SDL Custom Cocoa Application/English.lproj/InfoPlist.strings and /dev/null differ Binary files a/Xcode/TemplatesForXcode/SDL Custom Cocoa Application/English.lproj/InfoPlist.strings and /dev/null differ
{
IBClasses = (
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
{
ACTIONS = {changeNumberOfSprites = id; selectUpdateMode = id; };
CLASS = MyController;
LANGUAGE = ObjC;
OUTLETS = {"_framesPerSecond" = id; "_numSprites" = id; "_view" = id; "_window" = id; };
SUPERCLASS = NSObject;
},
{CLASS = MyCustomView; LANGUAGE = ObjC; SUPERCLASS = NSQuickDrawView; },
{CLASS = MyCustomWindow; LANGUAGE = ObjC; SUPERCLASS = NSWindow; },
{
CLASS = SDLMain;
LANGUAGE = ObjC;
OUTLETS = {"_controller" = id; };
SUPERCLASS = NSObject;
}
);
IBVersion = 1;
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IBDocumentLocation</key>
<string>89 138 361 280 0 0 1152 848 </string>
<key>IBEditorPositions</key>
<dict>
<key>29</key>
<string>62 362 233 44 0 0 1152 848 </string>
<key>368</key>
<string>782 578 355 456 0 0 1920 1178 </string>
</dict>
<key>IBFramework Version</key>
<string>443.0</string>
<key>IBLockedObjects</key>
<array>
<integer>328</integer>
</array>
<key>IBOpenObjects</key>
<array>
<integer>368</integer>
<integer>326</integer>
</array>
<key>IBSystem Version</key>
<string>8H14</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>com.yourcompany.«PROJECTNAMEASXML»</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>NSMainNibFile</key>
<string>SDLMain</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
//
// MyController.h
// SDL Custom Cocoa App
//
// Created by Darrell Walisser on Fri Jul 18 2003.
// Copyright (c) 2003 __MyCompanyName__. All rights reserved.
//
#import <Cocoa/Cocoa.h>
#import "SDL.h"
extern id gController; // instance of this class from nib
// Declare SDL_QuartzWindowDelegate (defined in SDL.framework)
@interface SDL_QuartzWindowDelegate : NSObject
@end
@interface MyController : NSObject
{
// Interface Builder Outlets
IBOutlet id _framesPerSecond;
IBOutlet id _numSprites;
IBOutlet id _window;
IBOutlet id _view;
// Private instance variables
int _nSprites;
int _max_speed;
int _doFlip;
Uint8* _mem;
SDL_Surface* _screen;
SDL_Surface* _sprite;
SDL_Rect* _sprite_rects;
SDL_Rect* _positions;
SDL_Rect* _velocities;
int _sprites_visible;
Uint16 _sprite_w, _sprite_h;
int _mouse_x, _mouse_y;
}
// Interface Builder Actions
- (IBAction)changeNumberOfSprites:(id)sender;
- (IBAction)selectUpdateMode:(id)sender;
@end
//
// MyController.m
// SDL Custom Cocoa App
//
// Created by Darrell Walisser on Fri Jul 18 2003.
// Copyright (c) 2003 __MyCompanyName__. All rights reserved.
//
#import "MyController.h"
#import "SDL.h"
id gController;
@implementation MyController
- (id)init
{
self = [ super init ];
if (self) {
_nSprites = 10;
_max_speed = 4;
_doFlip = 0;
_mem = NULL;
_screen = NULL;
_sprite_rects = NULL;
_positions = NULL;
_velocities = NULL;
_sprites_visible = 1;
_sprite_w = 0;
_sprite_h = 0;
_mouse_x = 0;
_mouse_y = 0;
}
return self;
}
- (void)setupCocoaWindow
{
// If you want the close button to send SDL_Quit,
// you can attach the SDL_QuartzWindowDelegate to the window
[ _window setDelegate:
[ [ [ SDL_QuartzWindowDelegate alloc ] init ] autorelease ] ];
// Make the window visible and the frontmost window
[ _window makeKeyAndOrderFront:nil ];
// Make the window accept passive motion events (when the button is released)
[ _window setAcceptsMouseMovedEvents:YES ];
}
- (void)setCocoaEnvironmentVariables
{
// Export cocoa objects to environment
// SDL will use these when you call SDL_SetVideoMode
// The window must be visible when you call SDL_SetVideoMode,
// and the view must lie completely within the window.
//
// The width and height passed to SDL_SetVideoMode should match
// the width/height of the view (the window can be any size)
//
// For resizing to work, you must set the appropriate
// attributes on the window and view. Then the SDL_RESIZABLE
// flag will be set automatically
//
// SDL will retain a reference to the window, and
// will release it when unsetting the video mode
//
// The view is not retained (the window object manages this).
//
char buffer[256];
printf ("NSWindow=%p\n", _window);
sprintf (buffer, "%d", (int)_window);
setenv ("SDL_NSWindowPointer", buffer, 1);
printf ("NSQuickDrawView=%p\n", _view);
sprintf (buffer, "%d", (int)_view);
setenv ("SDL_NSQuickDrawViewPointer", buffer, 1);
// Also tell SDL to pass keyboard events to Cocoa
// In this case, Cocoa will get the event before SDL_PollEvent returns it
// Note that mouse events (button, motion) will always be passed, regardless of this setting
setenv ("SDL_ENABLEAPPEVENTS", "1", 1);
}
- (void)printFlags:(Uint32)flags withName:(const char*)name
{
printf ("%s", name);
if (flags & SDL_SWSURFACE)
printf (" - SDL_SWSURFACE");
if (flags & SDL_HWSURFACE)
printf (" - SDL_HWSURFACE");
if (flags & SDL_ASYNCBLIT)
printf (" - SDL_ASYNCBLIT");
if (flags & SDL_ANYFORMAT)
printf (" - SDL_ANYFORMAT");
if (flags & SDL_HWPALETTE)
printf (" - SDL_HWPALETTE");
if (flags & SDL_DOUBLEBUF)
printf (" - SDL_DOUBLEBUF");
if (flags & SDL_FULLSCREEN)
printf (" - SDL_FULLSCREEN");
if (flags & SDL_OPENGL)
printf (" - SDL_OPENGL");
if (flags & SDL_OPENGLBLIT)
printf (" - SDL_OPENGLBLIT");
if (flags & SDL_RESIZABLE)
printf (" - SDL_RESIZABLE");
if (flags & SDL_NOFRAME)
printf (" - SDL_NOFRAME");
printf ("\n");
}
// This is a way of telling whether or not to use hardware surfaces
// Note: this does nothing on Mac OS X at the moment - there is no
// hardware-accelerated blitting support.
- (Uint32)fastestFlags:(Uint32)flags :(int)width :(int)height :(int)bpp
{
const SDL_VideoInfo *info;
// Hardware acceleration is only used in fullscreen mode
flags |= SDL_FULLSCREEN;
// Check for various video capabilities
info = SDL_GetVideoInfo();
if ( info->blit_hw_CC && info->blit_fill ) {
// We use accelerated colorkeying and color filling
flags |= SDL_HWSURFACE;
}
// If we have enough video memory, and will use accelerated
// blits directly to it, then use page flipping.
if ( (flags & SDL_HWSURFACE) == SDL_HWSURFACE ) {
// Direct hardware blitting without double-buffering
// causes really bad flickering.
if ( info->video_mem*1024 > (height*width*bpp/8) ) {
flags |= SDL_DOUBLEBUF;
} else {
flags &= ~SDL_HWSURFACE;
}
}
// Return the flags
return flags;
}
- (int)loadSpriteFromFile:(const char*)file
{
SDL_Surface *temp;
// Load the sprite image
_sprite = SDL_LoadBMP (file);
if ( _sprite == NULL ) {
fprintf (stderr, "Couldn't load %s: %s", file, SDL_GetError ());
return (-1);
}
// Set transparent pixel as the pixel at (0,0)
if ( _sprite->format->palette ) {
SDL_SetColorKey (_sprite, (SDL_SRCCOLORKEY|SDL_RLEACCEL),
*(Uint8 *)_sprite->pixels);
}
/* Convert sprite to video format */
temp = SDL_DisplayFormat (_sprite);
SDL_FreeSurface (_sprite);
if ( temp == NULL ) {
fprintf(stderr, "Couldn't convert background: %s\n",
SDL_GetError ());
return (-1);
}
_sprite = temp;
// We're ready to roll. :)
return 0;
}
- (void)allocSprites
{
/* Allocate memory for the sprite info */
_mem = (Uint8 *)malloc (4*sizeof(SDL_Rect)*_nSprites);
if ( _mem == NULL ) {
fprintf (stderr, "Out of memory!\n");
exit (2);
}
_sprite_rects = (SDL_Rect *)_mem;
_positions = _sprite_rects;
_sprite_rects += _nSprites;
_velocities = _sprite_rects;
_sprite_rects += _nSprites;
_sprite_w = _sprite->w;
_sprite_h = _sprite->h;
}
- (void)freeSprites
{
free (_mem);
_mem = NULL;
}
- (void)initSprites
{
// Give each sprite a random starting position and velocity
int i;
srand(time(NULL));
for ( i=0; i < _nSprites; ++i ) {
_positions[i].x = rand()%(_screen->w - _sprite->w);
_positions[i].y = rand()%(_screen->h - _sprite->h);
_positions[i].w = _sprite->w;
_positions[i].h = _sprite->h;
_velocities[i].x = 0;
_velocities[i].y = 0;
while ( ! _velocities[i].x && ! _velocities[i].y ) {
_velocities[i].x = (rand()%(_max_speed*2+1)) - _max_speed;
_velocities[i].y = (rand()%(_max_speed*2+1)) - _max_speed;
}
}
}
- (void)moveSprites:(int)backgroundColor;
{
int i, nupdates;
SDL_Rect area, *position, *velocity;
nupdates = 0;
// Erase all the sprites if necessary
if ( _sprites_visible ) {
SDL_FillRect (_screen, NULL, backgroundColor);
}
// Move the sprite, bounce at the wall, and draw
for ( i=0; i < _nSprites; ++i ) {
position = &_positions[i];
velocity = &_velocities[i];
position->x += velocity->x;
if ( (position->x < 0) || (position->x >= (_screen->w - _sprite_w)) ) {
velocity->x = -velocity->x;
position->x += velocity->x;
}
position->y += velocity->y;
if ( (position->y < 0) || (position->y >= (_screen->h - _sprite_w)) ) {
velocity->y = -velocity->y;
position->y += velocity->y;
}
// Blit the sprite onto the screen
area = *position;
SDL_BlitSurface (_sprite, NULL, _screen, &area);
_sprite_rects[nupdates++] = area;
}
// Update the screen!
if ( _doFlip ) {
SDL_Flip (_screen);
} else {
SDL_UpdateRects (_screen, nupdates, _sprite_rects);
}
_sprites_visible = 1;
}
- (int)run:(int)argc argv:(char*[])argv
{
int width, height;
Uint8 video_bpp;
Uint32 videoflags;
Uint32 background;
int done;
SDL_Event event;
Uint32 then, now, frames;
// Initialize SDL
if ( SDL_Init (SDL_INIT_VIDEO) < 0 ) {
fprintf (stderr, "Couldn't initialize SDL: %s\n", SDL_GetError ());
exit (1);
}
atexit(SDL_Quit);
videoflags = SDL_SWSURFACE|SDL_ANYFORMAT;
width = 640;
height = 480;
video_bpp = 8;
while ( argc > 1 ) {
--argc;
if ( strcmp(argv[argc-1], "-width") == 0 ) {
width = atoi (argv[argc]);
--argc;
} else
if ( strcmp(argv[argc-1], "-height") == 0 ) {
height = atoi (argv[argc]);
--argc;
} else
if ( strcmp(argv[argc-1], "-bpp") == 0 ) {
video_bpp = atoi (argv[argc]);
videoflags &= ~SDL_ANYFORMAT;
--argc;
} else
if ( strcmp (argv[argc], "-fast") == 0 ) {
videoflags = [ self fastestFlags:videoflags :width :height :video_bpp ];
} else
if ( strcmp (argv[argc], "-hw") == 0 ) {
videoflags ^= SDL_HWSURFACE;
} else
if ( strcmp (argv[argc], "-flip") == 0 ) {
videoflags ^= SDL_DOUBLEBUF;
} else
if ( strcmp (argv[argc], "-fullscreen") == 0 ) {
videoflags ^= SDL_FULLSCREEN;
} else
if ( isdigit(argv[argc][0]) ) {
_nSprites = atoi (argv[argc]);
} else {
fprintf (stderr,
"Usage: %s [-bpp N] [-hw] [-flip] [-fast] [-fullscreen] [numSprites]\n",
argv[0]);
exit (1);
}
}
// The width/height passed to SDL_SetVideoMode should match the size of the NSView
width = [ _view frame ].size.width;
height = [ _view frame ].size.height;
videoflags &= ~SDL_FULLSCREEN; // this only for windowed mode
if ( [ _window styleMask ] & NSResizableWindowMask ) // enable resizable window
videoflags |= SDL_RESIZABLE;
[ self setupCocoaWindow ];
[ self setCocoaEnvironmentVariables ];
_mouse_x = width/2;
_mouse_y = width/2;
// Set video mode
_screen = SDL_SetVideoMode (width, height, video_bpp, videoflags);
if ( ! _screen ) {
fprintf (stderr, "Couldn't set %dx%d video mode: %s\n",
width, height, SDL_GetError());
exit (2);
}
// Print out surface info
[ self printFlags:videoflags withName:"Requested flags: " ];
[ self printFlags:_screen->flags withName:"Got flags: " ];
// Load the sprite
// The sprite is located in the Resources section of the .app bundle.
// SDL does not seem aware of bundle paths, so we must construct the path manually.
NSString* resource_path = [[NSBundle mainBundle] resourcePath];
NSString* icon_path = [resource_path stringByAppendingString:@"/icon.bmp"];
if ( [ self loadSpriteFromFile:[icon_path UTF8String] ] < 0 ) {
exit (1);
}
[ self allocSprites ];
[ self initSprites ];
background = SDL_MapRGB (_screen->format, 0x00, 0x00, 0x00);
// Print out information about our surfaces
printf("Screen is at %d bits per pixel\n", _screen->format->BitsPerPixel);
if ( (_screen->flags & SDL_HWSURFACE) == SDL_HWSURFACE ) {
printf ("Screen is in video memory\n");
} else {
printf ("Screen is in system memory\n");
}
if ( (_screen->flags & SDL_DOUBLEBUF) == SDL_DOUBLEBUF ) {
printf ("Screen has double-buffering enabled\n");
}
if ( (_sprite->flags & SDL_HWSURFACE) == SDL_HWSURFACE ) {
printf ("Sprite is in video memory\n");
} else {
printf ("Sprite is in system memory\n");
}
// Run a sample blit to trigger blit acceleration
{
SDL_Rect dst;
dst.x = 0;
dst.y = 0;
dst.w = _sprite->w;
dst.h = _sprite->h;
SDL_BlitSurface (_sprite, NULL, _screen, &dst);
SDL_FillRect (_screen, &dst, background);
}
if ( (_sprite->flags & SDL_HWACCEL) == SDL_HWACCEL ) {
printf("Sprite blit uses hardware acceleration\n");
}
if ( (_sprite->flags & SDL_RLEACCEL) == SDL_RLEACCEL ) {
printf("Sprite blit uses RLE acceleration\n");
}
// Loop, blitting sprites and waiting for a keystroke
frames = 0;
then = SDL_GetTicks();
done = 0;
_sprites_visible = 0;
while ( !done ) {
// Check for events
++frames;
while ( SDL_PollEvent(&event) ) {
switch (event.type) {
case SDL_VIDEORESIZE:
// Recreate the video mode. Use the same bpp and flags
// that the original window was created with
_screen = SDL_SetVideoMode (event.resize.w, event.resize.h,
video_bpp, videoflags);
// Clear screen and reinit sprite positions
SDL_FillRect (_screen, NULL, 0);
[ self initSprites ];
break;
case SDL_MOUSEMOTION:
_velocities[_nSprites-1].x = 0;
_velocities[_nSprites-1].y = 0;
_positions[_nSprites-1].x = event.motion.x - _sprite->w/2;
_positions[_nSprites-1].y = event.motion.y - _sprite->h/2;
//printf ("motion: %d %d\n", event.motion.x, event.motion.y);
break;
case SDL_MOUSEBUTTONDOWN:
_velocities[_nSprites-1].x = 0;
_velocities[_nSprites-1].y = 0;
_positions[_nSprites-1].x = event.button.x;
_positions[_nSprites-1].y = event.button.y;
//printf ("button: %d %d\n", event.button.x, event.button.y);
break;
case SDL_KEYDOWN:
// Escape also quits the app
if (event.key.keysym.sym == SDLK_ESCAPE)
done = 1;
// Control-W warps the cursor
if (event.key.keysym.sym == SDLK_w &&
( SDL_GetModState () & KMOD_LCTRL ) )
SDL_WarpMouse (_screen->w/2, _screen->h/2);
// Control-G toggles input grabbing
if (event.key.keysym.sym == SDLK_g &&
( SDL_GetModState () & KMOD_LCTRL ) )
if ( SDL_WM_GrabInput (SDL_GRAB_QUERY) == SDL_GRAB_OFF )
SDL_WM_GrabInput (SDL_GRAB_ON);
else
SDL_WM_GrabInput (SDL_GRAB_OFF);
break;
case SDL_QUIT:
done = 1;
break;
default:
break;
}
}
// Draw sprites
[ self moveSprites:background ];
// Update fps counter every 100 frames
if ((frames % 100) == 0) {
now = SDL_GetTicks ();
[ _framesPerSecond setFloatValue:((float)frames*1000)/(now-then) ];
frames = 0;
then = now;
}
}
[ self freeSprites ];
SDL_FreeSurface (_sprite);
SDL_Quit ();
return 0;
}
- (IBAction)changeNumberOfSprites:(id)sender
{
[ _numSprites setIntValue:[ sender intValue ] ];
[ self freeSprites ];
_nSprites = [ sender intValue ];
[ self allocSprites ];
[ self initSprites ];
SDL_FillRect (_screen, NULL, 0);
SDL_Flip (_screen);
}
- (IBAction)selectUpdateMode:(id)sender
{
_doFlip = ![ sender selectedRow ]; // row is 0 or 1
}
@end
int main(int argc, char *argv[])
{
// Hand off to instance of MyController
// This instance is created when SDLMain.nib is loaded,
// and the global variable is set in [SDLMain applicationDidFinishLaunching:]
return [ gController run:argc argv:argv ];
}
\ No newline at end of file
//
// MyCustomView.h
// SDL Custom View App
//
// Created by Darrell Walisser on Fri Jul 18 2003.
// Copyright (c) 2003 __MyCompanyName__. All rights reserved.
//
#import <AppKit/AppKit.h>
@interface MyCustomView : NSQuickDrawView
{
}
@end
//
// MyCustomView.m
// SDL Custom View App
//
// Created by Darrell Walisser on Fri Jul 18 2003.
// Copyright (c) 2003 __MyCompanyName__. All rights reserved.
//
#import "MyCustomView.h"
@implementation MyCustomView
- (id)initWithFrame:(NSRect)frame
{
self = [ super initWithFrame:frame ];
if (self) {
// Initialization code here.
}
return self;
}
- (void)drawRect:(NSRect)rect
{
// Drawing code here.
}
- (BOOL)mouseDownCanMoveWindow
{
// If you use textured windows, this disables
// moving the window by dragging in the view
return NO;
}
@end
//
// MyCustomWindow.h
// SDL Custom View App
//
// Created by Darrell Walisser on Fri Jul 18 2003.
// Copyright (c) 2003 __MyCompanyName__. All rights reserved.
//
#import <AppKit/AppKit.h>
// Be a subclass of SDL_QuartzWindow so SDL will
// handle the redraw problems when minimizing the window
// This class is defined in SDL.framework
@interface SDL_QuartzWindow : NSWindow
@end
// Also assign SDL_QuartzWindowDelegate to the window
// to perform other tasks. You can subclass this delegate
// if you want to add your own delegation methods
// This class is defined in SDL.framework
@interface SDL_QuartzWindowDelegate : NSObject
@end
// Declare our custom class
@interface MyCustomWindow : SDL_QuartzWindow
@end
//
// MyCustomWindow.m
// SDL Custom View App
//
// Created by Darrell Walisser on Fri Jul 18 2003.
// Copyright (c) 2003 __MyCompanyName__. All rights reserved.
//
#import "MyCustomWindow.h"
@implementation MyCustomWindow
@end
//
// Prefix header for all source files of the 'PROJECTNAME' target in the 'PROJECTNAME' project
//
#include "SDL.h"
#ifdef __OBJC__
#import <Cocoa/Cocoa.h>
#endif
{
FilesToRename = {
"SDLApp_Prefix.pch" = "PROJECTNAME_Prefix.pch";
};
FilesToMacroExpand = (
"PROJECTNAME_Prefix.pch",
"Info.plist",
"English.lproj/InfoPlist.strings",
"MyController.h",
"MyController.m",
"MyCustomView.h",
"MyCustomView.m",
"MyCustomWindow.h",
"MyCustomWindow.m",
);
Description = "This project builds an SDL-based application that draws into a custom Cocoa window and view and interfaces with native Cocoa widgets.";
}
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 42;
objects = {
/* Begin PBXBuildFile section */
002F39FA09D0881F00EBEB88 /* SDL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002F39F909D0881F00EBEB88 /* SDL.framework */; };
002F3A0009D0884600EBEB88 /* SDL.framework in Copy Frameworks into .app bundle */ = {isa = PBXBuildFile; fileRef = 002F39F909D0881F00EBEB88 /* SDL.framework */; };
002F3A2E09D0888800EBEB88 /* SDLMain.m in Sources */ = {isa = PBXBuildFile; fileRef = 002F3A2C09D0888800EBEB88 /* SDLMain.m */; };
0035F33609D097C8005563B5 /* MyController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0035F33009D097C8005563B5 /* MyController.m */; };
0035F33809D097C8005563B5 /* MyCustomView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0035F33209D097C8005563B5 /* MyCustomView.m */; };
0035F33A09D097C8005563B5 /* MyCustomWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 0035F33409D097C8005563B5 /* MyCustomWindow.m */; };
0035F34609D09825005563B5 /* icon.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0035F34509D09825005563B5 /* icon.bmp */; };
0035F3AD09D09A3D005563B5 /* SDLMain.nib in Resources */ = {isa = PBXBuildFile; fileRef = 0035F3AB09D09A3D005563B5 /* SDLMain.nib */; };
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; };
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
/* End PBXBuildFile section */
/* Begin PBXBuildStyle section */
4A9504CCFFE6A4B311CA0CBA /* Debug */ = {
isa = PBXBuildStyle;
buildSettings = {
};
name = Debug;
};
4A9504CDFFE6A4B311CA0CBA /* Release */ = {
isa = PBXBuildStyle;
buildSettings = {
};
name = Release;
};
/* End PBXBuildStyle section */
/* Begin PBXCopyFilesBuildPhase section */
002F39FD09D0883400EBEB88 /* Copy Frameworks into .app bundle */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
002F3A0009D0884600EBEB88 /* SDL.framework in Copy Frameworks into .app bundle */,
);
name = "Copy Frameworks into .app bundle";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
002F39F909D0881F00EBEB88 /* SDL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL.framework; path = /Library/Frameworks/SDL.framework; sourceTree = "<absolute>"; };
002F3A2B09D0888800EBEB88 /* SDLMain.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SDLMain.h; sourceTree = SOURCE_ROOT; };
002F3A2C09D0888800EBEB88 /* SDLMain.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = SDLMain.m; sourceTree = SOURCE_ROOT; };
0035F32F09D097C8005563B5 /* MyController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MyController.h; sourceTree = SOURCE_ROOT; };
0035F33009D097C8005563B5 /* MyController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MyController.m; sourceTree = SOURCE_ROOT; };
0035F33109D097C8005563B5 /* MyCustomView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MyCustomView.h; sourceTree = SOURCE_ROOT; };
0035F33209D097C8005563B5 /* MyCustomView.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MyCustomView.m; sourceTree = SOURCE_ROOT; };
0035F33309D097C8005563B5 /* MyCustomWindow.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MyCustomWindow.h; sourceTree = SOURCE_ROOT; };
0035F33409D097C8005563B5 /* MyCustomWindow.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MyCustomWindow.m; sourceTree = SOURCE_ROOT; };
0035F34509D09825005563B5 /* icon.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; path = icon.bmp; sourceTree = SOURCE_ROOT; };
0035F3AC09D09A3D005563B5 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/SDLMain.nib; sourceTree = "<group>"; };
089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
32CA4F630368D1EE00C91783 /* «PROJECTNAME»_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file; path = "«PROJECTNAME»_Prefix.pch"; sourceTree = "<group>"; };
8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
8D1107320486CEB800E47090 /* «PROJECTNAME».app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "«PROJECTNAME».app"; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
8D11072E0486CEB800E47090 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
002F39FA09D0881F00EBEB88 /* SDL.framework in Frameworks */,
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
080E96DDFE201D6D7F000001 /* Classes */ = {
isa = PBXGroup;
children = (
0035F32F09D097C8005563B5 /* MyController.h */,
0035F33009D097C8005563B5 /* MyController.m */,
0035F33109D097C8005563B5 /* MyCustomView.h */,
0035F33209D097C8005563B5 /* MyCustomView.m */,
0035F33309D097C8005563B5 /* MyCustomWindow.h */,
0035F33409D097C8005563B5 /* MyCustomWindow.m */,
002F3A2B09D0888800EBEB88 /* SDLMain.h */,
002F3A2C09D0888800EBEB88 /* SDLMain.m */,
);
name = Classes;
sourceTree = "<group>";
};
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = {
isa = PBXGroup;
children = (
002F39F909D0881F00EBEB88 /* SDL.framework */,
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
);
name = "Linked Frameworks";
sourceTree = "<group>";
};
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = {
isa = PBXGroup;
children = (
29B97324FDCFA39411CA2CEA /* AppKit.framework */,
29B97325FDCFA39411CA2CEA /* Foundation.framework */,
);
name = "Other Frameworks";
sourceTree = "<group>";
};
19C28FACFE9D520D11CA2CBB /* Products */ = {
isa = PBXGroup;
children = (
8D1107320486CEB800E47090 /* «PROJECTNAME».app */,
);
name = Products;
sourceTree = "<group>";
};
29B97314FDCFA39411CA2CEA /* «PROJECTNAMEASXML» */ = {
isa = PBXGroup;
children = (
080E96DDFE201D6D7F000001 /* Classes */,
29B97315FDCFA39411CA2CEA /* Other Sources */,
29B97317FDCFA39411CA2CEA /* Resources */,
29B97323FDCFA39411CA2CEA /* Frameworks */,
19C28FACFE9D520D11CA2CBB /* Products */,
);
name = "«PROJECTNAMEASXML»";
sourceTree = "<group>";
};
29B97315FDCFA39411CA2CEA /* Other Sources */ = {
isa = PBXGroup;
children = (
32CA4F630368D1EE00C91783 /* «PROJECTNAME»_Prefix.pch */,
);
name = "Other Sources";
sourceTree = "<group>";
};
29B97317FDCFA39411CA2CEA /* Resources */ = {
isa = PBXGroup;
children = (
0035F34509D09825005563B5 /* icon.bmp */,
8D1107310486CEB800E47090 /* Info.plist */,
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */,
0035F3AB09D09A3D005563B5 /* SDLMain.nib */,
);
name = Resources;
sourceTree = "<group>";
};
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
isa = PBXGroup;
children = (
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */,
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
8D1107260486CEB800E47090 /* «PROJECTNAME» */ = {
isa = PBXNativeTarget;
buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "«PROJECTNAME»" */;
buildPhases = (
8D1107290486CEB800E47090 /* Resources */,
8D11072C0486CEB800E47090 /* Sources */,
8D11072E0486CEB800E47090 /* Frameworks */,
002F39FD09D0883400EBEB88 /* Copy Frameworks into .app bundle */,
);
buildRules = (
);
buildSettings = {
};
dependencies = (
);
name = "«PROJECTNAME»";
productInstallPath = "$(HOME)/Applications";
productName = "«PROJECTNAME»";
productReference = 8D1107320486CEB800E47090 /* «PROJECTNAME».app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
29B97313FDCFA39411CA2CEA /* Project object */ = {
isa = PBXProject;
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "SDLCustomCocoaApp" */;
buildSettings = {
};
buildStyles = (
4A9504CCFFE6A4B311CA0CBA /* Debug */,
4A9504CDFFE6A4B311CA0CBA /* Release */,
);
hasScannedForEncodings = 1;
mainGroup = 29B97314FDCFA39411CA2CEA /* «PROJECTNAMEASXML» */;
projectDirPath = "";
targets = (
8D1107260486CEB800E47090 /* «PROJECTNAME» */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
8D1107290486CEB800E47090 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */,
0035F34609D09825005563B5 /* icon.bmp in Resources */,
0035F3AD09D09A3D005563B5 /* SDLMain.nib in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
8D11072C0486CEB800E47090 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
002F3A2E09D0888800EBEB88 /* SDLMain.m in Sources */,
0035F33609D097C8005563B5 /* MyController.m in Sources */,
0035F33809D097C8005563B5 /* MyCustomView.m in Sources */,
0035F33A09D097C8005563B5 /* MyCustomWindow.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
0035F3AB09D09A3D005563B5 /* SDLMain.nib */ = {
isa = PBXVariantGroup;
children = (
0035F3AC09D09A3D005563B5 /* English */,
);
name = SDLMain.nib;
sourceTree = "<group>";
};
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
089C165DFE840E0CC02AAC07 /* English */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
C01FCF4B08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
COPY_PHASE_STRIP = NO;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_FIX_AND_CONTINUE = YES;
GCC_MODEL_TUNING = G5;
GCC_OPTIMIZATION_LEVEL = 0;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
PRODUCT_NAME = "«PROJECTNAME»";
WRAPPER_EXTENSION = app;
ZERO_LINK = YES;
};
name = Debug;
};
C01FCF4C08A954540054247B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = (
ppc,
i386,
);
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_MODEL_TUNING = G5;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
PRODUCT_NAME = "«PROJECTNAME»";
WRAPPER_EXTENSION = app;
};
name = Release;
};
C01FCF4F08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
FRAMEWORK_SEARCH_PATHS = (
"$(HOME)/Library/Frameworks",
/Library/Frameworks,
"$(FRAMEWORK_SEARCH_PATHS)",
);
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = (
"$(HOME)/Library/Frameworks/SDL.framework/Headers",
/Library/Frameworks/SDL.framework/Headers,
"$(HEADER_SEARCH_PATHS)",
);
PREBINDING = NO;
SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
};
name = Debug;
};
C01FCF5008A954540054247B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
FRAMEWORK_SEARCH_PATHS = (
"$(HOME)/Library/Frameworks",
/Library/Frameworks,
"$(FRAMEWORK_SEARCH_PATHS)",
);
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = (
"$(HOME)/Library/Frameworks/SDL.framework/Headers",
/Library/Frameworks/SDL.framework/Headers,
"$(HEADER_SEARCH_PATHS)",
);
PREBINDING = NO;
SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "«PROJECTNAME»" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C01FCF4B08A954540054247B /* Debug */,
C01FCF4C08A954540054247B /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
C01FCF4E08A954540054247B /* Build configuration list for PBXProject "SDLCustomCocoaApp" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C01FCF4F08A954540054247B /* Debug */,
C01FCF5008A954540054247B /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
}
/* SDLMain.m - main entry point for our Cocoa-ized SDL app
Initial Version: Darrell Walisser <dwaliss1@purdue.edu>
Non-NIB-Code & other changes: Max Horn <max@quendi.de>
Feel free to customize this file to suit your needs
*/
#import <Cocoa/Cocoa.h>
@interface SDLMain : NSObject
{
IBOutlet id _controller;
}
@end
/* SDLMain.m - main entry point for our Cocoa-ized SDL app
Initial Version: Darrell Walisser <dwaliss1@purdue.edu>
Non-NIB-Code & other changes: Max Horn <max@quendi.de>
Feel free to customize this file to suit your needs
*/
#import "SDL.h"
#import "SDLMain.h"
#import "MyController.h"
#import <sys/param.h> /* for MAXPATHLEN */
#import <unistd.h>
/* For some reaon, Apple removed setAppleMenu from the headers in 10.4,
but the method still is there and works. To avoid warnings, we declare
it ourselves here. */
@interface NSApplication(SDL_Missing_Methods)
- (void)setAppleMenu:(NSMenu *)menu;
@end
/* Use this flag to determine whether we use SDLMain.nib or not */
#define SDL_USE_NIB_FILE 1
/* Use this flag to determine whether we use CPS (docking) or not */
#define SDL_USE_CPS 1
#ifdef SDL_USE_CPS
/* Portions of CPS.h */
typedef struct CPSProcessSerNum
{
UInt32 lo;
UInt32 hi;
} CPSProcessSerNum;
extern OSErr CPSGetCurrentProcess( CPSProcessSerNum *psn);
extern OSErr CPSEnableForegroundOperation( CPSProcessSerNum *psn, UInt32 _arg2, UInt32 _arg3, UInt32 _arg4, UInt32 _arg5);
extern OSErr CPSSetFrontProcess( CPSProcessSerNum *psn);
#endif /* SDL_USE_CPS */
static int gArgc;
static char **gArgv;
static BOOL gFinderLaunch;
static BOOL gCalledAppMainline = FALSE;
static NSString *getApplicationName(void)
{
NSDictionary *dict;
NSString *appName = 0;
/* Determine the application name */
dict = (NSDictionary *)CFBundleGetInfoDictionary(CFBundleGetMainBundle());
if (dict)
appName = [dict objectForKey: @"CFBundleName"];
if (![appName length])
appName = [[NSProcessInfo processInfo] processName];
return appName;
}
#if SDL_USE_NIB_FILE
/* A helper category for NSString */
@interface NSString (ReplaceSubString)
- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString;
@end
#endif
@interface SDLApplication : NSApplication
@end
@implementation SDLApplication
/* Invoked from the Quit menu item */
- (void)terminate:(id)sender
{
/* Post a SDL_QUIT event */
SDL_Event event;
event.type = SDL_QUIT;
SDL_PushEvent(&event);
}
@end
/* The main class of the application, the application's delegate */
@implementation SDLMain
/* Set the working directory to the .app's parent directory */
- (void) setupWorkingDirectory:(BOOL)shouldChdir
{
if (shouldChdir)
{
char parentdir[MAXPATHLEN];
CFURLRef url = CFBundleCopyBundleURL(CFBundleGetMainBundle());
CFURLRef url2 = CFURLCreateCopyDeletingLastPathComponent(0, url);
if (CFURLGetFileSystemRepresentation(url2, true, (UInt8 *)parentdir, MAXPATHLEN)) {
assert ( chdir (parentdir) == 0 ); /* chdir to the binary app's parent */
}
CFRelease(url);
CFRelease(url2);
}
}
#if SDL_USE_NIB_FILE
/* Fix menu to contain the real app name instead of "SDL App" */
- (void)fixMenu:(NSMenu *)aMenu withAppName:(NSString *)appName
{
NSRange aRange;
NSEnumerator *enumerator;
NSMenuItem *menuItem;
aRange = [[aMenu title] rangeOfString:@"SDL App"];
if (aRange.length != 0)
[aMenu setTitle: [[aMenu title] stringByReplacingRange:aRange with:appName]];
enumerator = [[aMenu itemArray] objectEnumerator];
while ((menuItem = [enumerator nextObject]))
{
aRange = [[menuItem title] rangeOfString:@"SDL App"];
if (aRange.length != 0)
[menuItem setTitle: [[menuItem title] stringByReplacingRange:aRange with:appName]];
if ([menuItem hasSubmenu])
[self fixMenu:[menuItem submenu] withAppName:appName];
}
[ aMenu sizeToFit ];
}
#else
static void setApplicationMenu(void)
{
/* warning: this code is very odd */
NSMenu *appleMenu;
NSMenuItem *menuItem;
NSString *title;
NSString *appName;
appName = getApplicationName();
appleMenu = [[NSMenu alloc] initWithTitle:@""];
/* Add menu items */
title = [@"About " stringByAppendingString:appName];
[appleMenu addItemWithTitle:title action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""];
[appleMenu addItem:[NSMenuItem separatorItem]];
title = [@"Hide " stringByAppendingString:appName];
[appleMenu addItemWithTitle:title action:@selector(hide:) keyEquivalent:@"h"];
menuItem = (NSMenuItem *)[appleMenu addItemWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@"h"];
[menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)];
[appleMenu addItemWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@""];
[appleMenu addItem:[NSMenuItem separatorItem]];
title = [@"Quit " stringByAppendingString:appName];
[appleMenu addItemWithTitle:title action:@selector(terminate:) keyEquivalent:@"q"];
/* Put menu into the menubar */
menuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""];
[menuItem setSubmenu:appleMenu];
[[NSApp mainMenu] addItem:menuItem];
/* Tell the application object that this is now the application menu */
[NSApp setAppleMenu:appleMenu];
/* Finally give up our references to the objects */
[appleMenu release];
[menuItem release];
}
/* Create a window menu */
static void setupWindowMenu(void)
{
NSMenu *windowMenu;
NSMenuItem *windowMenuItem;
NSMenuItem *menuItem;
windowMenu = [[NSMenu alloc] initWithTitle:@"Window"];
/* "Minimize" item */
menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"];
[windowMenu addItem:menuItem];
[menuItem release];
/* Put menu into the menubar */
windowMenuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""];
[windowMenuItem setSubmenu:windowMenu];
[[NSApp mainMenu] addItem:windowMenuItem];
/* Tell the application object that this is now the window menu */
[NSApp setWindowsMenu:windowMenu];
/* Finally give up our references to the objects */
[windowMenu release];
[windowMenuItem release];
}
/* Replacement for NSApplicationMain */
static void CustomApplicationMain (int argc, char **argv)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
SDLMain *sdlMain;
/* Ensure the application object is initialised */
[SDLApplication sharedApplication];
#ifdef SDL_USE_CPS
{
CPSProcessSerNum PSN;
/* Tell the dock about us */
if (!CPSGetCurrentProcess(&PSN))
if (!CPSEnableForegroundOperation(&PSN,0x03,0x3C,0x2C,0x1103))
if (!CPSSetFrontProcess(&PSN))
[SDLApplication sharedApplication];
}
#endif /* SDL_USE_CPS */
/* Set up the menubar */
[NSApp setMainMenu:[[NSMenu alloc] init]];
setApplicationMenu();
setupWindowMenu();
/* Create SDLMain and make it the app delegate */
sdlMain = [[SDLMain alloc] init];
[NSApp setDelegate:sdlMain];
/* Start the main event loop */
[NSApp run];
[sdlMain release];
[pool release];
}
#endif
/*
* Catch document open requests...this lets us notice files when the app
* was launched by double-clicking a document, or when a document was
* dragged/dropped on the app's icon. You need to have a
* CFBundleDocumentsType section in your Info.plist to get this message,
* apparently.
*
* Files are added to gArgv, so to the app, they'll look like command line
* arguments. Previously, apps launched from the finder had nothing but
* an argv[0].
*
* This message may be received multiple times to open several docs on launch.
*
* This message is ignored once the app's mainline has been called.
*/
- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
{
const char *temparg;
size_t arglen;
char *arg;
char **newargv;
if (!gFinderLaunch) /* MacOS is passing command line args. */
return FALSE;
if (gCalledAppMainline) /* app has started, ignore this document. */
return FALSE;
temparg = [filename UTF8String];
arglen = SDL_strlen(temparg) + 1;
arg = (char *) SDL_malloc(arglen);
if (arg == NULL)
return FALSE;
newargv = (char **) realloc(gArgv, sizeof (char *) * (gArgc + 2));
if (newargv == NULL)
{
SDL_free(arg);
return FALSE;
}
gArgv = newargv;
SDL_strlcpy(arg, temparg, arglen);
gArgv[gArgc++] = arg;
gArgv[gArgc] = NULL;
return TRUE;
}
/* Called when the internal event loop has just started running */
- (void) applicationDidFinishLaunching: (NSNotification *) note
{
int status;
gController = _controller;
/* Set the working directory to the .app's parent directory */
[self setupWorkingDirectory:gFinderLaunch];
#if SDL_USE_NIB_FILE
/* Set the main menu to contain the real app name instead of "SDL App" */
[self fixMenu:[NSApp mainMenu] withAppName:getApplicationName()];
#endif
/* Hand off to main application code */
gCalledAppMainline = TRUE;
status = SDL_main (gArgc, gArgv);
/* We're done, thank you for playing */
exit(status);
}
@end
@implementation NSString (ReplaceSubString)
- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString
{
unsigned int bufferSize;
unsigned int selfLen = [self length];
unsigned int aStringLen = [aString length];
unichar *buffer;
NSRange localRange;
NSString *result;
bufferSize = selfLen + aStringLen - aRange.length;
buffer = NSAllocateMemoryPages(bufferSize*sizeof(unichar));
/* Get first part into buffer */
localRange.location = 0;
localRange.length = aRange.location;
[self getCharacters:buffer range:localRange];
/* Get middle part into buffer */
localRange.location = 0;
localRange.length = aStringLen;
[aString getCharacters:(buffer+aRange.location) range:localRange];
/* Get last part into buffer */
localRange.location = aRange.location + aRange.length;
localRange.length = selfLen - localRange.location;
[self getCharacters:(buffer+aRange.location+aStringLen) range:localRange];
/* Build output string */
result = [NSString stringWithCharacters:buffer length:bufferSize];
NSDeallocateMemoryPages(buffer, bufferSize);
return result;
}
@end
#ifdef main
# undef main
#endif
/* Main entry point to executable - should *not* be SDL_main! */
int main (int argc, char **argv)
{
/* Copy the arguments into a global variable */
/* This is passed if we are launched by double-clicking */
if ( argc >= 2 && strncmp (argv[1], "-psn", 4) == 0 ) {
gArgv = (char **) SDL_malloc(sizeof (char *) * 2);
gArgv[0] = argv[0];
gArgv[1] = NULL;
gArgc = 1;
gFinderLaunch = YES;
} else {
int i;
gArgc = argc;
gArgv = (char **) SDL_malloc(sizeof (char *) * (argc+1));
for (i = 0; i <= argc; i++)
gArgv[i] = argv[i];
gFinderLaunch = NO;
}
#if SDL_USE_NIB_FILE
[SDLApplication poseAsClass:[NSApplication class]];
NSApplicationMain (argc, argv);
#else
CustomApplicationMain (argc, argv);
#endif
return 0;
}
Binary files a/Xcode/TemplatesForXcode/SDL OpenGL Application/English.lproj/InfoPlist.strings and /dev/null differ Binary files a/Xcode/TemplatesForXcode/SDL OpenGL Application/English.lproj/InfoPlist.strings and /dev/null differ
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>com.yourcompany.«PROJECTNAMEASXML»</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>NSMainNibFile</key>
<string>SDLMain</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
//
// Prefix header for all source files of the 'PROJECTNAME' target in the 'PROJECTNAME' project
//
#include "SDL.h"
#ifdef __OBJC__
#import <Cocoa/Cocoa.h>
#endif
/* SDLMain.m - main entry point for our Cocoa-ized SDL app
Initial Version: Darrell Walisser <dwaliss1@purdue.edu>
Non-NIB-Code & other changes: Max Horn <max@quendi.de>
Feel free to customize this file to suit your needs
*/
#import <Cocoa/Cocoa.h>
@interface SDLMain : NSObject
@end
/* SDLMain.m - main entry point for our Cocoa-ized SDL app
Initial Version: Darrell Walisser <dwaliss1@purdue.edu>
Non-NIB-Code & other changes: Max Horn <max@quendi.de>
Feel free to customize this file to suit your needs
*/
#import "SDL.h"
#import "SDLMain.h"
#import <sys/param.h> /* for MAXPATHLEN */
#import <unistd.h>
/* For some reaon, Apple removed setAppleMenu from the headers in 10.4,
but the method still is there and works. To avoid warnings, we declare
it ourselves here. */
@interface NSApplication(SDL_Missing_Methods)
- (void)setAppleMenu:(NSMenu *)menu;
@end
/* Use this flag to determine whether we use SDLMain.nib or not */
#define SDL_USE_NIB_FILE 0
/* Use this flag to determine whether we use CPS (docking) or not */
#define SDL_USE_CPS 1
#ifdef SDL_USE_CPS
/* Portions of CPS.h */
typedef struct CPSProcessSerNum
{
UInt32 lo;
UInt32 hi;
} CPSProcessSerNum;
extern OSErr CPSGetCurrentProcess( CPSProcessSerNum *psn);
extern OSErr CPSEnableForegroundOperation( CPSProcessSerNum *psn, UInt32 _arg2, UInt32 _arg3, UInt32 _arg4, UInt32 _arg5);
extern OSErr CPSSetFrontProcess( CPSProcessSerNum *psn);
#endif /* SDL_USE_CPS */
static int gArgc;
static char **gArgv;
static BOOL gFinderLaunch;
static BOOL gCalledAppMainline = FALSE;
static NSString *getApplicationName(void)
{
NSDictionary *dict;
NSString *appName = 0;
/* Determine the application name */
dict = (NSDictionary *)CFBundleGetInfoDictionary(CFBundleGetMainBundle());
if (dict)
appName = [dict objectForKey: @"CFBundleName"];
if (![appName length])
appName = [[NSProcessInfo processInfo] processName];
return appName;
}
#if SDL_USE_NIB_FILE
/* A helper category for NSString */
@interface NSString (ReplaceSubString)
- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString;
@end
#endif
@interface SDLApplication : NSApplication
@end
@implementation SDLApplication
/* Invoked from the Quit menu item */
- (void)terminate:(id)sender
{
/* Post a SDL_QUIT event */
SDL_Event event;
event.type = SDL_QUIT;
SDL_PushEvent(&event);
}
@end
/* The main class of the application, the application's delegate */
@implementation SDLMain
/* Set the working directory to the .app's parent directory */
- (void) setupWorkingDirectory:(BOOL)shouldChdir
{
if (shouldChdir)
{
char parentdir[MAXPATHLEN];
CFURLRef url = CFBundleCopyBundleURL(CFBundleGetMainBundle());
CFURLRef url2 = CFURLCreateCopyDeletingLastPathComponent(0, url);
if (CFURLGetFileSystemRepresentation(url2, true, (UInt8 *)parentdir, MAXPATHLEN)) {
assert ( chdir (parentdir) == 0 ); /* chdir to the binary app's parent */
}
CFRelease(url);
CFRelease(url2);
}
}
#if SDL_USE_NIB_FILE
/* Fix menu to contain the real app name instead of "SDL App" */
- (void)fixMenu:(NSMenu *)aMenu withAppName:(NSString *)appName
{
NSRange aRange;
NSEnumerator *enumerator;
NSMenuItem *menuItem;
aRange = [[aMenu title] rangeOfString:@"SDL App"];
if (aRange.length != 0)
[aMenu setTitle: [[aMenu title] stringByReplacingRange:aRange with:appName]];
enumerator = [[aMenu itemArray] objectEnumerator];
while ((menuItem = [enumerator nextObject]))
{
aRange = [[menuItem title] rangeOfString:@"SDL App"];
if (aRange.length != 0)
[menuItem setTitle: [[menuItem title] stringByReplacingRange:aRange with:appName]];
if ([menuItem hasSubmenu])
[self fixMenu:[menuItem submenu] withAppName:appName];
}
[ aMenu sizeToFit ];
}
#else
static void setApplicationMenu(void)
{
/* warning: this code is very odd */
NSMenu *appleMenu;
NSMenuItem *menuItem;
NSString *title;
NSString *appName;
appName = getApplicationName();
appleMenu = [[NSMenu alloc] initWithTitle:@""];
/* Add menu items */
title = [@"About " stringByAppendingString:appName];
[appleMenu addItemWithTitle:title action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""];
[appleMenu addItem:[NSMenuItem separatorItem]];
title = [@"Hide " stringByAppendingString:appName];
[appleMenu addItemWithTitle:title action:@selector(hide:) keyEquivalent:@"h"];
menuItem = (NSMenuItem *)[appleMenu addItemWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@"h"];
[menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)];
[appleMenu addItemWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@""];
[appleMenu addItem:[NSMenuItem separatorItem]];
title = [@"Quit " stringByAppendingString:appName];
[appleMenu addItemWithTitle:title action:@selector(terminate:) keyEquivalent:@"q"];
/* Put menu into the menubar */
menuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""];
[menuItem setSubmenu:appleMenu];
[[NSApp mainMenu] addItem:menuItem];
/* Tell the application object that this is now the application menu */
[NSApp setAppleMenu:appleMenu];
/* Finally give up our references to the objects */
[appleMenu release];
[menuItem release];
}
/* Create a window menu */
static void setupWindowMenu(void)
{
NSMenu *windowMenu;
NSMenuItem *windowMenuItem;
NSMenuItem *menuItem;
windowMenu = [[NSMenu alloc] initWithTitle:@"Window"];
/* "Minimize" item */
menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"];
[windowMenu addItem:menuItem];
[menuItem release];
/* Put menu into the menubar */
windowMenuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""];
[windowMenuItem setSubmenu:windowMenu];
[[NSApp mainMenu] addItem:windowMenuItem];
/* Tell the application object that this is now the window menu */
[NSApp setWindowsMenu:windowMenu];
/* Finally give up our references to the objects */
[windowMenu release];
[windowMenuItem release];
}
/* Replacement for NSApplicationMain */
static void CustomApplicationMain (int argc, char **argv)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
SDLMain *sdlMain;
/* Ensure the application object is initialised */
[SDLApplication sharedApplication];
#ifdef SDL_USE_CPS
{
CPSProcessSerNum PSN;
/* Tell the dock about us */
if (!CPSGetCurrentProcess(&PSN))
if (!CPSEnableForegroundOperation(&PSN,0x03,0x3C,0x2C,0x1103))
if (!CPSSetFrontProcess(&PSN))
[SDLApplication sharedApplication];
}
#endif /* SDL_USE_CPS */
/* Set up the menubar */
[NSApp setMainMenu:[[NSMenu alloc] init]];
setApplicationMenu();
setupWindowMenu();
/* Create SDLMain and make it the app delegate */
sdlMain = [[SDLMain alloc] init];
[NSApp setDelegate:sdlMain];
/* Start the main event loop */
[NSApp run];
[sdlMain release];
[pool release];
}
#endif
/*
* Catch document open requests...this lets us notice files when the app
* was launched by double-clicking a document, or when a document was
* dragged/dropped on the app's icon. You need to have a
* CFBundleDocumentsType section in your Info.plist to get this message,
* apparently.
*
* Files are added to gArgv, so to the app, they'll look like command line
* arguments. Previously, apps launched from the finder had nothing but
* an argv[0].
*
* This message may be received multiple times to open several docs on launch.
*
* This message is ignored once the app's mainline has been called.
*/
- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
{
const char *temparg;
size_t arglen;
char *arg;
char **newargv;
if (!gFinderLaunch) /* MacOS is passing command line args. */
return FALSE;
if (gCalledAppMainline) /* app has started, ignore this document. */
return FALSE;
temparg = [filename UTF8String];
arglen = SDL_strlen(temparg) + 1;
arg = (char *) SDL_malloc(arglen);
if (arg == NULL)
return FALSE;
newargv = (char **) realloc(gArgv, sizeof (char *) * (gArgc + 2));
if (newargv == NULL)
{
SDL_free(arg);
return FALSE;
}
gArgv = newargv;
SDL_strlcpy(arg, temparg, arglen);
gArgv[gArgc++] = arg;
gArgv[gArgc] = NULL;
return TRUE;
}
/* Called when the internal event loop has just started running */
- (void) applicationDidFinishLaunching: (NSNotification *) note
{
int status;
/* Set the working directory to the .app's parent directory */
[self setupWorkingDirectory:gFinderLaunch];
#if SDL_USE_NIB_FILE
/* Set the main menu to contain the real app name instead of "SDL App" */
[self fixMenu:[NSApp mainMenu] withAppName:getApplicationName()];
#endif
/* Hand off to main application code */
gCalledAppMainline = TRUE;
status = SDL_main (gArgc, gArgv);
/* We're done, thank you for playing */
exit(status);
}
@end
@implementation NSString (ReplaceSubString)
- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString
{
unsigned int bufferSize;
unsigned int selfLen = [self length];
unsigned int aStringLen = [aString length];
unichar *buffer;
NSRange localRange;
NSString *result;
bufferSize = selfLen + aStringLen - aRange.length;
buffer = NSAllocateMemoryPages(bufferSize*sizeof(unichar));
/* Get first part into buffer */
localRange.location = 0;
localRange.length = aRange.location;
[self getCharacters:buffer range:localRange];
/* Get middle part into buffer */
localRange.location = 0;
localRange.length = aStringLen;
[aString getCharacters:(buffer+aRange.location) range:localRange];
/* Get last part into buffer */
localRange.location = aRange.location + aRange.length;
localRange.length = selfLen - localRange.location;
[self getCharacters:(buffer+aRange.location+aStringLen) range:localRange];
/* Build output string */
result = [NSString stringWithCharacters:buffer length:bufferSize];
NSDeallocateMemoryPages(buffer, bufferSize);
return result;
}
@end
#ifdef main
# undef main
#endif
/* Main entry point to executable - should *not* be SDL_main! */
int main (int argc, char **argv)
{
/* Copy the arguments into a global variable */
/* This is passed if we are launched by double-clicking */
if ( argc >= 2 && strncmp (argv[1], "-psn", 4) == 0 ) {
gArgv = (char **) SDL_malloc(sizeof (char *) * 2);
gArgv[0] = argv[0];
gArgv[1] = NULL;
gArgc = 1;
gFinderLaunch = YES;
} else {
int i;
gArgc = argc;
gArgv = (char **) SDL_malloc(sizeof (char *) * (argc+1));
for (i = 0; i <= argc; i++)
gArgv[i] = argv[i];
gFinderLaunch = NO;
}
#if SDL_USE_NIB_FILE
[SDLApplication poseAsClass:[NSApplication class]];
NSApplicationMain (argc, argv);
#else
CustomApplicationMain (argc, argv);
#endif
return 0;
}
{
FilesToRename = {
"SDLApp_Prefix.pch" = "PROJECTNAME_Prefix.pch";
};
FilesToMacroExpand = (
"PROJECTNAME_Prefix.pch",
"Info.plist",
"English.lproj/InfoPlist.strings",
"main.c",
);
Description = "This project builds an SDL-based application that uses OpenGL.";
}
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 42;
objects = {
/* Begin PBXBuildFile section */
002F39FA09D0881F00EBEB88 /* SDL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002F39F909D0881F00EBEB88 /* SDL.framework */; };
002F3A0009D0884600EBEB88 /* SDL.framework in Copy Frameworks into .app bundle */ = {isa = PBXBuildFile; fileRef = 002F39F909D0881F00EBEB88 /* SDL.framework */; };
002F3A2E09D0888800EBEB88 /* SDLMain.m in Sources */ = {isa = PBXBuildFile; fileRef = 002F3A2C09D0888800EBEB88 /* SDLMain.m */; };
002F3A3F09D088BA00EBEB88 /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = 002F3A3E09D088BA00EBEB88 /* main.c */; };
002F3BFA09D0938900EBEB88 /* atlantis.c in Sources */ = {isa = PBXBuildFile; fileRef = 002F3BF409D0938900EBEB88 /* atlantis.c */; };
002F3BFC09D0938900EBEB88 /* dolphin.c in Sources */ = {isa = PBXBuildFile; fileRef = 002F3BF609D0938900EBEB88 /* dolphin.c */; };
002F3BFD09D0938900EBEB88 /* shark.c in Sources */ = {isa = PBXBuildFile; fileRef = 002F3BF709D0938900EBEB88 /* shark.c */; };
002F3BFE09D0938900EBEB88 /* swim.c in Sources */ = {isa = PBXBuildFile; fileRef = 002F3BF809D0938900EBEB88 /* swim.c */; };
002F3BFF09D0938900EBEB88 /* whale.c in Sources */ = {isa = PBXBuildFile; fileRef = 002F3BF909D0938900EBEB88 /* whale.c */; };
002F3C0109D093BD00EBEB88 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002F3C0009D093BD00EBEB88 /* OpenGL.framework */; };
002F3C6109D0951E00EBEB88 /* GLUT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002F3C6009D0951E00EBEB88 /* GLUT.framework */; };
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; };
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
/* End PBXBuildFile section */
/* Begin PBXBuildStyle section */
4A9504CCFFE6A4B311CA0CBA /* Debug */ = {
isa = PBXBuildStyle;
buildSettings = {
};
name = Debug;
};
4A9504CDFFE6A4B311CA0CBA /* Release */ = {
isa = PBXBuildStyle;
buildSettings = {
};
name = Release;
};
/* End PBXBuildStyle section */
/* Begin PBXCopyFilesBuildPhase section */
002F39FD09D0883400EBEB88 /* Copy Frameworks into .app bundle */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
002F3A0009D0884600EBEB88 /* SDL.framework in Copy Frameworks into .app bundle */,
);
name = "Copy Frameworks into .app bundle";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
002F39F909D0881F00EBEB88 /* SDL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL.framework; path = /Library/Frameworks/SDL.framework; sourceTree = "<absolute>"; };
002F3A2B09D0888800EBEB88 /* SDLMain.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SDLMain.h; sourceTree = SOURCE_ROOT; };
002F3A2C09D0888800EBEB88 /* SDLMain.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = SDLMain.m; sourceTree = SOURCE_ROOT; };
002F3A3E09D088BA00EBEB88 /* main.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = SOURCE_ROOT; };
002F3BF409D0938900EBEB88 /* atlantis.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = atlantis.c; path = atlantis/atlantis.c; sourceTree = SOURCE_ROOT; };
002F3BF509D0938900EBEB88 /* atlantis.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = atlantis.h; path = atlantis/atlantis.h; sourceTree = SOURCE_ROOT; };
002F3BF609D0938900EBEB88 /* dolphin.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = dolphin.c; path = atlantis/dolphin.c; sourceTree = SOURCE_ROOT; };
002F3BF709D0938900EBEB88 /* shark.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = shark.c; path = atlantis/shark.c; sourceTree = SOURCE_ROOT; };
002F3BF809D0938900EBEB88 /* swim.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = swim.c; path = atlantis/swim.c; sourceTree = SOURCE_ROOT; };
002F3BF909D0938900EBEB88 /* whale.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = whale.c; path = atlantis/whale.c; sourceTree = SOURCE_ROOT; };
002F3C0009D093BD00EBEB88 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
002F3C6009D0951E00EBEB88 /* GLUT.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLUT.framework; path = ../../../../../../../../../../System/Library/Frameworks/GLUT.framework; sourceTree = SOURCE_ROOT; };
089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
32CA4F630368D1EE00C91783 /* «PROJECTNAME»_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file; path = "«PROJECTNAME»_Prefix.pch"; sourceTree = "<group>"; };
8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
8D1107320486CEB800E47090 /* «PROJECTNAME».app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "«PROJECTNAME».app"; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
8D11072E0486CEB800E47090 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
002F39FA09D0881F00EBEB88 /* SDL.framework in Frameworks */,
002F3C6109D0951E00EBEB88 /* GLUT.framework in Frameworks */,
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
002F3C0109D093BD00EBEB88 /* OpenGL.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
002F3BF309D0937800EBEB88 /* atlantis */ = {
isa = PBXGroup;
children = (
002F3BF409D0938900EBEB88 /* atlantis.c */,
002F3BF509D0938900EBEB88 /* atlantis.h */,
002F3BF609D0938900EBEB88 /* dolphin.c */,
002F3BF709D0938900EBEB88 /* shark.c */,
002F3BF809D0938900EBEB88 /* swim.c */,
002F3BF909D0938900EBEB88 /* whale.c */,
);
name = atlantis;
sourceTree = "<group>";
};
080E96DDFE201D6D7F000001 /* Classes */ = {
isa = PBXGroup;
children = (
002F3A2B09D0888800EBEB88 /* SDLMain.h */,
002F3A2C09D0888800EBEB88 /* SDLMain.m */,
);
name = Classes;
sourceTree = "<group>";
};
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = {
isa = PBXGroup;
children = (
002F39F909D0881F00EBEB88 /* SDL.framework */,
002F3C6009D0951E00EBEB88 /* GLUT.framework */,
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
002F3C0009D093BD00EBEB88 /* OpenGL.framework */,
);
name = "Linked Frameworks";
sourceTree = "<group>";
};
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = {
isa = PBXGroup;
children = (
29B97324FDCFA39411CA2CEA /* AppKit.framework */,
29B97325FDCFA39411CA2CEA /* Foundation.framework */,
);
name = "Other Frameworks";
sourceTree = "<group>";
};
19C28FACFE9D520D11CA2CBB /* Products */ = {
isa = PBXGroup;
children = (
8D1107320486CEB800E47090 /* «PROJECTNAME».app */,
);
name = Products;
sourceTree = "<group>";
};
29B97314FDCFA39411CA2CEA /* «PROJECTNAMEASXML» */ = {
isa = PBXGroup;
children = (
080E96DDFE201D6D7F000001 /* Classes */,
29B97315FDCFA39411CA2CEA /* Other Sources */,
29B97317FDCFA39411CA2CEA /* Resources */,
29B97323FDCFA39411CA2CEA /* Frameworks */,
19C28FACFE9D520D11CA2CBB /* Products */,
);
name = "«PROJECTNAMEASXML»";
sourceTree = "<group>";
};
29B97315FDCFA39411CA2CEA /* Other Sources */ = {
isa = PBXGroup;
children = (
002F3BF309D0937800EBEB88 /* atlantis */,
32CA4F630368D1EE00C91783 /* «PROJECTNAME»_Prefix.pch */,
002F3A3E09D088BA00EBEB88 /* main.c */,
);
name = "Other Sources";
sourceTree = "<group>";
};
29B97317FDCFA39411CA2CEA /* Resources */ = {
isa = PBXGroup;
children = (
8D1107310486CEB800E47090 /* Info.plist */,
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */,
);
name = Resources;
sourceTree = "<group>";
};
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
isa = PBXGroup;
children = (
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */,
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
8D1107260486CEB800E47090 /* «PROJECTNAME» */ = {
isa = PBXNativeTarget;
buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "«PROJECTNAME»" */;
buildPhases = (
8D1107290486CEB800E47090 /* Resources */,
8D11072C0486CEB800E47090 /* Sources */,
8D11072E0486CEB800E47090 /* Frameworks */,
002F39FD09D0883400EBEB88 /* Copy Frameworks into .app bundle */,
);
buildRules = (
);
buildSettings = {
};
dependencies = (
);
name = "«PROJECTNAME»";
productInstallPath = "$(HOME)/Applications";
productName = "«PROJECTNAME»";
productReference = 8D1107320486CEB800E47090 /* «PROJECTNAME».app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
29B97313FDCFA39411CA2CEA /* Project object */ = {
isa = PBXProject;
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "SDLOpenGLApp" */;
buildSettings = {
};
buildStyles = (
4A9504CCFFE6A4B311CA0CBA /* Debug */,
4A9504CDFFE6A4B311CA0CBA /* Release */,
);
hasScannedForEncodings = 1;
mainGroup = 29B97314FDCFA39411CA2CEA /* «PROJECTNAMEASXML» */;
projectDirPath = "";
targets = (
8D1107260486CEB800E47090 /* «PROJECTNAME» */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
8D1107290486CEB800E47090 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
8D11072C0486CEB800E47090 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
002F3A2E09D0888800EBEB88 /* SDLMain.m in Sources */,
002F3A3F09D088BA00EBEB88 /* main.c in Sources */,
002F3BFA09D0938900EBEB88 /* atlantis.c in Sources */,
002F3BFC09D0938900EBEB88 /* dolphin.c in Sources */,
002F3BFD09D0938900EBEB88 /* shark.c in Sources */,
002F3BFE09D0938900EBEB88 /* swim.c in Sources */,
002F3BFF09D0938900EBEB88 /* whale.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
089C165DFE840E0CC02AAC07 /* English */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
C01FCF4B08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
COPY_PHASE_STRIP = NO;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_FIX_AND_CONTINUE = YES;
GCC_MODEL_TUNING = G5;
GCC_OPTIMIZATION_LEVEL = 0;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
PRODUCT_NAME = "«PROJECTNAME»";
WRAPPER_EXTENSION = app;
ZERO_LINK = YES;
};
name = Debug;
};
C01FCF4C08A954540054247B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = (
ppc,
i386,
);
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_MODEL_TUNING = G5;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
PRODUCT_NAME = "«PROJECTNAME»";
WRAPPER_EXTENSION = app;
};
name = Release;
};
C01FCF4F08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
FRAMEWORK_SEARCH_PATHS = (
"$(HOME)/Library/Frameworks",
/Library/Frameworks,
"$(FRAMEWORK_SEARCH_PATHS)",
);
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = (
"$(HOME)/Library/Frameworks/SDL.framework/Headers",
/Library/Frameworks/SDL.framework/Headers,
"$(HEADER_SEARCH_PATHS)",
);
PREBINDING = NO;
SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
};
name = Debug;
};
C01FCF5008A954540054247B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
FRAMEWORK_SEARCH_PATHS = (
"$(HOME)/Library/Frameworks",
/Library/Frameworks,
"$(FRAMEWORK_SEARCH_PATHS)",
);
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = (
"$(HOME)/Library/Frameworks/SDL.framework/Headers",
/Library/Frameworks/SDL.framework/Headers,
"$(HEADER_SEARCH_PATHS)",
);
PREBINDING = NO;
SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "«PROJECTNAME»" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C01FCF4B08A954540054247B /* Debug */,
C01FCF4C08A954540054247B /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
C01FCF4E08A954540054247B /* Build configuration list for PBXProject "SDLOpenGLApp" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C01FCF4F08A954540054247B /* Debug */,
C01FCF5008A954540054247B /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
}
/* Copyright (c) Mark J. Kilgard, 1994. */
/**
* (c) Copyright 1993, 1994, 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.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <sys/time.h>
#include <GLUT/glut.h>
#include "atlantis.h"
fishRec sharks[NUM_SHARKS];
fishRec momWhale;
fishRec babyWhale;
fishRec dolph;
GLboolean Timing = GL_TRUE;
int w_win = 640;
int h_win = 480;
GLint count = 0;
GLenum StrMode = GL_VENDOR;
GLboolean moving;
static double mtime(void)
{
struct timeval tk_time;
struct timezone tz;
gettimeofday(&tk_time, &tz);
return 4294.967296 * tk_time.tv_sec + 0.000001 * tk_time.tv_usec;
}
static double filter(double in, double *save)
{
static double k1 = 0.9;
static double k2 = 0.05;
save[3] = in;
save[1] = save[0]*k1 + k2*(save[3] + save[2]);
save[0]=save[1];
save[2]=save[3];
return(save[1]);
}
void DrawStr(const char *str)
{
GLint i = 0;
if(!str) return;
while(str[i])
{
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, str[i]);
i++;
}
}
void
InitFishs(void)
{
int i;
for (i = 0; i < NUM_SHARKS; i++) {
sharks[i].x = 70000.0 + rand() % 6000;
sharks[i].y = rand() % 6000;
sharks[i].z = rand() % 6000;
sharks[i].psi = rand() % 360 - 180.0;
sharks[i].v = 1.0;
}
dolph.x = 30000.0;
dolph.y = 0.0;
dolph.z = 6000.0;
dolph.psi = 90.0;
dolph.theta = 0.0;
dolph.v = 3.0;
momWhale.x = 70000.0;
momWhale.y = 0.0;
momWhale.z = 0.0;
momWhale.psi = 90.0;
momWhale.theta = 0.0;
momWhale.v = 3.0;
babyWhale.x = 60000.0;
babyWhale.y = -2000.0;
babyWhale.z = -2000.0;
babyWhale.psi = 90.0;
babyWhale.theta = 0.0;
babyWhale.v = 3.0;
}
void
Atlantis_Init(void)
{
static float ambient[] = {0.2, 0.2, 0.2, 1.0};
static float diffuse[] = {1.0, 1.0, 1.0, 1.0};
static float position[] = {0.0, 1.0, 0.0, 0.0};
static float mat_shininess[] = {90.0};
static float mat_specular[] = {0.8, 0.8, 0.8, 1.0};
static float mat_diffuse[] = {0.46, 0.66, 0.795, 1.0};
static float mat_ambient[] = {0.3, 0.4, 0.5, 1.0};
static float lmodel_ambient[] = {0.4, 0.4, 0.4, 1.0};
static float lmodel_localviewer[] = {0.0};
//GLfloat map1[4] = {0.0, 0.0, 0.0, 0.0};
//GLfloat map2[4] = {0.0, 0.0, 0.0, 0.0};
static float fog_color[] = {0.0, 0.5, 0.9, 1.0};
glFrontFace(GL_CCW);
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
glLightfv(GL_LIGHT0, GL_POSITION, position);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);
glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, lmodel_localviewer);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mat_shininess);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mat_diffuse);
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, mat_ambient);
InitFishs();
glEnable(GL_FOG);
glFogi(GL_FOG_MODE, GL_EXP);
glFogf(GL_FOG_DENSITY, 0.0000025);
glFogfv(GL_FOG_COLOR, fog_color);
glClearColor(0.0, 0.5, 0.9, 1.0);
}
void
Atlantis_Reshape(int width, int height)
{
w_win = width;
h_win = height;
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0, (GLfloat) width / (GLfloat) height, 20000.0, 300000.0);
glMatrixMode(GL_MODELVIEW);
}
void
Atlantis_Animate(void)
{
int i;
for (i = 0; i < NUM_SHARKS; i++) {
SharkPilot(&sharks[i]);
SharkMiss(i);
}
WhalePilot(&dolph);
dolph.phi++;
//glutPostRedisplay();
WhalePilot(&momWhale);
momWhale.phi++;
WhalePilot(&babyWhale);
babyWhale.phi++;
}
void
Atlantis_Key(unsigned char key, int x, int y)
{
switch (key) {
case 't':
Timing = !Timing;
break;
case ' ':
switch(StrMode)
{
case GL_EXTENSIONS:
StrMode = GL_VENDOR;
break;
case GL_VENDOR:
StrMode = GL_RENDERER;
break;
case GL_RENDERER:
StrMode = GL_VERSION;
break;
case GL_VERSION:
StrMode = GL_EXTENSIONS;
break;
}
break;
case 27: /* Esc will quit */
exit(1);
break;
case 's': /* "s" start animation */
moving = GL_TRUE;
//glutIdleFunc(Animate);
break;
case 'a': /* "a" stop animation */
moving = GL_FALSE;
//glutIdleFunc(NULL);
break;
case '.': /* "." will advance frame */
if (!moving) {
Atlantis_Animate();
}
}
}
/*
void Display(void)
{
static float P123[3] = {-448.94, -203.14, 9499.60};
static float P124[3] = {-442.64, -185.20, 9528.07};
static float P125[3] = {-441.07, -148.05, 9528.07};
static float P126[3] = {-443.43, -128.84, 9499.60};
static float P127[3] = {-456.87, -146.78, 9466.67};
static float P128[3] = {-453.68, -183.93, 9466.67};
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
FishTransform(&dolph);
DrawDolphin(&dolph);
glPopMatrix();
glutSwapBuffers();
}
*/
void
Atlantis_Display(void)
{
int i;
static double th[4] = {0.0, 0.0, 0.0, 0.0};
static double t1 = 0.0, t2 = 0.0, t;
char num_str[128];
t1 = t2;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
for (i = 0; i < NUM_SHARKS; i++) {
glPushMatrix();
FishTransform(&sharks[i]);
DrawShark(&sharks[i]);
glPopMatrix();
}
glPushMatrix();
FishTransform(&dolph);
DrawDolphin(&dolph);
glPopMatrix();
glPushMatrix();
FishTransform(&momWhale);
DrawWhale(&momWhale);
glPopMatrix();
glPushMatrix();
FishTransform(&babyWhale);
glScalef(0.45, 0.45, 0.3);
DrawWhale(&babyWhale);
glPopMatrix();
if(Timing)
{
t2 = mtime();
t = t2 - t1;
if(t > 0.0001) t = 1.0 / t;
glDisable(GL_LIGHTING);
//glDisable(GL_DEPTH_TEST);
glColor3f(1.0, 0.0, 0.0);
glMatrixMode (GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0, w_win, 0, h_win, -10.0, 10.0);
glRasterPos2f(5.0, 5.0);
switch(StrMode)
{
case GL_VENDOR:
sprintf(num_str, "%0.2f Hz, %dx%d, VENDOR: ", filter(t, th), w_win, h_win);
DrawStr(num_str);
DrawStr(glGetString(GL_VENDOR));
break;
case GL_RENDERER:
sprintf(num_str, "%0.2f Hz, %dx%d, RENDERER: ", filter(t, th), w_win, h_win);
DrawStr(num_str);
DrawStr(glGetString(GL_RENDERER));
break;
case GL_VERSION:
sprintf(num_str, "%0.2f Hz, %dx%d, VERSION: ", filter(t, th), w_win, h_win);
DrawStr(num_str);
DrawStr(glGetString(GL_VERSION));
break;
case GL_EXTENSIONS:
sprintf(num_str, "%0.2f Hz, %dx%d, EXTENSIONS: ", filter(t, th), w_win, h_win);
DrawStr(num_str);
DrawStr(glGetString(GL_EXTENSIONS));
break;
}
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glEnable(GL_LIGHTING);
//glEnable(GL_DEPTH_TEST);
}
count++;
glutSwapBuffers();
}
/*
void
Visible(int state)
{
if (state == GLUT_VISIBLE) {
if (moving)
glutIdleFunc(Animate);
} else {
if (moving)
glutIdleFunc(NULL);
}
}
void
timingSelect(int value)
{
switch(value)
{
case 1:
StrMode = GL_VENDOR;
break;
case 2:
StrMode = GL_RENDERER;
break;
case 3:
StrMode = GL_VERSION;
break;
case 4:
StrMode = GL_EXTENSIONS;
break;
}
}
void
menuSelect(int value)
{
switch (value) {
case 1:
moving = GL_TRUE;
glutIdleFunc(Animate);
break;
case 2:
moving = GL_FALSE;
glutIdleFunc(NULL);
break;
case 4:
exit(0);
break;
}
}
int
main(int argc, char **argv)
{
GLboolean fullscreen = GL_FALSE;
GLint time_menu;
srand(0);
glutInit(&argc, argv);
if (argc > 1 && !strcmp(argv[1], "-w"))
fullscreen = GL_FALSE;
//glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutInitDisplayString("rgba double depth=24");
if (fullscreen) {
glutGameModeString("1024x768:32");
glutEnterGameMode();
} else {
glutInitWindowSize(320, 240);
glutCreateWindow("Atlantis Timing");
}
Init();
glutDisplayFunc(Display);
glutReshapeFunc(Reshape);
glutKeyboardFunc(Key);
moving = GL_TRUE;
glutIdleFunc(Animate);
glutVisibilityFunc(Visible);
time_menu = glutCreateMenu(timingSelect);
glutAddMenuEntry("GL_VENDOR", 1);
glutAddMenuEntry("GL_RENDERER", 2);
glutAddMenuEntry("GL_VERSION", 3);
glutAddMenuEntry("GL_EXTENSIONS", 4);
glutCreateMenu(menuSelect);
glutAddMenuEntry("Start motion", 1);
glutAddMenuEntry("Stop motion", 2);
glutAddSubMenu("Timing Mode", time_menu);
glutAddMenuEntry("Quit", 4);
//glutAttachMenu(GLUT_RIGHT_BUTTON);
glutAttachMenu(GLUT_RIGHT_BUTTON);
glutMainLoop();
return 0; // ANSI C requires main to return int.
}
*/
\ No newline at end of file
/**
* (c) Copyright 1993, 1994, 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.
*/
#define RAD 57.295
#define RRAD 0.01745
#define NUM_SHARKS 4
#define SHARKSIZE 6000
#define SHARKSPEED 100.0
#define WHALESPEED 250.0
typedef struct _fishRec {
float x, y, z, phi, theta, psi, v;
float xt, yt, zt;
float htail, vtail;
float dtheta;
int spurt, attack;
} fishRec;
extern fishRec sharks[NUM_SHARKS];
extern fishRec momWhale;
extern fishRec babyWhale;
extern fishRec dolph;
extern void FishTransform(fishRec *);
extern void WhalePilot(fishRec *);
extern void SharkPilot(fishRec *);
extern void SharkMiss(int);
extern void DrawWhale(fishRec *);
extern void DrawShark(fishRec *);
extern void DrawDolphin(fishRec *);
/**
* (c) Copyright 1993, 1994, 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.
*/
#include <math.h>
#include <GLUT/glut.h>
#include "atlantis.h"
/* *INDENT-OFF* */
static float N001[3] = {-0.005937 ,-0.101998 ,-0.994767};
static float N002[3] = {0.936780 ,-0.200803 ,0.286569};
static float N003[3] = {-0.233062 ,0.972058 ,0.028007};
static float N005[3] = {0.898117 ,0.360171 ,0.252315};
static float N006[3] = {-0.915437 ,0.348456 ,0.201378};
static float N007[3] = {0.602263 ,-0.777527 ,0.180920};
static float N008[3] = {-0.906912 ,-0.412015 ,0.088061};
static float N012[3] = {0.884408 ,-0.429417 ,-0.182821};
static float N013[3] = {0.921121 ,0.311084 ,-0.234016};
static float N014[3] = {0.382635 ,0.877882 ,-0.287948};
static float N015[3] = {-0.380046 ,0.888166 ,-0.258316};
static float N016[3] = {-0.891515 ,0.392238 ,-0.226607};
static float N017[3] = {-0.901419 ,-0.382002 ,-0.203763};
static float N018[3] = {-0.367225 ,-0.911091 ,-0.187243};
static float N019[3] = {0.339539 ,-0.924846 ,-0.171388};
static float N020[3] = {0.914706 ,-0.378617 ,-0.141290};
static float N021[3] = {0.950662 ,0.262713 ,-0.164994};
static float N022[3] = {0.546359 ,0.801460 ,-0.243218};
static float N023[3] = {-0.315796 ,0.917068 ,-0.243431};
static float N024[3] = {-0.825687 ,0.532277 ,-0.186875};
static float N025[3] = {-0.974763 ,-0.155232 ,-0.160435};
static float N026[3] = {-0.560596 ,-0.816658 ,-0.137119};
static float N027[3] = {0.380210 ,-0.910817 ,-0.160786};
static float N028[3] = {0.923772 ,-0.358322 ,-0.135093};
static float N029[3] = {0.951202 ,0.275053 ,-0.139859};
static float N030[3] = {0.686099 ,0.702548 ,-0.188932};
static float N031[3] = {-0.521865 ,0.826719 ,-0.210220};
static float N032[3] = {-0.923820 ,0.346739 ,-0.162258};
static float N033[3] = {-0.902095 ,-0.409995 ,-0.134646};
static float N034[3] = {-0.509115 ,-0.848498 ,-0.144404};
static float N035[3] = {0.456469 ,-0.880293 ,-0.129305};
static float N036[3] = {0.873401 ,-0.475489 ,-0.105266};
static float N037[3] = {0.970825 ,0.179861 ,-0.158584};
static float N038[3] = {0.675609 ,0.714187 ,-0.183004};
static float N039[3] = {-0.523574 ,0.830212 ,-0.191360};
static float N040[3] = {-0.958895 ,0.230808 ,-0.165071};
static float N041[3] = {-0.918285 ,-0.376803 ,-0.121542};
static float N042[3] = {-0.622467 ,-0.774167 ,-0.114888};
static float N043[3] = {0.404497 ,-0.908807 ,-0.102231};
static float N044[3] = {0.930538 ,-0.365155 ,-0.027588};
static float N045[3] = {0.921920 ,0.374157 ,-0.100345};
static float N046[3] = {0.507346 ,0.860739 ,0.041562};
static float N047[3] = {-0.394646 ,0.918815 ,-0.005730};
static float N048[3] = {-0.925411 ,0.373024 ,-0.066837};
static float N049[3] = {-0.945337 ,-0.322309 ,-0.049551};
static float N050[3] = {-0.660437 ,-0.750557 ,-0.022072};
static float N051[3] = {0.488835 ,-0.871950 ,-0.027261};
static float N052[3] = {0.902599 ,-0.421397 ,0.087969};
static float N053[3] = {0.938636 ,0.322606 ,0.122020};
static float N054[3] = {0.484605 ,0.871078 ,0.079878};
static float N055[3] = {-0.353607 ,0.931559 ,0.084619};
static float N056[3] = {-0.867759 ,0.478564 ,0.134054};
static float N057[3] = {-0.951583 ,-0.296030 ,0.082794};
static float N058[3] = {-0.672355 ,-0.730209 ,0.121384};
static float N059[3] = {0.528336 ,-0.842452 ,0.105525};
static float N060[3] = {0.786913 ,-0.564760 ,0.248627};
static float N062[3] = {0.622098 ,0.765230 ,0.165584};
static float N063[3] = {-0.631711 ,0.767816 ,0.106773};
static float N064[3] = {-0.687886 ,0.606351 ,0.398938};
static float N065[3] = {-0.946327 ,-0.281623 ,0.158598};
static float N066[3] = {-0.509549 ,-0.860437 ,0.002776};
static float N067[3] = {0.462594 ,-0.876692 ,0.131977};
static float N071[3] = {0.000000 ,1.000000 ,0.000000};
static float N077[3] = {-0.880770 ,0.461448 ,0.106351};
static float N078[3] = {-0.880770 ,0.461448 ,0.106351};
static float N079[3] = {-0.880770 ,0.461448 ,0.106351};
static float N080[3] = {-0.880770 ,0.461448 ,0.106351};
static float N081[3] = {-0.571197 ,0.816173 ,0.087152};
static float N082[3] = {-0.880770 ,0.461448 ,0.106351};
static float N083[3] = {-0.571197 ,0.816173 ,0.087152};
static float N084[3] = {-0.571197 ,0.816173 ,0.087152};
static float N085[3] = {-0.880770 ,0.461448 ,0.106351};
static float N086[3] = {-0.571197 ,0.816173 ,0.087152};
static float N087[3] = {-0.880770 ,0.461448 ,0.106351};
static float N088[3] = {-0.880770 ,0.461448 ,0.106351};
static float N089[3] = {-0.880770 ,0.461448 ,0.106351};
static float N090[3] = {-0.880770 ,0.461448 ,0.106351};
static float N091[3] = {0.000000 ,1.000000 ,0.000000};
static float N092[3] = {0.000000 ,1.000000 ,0.000000};
static float N093[3] = {0.000000 ,1.000000 ,0.000000};
static float N094[3] = {1.000000 ,0.000000 ,0.000000};
static float N095[3] = {-1.000000 ,0.000000 ,0.000000};
static float N097[3] = {-0.697296 ,0.702881 ,0.140491};
static float N098[3] = {0.918864 ,0.340821 ,0.198819};
static float N099[3] = {-0.932737 ,0.201195 ,0.299202};
static float N100[3] = {0.029517 ,0.981679 ,0.188244};
static float N102[3] = {0.813521 ,-0.204936 ,0.544229};
static float N110[3] = {-0.781480 ,-0.384779 ,0.491155};
static float N111[3] = {-0.722243 ,0.384927 ,0.574627};
static float N112[3] = {-0.752278 ,0.502679 ,0.425901};
static float N113[3] = {0.547257 ,0.367910 ,0.751766};
static float N114[3] = {0.725949 ,-0.232568 ,0.647233};
static float N115[3] = {-0.747182 ,-0.660786 ,0.071280};
static float N116[3] = {0.931519 ,0.200748 ,0.303270};
static float N117[3] = {-0.828928 ,0.313757 ,0.463071};
static float N118[3] = {0.902554 ,-0.370967 ,0.218587};
static float N119[3] = {-0.879257 ,-0.441851 ,0.177973};
static float N120[3] = {0.642327 ,0.611901 ,0.461512};
static float N121[3] = {0.964817 ,-0.202322 ,0.167910};
static float N122[3] = {0.000000 ,1.000000 ,0.000000};
static float P001[3] = {5.68, -300.95, 1324.70};
static float P002[3] = {338.69, -219.63, 9677.03};
static float P003[3] = {12.18, 474.59, 9138.14};
static float P005[3] = {487.51, 198.05, 9350.78};
static float P006[3] = {-457.61, 68.74, 9427.85};
static float P007[3] = {156.52, -266.72, 10311.68};
static float P008[3] = {-185.56, -266.51, 10310.47};
static float P009[3] = {124.39, -261.46, 1942.34};
static float P010[3] = {-130.05, -261.46, 1946.03};
static float P011[3] = {141.07, -320.11, 1239.38};
static float P012[3] = {156.48, -360.12, 2073.41};
static float P013[3] = {162.00, -175.88, 2064.44};
static float P014[3] = {88.16, -87.72, 2064.02};
static float P015[3] = {-65.21, -96.13, 2064.02};
static float P016[3] = {-156.48, -180.96, 2064.44};
static float P017[3] = {-162.00, -368.93, 2082.39};
static float P018[3] = {-88.16, -439.22, 2082.39};
static float P019[3] = {65.21, -440.32, 2083.39};
static float P020[3] = {246.87, -356.02, 2576.95};
static float P021[3] = {253.17, -111.15, 2567.15};
static float P022[3] = {132.34, 51.41, 2559.84};
static float P023[3] = {-97.88, 40.44, 2567.15};
static float P024[3] = {-222.97, -117.49, 2567.15};
static float P025[3] = {-252.22, -371.53, 2569.92};
static float P026[3] = {-108.44, -518.19, 2586.75};
static float P027[3] = {97.88, -524.79, 2586.75};
static float P028[3] = {370.03, -421.19, 3419.70};
static float P029[3] = {351.15, -16.98, 3423.17};
static float P030[3] = {200.66, 248.46, 3430.37};
static float P031[3] = {-148.42, 235.02, 3417.91};
static float P032[3] = {-360.21, -30.27, 3416.84};
static float P033[3] = {-357.90, -414.89, 3407.04};
static float P034[3] = {-148.88, -631.35, 3409.90};
static float P035[3] = {156.38, -632.59, 3419.70};
static float P036[3] = {462.61, -469.21, 4431.51};
static float P037[3] = {466.60, 102.25, 4434.98};
static float P038[3] = {243.05, 474.34, 4562.02};
static float P039[3] = {-191.23, 474.40, 4554.42};
static float P040[3] = {-476.12, 111.05, 4451.11};
static float P041[3] = {-473.36, -470.74, 4444.78};
static float P042[3] = {-266.95, -748.41, 4447.78};
static float P043[3] = {211.14, -749.91, 4429.73};
static float P044[3] = {680.57, -370.27, 5943.46};
static float P045[3] = {834.01, 363.09, 6360.63};
static float P046[3] = {371.29, 804.51, 6486.26};
static float P047[3] = {-291.43, 797.22, 6494.28};
static float P048[3] = {-784.13, 370.75, 6378.01};
static float P049[3] = {-743.29, -325.82, 5943.46};
static float P050[3] = {-383.24, -804.77, 5943.46};
static float P051[3] = {283.47, -846.09, 5943.46};
static float iP001[3] = {5.68, -300.95, 1324.70};
static float iP009[3] = {124.39, -261.46, 1942.34};
static float iP010[3] = {-130.05, -261.46, 1946.03};
static float iP011[3] = {141.07, -320.11, 1239.38};
static float iP012[3] = {156.48, -360.12, 2073.41};
static float iP013[3] = {162.00, -175.88, 2064.44};
static float iP014[3] = {88.16, -87.72, 2064.02};
static float iP015[3] = {-65.21, -96.13, 2064.02};
static float iP016[3] = {-156.48, -180.96, 2064.44};
static float iP017[3] = {-162.00, -368.93, 2082.39};
static float iP018[3] = {-88.16, -439.22, 2082.39};
static float iP019[3] = {65.21, -440.32, 2083.39};
static float iP020[3] = {246.87, -356.02, 2576.95};
static float iP021[3] = {253.17, -111.15, 2567.15};
static float iP022[3] = {132.34, 51.41, 2559.84};
static float iP023[3] = {-97.88, 40.44, 2567.15};
static float iP024[3] = {-222.97, -117.49, 2567.15};
static float iP025[3] = {-252.22, -371.53, 2569.92};
static float iP026[3] = {-108.44, -518.19, 2586.75};
static float iP027[3] = {97.88, -524.79, 2586.75};
static float iP028[3] = {370.03, -421.19, 3419.70};
static float iP029[3] = {351.15, -16.98, 3423.17};
static float iP030[3] = {200.66, 248.46, 3430.37};
static float iP031[3] = {-148.42, 235.02, 3417.91};
static float iP032[3] = {-360.21, -30.27, 3416.84};
static float iP033[3] = {-357.90, -414.89, 3407.04};
static float iP034[3] = {-148.88, -631.35, 3409.90};
static float iP035[3] = {156.38, -632.59, 3419.70};
static float iP036[3] = {462.61, -469.21, 4431.51};
static float iP037[3] = {466.60, 102.25, 4434.98};
static float iP038[3] = {243.05, 474.34, 4562.02};
static float iP039[3] = {-191.23, 474.40, 4554.42};
static float iP040[3] = {-476.12, 111.05, 4451.11};
static float iP041[3] = {-473.36, -470.74, 4444.78};
static float iP042[3] = {-266.95, -748.41, 4447.78};
static float iP043[3] = {211.14, -749.91, 4429.73};
static float iP044[3] = {680.57, -370.27, 5943.46};
static float iP045[3] = {834.01, 363.09, 6360.63};
static float iP046[3] = {371.29, 804.51, 6486.26};
static float iP047[3] = {-291.43, 797.22, 6494.28};
static float iP048[3] = {-784.13, 370.75, 6378.01};
static float iP049[3] = {-743.29, -325.82, 5943.46};
static float iP050[3] = {-383.24, -804.77, 5943.46};
static float iP051[3] = {283.47, -846.09, 5943.46};
static float P052[3] = {599.09, -300.15, 7894.03};
static float P053[3] = {735.48, 306.26, 7911.92};
static float P054[3] = {246.22, 558.53, 8460.50};
static float P055[3] = {-230.41, 559.84, 8473.23};
static float P056[3] = {-698.66, 320.83, 7902.59};
static float P057[3] = {-643.29, -299.16, 7902.59};
static float P058[3] = {-341.47, -719.30, 7902.59};
static float P059[3] = {252.57, -756.12, 7902.59};
static float P060[3] = {458.39, -265.31, 9355.44};
static float P062[3] = {224.04, 338.75, 9450.30};
static float P063[3] = {-165.71, 341.04, 9462.35};
static float P064[3] = {-298.11, 110.13, 10180.37};
static float P065[3] = {-473.99, -219.71, 9355.44};
static float P066[3] = {-211.97, -479.87, 9355.44};
static float P067[3] = {192.86, -491.45, 9348.73};
static float P068[3] = {-136.29, -319.84, 1228.73};
static float P069[3] = {1111.17, -314.14, 1314.19};
static float P070[3] = {-1167.34, -321.61, 1319.45};
static float P071[3] = {1404.86, -306.66, 1235.45};
static float P072[3] = {-1409.73, -314.14, 1247.66};
static float P073[3] = {1254.01, -296.87, 1544.58};
static float P074[3] = {-1262.09, -291.70, 1504.26};
static float P075[3] = {965.71, -269.26, 1742.65};
static float P076[3] = {-900.97, -276.74, 1726.07};
static float iP068[3] = {-136.29, -319.84, 1228.73};
static float iP069[3] = {1111.17, -314.14, 1314.19};
static float iP070[3] = {-1167.34, -321.61, 1319.45};
static float iP071[3] = {1404.86, -306.66, 1235.45};
static float iP072[3] = {-1409.73, -314.14, 1247.66};
static float iP073[3] = {1254.01, -296.87, 1544.58};
static float iP074[3] = {-1262.09, -291.70, 1504.26};
static float iP075[3] = {965.71, -269.26, 1742.65};
static float iP076[3] = {-900.97, -276.74, 1726.07};
static float P077[3] = {1058.00, -448.81, 8194.66};
static float P078[3] = {-1016.51, -456.43, 8190.62};
static float P079[3] = {-1515.96, -676.45, 7754.93};
static float P080[3] = {1856.75, -830.34, 7296.56};
static float P081[3] = {1472.16, -497.38, 7399.68};
static float P082[3] = {-1775.26, -829.51, 7298.46};
static float P083[3] = {911.09, -252.51, 7510.99};
static float P084[3] = {-1451.94, -495.62, 7384.30};
static float P085[3] = {1598.75, -669.26, 7769.90};
static float P086[3] = {-836.53, -250.08, 7463.25};
static float P087[3] = {722.87, -158.18, 8006.41};
static float P088[3] = {-688.86, -162.28, 7993.89};
static float P089[3] = {-626.92, -185.30, 8364.98};
static float P090[3] = {647.72, -189.46, 8354.99};
static float P091[3] = {0.00, 835.01, 5555.62};
static float P092[3] = {0.00, 1350.18, 5220.86};
static float P093[3] = {0.00, 1422.94, 5285.27};
static float P094[3] = {0.00, 1296.75, 5650.19};
static float P095[3] = {0.00, 795.63, 6493.88};
static float iP091[3] = {0.00, 835.01, 5555.62};
static float iP092[3] = {0.00, 1350.18, 5220.86};
static float iP093[3] = {0.00, 1422.94, 5285.27};
static float iP094[3] = {0.00, 1296.75, 5650.19};
static float iP095[3] = {0.00, 795.63, 6493.88};
static float P097[3] = {-194.91, -357.14, 10313.32};
static float P098[3] = {135.35, -357.66, 10307.94};
static float iP097[3] = {-194.91, -357.14, 10313.32};
static float iP098[3] = {135.35, -357.66, 10307.94};
static float P099[3] = {-380.53, -221.14, 9677.98};
static float P100[3] = {0.00, 412.99, 9629.33};
static float P102[3] = {59.51, -412.55, 10677.58};
static float iP102[3] = {59.51, -412.55, 10677.58};
static float P103[3] = {6.50, 484.74, 9009.94};
static float P105[3] = {-41.86, 476.51, 9078.17};
static float P108[3] = {49.20, 476.83, 9078.24};
static float P110[3] = {-187.62, -410.04, 10674.12};
static float iP110[3] = {-187.62, -410.04, 10674.12};
static float P111[3] = {-184.25, -318.70, 10723.88};
static float iP111[3] = {-184.25, -318.70, 10723.88};
static float P112[3] = {-179.61, -142.81, 10670.26};
static float P113[3] = {57.43, -147.94, 10675.26};
static float P114[3] = {54.06, -218.90, 10712.44};
static float P115[3] = {-186.35, -212.09, 10713.76};
static float P116[3] = {205.90, -84.61, 10275.97};
static float P117[3] = {-230.96, -83.26, 10280.09};
static float iP118[3] = {216.78, -509.17, 10098.94};
static float iP119[3] = {-313.21, -510.79, 10102.62};
static float P118[3] = {216.78, -509.17, 10098.94};
static float P119[3] = {-313.21, -510.79, 10102.62};
static float P120[3] = {217.95, 96.34, 10161.62};
static float P121[3] = {71.99, -319.74, 10717.70};
static float iP121[3] = {71.99, -319.74, 10717.70};
static float P122[3] = {0.00, 602.74, 5375.84};
static float iP122[3] = {0.00, 602.74, 5375.84};
static float P123[3] = {-448.94, -203.14, 9499.60};
static float P124[3] = {-442.64, -185.20, 9528.07};
static float P125[3] = {-441.07, -148.05, 9528.07};
static float P126[3] = {-443.43, -128.84, 9499.60};
static float P127[3] = {-456.87, -146.78, 9466.67};
static float P128[3] = {-453.68, -183.93, 9466.67};
static float P129[3] = {428.43, -124.08, 9503.03};
static float P130[3] = {419.73, -142.14, 9534.56};
static float P131[3] = {419.92, -179.96, 9534.56};
static float P132[3] = {431.20, -199.73, 9505.26};
static float P133[3] = {442.28, -181.67, 9475.96};
static float P134[3] = {442.08, -143.84, 9475.96};
/* *INDENT-ON* */
void
Dolphin001(void)
{
glNormal3fv(N071);
glBegin(GL_POLYGON);
glVertex3fv(P001);
glVertex3fv(P068);
glVertex3fv(P010);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P068);
glVertex3fv(P076);
glVertex3fv(P010);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P068);
glVertex3fv(P070);
glVertex3fv(P076);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P076);
glVertex3fv(P070);
glVertex3fv(P074);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P070);
glVertex3fv(P072);
glVertex3fv(P074);
glEnd();
glNormal3fv(N119);
glBegin(GL_POLYGON);
glVertex3fv(P072);
glVertex3fv(P070);
glVertex3fv(P074);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P074);
glVertex3fv(P070);
glVertex3fv(P076);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P070);
glVertex3fv(P068);
glVertex3fv(P076);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P076);
glVertex3fv(P068);
glVertex3fv(P010);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P068);
glVertex3fv(P001);
glVertex3fv(P010);
glEnd();
}
void
Dolphin002(void)
{
glNormal3fv(N071);
glBegin(GL_POLYGON);
glVertex3fv(P011);
glVertex3fv(P001);
glVertex3fv(P009);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P075);
glVertex3fv(P011);
glVertex3fv(P009);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P069);
glVertex3fv(P011);
glVertex3fv(P075);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P069);
glVertex3fv(P075);
glVertex3fv(P073);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P071);
glVertex3fv(P069);
glVertex3fv(P073);
glEnd();
glNormal3fv(N119);
glBegin(GL_POLYGON);
glVertex3fv(P001);
glVertex3fv(P011);
glVertex3fv(P009);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P009);
glVertex3fv(P011);
glVertex3fv(P075);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P011);
glVertex3fv(P069);
glVertex3fv(P075);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P069);
glVertex3fv(P073);
glVertex3fv(P075);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P069);
glVertex3fv(P071);
glVertex3fv(P073);
glEnd();
}
void
Dolphin003(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N018);
glVertex3fv(P018);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N019);
glVertex3fv(P019);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N019);
glVertex3fv(P019);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N012);
glVertex3fv(P012);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N017);
glVertex3fv(P017);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N018);
glVertex3fv(P018);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N017);
glVertex3fv(P017);
glNormal3fv(N016);
glVertex3fv(P016);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N013);
glVertex3fv(P013);
glNormal3fv(N012);
glVertex3fv(P012);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N016);
glVertex3fv(P016);
glNormal3fv(N015);
glVertex3fv(P015);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N014);
glVertex3fv(P014);
glNormal3fv(N013);
glVertex3fv(P013);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N015);
glVertex3fv(P015);
glNormal3fv(N014);
glVertex3fv(P014);
glEnd();
}
void
Dolphin004(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N014);
glVertex3fv(P014);
glNormal3fv(N015);
glVertex3fv(P015);
glNormal3fv(N023);
glVertex3fv(P023);
glNormal3fv(N022);
glVertex3fv(P022);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N015);
glVertex3fv(P015);
glNormal3fv(N016);
glVertex3fv(P016);
glNormal3fv(N024);
glVertex3fv(P024);
glNormal3fv(N023);
glVertex3fv(P023);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N016);
glVertex3fv(P016);
glNormal3fv(N017);
glVertex3fv(P017);
glNormal3fv(N025);
glVertex3fv(P025);
glNormal3fv(N024);
glVertex3fv(P024);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N017);
glVertex3fv(P017);
glNormal3fv(N018);
glVertex3fv(P018);
glNormal3fv(N026);
glVertex3fv(P026);
glNormal3fv(N025);
glVertex3fv(P025);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N013);
glVertex3fv(P013);
glNormal3fv(N014);
glVertex3fv(P014);
glNormal3fv(N022);
glVertex3fv(P022);
glNormal3fv(N021);
glVertex3fv(P021);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N012);
glVertex3fv(P012);
glNormal3fv(N013);
glVertex3fv(P013);
glNormal3fv(N021);
glVertex3fv(P021);
glNormal3fv(N020);
glVertex3fv(P020);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N018);
glVertex3fv(P018);
glNormal3fv(N019);
glVertex3fv(P019);
glNormal3fv(N027);
glVertex3fv(P027);
glNormal3fv(N026);
glVertex3fv(P026);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N019);
glVertex3fv(P019);
glNormal3fv(N012);
glVertex3fv(P012);
glNormal3fv(N020);
glVertex3fv(P020);
glNormal3fv(N027);
glVertex3fv(P027);
glEnd();
}
void
Dolphin005(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N022);
glVertex3fv(P022);
glNormal3fv(N023);
glVertex3fv(P023);
glNormal3fv(N031);
glVertex3fv(P031);
glNormal3fv(N030);
glVertex3fv(P030);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N021);
glVertex3fv(P021);
glNormal3fv(N022);
glVertex3fv(P022);
glNormal3fv(N030);
glVertex3fv(P030);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N021);
glVertex3fv(P021);
glNormal3fv(N030);
glVertex3fv(P030);
glNormal3fv(N029);
glVertex3fv(P029);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N023);
glVertex3fv(P023);
glNormal3fv(N024);
glVertex3fv(P024);
glNormal3fv(N031);
glVertex3fv(P031);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N024);
glVertex3fv(P024);
glNormal3fv(N032);
glVertex3fv(P032);
glNormal3fv(N031);
glVertex3fv(P031);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N024);
glVertex3fv(P024);
glNormal3fv(N025);
glVertex3fv(P025);
glNormal3fv(N032);
glVertex3fv(P032);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N025);
glVertex3fv(P025);
glNormal3fv(N033);
glVertex3fv(P033);
glNormal3fv(N032);
glVertex3fv(P032);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N020);
glVertex3fv(P020);
glNormal3fv(N021);
glVertex3fv(P021);
glNormal3fv(N029);
glVertex3fv(P029);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N020);
glVertex3fv(P020);
glNormal3fv(N029);
glVertex3fv(P029);
glNormal3fv(N028);
glVertex3fv(P028);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N027);
glVertex3fv(P027);
glNormal3fv(N020);
glVertex3fv(P020);
glNormal3fv(N028);
glVertex3fv(P028);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N027);
glVertex3fv(P027);
glNormal3fv(N028);
glVertex3fv(P028);
glNormal3fv(N035);
glVertex3fv(P035);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N025);
glVertex3fv(P025);
glNormal3fv(N026);
glVertex3fv(P026);
glNormal3fv(N033);
glVertex3fv(P033);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N033);
glVertex3fv(P033);
glNormal3fv(N026);
glVertex3fv(P026);
glNormal3fv(N034);
glVertex3fv(P034);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N026);
glVertex3fv(P026);
glNormal3fv(N027);
glVertex3fv(P027);
glNormal3fv(N035);
glVertex3fv(P035);
glNormal3fv(N034);
glVertex3fv(P034);
glEnd();
}
void
Dolphin006(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N092);
glVertex3fv(P092);
glNormal3fv(N093);
glVertex3fv(P093);
glNormal3fv(N094);
glVertex3fv(P094);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N093);
glVertex3fv(P093);
glNormal3fv(N092);
glVertex3fv(P092);
glNormal3fv(N094);
glVertex3fv(P094);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N092);
glVertex3fv(P092);
glNormal3fv(N091);
glVertex3fv(P091);
glNormal3fv(N095);
glVertex3fv(P095);
glNormal3fv(N094);
glVertex3fv(P094);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N091);
glVertex3fv(P091);
glNormal3fv(N092);
glVertex3fv(P092);
glNormal3fv(N094);
glVertex3fv(P094);
glNormal3fv(N095);
glVertex3fv(P095);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N122);
glVertex3fv(P122);
glNormal3fv(N095);
glVertex3fv(P095);
glNormal3fv(N091);
glVertex3fv(P091);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N122);
glVertex3fv(P122);
glNormal3fv(N091);
glVertex3fv(P091);
glNormal3fv(N095);
glVertex3fv(P095);
glEnd();
}
void
Dolphin007(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N030);
glVertex3fv(P030);
glNormal3fv(N031);
glVertex3fv(P031);
glNormal3fv(N039);
glVertex3fv(P039);
glNormal3fv(N038);
glVertex3fv(P038);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N029);
glVertex3fv(P029);
glNormal3fv(N030);
glVertex3fv(P030);
glNormal3fv(N038);
glVertex3fv(P038);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N029);
glVertex3fv(P029);
glNormal3fv(N038);
glVertex3fv(P038);
glNormal3fv(N037);
glVertex3fv(P037);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N028);
glVertex3fv(P028);
glNormal3fv(N029);
glVertex3fv(P029);
glNormal3fv(N037);
glVertex3fv(P037);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N028);
glVertex3fv(P028);
glNormal3fv(N037);
glVertex3fv(P037);
glNormal3fv(N036);
glVertex3fv(P036);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N035);
glVertex3fv(P035);
glNormal3fv(N028);
glVertex3fv(P028);
glNormal3fv(N036);
glVertex3fv(P036);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N035);
glVertex3fv(P035);
glNormal3fv(N036);
glVertex3fv(P036);
glNormal3fv(N043);
glVertex3fv(P043);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N034);
glVertex3fv(P034);
glNormal3fv(N035);
glVertex3fv(P035);
glNormal3fv(N043);
glVertex3fv(P043);
glNormal3fv(N042);
glVertex3fv(P042);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N033);
glVertex3fv(P033);
glNormal3fv(N034);
glVertex3fv(P034);
glNormal3fv(N042);
glVertex3fv(P042);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N033);
glVertex3fv(P033);
glNormal3fv(N042);
glVertex3fv(P042);
glNormal3fv(N041);
glVertex3fv(P041);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N031);
glVertex3fv(P031);
glNormal3fv(N032);
glVertex3fv(P032);
glNormal3fv(N039);
glVertex3fv(P039);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N039);
glVertex3fv(P039);
glNormal3fv(N032);
glVertex3fv(P032);
glNormal3fv(N040);
glVertex3fv(P040);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N032);
glVertex3fv(P032);
glNormal3fv(N033);
glVertex3fv(P033);
glNormal3fv(N040);
glVertex3fv(P040);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N040);
glVertex3fv(P040);
glNormal3fv(N033);
glVertex3fv(P033);
glNormal3fv(N041);
glVertex3fv(P041);
glEnd();
}
void
Dolphin008(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N042);
glVertex3fv(P042);
glNormal3fv(N043);
glVertex3fv(P043);
glNormal3fv(N051);
glVertex3fv(P051);
glNormal3fv(N050);
glVertex3fv(P050);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N043);
glVertex3fv(P043);
glNormal3fv(N036);
glVertex3fv(P036);
glNormal3fv(N051);
glVertex3fv(P051);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N051);
glVertex3fv(P051);
glNormal3fv(N036);
glVertex3fv(P036);
glNormal3fv(N044);
glVertex3fv(P044);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N041);
glVertex3fv(P041);
glNormal3fv(N042);
glVertex3fv(P042);
glNormal3fv(N050);
glVertex3fv(P050);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N041);
glVertex3fv(P041);
glNormal3fv(N050);
glVertex3fv(P050);
glNormal3fv(N049);
glVertex3fv(P049);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N036);
glVertex3fv(P036);
glNormal3fv(N037);
glVertex3fv(P037);
glNormal3fv(N044);
glVertex3fv(P044);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N044);
glVertex3fv(P044);
glNormal3fv(N037);
glVertex3fv(P037);
glNormal3fv(N045);
glVertex3fv(P045);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N040);
glVertex3fv(P040);
glNormal3fv(N041);
glVertex3fv(P041);
glNormal3fv(N049);
glVertex3fv(P049);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N040);
glVertex3fv(P040);
glNormal3fv(N049);
glVertex3fv(P049);
glNormal3fv(N048);
glVertex3fv(P048);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N039);
glVertex3fv(P039);
glNormal3fv(N040);
glVertex3fv(P040);
glNormal3fv(N048);
glVertex3fv(P048);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N039);
glVertex3fv(P039);
glNormal3fv(N048);
glVertex3fv(P048);
glNormal3fv(N047);
glVertex3fv(P047);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N037);
glVertex3fv(P037);
glNormal3fv(N038);
glVertex3fv(P038);
glNormal3fv(N045);
glVertex3fv(P045);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N038);
glVertex3fv(P038);
glNormal3fv(N046);
glVertex3fv(P046);
glNormal3fv(N045);
glVertex3fv(P045);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N038);
glVertex3fv(P038);
glNormal3fv(N039);
glVertex3fv(P039);
glNormal3fv(N047);
glVertex3fv(P047);
glNormal3fv(N046);
glVertex3fv(P046);
glEnd();
}
void
Dolphin009(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N050);
glVertex3fv(P050);
glNormal3fv(N051);
glVertex3fv(P051);
glNormal3fv(N059);
glVertex3fv(P059);
glNormal3fv(N058);
glVertex3fv(P058);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N051);
glVertex3fv(P051);
glNormal3fv(N044);
glVertex3fv(P044);
glNormal3fv(N059);
glVertex3fv(P059);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N059);
glVertex3fv(P059);
glNormal3fv(N044);
glVertex3fv(P044);
glNormal3fv(N052);
glVertex3fv(P052);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N044);
glVertex3fv(P044);
glNormal3fv(N045);
glVertex3fv(P045);
glNormal3fv(N053);
glVertex3fv(P053);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N044);
glVertex3fv(P044);
glNormal3fv(N053);
glVertex3fv(P053);
glNormal3fv(N052);
glVertex3fv(P052);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N049);
glVertex3fv(P049);
glNormal3fv(N050);
glVertex3fv(P050);
glNormal3fv(N058);
glVertex3fv(P058);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N049);
glVertex3fv(P049);
glNormal3fv(N058);
glVertex3fv(P058);
glNormal3fv(N057);
glVertex3fv(P057);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N048);
glVertex3fv(P048);
glNormal3fv(N049);
glVertex3fv(P049);
glNormal3fv(N057);
glVertex3fv(P057);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N048);
glVertex3fv(P048);
glNormal3fv(N057);
glVertex3fv(P057);
glNormal3fv(N056);
glVertex3fv(P056);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N047);
glVertex3fv(P047);
glNormal3fv(N048);
glVertex3fv(P048);
glNormal3fv(N056);
glVertex3fv(P056);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N047);
glVertex3fv(P047);
glNormal3fv(N056);
glVertex3fv(P056);
glNormal3fv(N055);
glVertex3fv(P055);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N045);
glVertex3fv(P045);
glNormal3fv(N046);
glVertex3fv(P046);
glNormal3fv(N053);
glVertex3fv(P053);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N046);
glVertex3fv(P046);
glNormal3fv(N054);
glVertex3fv(P054);
glNormal3fv(N053);
glVertex3fv(P053);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N046);
glVertex3fv(P046);
glNormal3fv(N047);
glVertex3fv(P047);
glNormal3fv(N055);
glVertex3fv(P055);
glNormal3fv(N054);
glVertex3fv(P054);
glEnd();
}
void
Dolphin010(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N080);
glVertex3fv(P080);
glNormal3fv(N081);
glVertex3fv(P081);
glNormal3fv(N085);
glVertex3fv(P085);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N081);
glVertex3fv(P081);
glNormal3fv(N083);
glVertex3fv(P083);
glNormal3fv(N085);
glVertex3fv(P085);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N085);
glVertex3fv(P085);
glNormal3fv(N083);
glVertex3fv(P083);
glNormal3fv(N077);
glVertex3fv(P077);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N083);
glVertex3fv(P083);
glNormal3fv(N087);
glVertex3fv(P087);
glNormal3fv(N077);
glVertex3fv(P077);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N077);
glVertex3fv(P077);
glNormal3fv(N087);
glVertex3fv(P087);
glNormal3fv(N090);
glVertex3fv(P090);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N081);
glVertex3fv(P081);
glNormal3fv(N080);
glVertex3fv(P080);
glNormal3fv(N085);
glVertex3fv(P085);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N083);
glVertex3fv(P083);
glNormal3fv(N081);
glVertex3fv(P081);
glNormal3fv(N085);
glVertex3fv(P085);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N083);
glVertex3fv(P083);
glNormal3fv(N085);
glVertex3fv(P085);
glNormal3fv(N077);
glVertex3fv(P077);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N087);
glVertex3fv(P087);
glNormal3fv(N083);
glVertex3fv(P083);
glNormal3fv(N077);
glVertex3fv(P077);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N087);
glVertex3fv(P087);
glNormal3fv(N077);
glVertex3fv(P077);
glNormal3fv(N090);
glVertex3fv(P090);
glEnd();
}
void
Dolphin011(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N082);
glVertex3fv(P082);
glNormal3fv(N084);
glVertex3fv(P084);
glNormal3fv(N079);
glVertex3fv(P079);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N084);
glVertex3fv(P084);
glNormal3fv(N086);
glVertex3fv(P086);
glNormal3fv(N079);
glVertex3fv(P079);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N079);
glVertex3fv(P079);
glNormal3fv(N086);
glVertex3fv(P086);
glNormal3fv(N078);
glVertex3fv(P078);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N086);
glVertex3fv(P086);
glNormal3fv(N088);
glVertex3fv(P088);
glNormal3fv(N078);
glVertex3fv(P078);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N078);
glVertex3fv(P078);
glNormal3fv(N088);
glVertex3fv(P088);
glNormal3fv(N089);
glVertex3fv(P089);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N088);
glVertex3fv(P088);
glNormal3fv(N086);
glVertex3fv(P086);
glNormal3fv(N089);
glVertex3fv(P089);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N089);
glVertex3fv(P089);
glNormal3fv(N086);
glVertex3fv(P086);
glNormal3fv(N078);
glVertex3fv(P078);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N086);
glVertex3fv(P086);
glNormal3fv(N084);
glVertex3fv(P084);
glNormal3fv(N078);
glVertex3fv(P078);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N078);
glVertex3fv(P078);
glNormal3fv(N084);
glVertex3fv(P084);
glNormal3fv(N079);
glVertex3fv(P079);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N084);
glVertex3fv(P084);
glNormal3fv(N082);
glVertex3fv(P082);
glNormal3fv(N079);
glVertex3fv(P079);
glEnd();
}
void
Dolphin012(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N058);
glVertex3fv(P058);
glNormal3fv(N059);
glVertex3fv(P059);
glNormal3fv(N067);
glVertex3fv(P067);
glNormal3fv(N066);
glVertex3fv(P066);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N059);
glVertex3fv(P059);
glNormal3fv(N052);
glVertex3fv(P052);
glNormal3fv(N060);
glVertex3fv(P060);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N059);
glVertex3fv(P059);
glNormal3fv(N060);
glVertex3fv(P060);
glNormal3fv(N067);
glVertex3fv(P067);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N058);
glVertex3fv(P058);
glNormal3fv(N066);
glVertex3fv(P066);
glNormal3fv(N065);
glVertex3fv(P065);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N058);
glVertex3fv(P058);
glNormal3fv(N065);
glVertex3fv(P065);
glNormal3fv(N057);
glVertex3fv(P057);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N056);
glVertex3fv(P056);
glNormal3fv(N057);
glVertex3fv(P057);
glNormal3fv(N065);
glVertex3fv(P065);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N056);
glVertex3fv(P056);
glNormal3fv(N065);
glVertex3fv(P065);
glNormal3fv(N006);
glVertex3fv(P006);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N056);
glVertex3fv(P056);
glNormal3fv(N006);
glVertex3fv(P006);
glNormal3fv(N063);
glVertex3fv(P063);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N056);
glVertex3fv(P056);
glNormal3fv(N063);
glVertex3fv(P063);
glNormal3fv(N055);
glVertex3fv(P055);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N054);
glVertex3fv(P054);
glNormal3fv(N062);
glVertex3fv(P062);
glNormal3fv(N005);
glVertex3fv(P005);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N054);
glVertex3fv(P054);
glNormal3fv(N005);
glVertex3fv(P005);
glNormal3fv(N053);
glVertex3fv(P053);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N052);
glVertex3fv(P052);
glNormal3fv(N053);
glVertex3fv(P053);
glNormal3fv(N005);
glVertex3fv(P005);
glNormal3fv(N060);
glVertex3fv(P060);
glEnd();
}
void
Dolphin013(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N116);
glVertex3fv(P116);
glNormal3fv(N117);
glVertex3fv(P117);
glNormal3fv(N112);
glVertex3fv(P112);
glNormal3fv(N113);
glVertex3fv(P113);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N114);
glVertex3fv(P114);
glNormal3fv(N113);
glVertex3fv(P113);
glNormal3fv(N112);
glVertex3fv(P112);
glNormal3fv(N115);
glVertex3fv(P115);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N114);
glVertex3fv(P114);
glNormal3fv(N116);
glVertex3fv(P116);
glNormal3fv(N113);
glVertex3fv(P113);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N114);
glVertex3fv(P114);
glNormal3fv(N007);
glVertex3fv(P007);
glNormal3fv(N116);
glVertex3fv(P116);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N007);
glVertex3fv(P007);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N116);
glVertex3fv(P116);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P002);
glVertex3fv(P007);
glVertex3fv(P008);
glVertex3fv(P099);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P007);
glVertex3fv(P114);
glVertex3fv(P115);
glVertex3fv(P008);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N117);
glVertex3fv(P117);
glNormal3fv(N099);
glVertex3fv(P099);
glNormal3fv(N008);
glVertex3fv(P008);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N117);
glVertex3fv(P117);
glNormal3fv(N008);
glVertex3fv(P008);
glNormal3fv(N112);
glVertex3fv(P112);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N112);
glVertex3fv(P112);
glNormal3fv(N008);
glVertex3fv(P008);
glNormal3fv(N115);
glVertex3fv(P115);
glEnd();
}
void
Dolphin014(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N111);
glVertex3fv(P111);
glNormal3fv(N110);
glVertex3fv(P110);
glNormal3fv(N102);
glVertex3fv(P102);
glNormal3fv(N121);
glVertex3fv(P121);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N111);
glVertex3fv(P111);
glNormal3fv(N097);
glVertex3fv(P097);
glNormal3fv(N110);
glVertex3fv(P110);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N097);
glVertex3fv(P097);
glNormal3fv(N119);
glVertex3fv(P119);
glNormal3fv(N110);
glVertex3fv(P110);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N097);
glVertex3fv(P097);
glNormal3fv(N099);
glVertex3fv(P099);
glNormal3fv(N119);
glVertex3fv(P119);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N099);
glVertex3fv(P099);
glNormal3fv(N065);
glVertex3fv(P065);
glNormal3fv(N119);
glVertex3fv(P119);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N065);
glVertex3fv(P065);
glNormal3fv(N066);
glVertex3fv(P066);
glNormal3fv(N119);
glVertex3fv(P119);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P098);
glVertex3fv(P097);
glVertex3fv(P111);
glVertex3fv(P121);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P002);
glVertex3fv(P099);
glVertex3fv(P097);
glVertex3fv(P098);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N110);
glVertex3fv(P110);
glNormal3fv(N119);
glVertex3fv(P119);
glNormal3fv(N118);
glVertex3fv(P118);
glNormal3fv(N102);
glVertex3fv(P102);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N119);
glVertex3fv(P119);
glNormal3fv(N066);
glVertex3fv(P066);
glNormal3fv(N067);
glVertex3fv(P067);
glNormal3fv(N118);
glVertex3fv(P118);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N067);
glVertex3fv(P067);
glNormal3fv(N060);
glVertex3fv(P060);
glNormal3fv(N002);
glVertex3fv(P002);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N067);
glVertex3fv(P067);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N118);
glVertex3fv(P118);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N118);
glVertex3fv(P118);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N098);
glVertex3fv(P098);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N118);
glVertex3fv(P118);
glNormal3fv(N098);
glVertex3fv(P098);
glNormal3fv(N102);
glVertex3fv(P102);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N102);
glVertex3fv(P102);
glNormal3fv(N098);
glVertex3fv(P098);
glNormal3fv(N121);
glVertex3fv(P121);
glEnd();
}
void
Dolphin015(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N055);
glVertex3fv(P055);
glNormal3fv(N003);
glVertex3fv(P003);
glNormal3fv(N054);
glVertex3fv(P054);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N003);
glVertex3fv(P003);
glNormal3fv(N055);
glVertex3fv(P055);
glNormal3fv(N063);
glVertex3fv(P063);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N003);
glVertex3fv(P003);
glNormal3fv(N063);
glVertex3fv(P063);
glNormal3fv(N100);
glVertex3fv(P100);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N003);
glVertex3fv(P003);
glNormal3fv(N100);
glVertex3fv(P100);
glNormal3fv(N054);
glVertex3fv(P054);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N054);
glVertex3fv(P054);
glNormal3fv(N100);
glVertex3fv(P100);
glNormal3fv(N062);
glVertex3fv(P062);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N100);
glVertex3fv(P100);
glNormal3fv(N064);
glVertex3fv(P064);
glNormal3fv(N120);
glVertex3fv(P120);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N100);
glVertex3fv(P100);
glNormal3fv(N063);
glVertex3fv(P063);
glNormal3fv(N064);
glVertex3fv(P064);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N063);
glVertex3fv(P063);
glNormal3fv(N006);
glVertex3fv(P006);
glNormal3fv(N064);
glVertex3fv(P064);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N064);
glVertex3fv(P064);
glNormal3fv(N006);
glVertex3fv(P006);
glNormal3fv(N099);
glVertex3fv(P099);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N064);
glVertex3fv(P064);
glNormal3fv(N099);
glVertex3fv(P099);
glNormal3fv(N117);
glVertex3fv(P117);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N120);
glVertex3fv(P120);
glNormal3fv(N064);
glVertex3fv(P064);
glNormal3fv(N117);
glVertex3fv(P117);
glNormal3fv(N116);
glVertex3fv(P116);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N006);
glVertex3fv(P006);
glNormal3fv(N065);
glVertex3fv(P065);
glNormal3fv(N099);
glVertex3fv(P099);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N062);
glVertex3fv(P062);
glNormal3fv(N100);
glVertex3fv(P100);
glNormal3fv(N120);
glVertex3fv(P120);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N005);
glVertex3fv(P005);
glNormal3fv(N062);
glVertex3fv(P062);
glNormal3fv(N120);
glVertex3fv(P120);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N005);
glVertex3fv(P005);
glNormal3fv(N120);
glVertex3fv(P120);
glNormal3fv(N002);
glVertex3fv(P002);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N120);
glVertex3fv(P120);
glNormal3fv(N116);
glVertex3fv(P116);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N060);
glVertex3fv(P060);
glNormal3fv(N005);
glVertex3fv(P005);
glNormal3fv(N002);
glVertex3fv(P002);
glEnd();
}
void
Dolphin016(void)
{
glDisable(GL_DEPTH_TEST);
glBegin(GL_POLYGON);
glVertex3fv(P123);
glVertex3fv(P124);
glVertex3fv(P125);
glVertex3fv(P126);
glVertex3fv(P127);
glVertex3fv(P128);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P129);
glVertex3fv(P130);
glVertex3fv(P131);
glVertex3fv(P132);
glVertex3fv(P133);
glVertex3fv(P134);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P103);
glVertex3fv(P105);
glVertex3fv(P108);
glEnd();
glEnable(GL_DEPTH_TEST);
}
void
DrawDolphin(fishRec * fish)
{
float seg0, seg1, seg2, seg3, seg4, seg5, seg6, seg7;
float pitch, thrash, chomp;
fish->htail = (int) (fish->htail - (int) (10.0 * fish->v)) % 360;
thrash = 70.0 * fish->v;
seg0 = 1.0 * thrash * sin((fish->htail) * RRAD);
seg3 = 1.0 * thrash * sin((fish->htail) * RRAD);
seg1 = 2.0 * thrash * sin((fish->htail + 4.0) * RRAD);
seg2 = 3.0 * thrash * sin((fish->htail + 6.0) * RRAD);
seg4 = 4.0 * thrash * sin((fish->htail + 10.0) * RRAD);
seg5 = 4.5 * thrash * sin((fish->htail + 15.0) * RRAD);
seg6 = 5.0 * thrash * sin((fish->htail + 20.0) * RRAD);
seg7 = 6.0 * thrash * sin((fish->htail + 30.0) * RRAD);
pitch = fish->v * sin((fish->htail + 180.0) * RRAD);
if (fish->v > 2.0) {
chomp = -(fish->v - 2.0) * 200.0;
}
chomp = 100.0;
P012[1] = iP012[1] + seg5;
P013[1] = iP013[1] + seg5;
P014[1] = iP014[1] + seg5;
P015[1] = iP015[1] + seg5;
P016[1] = iP016[1] + seg5;
P017[1] = iP017[1] + seg5;
P018[1] = iP018[1] + seg5;
P019[1] = iP019[1] + seg5;
P020[1] = iP020[1] + seg4;
P021[1] = iP021[1] + seg4;
P022[1] = iP022[1] + seg4;
P023[1] = iP023[1] + seg4;
P024[1] = iP024[1] + seg4;
P025[1] = iP025[1] + seg4;
P026[1] = iP026[1] + seg4;
P027[1] = iP027[1] + seg4;
P028[1] = iP028[1] + seg2;
P029[1] = iP029[1] + seg2;
P030[1] = iP030[1] + seg2;
P031[1] = iP031[1] + seg2;
P032[1] = iP032[1] + seg2;
P033[1] = iP033[1] + seg2;
P034[1] = iP034[1] + seg2;
P035[1] = iP035[1] + seg2;
P036[1] = iP036[1] + seg1;
P037[1] = iP037[1] + seg1;
P038[1] = iP038[1] + seg1;
P039[1] = iP039[1] + seg1;
P040[1] = iP040[1] + seg1;
P041[1] = iP041[1] + seg1;
P042[1] = iP042[1] + seg1;
P043[1] = iP043[1] + seg1;
P044[1] = iP044[1] + seg0;
P045[1] = iP045[1] + seg0;
P046[1] = iP046[1] + seg0;
P047[1] = iP047[1] + seg0;
P048[1] = iP048[1] + seg0;
P049[1] = iP049[1] + seg0;
P050[1] = iP050[1] + seg0;
P051[1] = iP051[1] + seg0;
P009[1] = iP009[1] + seg6;
P010[1] = iP010[1] + seg6;
P075[1] = iP075[1] + seg6;
P076[1] = iP076[1] + seg6;
P001[1] = iP001[1] + seg7;
P011[1] = iP011[1] + seg7;
P068[1] = iP068[1] + seg7;
P069[1] = iP069[1] + seg7;
P070[1] = iP070[1] + seg7;
P071[1] = iP071[1] + seg7;
P072[1] = iP072[1] + seg7;
P073[1] = iP073[1] + seg7;
P074[1] = iP074[1] + seg7;
P091[1] = iP091[1] + seg3;
P092[1] = iP092[1] + seg3;
P093[1] = iP093[1] + seg3;
P094[1] = iP094[1] + seg3;
P095[1] = iP095[1] + seg3;
P122[1] = iP122[1] + seg3 * 1.5;
P097[1] = iP097[1] + chomp;
P098[1] = iP098[1] + chomp;
P102[1] = iP102[1] + chomp;
P110[1] = iP110[1] + chomp;
P111[1] = iP111[1] + chomp;
P121[1] = iP121[1] + chomp;
P118[1] = iP118[1] + chomp;
P119[1] = iP119[1] + chomp;
glPushMatrix();
glRotatef(pitch, 1.0, 0.0, 0.0);
glTranslatef(0.0, 0.0, 7000.0);
glRotatef(180.0, 0.0, 1.0, 0.0);
glEnable(GL_CULL_FACE);
Dolphin014();
Dolphin010();
Dolphin009();
Dolphin012();
Dolphin013();
Dolphin006();
Dolphin002();
Dolphin001();
Dolphin003();
Dolphin015();
Dolphin004();
Dolphin005();
Dolphin007();
Dolphin008();
Dolphin011();
Dolphin016();
glDisable(GL_CULL_FACE);
glPopMatrix();
}
/**
* (c) Copyright 1993, 1994, 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.
*/
#include <GLUT/glut.h>
#include <math.h>
#include "atlantis.h"
/* *INDENT-OFF* */
static float N002[3] = {0.000077 ,-0.020611 ,0.999788};
static float N003[3] = {0.961425 ,0.258729 ,-0.093390};
static float N004[3] = {0.510811 ,-0.769633 ,-0.383063};
static float N005[3] = {0.400123 ,0.855734 ,-0.328055};
static float N006[3] = {-0.770715 ,0.610204 ,-0.183440};
static float N007[3] = {-0.915597 ,-0.373345 ,-0.149316};
static float N008[3] = {-0.972788 ,0.208921 ,-0.100179};
static float N009[3] = {-0.939713 ,-0.312268 ,-0.139383};
static float N010[3] = {-0.624138 ,-0.741047 ,-0.247589};
static float N011[3] = {0.591434 ,-0.768401 ,-0.244471};
static float N012[3] = {0.935152 ,-0.328495 ,-0.132598};
static float N013[3] = {0.997102 ,0.074243 ,-0.016593};
static float N014[3] = {0.969995 ,0.241712 ,-0.026186};
static float N015[3] = {0.844539 ,0.502628 ,-0.184714};
static float N016[3] = {-0.906608 ,0.386308 ,-0.169787};
static float N017[3] = {-0.970016 ,0.241698 ,-0.025516};
static float N018[3] = {-0.998652 ,0.050493 ,-0.012045};
static float N019[3] = {-0.942685 ,-0.333051 ,-0.020556};
static float N020[3] = {-0.660944 ,-0.750276 ,0.015480};
static float N021[3] = {0.503549 ,-0.862908 ,-0.042749};
static float N022[3] = {0.953202 ,-0.302092 ,-0.012089};
static float N023[3] = {0.998738 ,0.023574 ,0.044344};
static float N024[3] = {0.979297 ,0.193272 ,0.060202};
static float N025[3] = {0.798300 ,0.464885 ,0.382883};
static float N026[3] = {-0.756590 ,0.452403 ,0.472126};
static float N027[3] = {-0.953855 ,0.293003 ,0.065651};
static float N028[3] = {-0.998033 ,0.040292 ,0.048028};
static float N029[3] = {-0.977079 ,-0.204288 ,0.059858};
static float N030[3] = {-0.729117 ,-0.675304 ,0.111140};
static float N031[3] = {0.598361 ,-0.792753 ,0.116221};
static float N032[3] = {0.965192 ,-0.252991 ,0.066332};
static float N033[3] = {0.998201 ,-0.002790 ,0.059892};
static float N034[3] = {0.978657 ,0.193135 ,0.070207};
static float N035[3] = {0.718815 ,0.680392 ,0.142733};
static float N036[3] = {-0.383096 ,0.906212 ,0.178936};
static float N037[3] = {-0.952831 ,0.292590 ,0.080647};
static float N038[3] = {-0.997680 ,0.032417 ,0.059861};
static float N039[3] = {-0.982629 ,-0.169881 ,0.074700};
static float N040[3] = {-0.695424 ,-0.703466 ,0.146700};
static float N041[3] = {0.359323 ,-0.915531 ,0.180805};
static float N042[3] = {0.943356 ,-0.319387 ,0.089842};
static float N043[3] = {0.998272 ,-0.032435 ,0.048993};
static float N044[3] = {0.978997 ,0.193205 ,0.065084};
static float N045[3] = {0.872144 ,0.470094 ,-0.135565};
static float N046[3] = {-0.664282 ,0.737945 ,-0.119027};
static float N047[3] = {-0.954508 ,0.288570 ,0.075107};
static float N048[3] = {-0.998273 ,0.032406 ,0.048993};
static float N049[3] = {-0.979908 ,-0.193579 ,0.048038};
static float N050[3] = {-0.858736 ,-0.507202 ,-0.072938};
static float N051[3] = {0.643545 ,-0.763887 ,-0.048237};
static float N052[3] = {0.955580 ,-0.288954 ,0.058068};
static float N058[3] = {0.000050 ,0.793007 ,-0.609213};
static float N059[3] = {0.913510 ,0.235418 ,-0.331779};
static float N060[3] = {-0.807970 ,0.495000 ,-0.319625};
static float N061[3] = {0.000000 ,0.784687 ,-0.619892};
static float N062[3] = {0.000000 ,-1.000000 ,0.000000};
static float N063[3] = {0.000000 ,1.000000 ,0.000000};
static float N064[3] = {0.000000 ,1.000000 ,0.000000};
static float N065[3] = {0.000000 ,1.000000 ,0.000000};
static float N066[3] = {-0.055784 ,0.257059 ,0.964784};
static float N069[3] = {-0.000505 ,-0.929775 ,-0.368127};
static float N070[3] = {0.000000 ,1.000000 ,0.000000};
static float P002[3] = {0.00, -36.59, 5687.72};
static float P003[3] = {90.00, 114.73, 724.38};
static float P004[3] = {58.24, -146.84, 262.35};
static float P005[3] = {27.81, 231.52, 510.43};
static float P006[3] = {-27.81, 230.43, 509.76};
static float P007[3] = {-46.09, -146.83, 265.84};
static float P008[3] = {-90.00, 103.84, 718.53};
static float P009[3] = {-131.10, -165.92, 834.85};
static float P010[3] = {-27.81, -285.31, 500.00};
static float P011[3] = {27.81, -285.32, 500.00};
static float P012[3] = {147.96, -170.89, 845.50};
static float P013[3] = {180.00, 0.00, 2000.00};
static float P014[3] = {145.62, 352.67, 2000.00};
static float P015[3] = {55.62, 570.63, 2000.00};
static float P016[3] = {-55.62, 570.64, 2000.00};
static float P017[3] = {-145.62, 352.68, 2000.00};
static float P018[3] = {-180.00, 0.01, 2000.00};
static float P019[3] = {-178.20, -352.66, 2001.61};
static float P020[3] = {-55.63, -570.63, 2000.00};
static float P021[3] = {55.62, -570.64, 2000.00};
static float P022[3] = {179.91, -352.69, 1998.39};
static float P023[3] = {150.00, 0.00, 3000.00};
static float P024[3] = {121.35, 293.89, 3000.00};
static float P025[3] = {46.35, 502.93, 2883.09};
static float P026[3] = {-46.35, 497.45, 2877.24};
static float P027[3] = {-121.35, 293.90, 3000.00};
static float P028[3] = {-150.00, 0.00, 3000.00};
static float P029[3] = {-152.21, -304.84, 2858.68};
static float P030[3] = {-46.36, -475.52, 3000.00};
static float P031[3] = {46.35, -475.53, 3000.00};
static float P032[3] = {155.64, -304.87, 2863.50};
static float P033[3] = {90.00, 0.00, 4000.00};
static float P034[3] = {72.81, 176.33, 4000.00};
static float P035[3] = {27.81, 285.32, 4000.00};
static float P036[3] = {-27.81, 285.32, 4000.00};
static float P037[3] = {-72.81, 176.34, 4000.00};
static float P038[3] = {-90.00, 0.00, 4000.00};
static float P039[3] = {-72.81, -176.33, 4000.00};
static float P040[3] = {-27.81, -285.31, 4000.00};
static float P041[3] = {27.81, -285.32, 4000.00};
static float P042[3] = {72.81, -176.34, 4000.00};
static float P043[3] = {30.00, 0.00, 5000.00};
static float P044[3] = {24.27, 58.78, 5000.00};
static float P045[3] = {9.27, 95.11, 5000.00};
static float P046[3] = {-9.27, 95.11, 5000.00};
static float P047[3] = {-24.27, 58.78, 5000.00};
static float P048[3] = {-30.00, 0.00, 5000.00};
static float P049[3] = {-24.27, -58.78, 5000.00};
static float P050[3] = {-9.27, -95.10, 5000.00};
static float P051[3] = {9.27, -95.11, 5000.00};
static float P052[3] = {24.27, -58.78, 5000.00};
static float P058[3] = {0.00, 1212.72, 2703.08};
static float P059[3] = {50.36, 0.00, 108.14};
static float P060[3] = {-22.18, 0.00, 108.14};
static float P061[3] = {0.00, 1181.61, 6344.65};
static float P062[3] = {516.45, -887.08, 2535.45};
static float P063[3] = {-545.69, -879.31, 2555.63};
static float P064[3] = {618.89, -1005.64, 2988.32};
static float P065[3] = {-635.37, -1014.79, 2938.68};
static float P066[3] = {0.00, 1374.43, 3064.18};
static float P069[3] = {0.00, -418.25, 5765.04};
static float P070[3] = {0.00, 1266.91, 6629.60};
static float P071[3] = {-139.12, -124.96, 997.98};
static float P072[3] = {-139.24, -110.18, 1020.68};
static float P073[3] = {-137.33, -94.52, 1022.63};
static float P074[3] = {-137.03, -79.91, 996.89};
static float P075[3] = {-135.21, -91.48, 969.14};
static float P076[3] = {-135.39, -110.87, 968.76};
static float P077[3] = {150.23, -78.44, 995.53};
static float P078[3] = {152.79, -92.76, 1018.46};
static float P079[3] = {154.19, -110.20, 1020.55};
static float P080[3] = {151.33, -124.15, 993.77};
static float P081[3] = {150.49, -111.19, 969.86};
static float P082[3] = {150.79, -92.41, 969.70};
static float iP002[3] = {0.00, -36.59, 5687.72};
static float iP004[3] = {58.24, -146.84, 262.35};
static float iP007[3] = {-46.09, -146.83, 265.84};
static float iP010[3] = {-27.81, -285.31, 500.00};
static float iP011[3] = {27.81, -285.32, 500.00};
static float iP023[3] = {150.00, 0.00, 3000.00};
static float iP024[3] = {121.35, 293.89, 3000.00};
static float iP025[3] = {46.35, 502.93, 2883.09};
static float iP026[3] = {-46.35, 497.45, 2877.24};
static float iP027[3] = {-121.35, 293.90, 3000.00};
static float iP028[3] = {-150.00, 0.00, 3000.00};
static float iP029[3] = {-121.35, -304.84, 2853.86};
static float iP030[3] = {-46.36, -475.52, 3000.00};
static float iP031[3] = {46.35, -475.53, 3000.00};
static float iP032[3] = {121.35, -304.87, 2853.86};
static float iP033[3] = {90.00, 0.00, 4000.00};
static float iP034[3] = {72.81, 176.33, 4000.00};
static float iP035[3] = {27.81, 285.32, 4000.00};
static float iP036[3] = {-27.81, 285.32, 4000.00};
static float iP037[3] = {-72.81, 176.34, 4000.00};
static float iP038[3] = {-90.00, 0.00, 4000.00};
static float iP039[3] = {-72.81, -176.33, 4000.00};
static float iP040[3] = {-27.81, -285.31, 4000.00};
static float iP041[3] = {27.81, -285.32, 4000.00};
static float iP042[3] = {72.81, -176.34, 4000.00};
static float iP043[3] = {30.00, 0.00, 5000.00};
static float iP044[3] = {24.27, 58.78, 5000.00};
static float iP045[3] = {9.27, 95.11, 5000.00};
static float iP046[3] = {-9.27, 95.11, 5000.00};
static float iP047[3] = {-24.27, 58.78, 5000.00};
static float iP048[3] = {-30.00, 0.00, 5000.00};
static float iP049[3] = {-24.27, -58.78, 5000.00};
static float iP050[3] = {-9.27, -95.10, 5000.00};
static float iP051[3] = {9.27, -95.11, 5000.00};
static float iP052[3] = {24.27, -58.78, 5000.00};
static float iP061[3] = {0.00, 1181.61, 6344.65};
static float iP069[3] = {0.00, -418.25, 5765.04};
static float iP070[3] = {0.00, 1266.91, 6629.60};
/* *INDENT-ON* */
void
Fish001(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N005);
glVertex3fv(P005);
glNormal3fv(N059);
glVertex3fv(P059);
glNormal3fv(N060);
glVertex3fv(P060);
glNormal3fv(N006);
glVertex3fv(P006);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N015);
glVertex3fv(P015);
glNormal3fv(N005);
glVertex3fv(P005);
glNormal3fv(N006);
glVertex3fv(P006);
glNormal3fv(N016);
glVertex3fv(P016);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N006);
glVertex3fv(P006);
glNormal3fv(N060);
glVertex3fv(P060);
glNormal3fv(N008);
glVertex3fv(P008);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N016);
glVertex3fv(P016);
glNormal3fv(N006);
glVertex3fv(P006);
glNormal3fv(N008);
glVertex3fv(P008);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N016);
glVertex3fv(P016);
glNormal3fv(N008);
glVertex3fv(P008);
glNormal3fv(N017);
glVertex3fv(P017);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N017);
glVertex3fv(P017);
glNormal3fv(N008);
glVertex3fv(P008);
glNormal3fv(N018);
glVertex3fv(P018);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N008);
glVertex3fv(P008);
glNormal3fv(N009);
glVertex3fv(P009);
glNormal3fv(N018);
glVertex3fv(P018);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N008);
glVertex3fv(P008);
glNormal3fv(N060);
glVertex3fv(P060);
glNormal3fv(N009);
glVertex3fv(P009);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N007);
glVertex3fv(P007);
glNormal3fv(N010);
glVertex3fv(P010);
glNormal3fv(N009);
glVertex3fv(P009);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N009);
glVertex3fv(P009);
glNormal3fv(N019);
glVertex3fv(P019);
glNormal3fv(N018);
glVertex3fv(P018);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N009);
glVertex3fv(P009);
glNormal3fv(N010);
glVertex3fv(P010);
glNormal3fv(N019);
glVertex3fv(P019);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N010);
glVertex3fv(P010);
glNormal3fv(N020);
glVertex3fv(P020);
glNormal3fv(N019);
glVertex3fv(P019);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N010);
glVertex3fv(P010);
glNormal3fv(N011);
glVertex3fv(P011);
glNormal3fv(N021);
glVertex3fv(P021);
glNormal3fv(N020);
glVertex3fv(P020);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N004);
glVertex3fv(P004);
glNormal3fv(N011);
glVertex3fv(P011);
glNormal3fv(N010);
glVertex3fv(P010);
glNormal3fv(N007);
glVertex3fv(P007);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N004);
glVertex3fv(P004);
glNormal3fv(N012);
glVertex3fv(P012);
glNormal3fv(N011);
glVertex3fv(P011);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N012);
glVertex3fv(P012);
glNormal3fv(N022);
glVertex3fv(P022);
glNormal3fv(N011);
glVertex3fv(P011);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N011);
glVertex3fv(P011);
glNormal3fv(N022);
glVertex3fv(P022);
glNormal3fv(N021);
glVertex3fv(P021);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N059);
glVertex3fv(P059);
glNormal3fv(N005);
glVertex3fv(P005);
glNormal3fv(N015);
glVertex3fv(P015);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N015);
glVertex3fv(P015);
glNormal3fv(N014);
glVertex3fv(P014);
glNormal3fv(N003);
glVertex3fv(P003);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N015);
glVertex3fv(P015);
glNormal3fv(N003);
glVertex3fv(P003);
glNormal3fv(N059);
glVertex3fv(P059);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N014);
glVertex3fv(P014);
glNormal3fv(N013);
glVertex3fv(P013);
glNormal3fv(N003);
glVertex3fv(P003);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N003);
glVertex3fv(P003);
glNormal3fv(N012);
glVertex3fv(P012);
glNormal3fv(N059);
glVertex3fv(P059);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N013);
glVertex3fv(P013);
glNormal3fv(N012);
glVertex3fv(P012);
glNormal3fv(N003);
glVertex3fv(P003);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N013);
glVertex3fv(P013);
glNormal3fv(N022);
glVertex3fv(P022);
glNormal3fv(N012);
glVertex3fv(P012);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P071);
glVertex3fv(P072);
glVertex3fv(P073);
glVertex3fv(P074);
glVertex3fv(P075);
glVertex3fv(P076);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P077);
glVertex3fv(P078);
glVertex3fv(P079);
glVertex3fv(P080);
glVertex3fv(P081);
glVertex3fv(P082);
glEnd();
}
void
Fish002(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N013);
glVertex3fv(P013);
glNormal3fv(N014);
glVertex3fv(P014);
glNormal3fv(N024);
glVertex3fv(P024);
glNormal3fv(N023);
glVertex3fv(P023);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N014);
glVertex3fv(P014);
glNormal3fv(N015);
glVertex3fv(P015);
glNormal3fv(N025);
glVertex3fv(P025);
glNormal3fv(N024);
glVertex3fv(P024);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N016);
glVertex3fv(P016);
glNormal3fv(N017);
glVertex3fv(P017);
glNormal3fv(N027);
glVertex3fv(P027);
glNormal3fv(N026);
glVertex3fv(P026);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N017);
glVertex3fv(P017);
glNormal3fv(N018);
glVertex3fv(P018);
glNormal3fv(N028);
glVertex3fv(P028);
glNormal3fv(N027);
glVertex3fv(P027);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N020);
glVertex3fv(P020);
glNormal3fv(N021);
glVertex3fv(P021);
glNormal3fv(N031);
glVertex3fv(P031);
glNormal3fv(N030);
glVertex3fv(P030);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N013);
glVertex3fv(P013);
glNormal3fv(N023);
glVertex3fv(P023);
glNormal3fv(N022);
glVertex3fv(P022);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N022);
glVertex3fv(P022);
glNormal3fv(N023);
glVertex3fv(P023);
glNormal3fv(N032);
glVertex3fv(P032);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N022);
glVertex3fv(P022);
glNormal3fv(N032);
glVertex3fv(P032);
glNormal3fv(N031);
glVertex3fv(P031);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N022);
glVertex3fv(P022);
glNormal3fv(N031);
glVertex3fv(P031);
glNormal3fv(N021);
glVertex3fv(P021);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N018);
glVertex3fv(P018);
glNormal3fv(N019);
glVertex3fv(P019);
glNormal3fv(N029);
glVertex3fv(P029);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N018);
glVertex3fv(P018);
glNormal3fv(N029);
glVertex3fv(P029);
glNormal3fv(N028);
glVertex3fv(P028);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N019);
glVertex3fv(P019);
glNormal3fv(N020);
glVertex3fv(P020);
glNormal3fv(N030);
glVertex3fv(P030);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N019);
glVertex3fv(P019);
glNormal3fv(N030);
glVertex3fv(P030);
glNormal3fv(N029);
glVertex3fv(P029);
glEnd();
}
void
Fish003(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N032);
glVertex3fv(P032);
glNormal3fv(N023);
glVertex3fv(P023);
glNormal3fv(N033);
glVertex3fv(P033);
glNormal3fv(N042);
glVertex3fv(P042);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N031);
glVertex3fv(P031);
glNormal3fv(N032);
glVertex3fv(P032);
glNormal3fv(N042);
glVertex3fv(P042);
glNormal3fv(N041);
glVertex3fv(P041);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N023);
glVertex3fv(P023);
glNormal3fv(N024);
glVertex3fv(P024);
glNormal3fv(N034);
glVertex3fv(P034);
glNormal3fv(N033);
glVertex3fv(P033);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N024);
glVertex3fv(P024);
glNormal3fv(N025);
glVertex3fv(P025);
glNormal3fv(N035);
glVertex3fv(P035);
glNormal3fv(N034);
glVertex3fv(P034);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N030);
glVertex3fv(P030);
glNormal3fv(N031);
glVertex3fv(P031);
glNormal3fv(N041);
glVertex3fv(P041);
glNormal3fv(N040);
glVertex3fv(P040);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N025);
glVertex3fv(P025);
glNormal3fv(N026);
glVertex3fv(P026);
glNormal3fv(N036);
glVertex3fv(P036);
glNormal3fv(N035);
glVertex3fv(P035);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N026);
glVertex3fv(P026);
glNormal3fv(N027);
glVertex3fv(P027);
glNormal3fv(N037);
glVertex3fv(P037);
glNormal3fv(N036);
glVertex3fv(P036);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N027);
glVertex3fv(P027);
glNormal3fv(N028);
glVertex3fv(P028);
glNormal3fv(N038);
glVertex3fv(P038);
glNormal3fv(N037);
glVertex3fv(P037);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N028);
glVertex3fv(P028);
glNormal3fv(N029);
glVertex3fv(P029);
glNormal3fv(N039);
glVertex3fv(P039);
glNormal3fv(N038);
glVertex3fv(P038);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N029);
glVertex3fv(P029);
glNormal3fv(N030);
glVertex3fv(P030);
glNormal3fv(N040);
glVertex3fv(P040);
glNormal3fv(N039);
glVertex3fv(P039);
glEnd();
}
void
Fish004(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N040);
glVertex3fv(P040);
glNormal3fv(N041);
glVertex3fv(P041);
glNormal3fv(N051);
glVertex3fv(P051);
glNormal3fv(N050);
glVertex3fv(P050);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N041);
glVertex3fv(P041);
glNormal3fv(N042);
glVertex3fv(P042);
glNormal3fv(N052);
glVertex3fv(P052);
glNormal3fv(N051);
glVertex3fv(P051);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N042);
glVertex3fv(P042);
glNormal3fv(N033);
glVertex3fv(P033);
glNormal3fv(N043);
glVertex3fv(P043);
glNormal3fv(N052);
glVertex3fv(P052);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N033);
glVertex3fv(P033);
glNormal3fv(N034);
glVertex3fv(P034);
glNormal3fv(N044);
glVertex3fv(P044);
glNormal3fv(N043);
glVertex3fv(P043);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N034);
glVertex3fv(P034);
glNormal3fv(N035);
glVertex3fv(P035);
glNormal3fv(N045);
glVertex3fv(P045);
glNormal3fv(N044);
glVertex3fv(P044);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N035);
glVertex3fv(P035);
glNormal3fv(N036);
glVertex3fv(P036);
glNormal3fv(N046);
glVertex3fv(P046);
glNormal3fv(N045);
glVertex3fv(P045);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N036);
glVertex3fv(P036);
glNormal3fv(N037);
glVertex3fv(P037);
glNormal3fv(N047);
glVertex3fv(P047);
glNormal3fv(N046);
glVertex3fv(P046);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N037);
glVertex3fv(P037);
glNormal3fv(N038);
glVertex3fv(P038);
glNormal3fv(N048);
glVertex3fv(P048);
glNormal3fv(N047);
glVertex3fv(P047);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N038);
glVertex3fv(P038);
glNormal3fv(N039);
glVertex3fv(P039);
glNormal3fv(N049);
glVertex3fv(P049);
glNormal3fv(N048);
glVertex3fv(P048);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N039);
glVertex3fv(P039);
glNormal3fv(N040);
glVertex3fv(P040);
glNormal3fv(N050);
glVertex3fv(P050);
glNormal3fv(N049);
glVertex3fv(P049);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N070);
glVertex3fv(P070);
glNormal3fv(N061);
glVertex3fv(P061);
glNormal3fv(N002);
glVertex3fv(P002);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N061);
glVertex3fv(P061);
glNormal3fv(N046);
glVertex3fv(P046);
glNormal3fv(N002);
glVertex3fv(P002);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N045);
glVertex3fv(P045);
glNormal3fv(N046);
glVertex3fv(P046);
glNormal3fv(N061);
glVertex3fv(P061);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N061);
glVertex3fv(P061);
glNormal3fv(N070);
glVertex3fv(P070);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N045);
glVertex3fv(P045);
glNormal3fv(N061);
glVertex3fv(P061);
glEnd();
}
void
Fish005(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N044);
glVertex3fv(P044);
glNormal3fv(N045);
glVertex3fv(P045);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N043);
glVertex3fv(P043);
glNormal3fv(N044);
glVertex3fv(P044);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N052);
glVertex3fv(P052);
glNormal3fv(N043);
glVertex3fv(P043);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N051);
glVertex3fv(P051);
glNormal3fv(N052);
glVertex3fv(P052);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N046);
glVertex3fv(P046);
glNormal3fv(N047);
glVertex3fv(P047);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N047);
glVertex3fv(P047);
glNormal3fv(N048);
glVertex3fv(P048);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N048);
glVertex3fv(P048);
glNormal3fv(N049);
glVertex3fv(P049);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N049);
glVertex3fv(P049);
glNormal3fv(N050);
glVertex3fv(P050);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N050);
glVertex3fv(P050);
glNormal3fv(N051);
glVertex3fv(P051);
glNormal3fv(N069);
glVertex3fv(P069);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N051);
glVertex3fv(P051);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N069);
glVertex3fv(P069);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N050);
glVertex3fv(P050);
glNormal3fv(N069);
glVertex3fv(P069);
glNormal3fv(N002);
glVertex3fv(P002);
glEnd();
}
void
Fish006(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N066);
glVertex3fv(P066);
glNormal3fv(N016);
glVertex3fv(P016);
glNormal3fv(N026);
glVertex3fv(P026);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N015);
glVertex3fv(P015);
glNormal3fv(N066);
glVertex3fv(P066);
glNormal3fv(N025);
glVertex3fv(P025);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N025);
glVertex3fv(P025);
glNormal3fv(N066);
glVertex3fv(P066);
glNormal3fv(N026);
glVertex3fv(P026);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N066);
glVertex3fv(P066);
glNormal3fv(N058);
glVertex3fv(P058);
glNormal3fv(N016);
glVertex3fv(P016);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N015);
glVertex3fv(P015);
glNormal3fv(N058);
glVertex3fv(P058);
glNormal3fv(N066);
glVertex3fv(P066);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N058);
glVertex3fv(P058);
glNormal3fv(N015);
glVertex3fv(P015);
glNormal3fv(N016);
glVertex3fv(P016);
glEnd();
}
void
Fish007(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N062);
glVertex3fv(P062);
glNormal3fv(N022);
glVertex3fv(P022);
glNormal3fv(N032);
glVertex3fv(P032);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N062);
glVertex3fv(P062);
glNormal3fv(N032);
glVertex3fv(P032);
glNormal3fv(N064);
glVertex3fv(P064);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N022);
glVertex3fv(P022);
glNormal3fv(N062);
glVertex3fv(P062);
glNormal3fv(N032);
glVertex3fv(P032);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N062);
glVertex3fv(P062);
glNormal3fv(N064);
glVertex3fv(P064);
glNormal3fv(N032);
glVertex3fv(P032);
glEnd();
}
void
Fish008(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N063);
glVertex3fv(P063);
glNormal3fv(N019);
glVertex3fv(P019);
glNormal3fv(N029);
glVertex3fv(P029);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N019);
glVertex3fv(P019);
glNormal3fv(N063);
glVertex3fv(P063);
glNormal3fv(N029);
glVertex3fv(P029);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N063);
glVertex3fv(P063);
glNormal3fv(N029);
glVertex3fv(P029);
glNormal3fv(N065);
glVertex3fv(P065);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N063);
glVertex3fv(P063);
glNormal3fv(N065);
glVertex3fv(P065);
glNormal3fv(N029);
glVertex3fv(P029);
glEnd();
}
void
Fish009(void)
{
glBegin(GL_POLYGON);
glVertex3fv(P059);
glVertex3fv(P012);
glVertex3fv(P009);
glVertex3fv(P060);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P012);
glVertex3fv(P004);
glVertex3fv(P007);
glVertex3fv(P009);
glEnd();
}
void
Fish_1(void)
{
Fish004();
Fish005();
Fish003();
Fish007();
Fish006();
Fish002();
Fish008();
Fish009();
Fish001();
}
void
Fish_2(void)
{
Fish005();
Fish004();
Fish003();
Fish008();
Fish006();
Fish002();
Fish007();
Fish009();
Fish001();
}
void
Fish_3(void)
{
Fish005();
Fish004();
Fish007();
Fish003();
Fish002();
Fish008();
Fish009();
Fish001();
Fish006();
}
void
Fish_4(void)
{
Fish005();
Fish004();
Fish008();
Fish003();
Fish002();
Fish007();
Fish009();
Fish001();
Fish006();
}
void
Fish_5(void)
{
Fish009();
Fish006();
Fish007();
Fish001();
Fish002();
Fish003();
Fish008();
Fish004();
Fish005();
}
void
Fish_6(void)
{
Fish009();
Fish006();
Fish008();
Fish001();
Fish002();
Fish007();
Fish003();
Fish004();
Fish005();
}
void
Fish_7(void)
{
Fish009();
Fish001();
Fish007();
Fish005();
Fish002();
Fish008();
Fish003();
Fish004();
Fish006();
}
void
Fish_8(void)
{
Fish009();
Fish008();
Fish001();
Fish002();
Fish007();
Fish003();
Fish005();
Fish004();
Fish006();
}
void
DrawShark(fishRec * fish)
{
float mat[4][4];
int n;
float seg1, seg2, seg3, seg4, segup;
float thrash, chomp;
fish->htail = (int) (fish->htail - (int) (5.0 * fish->v)) % 360;
thrash = 50.0 * fish->v;
seg1 = 0.6 * thrash * sin(fish->htail * RRAD);
seg2 = 1.8 * thrash * sin((fish->htail + 45.0) * RRAD);
seg3 = 3.0 * thrash * sin((fish->htail + 90.0) * RRAD);
seg4 = 4.0 * thrash * sin((fish->htail + 110.0) * RRAD);
chomp = 0.0;
if (fish->v > 2.0) {
chomp = -(fish->v - 2.0) * 200.0;
}
P004[1] = iP004[1] + chomp;
P007[1] = iP007[1] + chomp;
P010[1] = iP010[1] + chomp;
P011[1] = iP011[1] + chomp;
P023[0] = iP023[0] + seg1;
P024[0] = iP024[0] + seg1;
P025[0] = iP025[0] + seg1;
P026[0] = iP026[0] + seg1;
P027[0] = iP027[0] + seg1;
P028[0] = iP028[0] + seg1;
P029[0] = iP029[0] + seg1;
P030[0] = iP030[0] + seg1;
P031[0] = iP031[0] + seg1;
P032[0] = iP032[0] + seg1;
P033[0] = iP033[0] + seg2;
P034[0] = iP034[0] + seg2;
P035[0] = iP035[0] + seg2;
P036[0] = iP036[0] + seg2;
P037[0] = iP037[0] + seg2;
P038[0] = iP038[0] + seg2;
P039[0] = iP039[0] + seg2;
P040[0] = iP040[0] + seg2;
P041[0] = iP041[0] + seg2;
P042[0] = iP042[0] + seg2;
P043[0] = iP043[0] + seg3;
P044[0] = iP044[0] + seg3;
P045[0] = iP045[0] + seg3;
P046[0] = iP046[0] + seg3;
P047[0] = iP047[0] + seg3;
P048[0] = iP048[0] + seg3;
P049[0] = iP049[0] + seg3;
P050[0] = iP050[0] + seg3;
P051[0] = iP051[0] + seg3;
P052[0] = iP052[0] + seg3;
P002[0] = iP002[0] + seg4;
P061[0] = iP061[0] + seg4;
P069[0] = iP069[0] + seg4;
P070[0] = iP070[0] + seg4;
fish->vtail += ((fish->dtheta - fish->vtail) * 0.1);
if (fish->vtail > 0.5) {
fish->vtail = 0.5;
} else if (fish->vtail < -0.5) {
fish->vtail = -0.5;
}
segup = thrash * fish->vtail;
P023[1] = iP023[1] + segup;
P024[1] = iP024[1] + segup;
P025[1] = iP025[1] + segup;
P026[1] = iP026[1] + segup;
P027[1] = iP027[1] + segup;
P028[1] = iP028[1] + segup;
P029[1] = iP029[1] + segup;
P030[1] = iP030[1] + segup;
P031[1] = iP031[1] + segup;
P032[1] = iP032[1] + segup;
P033[1] = iP033[1] + segup * 5.0;
P034[1] = iP034[1] + segup * 5.0;
P035[1] = iP035[1] + segup * 5.0;
P036[1] = iP036[1] + segup * 5.0;
P037[1] = iP037[1] + segup * 5.0;
P038[1] = iP038[1] + segup * 5.0;
P039[1] = iP039[1] + segup * 5.0;
P040[1] = iP040[1] + segup * 5.0;
P041[1] = iP041[1] + segup * 5.0;
P042[1] = iP042[1] + segup * 5.0;
P043[1] = iP043[1] + segup * 12.0;
P044[1] = iP044[1] + segup * 12.0;
P045[1] = iP045[1] + segup * 12.0;
P046[1] = iP046[1] + segup * 12.0;
P047[1] = iP047[1] + segup * 12.0;
P048[1] = iP048[1] + segup * 12.0;
P049[1] = iP049[1] + segup * 12.0;
P050[1] = iP050[1] + segup * 12.0;
P051[1] = iP051[1] + segup * 12.0;
P052[1] = iP052[1] + segup * 12.0;
P002[1] = iP002[1] + segup * 17.0;
P061[1] = iP061[1] + segup * 17.0;
P069[1] = iP069[1] + segup * 17.0;
P070[1] = iP070[1] + segup * 17.0;
glPushMatrix();
glTranslatef(0.0, 0.0, -3000.0);
glGetFloatv(GL_MODELVIEW_MATRIX, &mat[0][0]);
n = 0;
if (mat[0][2] >= 0.0) {
n += 1;
}
if (mat[1][2] >= 0.0) {
n += 2;
}
if (mat[2][2] >= 0.0) {
n += 4;
}
glScalef(2.0, 1.0, 1.0);
glEnable(GL_CULL_FACE);
switch (n) {
case 0:
Fish_1();
break;
case 1:
Fish_2();
break;
case 2:
Fish_3();
break;
case 3:
Fish_4();
break;
case 4:
Fish_5();
break;
case 5:
Fish_6();
break;
case 6:
Fish_7();
break;
case 7:
Fish_8();
break;
}
glDisable(GL_CULL_FACE);
glPopMatrix();
}
/**
* (c) Copyright 1993, 1994, 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.
*/
#include <math.h>
#include <stdlib.h> /* For rand(). */
#include <GLUT/glut.h>
#include "atlantis.h"
void
FishTransform(fishRec * fish)
{
glTranslatef(fish->y, fish->z, -fish->x);
glRotatef(-fish->psi, 0.0, 1.0, 0.0);
glRotatef(fish->theta, 1.0, 0.0, 0.0);
glRotatef(-fish->phi, 0.0, 0.0, 1.0);
}
void
WhalePilot(fishRec * fish)
{
fish->phi = -20.0;
fish->theta = 0.0;
fish->psi -= 0.5;
fish->x += WHALESPEED * fish->v * cos(fish->psi / RAD) * cos(fish->theta / RAD);
fish->y += WHALESPEED * fish->v * sin(fish->psi / RAD) * cos(fish->theta / RAD);
fish->z += WHALESPEED * fish->v * sin(fish->theta / RAD);
}
void
SharkPilot(fishRec * fish)
{
static int sign = 1;
float X, Y, Z, tpsi, ttheta, thetal;
fish->xt = 60000.0;
fish->yt = 0.0;
fish->zt = 0.0;
X = fish->xt - fish->x;
Y = fish->yt - fish->y;
Z = fish->zt - fish->z;
thetal = fish->theta;
ttheta = RAD * atan(Z / (sqrt(X * X + Y * Y)));
if (ttheta > fish->theta + 0.25) {
fish->theta += 0.5;
} else if (ttheta < fish->theta - 0.25) {
fish->theta -= 0.5;
}
if (fish->theta > 90.0) {
fish->theta = 90.0;
}
if (fish->theta < -90.0) {
fish->theta = -90.0;
}
fish->dtheta = fish->theta - thetal;
tpsi = RAD * atan2(Y, X);
fish->attack = 0;
if (fabs(tpsi - fish->psi) < 10.0) {
fish->attack = 1;
} else if (fabs(tpsi - fish->psi) < 45.0) {
if (fish->psi > tpsi) {
fish->psi -= 0.5;
if (fish->psi < -180.0) {
fish->psi += 360.0;
}
} else if (fish->psi < tpsi) {
fish->psi += 0.5;
if (fish->psi > 180.0) {
fish->psi -= 360.0;
}
}
} else {
if (rand() % 100 > 98) {
sign = 1 - sign;
}
fish->psi += sign;
if (fish->psi > 180.0) {
fish->psi -= 360.0;
}
if (fish->psi < -180.0) {
fish->psi += 360.0;
}
}
if (fish->attack) {
if (fish->v < 1.1) {
fish->spurt = 1;
}
if (fish->spurt) {
fish->v += 0.2;
}
if (fish->v > 5.0) {
fish->spurt = 0;
}
if ((fish->v > 1.0) && (!fish->spurt)) {
fish->v -= 0.2;
}
} else {
if (!(rand() % 400) && (!fish->spurt)) {
fish->spurt = 1;
}
if (fish->spurt) {
fish->v += 0.05;
}
if (fish->v > 3.0) {
fish->spurt = 0;
}
if ((fish->v > 1.0) && (!fish->spurt)) {
fish->v -= 0.05;
}
}
fish->x += SHARKSPEED * fish->v * cos(fish->psi / RAD) * cos(fish->theta / RAD);
fish->y += SHARKSPEED * fish->v * sin(fish->psi / RAD) * cos(fish->theta / RAD);
fish->z += SHARKSPEED * fish->v * sin(fish->theta / RAD);
}
void
SharkMiss(int i)
{
int j;
float avoid, thetal;
float X, Y, Z, R;
for (j = 0; j < NUM_SHARKS; j++) {
if (j != i) {
X = sharks[j].x - sharks[i].x;
Y = sharks[j].y - sharks[i].y;
Z = sharks[j].z - sharks[i].z;
R = sqrt(X * X + Y * Y + Z * Z);
avoid = 1.0;
thetal = sharks[i].theta;
if (R < SHARKSIZE) {
if (Z > 0.0) {
sharks[i].theta -= avoid;
} else {
sharks[i].theta += avoid;
}
}
sharks[i].dtheta += (sharks[i].theta - thetal);
}
}
}
/**
* (c) Copyright 1993, 1994, 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.
*/
#include <GLUT/glut.h>
#include <math.h>
#include "atlantis.h"
/* *INDENT-OFF* */
static float N001[3] = {0.019249 ,0.011340 ,-0.999750};
static float N002[3] = {-0.132579 ,0.954547 ,0.266952};
static float N003[3] = {-0.196061 ,0.980392 ,-0.019778};
static float N004[3] = {0.695461 ,0.604704 ,0.388158};
static float N005[3] = {0.870600 ,0.425754 ,0.246557};
static float N006[3] = {-0.881191 ,0.392012 ,0.264251};
static float N008[3] = {-0.341437 ,0.887477 ,0.309523};
static float N009[3] = {0.124035 ,-0.992278 ,0.000000};
static float N010[3] = {0.242536 ,0.000000 ,-0.970143};
static float N011[3] = {0.588172 ,0.000000 ,0.808736};
static float N012[3] = {0.929824 ,-0.340623 ,-0.139298};
static float N013[3] = {0.954183 ,0.267108 ,-0.134865};
static float N014[3] = {0.495127 ,0.855436 ,-0.151914};
static float N015[3] = {-0.390199 ,0.906569 ,-0.160867};
static float N016[3] = {-0.923605 ,0.354581 ,-0.145692};
static float N017[3] = {-0.955796 ,-0.260667 ,-0.136036};
static float N018[3] = {-0.501283 ,-0.853462 ,-0.142540};
static float N019[3] = {0.405300 ,-0.901974 ,-0.148913};
static float N020[3] = {0.909913 ,-0.392746 ,-0.133451};
static float N021[3] = {0.936494 ,0.331147 ,-0.115414};
static float N022[3] = {0.600131 ,0.793724 ,-0.099222};
static float N023[3] = {-0.231556 ,0.968361 ,-0.093053};
static float N024[3] = {-0.844369 ,0.525330 ,-0.105211};
static float N025[3] = {-0.982725 ,-0.136329 ,-0.125164};
static float N026[3] = {-0.560844 ,-0.822654 ,-0.093241};
static float N027[3] = {0.263884 ,-0.959981 ,-0.093817};
static float N028[3] = {0.842057 ,-0.525192 ,-0.122938};
static float N029[3] = {0.921620 ,0.367565 ,-0.124546};
static float N030[3] = {0.613927 ,0.784109 ,-0.090918};
static float N031[3] = {-0.448754 ,0.888261 ,-0.098037};
static float N032[3] = {-0.891865 ,0.434376 ,-0.126077};
static float N033[3] = {-0.881447 ,-0.448017 ,-0.149437};
static float N034[3] = {-0.345647 ,-0.922057 ,-0.174183};
static float N035[3] = {0.307998 ,-0.941371 ,-0.137688};
static float N036[3] = {0.806316 ,-0.574647 ,-0.140124};
static float N037[3] = {0.961346 ,0.233646 ,-0.145681};
static float N038[3] = {0.488451 ,0.865586 ,-0.110351};
static float N039[3] = {-0.374290 ,0.921953 ,-0.099553};
static float N040[3] = {-0.928504 ,0.344533 ,-0.138485};
static float N041[3] = {-0.918419 ,-0.371792 ,-0.135189};
static float N042[3] = {-0.520666 ,-0.833704 ,-0.183968};
static float N043[3] = {0.339204 ,-0.920273 ,-0.195036};
static float N044[3] = {0.921475 ,-0.387382 ,-0.028636};
static float N045[3] = {0.842465 ,0.533335 ,-0.076204};
static float N046[3] = {0.380110 ,0.924939 ,0.002073};
static float N047[3] = {-0.276128 ,0.961073 ,-0.009579};
static float N048[3] = {-0.879684 ,0.473001 ,-0.049250};
static float N049[3] = {-0.947184 ,-0.317614 ,-0.044321};
static float N050[3] = {-0.642059 ,-0.764933 ,-0.051363};
static float N051[3] = {0.466794 ,-0.880921 ,-0.077990};
static float N052[3] = {0.898509 ,-0.432277 ,0.076279};
static float N053[3] = {0.938985 ,0.328141 ,0.103109};
static float N054[3] = {0.442420 ,0.895745 ,0.043647};
static float N055[3] = {-0.255163 ,0.966723 ,0.018407};
static float N056[3] = {-0.833769 ,0.540650 ,0.111924};
static float N057[3] = {-0.953653 ,-0.289939 ,0.080507};
static float N058[3] = {-0.672357 ,-0.730524 ,0.119461};
static float N059[3] = {0.522249 ,-0.846652 ,0.102157};
static float N060[3] = {0.885868 ,-0.427631 ,0.179914};
static float N062[3] = {0.648942 ,0.743116 ,0.163255};
static float N063[3] = {-0.578967 ,0.807730 ,0.111219};
static float N065[3] = {-0.909864 ,-0.352202 ,0.219321};
static float N066[3] = {-0.502541 ,-0.818090 ,0.279610};
static float N067[3] = {0.322919 ,-0.915358 ,0.240504};
static float N068[3] = {0.242536 ,0.000000 ,-0.970143};
static float N069[3] = {0.000000 ,1.000000 ,0.000000};
static float N070[3] = {0.000000 ,1.000000 ,0.000000};
static float N071[3] = {0.000000 ,1.000000 ,0.000000};
static float N072[3] = {0.000000 ,1.000000 ,0.000000};
static float N073[3] = {0.000000 ,1.000000 ,0.000000};
static float N074[3] = {0.000000 ,1.000000 ,0.000000};
static float N075[3] = {0.031220 ,0.999025 ,-0.031220};
static float N076[3] = {0.000000 ,1.000000 ,0.000000};
static float N077[3] = {0.446821 ,0.893642 ,0.041889};
static float N078[3] = {0.863035 ,-0.100980 ,0.494949};
static float N079[3] = {0.585597 ,-0.808215 ,0.062174};
static float N080[3] = {0.000000 ,1.000000 ,0.000000};
static float N081[3] = {1.000000 ,0.000000 ,0.000000};
static float N082[3] = {0.000000 ,1.000000 ,0.000000};
static float N083[3] = {-1.000000 ,0.000000 ,0.000000};
static float N084[3] = {-0.478893 ,0.837129 ,-0.264343};
static float N085[3] = {0.000000 ,1.000000 ,0.000000};
static float N086[3] = {0.763909 ,0.539455 ,-0.354163};
static float N087[3] = {0.446821 ,0.893642 ,0.041889};
static float N088[3] = {0.385134 ,-0.908288 ,0.163352};
static float N089[3] = {-0.605952 ,0.779253 ,-0.159961};
static float N090[3] = {0.000000 ,1.000000 ,0.000000};
static float N091[3] = {0.000000 ,1.000000 ,0.000000};
static float N092[3] = {0.000000 ,1.000000 ,0.000000};
static float N093[3] = {0.000000 ,1.000000 ,0.000000};
static float N094[3] = {1.000000 ,0.000000 ,0.000000};
static float N095[3] = {-1.000000 ,0.000000 ,0.000000};
static float N096[3] = {0.644444 ,-0.621516 ,0.445433};
static float N097[3] = {-0.760896 ,-0.474416 ,0.442681};
static float N098[3] = {0.636888 ,-0.464314 ,0.615456};
static float N099[3] = {-0.710295 ,0.647038 ,0.277168};
static float N100[3] = {0.009604 ,0.993655 ,0.112063};
static float iP001[3] = {18.74, 13.19, 3.76};
static float P001[3] = {18.74, 13.19, 3.76};
static float P002[3] = {0.00, 390.42, 10292.57};
static float P003[3] = {55.80, 622.31, 8254.35};
static float P004[3] = {20.80, 247.66, 10652.13};
static float P005[3] = {487.51, 198.05, 9350.78};
static float P006[3] = {-457.61, 199.04, 9353.01};
static float P008[3] = {-34.67, 247.64, 10663.71};
static float iP009[3] = {97.46, 67.63, 593.82};
static float iP010[3] = {-84.33, 67.63, 588.18};
static float iP011[3] = {118.69, 8.98, -66.91};
static float P009[3] = {97.46, 67.63, 593.82};
static float P010[3] = {-84.33, 67.63, 588.18};
static float P011[3] = {118.69, 8.98, -66.91};
static float iP012[3] = {156.48, -31.95, 924.54};
static float iP013[3] = {162.00, 110.22, 924.54};
static float iP014[3] = {88.16, 221.65, 924.54};
static float iP015[3] = {-65.21, 231.16, 924.54};
static float iP016[3] = {-156.48, 121.97, 924.54};
static float iP017[3] = {-162.00, -23.93, 924.54};
static float iP018[3] = {-88.16, -139.10, 924.54};
static float iP019[3] = {65.21, -148.61, 924.54};
static float iP020[3] = {246.87, -98.73, 1783.04};
static float iP021[3] = {253.17, 127.76, 1783.04};
static float iP022[3] = {132.34, 270.77, 1783.04};
static float iP023[3] = {-97.88, 285.04, 1783.04};
static float iP024[3] = {-222.97, 139.80, 1783.04};
static float iP025[3] = {-225.29, -86.68, 1783.04};
static float iP026[3] = {-108.44, -224.15, 1783.04};
static float iP027[3] = {97.88, -221.56, 1783.04};
static float iP028[3] = {410.55, -200.66, 3213.87};
static float iP029[3] = {432.19, 148.42, 3213.87};
static float iP030[3] = {200.66, 410.55, 3213.87};
static float iP031[3] = {-148.42, 432.19, 3213.87};
static float iP032[3] = {-407.48, 171.88, 3213.87};
static float iP033[3] = {-432.19, -148.42, 3213.87};
static float iP034[3] = {-148.88, -309.74, 3213.87};
static float iP035[3] = {156.38, -320.17, 3213.87};
static float iP036[3] = {523.39, -303.81, 4424.57};
static float iP037[3] = {574.66, 276.84, 4424.57};
static float iP038[3] = {243.05, 492.50, 4424.57};
static float iP039[3] = {-191.23, 520.13, 4424.57};
static float iP040[3] = {-523.39, 304.01, 4424.57};
static float iP041[3] = {-574.66, -231.83, 4424.57};
static float iP042[3] = {-266.95, -578.17, 4424.57};
static float iP043[3] = {211.14, -579.67, 4424.57};
static float iP044[3] = {680.57, -370.27, 5943.46};
static float iP045[3] = {834.01, 363.09, 5943.46};
static float iP046[3] = {371.29, 614.13, 5943.46};
static float iP047[3] = {-291.43, 621.86, 5943.46};
static float iP048[3] = {-784.13, 362.60, 5943.46};
static float iP049[3] = {-743.29, -325.82, 5943.46};
static float iP050[3] = {-383.24, -804.77, 5943.46};
static float iP051[3] = {283.47, -846.09, 5943.46};
static float P012[3] = {156.48, -31.95, 924.54};
static float P013[3] = {162.00, 110.22, 924.54};
static float P014[3] = {88.16, 221.65, 924.54};
static float P015[3] = {-65.21, 231.16, 924.54};
static float P016[3] = {-156.48, 121.97, 924.54};
static float P017[3] = {-162.00, -23.93, 924.54};
static float P018[3] = {-88.16, -139.10, 924.54};
static float P019[3] = {65.21, -148.61, 924.54};
static float P020[3] = {246.87, -98.73, 1783.04};
static float P021[3] = {253.17, 127.76, 1783.04};
static float P022[3] = {132.34, 270.77, 1783.04};
static float P023[3] = {-97.88, 285.04, 1783.04};
static float P024[3] = {-222.97, 139.80, 1783.04};
static float P025[3] = {-225.29, -86.68, 1783.04};
static float P026[3] = {-108.44, -224.15, 1783.04};
static float P027[3] = {97.88, -221.56, 1783.04};
static float P028[3] = {410.55, -200.66, 3213.87};
static float P029[3] = {432.19, 148.42, 3213.87};
static float P030[3] = {200.66, 410.55, 3213.87};
static float P031[3] = {-148.42, 432.19, 3213.87};
static float P032[3] = {-407.48, 171.88, 3213.87};
static float P033[3] = {-432.19, -148.42, 3213.87};
static float P034[3] = {-148.88, -309.74, 3213.87};
static float P035[3] = {156.38, -320.17, 3213.87};
static float P036[3] = {523.39, -303.81, 4424.57};
static float P037[3] = {574.66, 276.84, 4424.57};
static float P038[3] = {243.05, 492.50, 4424.57};
static float P039[3] = {-191.23, 520.13, 4424.57};
static float P040[3] = {-523.39, 304.01, 4424.57};
static float P041[3] = {-574.66, -231.83, 4424.57};
static float P042[3] = {-266.95, -578.17, 4424.57};
static float P043[3] = {211.14, -579.67, 4424.57};
static float P044[3] = {680.57, -370.27, 5943.46};
static float P045[3] = {834.01, 363.09, 5943.46};
static float P046[3] = {371.29, 614.13, 5943.46};
static float P047[3] = {-291.43, 621.86, 5943.46};
static float P048[3] = {-784.13, 362.60, 5943.46};
static float P049[3] = {-743.29, -325.82, 5943.46};
static float P050[3] = {-383.24, -804.77, 5943.46};
static float P051[3] = {283.47, -846.09, 5943.46};
static float P052[3] = {599.09, -332.24, 7902.59};
static float P053[3] = {735.48, 306.26, 7911.92};
static float P054[3] = {321.55, 558.53, 7902.59};
static float P055[3] = {-260.54, 559.84, 7902.59};
static float P056[3] = {-698.66, 320.83, 7902.59};
static float P057[3] = {-643.29, -299.16, 7902.59};
static float P058[3] = {-341.47, -719.30, 7902.59};
static float P059[3] = {252.57, -756.12, 7902.59};
static float P060[3] = {458.39, -265.31, 9355.44};
static float P062[3] = {224.04, 438.98, 9364.77};
static float P063[3] = {-165.71, 441.27, 9355.44};
static float P065[3] = {-473.99, -219.71, 9355.44};
static float P066[3] = {-211.97, -479.87, 9355.44};
static float P067[3] = {192.86, -504.03, 9355.44};
static float iP068[3] = {-112.44, 9.25, -64.42};
static float iP069[3] = {1155.63, 0.00, -182.46};
static float iP070[3] = {-1143.13, 0.00, -181.54};
static float iP071[3] = {1424.23, 0.00, -322.09};
static float iP072[3] = {-1368.01, 0.00, -310.38};
static float iP073[3] = {1255.57, 2.31, 114.05};
static float iP074[3] = {-1149.38, 0.00, 117.12};
static float iP075[3] = {718.36, 0.00, 433.36};
static float iP076[3] = {-655.90, 0.00, 433.36};
static float P068[3] = {-112.44, 9.25, -64.42};
static float P069[3] = {1155.63, 0.00, -182.46};
static float P070[3] = {-1143.13, 0.00, -181.54};
static float P071[3] = {1424.23, 0.00, -322.09};
static float P072[3] = {-1368.01, 0.00, -310.38};
static float P073[3] = {1255.57, 2.31, 114.05};
static float P074[3] = {-1149.38, 0.00, 117.12};
static float P075[3] = {718.36, 0.00, 433.36};
static float P076[3] = {-655.90, 0.00, 433.36};
static float P077[3] = {1058.00, -2.66, 7923.51};
static float P078[3] = {-1016.51, -15.47, 7902.87};
static float P079[3] = {-1363.99, -484.50, 7593.38};
static float P080[3] = {1478.09, -861.47, 7098.12};
static float P081[3] = {1338.06, -284.68, 7024.15};
static float P082[3] = {-1545.51, -860.64, 7106.60};
static float P083[3] = {1063.19, -70.46, 7466.60};
static float P084[3] = {-1369.18, -288.11, 7015.34};
static float P085[3] = {1348.44, -482.50, 7591.41};
static float P086[3] = {-1015.45, -96.80, 7474.86};
static float P087[3] = {731.04, 148.38, 7682.58};
static float P088[3] = {-697.03, 151.82, 7668.81};
static float P089[3] = {-686.82, 157.09, 7922.29};
static float P090[3] = {724.73, 147.75, 7931.39};
static float iP091[3] = {0.00, 327.10, 2346.55};
static float iP092[3] = {0.00, 552.28, 2311.31};
static float iP093[3] = {0.00, 721.16, 2166.41};
static float iP094[3] = {0.00, 693.42, 2388.80};
static float iP095[3] = {0.00, 389.44, 2859.97};
static float P091[3] = {0.00, 327.10, 2346.55};
static float P092[3] = {0.00, 552.28, 2311.31};
static float P093[3] = {0.00, 721.16, 2166.41};
static float P094[3] = {0.00, 693.42, 2388.80};
static float P095[3] = {0.00, 389.44, 2859.97};
static float iP096[3] = {222.02, -183.67, 10266.89};
static float iP097[3] = {-128.90, -182.70, 10266.89};
static float iP098[3] = {41.04, 88.31, 10659.36};
static float iP099[3] = {-48.73, 88.30, 10659.36};
static float P096[3] = {222.02, -183.67, 10266.89};
static float P097[3] = {-128.90, -182.70, 10266.89};
static float P098[3] = {41.04, 88.31, 10659.36};
static float P099[3] = {-48.73, 88.30, 10659.36};
static float P100[3] = {0.00, 603.42, 9340.68};
static float P104[3] = {-9.86, 567.62, 7858.65};
static float P105[3] = {31.96, 565.27, 7908.46};
static float P106[3] = {22.75, 568.13, 7782.83};
static float P107[3] = {58.93, 568.42, 7775.94};
static float P108[3] = {55.91, 565.59, 7905.86};
static float P109[3] = {99.21, 566.00, 7858.65};
static float P110[3] = {-498.83, 148.14, 9135.10};
static float P111[3] = {-495.46, 133.24, 9158.48};
static float P112[3] = {-490.82, 146.23, 9182.76};
static float P113[3] = {-489.55, 174.11, 9183.66};
static float P114[3] = {-492.92, 189.00, 9160.28};
static float P115[3] = {-497.56, 176.02, 9136.00};
static float P116[3] = {526.54, 169.68, 9137.70};
static float P117[3] = {523.49, 184.85, 9161.42};
static float P118[3] = {518.56, 171.78, 9186.06};
static float P119[3] = {516.68, 143.53, 9186.98};
static float P120[3] = {519.73, 128.36, 9163.26};
static float P121[3] = {524.66, 141.43, 9138.62};
/* *INDENT-ON* */
void
Whale001(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N068);
glVertex3fv(P068);
glNormal3fv(N010);
glVertex3fv(P010);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N068);
glVertex3fv(P068);
glNormal3fv(N076);
glVertex3fv(P076);
glNormal3fv(N010);
glVertex3fv(P010);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N068);
glVertex3fv(P068);
glNormal3fv(N070);
glVertex3fv(P070);
glNormal3fv(N076);
glVertex3fv(P076);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N076);
glVertex3fv(P076);
glNormal3fv(N070);
glVertex3fv(P070);
glNormal3fv(N074);
glVertex3fv(P074);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N070);
glVertex3fv(P070);
glNormal3fv(N072);
glVertex3fv(P072);
glNormal3fv(N074);
glVertex3fv(P074);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N072);
glVertex3fv(P072);
glNormal3fv(N070);
glVertex3fv(P070);
glNormal3fv(N074);
glVertex3fv(P074);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N074);
glVertex3fv(P074);
glNormal3fv(N070);
glVertex3fv(P070);
glNormal3fv(N076);
glVertex3fv(P076);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N070);
glVertex3fv(P070);
glNormal3fv(N068);
glVertex3fv(P068);
glNormal3fv(N076);
glVertex3fv(P076);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N076);
glVertex3fv(P076);
glNormal3fv(N068);
glVertex3fv(P068);
glNormal3fv(N010);
glVertex3fv(P010);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N068);
glVertex3fv(P068);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N010);
glVertex3fv(P010);
glEnd();
}
void
Whale002(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N011);
glVertex3fv(P011);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N009);
glVertex3fv(P009);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N075);
glVertex3fv(P075);
glNormal3fv(N011);
glVertex3fv(P011);
glNormal3fv(N009);
glVertex3fv(P009);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N069);
glVertex3fv(P069);
glNormal3fv(N011);
glVertex3fv(P011);
glNormal3fv(N075);
glVertex3fv(P075);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N069);
glVertex3fv(P069);
glNormal3fv(N075);
glVertex3fv(P075);
glNormal3fv(N073);
glVertex3fv(P073);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N071);
glVertex3fv(P071);
glNormal3fv(N069);
glVertex3fv(P069);
glNormal3fv(N073);
glVertex3fv(P073);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N011);
glVertex3fv(P011);
glNormal3fv(N009);
glVertex3fv(P009);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N009);
glVertex3fv(P009);
glNormal3fv(N011);
glVertex3fv(P011);
glNormal3fv(N075);
glVertex3fv(P075);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N011);
glVertex3fv(P011);
glNormal3fv(N069);
glVertex3fv(P069);
glNormal3fv(N075);
glVertex3fv(P075);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N069);
glVertex3fv(P069);
glNormal3fv(N073);
glVertex3fv(P073);
glNormal3fv(N075);
glVertex3fv(P075);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N069);
glVertex3fv(P069);
glNormal3fv(N071);
glVertex3fv(P071);
glNormal3fv(N073);
glVertex3fv(P073);
glEnd();
}
void
Whale003(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N018);
glVertex3fv(P018);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N019);
glVertex3fv(P019);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N019);
glVertex3fv(P019);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N012);
glVertex3fv(P012);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N017);
glVertex3fv(P017);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N018);
glVertex3fv(P018);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N017);
glVertex3fv(P017);
glNormal3fv(N016);
glVertex3fv(P016);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N013);
glVertex3fv(P013);
glNormal3fv(N012);
glVertex3fv(P012);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N016);
glVertex3fv(P016);
glNormal3fv(N015);
glVertex3fv(P015);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N014);
glVertex3fv(P014);
glNormal3fv(N013);
glVertex3fv(P013);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N001);
glVertex3fv(P001);
glNormal3fv(N015);
glVertex3fv(P015);
glNormal3fv(N014);
glVertex3fv(P014);
glEnd();
}
void
Whale004(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N014);
glVertex3fv(P014);
glNormal3fv(N015);
glVertex3fv(P015);
glNormal3fv(N023);
glVertex3fv(P023);
glNormal3fv(N022);
glVertex3fv(P022);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N015);
glVertex3fv(P015);
glNormal3fv(N016);
glVertex3fv(P016);
glNormal3fv(N024);
glVertex3fv(P024);
glNormal3fv(N023);
glVertex3fv(P023);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N016);
glVertex3fv(P016);
glNormal3fv(N017);
glVertex3fv(P017);
glNormal3fv(N025);
glVertex3fv(P025);
glNormal3fv(N024);
glVertex3fv(P024);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N017);
glVertex3fv(P017);
glNormal3fv(N018);
glVertex3fv(P018);
glNormal3fv(N026);
glVertex3fv(P026);
glNormal3fv(N025);
glVertex3fv(P025);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N013);
glVertex3fv(P013);
glNormal3fv(N014);
glVertex3fv(P014);
glNormal3fv(N022);
glVertex3fv(P022);
glNormal3fv(N021);
glVertex3fv(P021);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N012);
glVertex3fv(P012);
glNormal3fv(N013);
glVertex3fv(P013);
glNormal3fv(N021);
glVertex3fv(P021);
glNormal3fv(N020);
glVertex3fv(P020);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N018);
glVertex3fv(P018);
glNormal3fv(N019);
glVertex3fv(P019);
glNormal3fv(N027);
glVertex3fv(P027);
glNormal3fv(N026);
glVertex3fv(P026);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N019);
glVertex3fv(P019);
glNormal3fv(N012);
glVertex3fv(P012);
glNormal3fv(N020);
glVertex3fv(P020);
glNormal3fv(N027);
glVertex3fv(P027);
glEnd();
}
void
Whale005(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N022);
glVertex3fv(P022);
glNormal3fv(N023);
glVertex3fv(P023);
glNormal3fv(N031);
glVertex3fv(P031);
glNormal3fv(N030);
glVertex3fv(P030);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N021);
glVertex3fv(P021);
glNormal3fv(N022);
glVertex3fv(P022);
glNormal3fv(N030);
glVertex3fv(P030);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N021);
glVertex3fv(P021);
glNormal3fv(N030);
glVertex3fv(P030);
glNormal3fv(N029);
glVertex3fv(P029);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N023);
glVertex3fv(P023);
glNormal3fv(N024);
glVertex3fv(P024);
glNormal3fv(N031);
glVertex3fv(P031);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N024);
glVertex3fv(P024);
glNormal3fv(N032);
glVertex3fv(P032);
glNormal3fv(N031);
glVertex3fv(P031);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N024);
glVertex3fv(P024);
glNormal3fv(N025);
glVertex3fv(P025);
glNormal3fv(N032);
glVertex3fv(P032);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N025);
glVertex3fv(P025);
glNormal3fv(N033);
glVertex3fv(P033);
glNormal3fv(N032);
glVertex3fv(P032);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N020);
glVertex3fv(P020);
glNormal3fv(N021);
glVertex3fv(P021);
glNormal3fv(N029);
glVertex3fv(P029);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N020);
glVertex3fv(P020);
glNormal3fv(N029);
glVertex3fv(P029);
glNormal3fv(N028);
glVertex3fv(P028);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N027);
glVertex3fv(P027);
glNormal3fv(N020);
glVertex3fv(P020);
glNormal3fv(N028);
glVertex3fv(P028);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N027);
glVertex3fv(P027);
glNormal3fv(N028);
glVertex3fv(P028);
glNormal3fv(N035);
glVertex3fv(P035);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N025);
glVertex3fv(P025);
glNormal3fv(N026);
glVertex3fv(P026);
glNormal3fv(N033);
glVertex3fv(P033);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N033);
glVertex3fv(P033);
glNormal3fv(N026);
glVertex3fv(P026);
glNormal3fv(N034);
glVertex3fv(P034);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N026);
glVertex3fv(P026);
glNormal3fv(N027);
glVertex3fv(P027);
glNormal3fv(N035);
glVertex3fv(P035);
glNormal3fv(N034);
glVertex3fv(P034);
glEnd();
}
void
Whale006(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N092);
glVertex3fv(P092);
glNormal3fv(N093);
glVertex3fv(P093);
glNormal3fv(N094);
glVertex3fv(P094);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N093);
glVertex3fv(P093);
glNormal3fv(N092);
glVertex3fv(P092);
glNormal3fv(N094);
glVertex3fv(P094);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N092);
glVertex3fv(P092);
glNormal3fv(N091);
glVertex3fv(P091);
glNormal3fv(N095);
glVertex3fv(P095);
glNormal3fv(N094);
glVertex3fv(P094);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N091);
glVertex3fv(P091);
glNormal3fv(N092);
glVertex3fv(P092);
glNormal3fv(N094);
glVertex3fv(P094);
glNormal3fv(N095);
glVertex3fv(P095);
glEnd();
}
void
Whale007(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N030);
glVertex3fv(P030);
glNormal3fv(N031);
glVertex3fv(P031);
glNormal3fv(N039);
glVertex3fv(P039);
glNormal3fv(N038);
glVertex3fv(P038);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N029);
glVertex3fv(P029);
glNormal3fv(N030);
glVertex3fv(P030);
glNormal3fv(N038);
glVertex3fv(P038);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N029);
glVertex3fv(P029);
glNormal3fv(N038);
glVertex3fv(P038);
glNormal3fv(N037);
glVertex3fv(P037);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N028);
glVertex3fv(P028);
glNormal3fv(N029);
glVertex3fv(P029);
glNormal3fv(N037);
glVertex3fv(P037);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N028);
glVertex3fv(P028);
glNormal3fv(N037);
glVertex3fv(P037);
glNormal3fv(N036);
glVertex3fv(P036);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N035);
glVertex3fv(P035);
glNormal3fv(N028);
glVertex3fv(P028);
glNormal3fv(N036);
glVertex3fv(P036);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N035);
glVertex3fv(P035);
glNormal3fv(N036);
glVertex3fv(P036);
glNormal3fv(N043);
glVertex3fv(P043);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N034);
glVertex3fv(P034);
glNormal3fv(N035);
glVertex3fv(P035);
glNormal3fv(N043);
glVertex3fv(P043);
glNormal3fv(N042);
glVertex3fv(P042);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N033);
glVertex3fv(P033);
glNormal3fv(N034);
glVertex3fv(P034);
glNormal3fv(N042);
glVertex3fv(P042);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N033);
glVertex3fv(P033);
glNormal3fv(N042);
glVertex3fv(P042);
glNormal3fv(N041);
glVertex3fv(P041);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N031);
glVertex3fv(P031);
glNormal3fv(N032);
glVertex3fv(P032);
glNormal3fv(N039);
glVertex3fv(P039);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N039);
glVertex3fv(P039);
glNormal3fv(N032);
glVertex3fv(P032);
glNormal3fv(N040);
glVertex3fv(P040);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N032);
glVertex3fv(P032);
glNormal3fv(N033);
glVertex3fv(P033);
glNormal3fv(N040);
glVertex3fv(P040);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N040);
glVertex3fv(P040);
glNormal3fv(N033);
glVertex3fv(P033);
glNormal3fv(N041);
glVertex3fv(P041);
glEnd();
}
void
Whale008(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N042);
glVertex3fv(P042);
glNormal3fv(N043);
glVertex3fv(P043);
glNormal3fv(N051);
glVertex3fv(P051);
glNormal3fv(N050);
glVertex3fv(P050);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N043);
glVertex3fv(P043);
glNormal3fv(N036);
glVertex3fv(P036);
glNormal3fv(N051);
glVertex3fv(P051);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N051);
glVertex3fv(P051);
glNormal3fv(N036);
glVertex3fv(P036);
glNormal3fv(N044);
glVertex3fv(P044);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N041);
glVertex3fv(P041);
glNormal3fv(N042);
glVertex3fv(P042);
glNormal3fv(N050);
glVertex3fv(P050);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N041);
glVertex3fv(P041);
glNormal3fv(N050);
glVertex3fv(P050);
glNormal3fv(N049);
glVertex3fv(P049);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N036);
glVertex3fv(P036);
glNormal3fv(N037);
glVertex3fv(P037);
glNormal3fv(N044);
glVertex3fv(P044);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N044);
glVertex3fv(P044);
glNormal3fv(N037);
glVertex3fv(P037);
glNormal3fv(N045);
glVertex3fv(P045);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N040);
glVertex3fv(P040);
glNormal3fv(N041);
glVertex3fv(P041);
glNormal3fv(N049);
glVertex3fv(P049);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N040);
glVertex3fv(P040);
glNormal3fv(N049);
glVertex3fv(P049);
glNormal3fv(N048);
glVertex3fv(P048);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N039);
glVertex3fv(P039);
glNormal3fv(N040);
glVertex3fv(P040);
glNormal3fv(N048);
glVertex3fv(P048);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N039);
glVertex3fv(P039);
glNormal3fv(N048);
glVertex3fv(P048);
glNormal3fv(N047);
glVertex3fv(P047);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N037);
glVertex3fv(P037);
glNormal3fv(N038);
glVertex3fv(P038);
glNormal3fv(N045);
glVertex3fv(P045);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N038);
glVertex3fv(P038);
glNormal3fv(N046);
glVertex3fv(P046);
glNormal3fv(N045);
glVertex3fv(P045);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N038);
glVertex3fv(P038);
glNormal3fv(N039);
glVertex3fv(P039);
glNormal3fv(N047);
glVertex3fv(P047);
glNormal3fv(N046);
glVertex3fv(P046);
glEnd();
}
void
Whale009(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N050);
glVertex3fv(P050);
glNormal3fv(N051);
glVertex3fv(P051);
glNormal3fv(N059);
glVertex3fv(P059);
glNormal3fv(N058);
glVertex3fv(P058);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N051);
glVertex3fv(P051);
glNormal3fv(N044);
glVertex3fv(P044);
glNormal3fv(N059);
glVertex3fv(P059);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N059);
glVertex3fv(P059);
glNormal3fv(N044);
glVertex3fv(P044);
glNormal3fv(N052);
glVertex3fv(P052);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N044);
glVertex3fv(P044);
glNormal3fv(N045);
glVertex3fv(P045);
glNormal3fv(N053);
glVertex3fv(P053);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N044);
glVertex3fv(P044);
glNormal3fv(N053);
glVertex3fv(P053);
glNormal3fv(N052);
glVertex3fv(P052);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N049);
glVertex3fv(P049);
glNormal3fv(N050);
glVertex3fv(P050);
glNormal3fv(N058);
glVertex3fv(P058);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N049);
glVertex3fv(P049);
glNormal3fv(N058);
glVertex3fv(P058);
glNormal3fv(N057);
glVertex3fv(P057);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N048);
glVertex3fv(P048);
glNormal3fv(N049);
glVertex3fv(P049);
glNormal3fv(N057);
glVertex3fv(P057);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N048);
glVertex3fv(P048);
glNormal3fv(N057);
glVertex3fv(P057);
glNormal3fv(N056);
glVertex3fv(P056);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N047);
glVertex3fv(P047);
glNormal3fv(N048);
glVertex3fv(P048);
glNormal3fv(N056);
glVertex3fv(P056);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N047);
glVertex3fv(P047);
glNormal3fv(N056);
glVertex3fv(P056);
glNormal3fv(N055);
glVertex3fv(P055);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N045);
glVertex3fv(P045);
glNormal3fv(N046);
glVertex3fv(P046);
glNormal3fv(N053);
glVertex3fv(P053);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N046);
glVertex3fv(P046);
glNormal3fv(N054);
glVertex3fv(P054);
glNormal3fv(N053);
glVertex3fv(P053);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N046);
glVertex3fv(P046);
glNormal3fv(N047);
glVertex3fv(P047);
glNormal3fv(N055);
glVertex3fv(P055);
glNormal3fv(N054);
glVertex3fv(P054);
glEnd();
}
void
Whale010(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N080);
glVertex3fv(P080);
glNormal3fv(N081);
glVertex3fv(P081);
glNormal3fv(N085);
glVertex3fv(P085);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N081);
glVertex3fv(P081);
glNormal3fv(N083);
glVertex3fv(P083);
glNormal3fv(N085);
glVertex3fv(P085);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N085);
glVertex3fv(P085);
glNormal3fv(N083);
glVertex3fv(P083);
glNormal3fv(N077);
glVertex3fv(P077);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N083);
glVertex3fv(P083);
glNormal3fv(N087);
glVertex3fv(P087);
glNormal3fv(N077);
glVertex3fv(P077);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N077);
glVertex3fv(P077);
glNormal3fv(N087);
glVertex3fv(P087);
glNormal3fv(N090);
glVertex3fv(P090);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N081);
glVertex3fv(P081);
glNormal3fv(N080);
glVertex3fv(P080);
glNormal3fv(N085);
glVertex3fv(P085);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N083);
glVertex3fv(P083);
glNormal3fv(N081);
glVertex3fv(P081);
glNormal3fv(N085);
glVertex3fv(P085);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N083);
glVertex3fv(P083);
glNormal3fv(N085);
glVertex3fv(P085);
glNormal3fv(N077);
glVertex3fv(P077);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N087);
glVertex3fv(P087);
glNormal3fv(N083);
glVertex3fv(P083);
glNormal3fv(N077);
glVertex3fv(P077);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N087);
glVertex3fv(P087);
glNormal3fv(N077);
glVertex3fv(P077);
glNormal3fv(N090);
glVertex3fv(P090);
glEnd();
}
void
Whale011(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N082);
glVertex3fv(P082);
glNormal3fv(N084);
glVertex3fv(P084);
glNormal3fv(N079);
glVertex3fv(P079);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N084);
glVertex3fv(P084);
glNormal3fv(N086);
glVertex3fv(P086);
glNormal3fv(N079);
glVertex3fv(P079);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N079);
glVertex3fv(P079);
glNormal3fv(N086);
glVertex3fv(P086);
glNormal3fv(N078);
glVertex3fv(P078);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N086);
glVertex3fv(P086);
glNormal3fv(N088);
glVertex3fv(P088);
glNormal3fv(N078);
glVertex3fv(P078);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N078);
glVertex3fv(P078);
glNormal3fv(N088);
glVertex3fv(P088);
glNormal3fv(N089);
glVertex3fv(P089);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N088);
glVertex3fv(P088);
glNormal3fv(N086);
glVertex3fv(P086);
glNormal3fv(N089);
glVertex3fv(P089);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N089);
glVertex3fv(P089);
glNormal3fv(N086);
glVertex3fv(P086);
glNormal3fv(N078);
glVertex3fv(P078);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N086);
glVertex3fv(P086);
glNormal3fv(N084);
glVertex3fv(P084);
glNormal3fv(N078);
glVertex3fv(P078);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N078);
glVertex3fv(P078);
glNormal3fv(N084);
glVertex3fv(P084);
glNormal3fv(N079);
glVertex3fv(P079);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N084);
glVertex3fv(P084);
glNormal3fv(N082);
glVertex3fv(P082);
glNormal3fv(N079);
glVertex3fv(P079);
glEnd();
}
void
Whale012(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N058);
glVertex3fv(P058);
glNormal3fv(N059);
glVertex3fv(P059);
glNormal3fv(N067);
glVertex3fv(P067);
glNormal3fv(N066);
glVertex3fv(P066);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N059);
glVertex3fv(P059);
glNormal3fv(N052);
glVertex3fv(P052);
glNormal3fv(N060);
glVertex3fv(P060);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N059);
glVertex3fv(P059);
glNormal3fv(N060);
glVertex3fv(P060);
glNormal3fv(N067);
glVertex3fv(P067);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N058);
glVertex3fv(P058);
glNormal3fv(N066);
glVertex3fv(P066);
glNormal3fv(N065);
glVertex3fv(P065);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N058);
glVertex3fv(P058);
glNormal3fv(N065);
glVertex3fv(P065);
glNormal3fv(N057);
glVertex3fv(P057);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N056);
glVertex3fv(P056);
glNormal3fv(N057);
glVertex3fv(P057);
glNormal3fv(N065);
glVertex3fv(P065);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N056);
glVertex3fv(P056);
glNormal3fv(N065);
glVertex3fv(P065);
glNormal3fv(N006);
glVertex3fv(P006);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N056);
glVertex3fv(P056);
glNormal3fv(N006);
glVertex3fv(P006);
glNormal3fv(N063);
glVertex3fv(P063);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N056);
glVertex3fv(P056);
glNormal3fv(N063);
glVertex3fv(P063);
glNormal3fv(N055);
glVertex3fv(P055);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N054);
glVertex3fv(P054);
glNormal3fv(N062);
glVertex3fv(P062);
glNormal3fv(N005);
glVertex3fv(P005);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N054);
glVertex3fv(P054);
glNormal3fv(N005);
glVertex3fv(P005);
glNormal3fv(N053);
glVertex3fv(P053);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N053);
glVertex3fv(P053);
glNormal3fv(N005);
glVertex3fv(P005);
glNormal3fv(N060);
glVertex3fv(P060);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N053);
glVertex3fv(P053);
glNormal3fv(N060);
glVertex3fv(P060);
glNormal3fv(N052);
glVertex3fv(P052);
glEnd();
}
void
Whale013(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N066);
glVertex3fv(P066);
glNormal3fv(N067);
glVertex3fv(P067);
glNormal3fv(N096);
glVertex3fv(P096);
glNormal3fv(N097);
glVertex3fv(P097);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N097);
glVertex3fv(P097);
glNormal3fv(N096);
glVertex3fv(P096);
glNormal3fv(N098);
glVertex3fv(P098);
glNormal3fv(N099);
glVertex3fv(P099);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N065);
glVertex3fv(P065);
glNormal3fv(N066);
glVertex3fv(P066);
glNormal3fv(N097);
glVertex3fv(P097);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N067);
glVertex3fv(P067);
glNormal3fv(N060);
glVertex3fv(P060);
glNormal3fv(N096);
glVertex3fv(P096);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N060);
glVertex3fv(P060);
glNormal3fv(N005);
glVertex3fv(P005);
glNormal3fv(N096);
glVertex3fv(P096);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N096);
glVertex3fv(P096);
glNormal3fv(N005);
glVertex3fv(P005);
glNormal3fv(N098);
glVertex3fv(P098);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N006);
glVertex3fv(P006);
glNormal3fv(N065);
glVertex3fv(P065);
glNormal3fv(N097);
glVertex3fv(P097);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N006);
glVertex3fv(P006);
glNormal3fv(N097);
glVertex3fv(P097);
glNormal3fv(N099);
glVertex3fv(P099);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P005);
glVertex3fv(P006);
glVertex3fv(P099);
glVertex3fv(P098);
glEnd();
}
void
Whale014(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N062);
glVertex3fv(P062);
glNormal3fv(N004);
glVertex3fv(P004);
glNormal3fv(N005);
glVertex3fv(P005);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P006);
glVertex3fv(P005);
glVertex3fv(P004);
glVertex3fv(P008);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N063);
glVertex3fv(P063);
glNormal3fv(N006);
glVertex3fv(P006);
glNormal3fv(N002);
glVertex3fv(P002);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N006);
glVertex3fv(P006);
glNormal3fv(N008);
glVertex3fv(P008);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N008);
glVertex3fv(P008);
glNormal3fv(N004);
glVertex3fv(P004);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N062);
glVertex3fv(P062);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N004);
glVertex3fv(P004);
glEnd();
}
void
Whale015(void)
{
glBegin(GL_POLYGON);
glNormal3fv(N055);
glVertex3fv(P055);
glNormal3fv(N003);
glVertex3fv(P003);
glNormal3fv(N054);
glVertex3fv(P054);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N003);
glVertex3fv(P003);
glNormal3fv(N055);
glVertex3fv(P055);
glNormal3fv(N063);
glVertex3fv(P063);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N003);
glVertex3fv(P003);
glNormal3fv(N063);
glVertex3fv(P063);
glNormal3fv(N100);
glVertex3fv(P100);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N003);
glVertex3fv(P003);
glNormal3fv(N100);
glVertex3fv(P100);
glNormal3fv(N054);
glVertex3fv(P054);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N054);
glVertex3fv(P054);
glNormal3fv(N100);
glVertex3fv(P100);
glNormal3fv(N062);
glVertex3fv(P062);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N100);
glVertex3fv(P100);
glNormal3fv(N063);
glVertex3fv(P063);
glNormal3fv(N002);
glVertex3fv(P002);
glEnd();
glBegin(GL_POLYGON);
glNormal3fv(N100);
glVertex3fv(P100);
glNormal3fv(N002);
glVertex3fv(P002);
glNormal3fv(N062);
glVertex3fv(P062);
glEnd();
}
void
Whale016(void)
{
glBegin(GL_POLYGON);
glVertex3fv(P104);
glVertex3fv(P105);
glVertex3fv(P106);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P107);
glVertex3fv(P108);
glVertex3fv(P109);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P110);
glVertex3fv(P111);
glVertex3fv(P112);
glVertex3fv(P113);
glVertex3fv(P114);
glVertex3fv(P115);
glEnd();
glBegin(GL_POLYGON);
glVertex3fv(P116);
glVertex3fv(P117);
glVertex3fv(P118);
glVertex3fv(P119);
glVertex3fv(P120);
glVertex3fv(P121);
glEnd();
}
void
DrawWhale(fishRec * fish)
{
float seg0, seg1, seg2, seg3, seg4, seg5, seg6, seg7;
float pitch, thrash, chomp;
fish->htail = (int) (fish->htail - (int) (5.0 * fish->v)) % 360;
thrash = 70.0 * fish->v;
seg0 = 1.5 * thrash * sin((fish->htail) * RRAD);
seg1 = 2.5 * thrash * sin((fish->htail + 10.0) * RRAD);
seg2 = 3.7 * thrash * sin((fish->htail + 15.0) * RRAD);
seg3 = 4.8 * thrash * sin((fish->htail + 23.0) * RRAD);
seg4 = 6.0 * thrash * sin((fish->htail + 28.0) * RRAD);
seg5 = 6.5 * thrash * sin((fish->htail + 35.0) * RRAD);
seg6 = 6.5 * thrash * sin((fish->htail + 40.0) * RRAD);
seg7 = 6.5 * thrash * sin((fish->htail + 55.0) * RRAD);
pitch = fish->v * sin((fish->htail - 160.0) * RRAD);
chomp = 0.0;
if (fish->v > 2.0) {
chomp = -(fish->v - 2.0) * 200.0;
}
P012[1] = iP012[1] + seg5;
P013[1] = iP013[1] + seg5;
P014[1] = iP014[1] + seg5;
P015[1] = iP015[1] + seg5;
P016[1] = iP016[1] + seg5;
P017[1] = iP017[1] + seg5;
P018[1] = iP018[1] + seg5;
P019[1] = iP019[1] + seg5;
P020[1] = iP020[1] + seg4;
P021[1] = iP021[1] + seg4;
P022[1] = iP022[1] + seg4;
P023[1] = iP023[1] + seg4;
P024[1] = iP024[1] + seg4;
P025[1] = iP025[1] + seg4;
P026[1] = iP026[1] + seg4;
P027[1] = iP027[1] + seg4;
P028[1] = iP028[1] + seg2;
P029[1] = iP029[1] + seg2;
P030[1] = iP030[1] + seg2;
P031[1] = iP031[1] + seg2;
P032[1] = iP032[1] + seg2;
P033[1] = iP033[1] + seg2;
P034[1] = iP034[1] + seg2;
P035[1] = iP035[1] + seg2;
P036[1] = iP036[1] + seg1;
P037[1] = iP037[1] + seg1;
P038[1] = iP038[1] + seg1;
P039[1] = iP039[1] + seg1;
P040[1] = iP040[1] + seg1;
P041[1] = iP041[1] + seg1;
P042[1] = iP042[1] + seg1;
P043[1] = iP043[1] + seg1;
P044[1] = iP044[1] + seg0;
P045[1] = iP045[1] + seg0;
P046[1] = iP046[1] + seg0;
P047[1] = iP047[1] + seg0;
P048[1] = iP048[1] + seg0;
P049[1] = iP049[1] + seg0;
P050[1] = iP050[1] + seg0;
P051[1] = iP051[1] + seg0;
P009[1] = iP009[1] + seg6;
P010[1] = iP010[1] + seg6;
P075[1] = iP075[1] + seg6;
P076[1] = iP076[1] + seg6;
P001[1] = iP001[1] + seg7;
P011[1] = iP011[1] + seg7;
P068[1] = iP068[1] + seg7;
P069[1] = iP069[1] + seg7;
P070[1] = iP070[1] + seg7;
P071[1] = iP071[1] + seg7;
P072[1] = iP072[1] + seg7;
P073[1] = iP073[1] + seg7;
P074[1] = iP074[1] + seg7;
P091[1] = iP091[1] + seg3 * 1.1;
P092[1] = iP092[1] + seg3;
P093[1] = iP093[1] + seg3;
P094[1] = iP094[1] + seg3;
P095[1] = iP095[1] + seg3 * 0.9;
P099[1] = iP099[1] + chomp;
P098[1] = iP098[1] + chomp;
P097[1] = iP097[1] + chomp;
P096[1] = iP096[1] + chomp;
glPushMatrix();
glRotatef(pitch, 1.0, 0.0, 0.0);
glTranslatef(0.0, 0.0, 8000.0);
glRotatef(180.0, 0.0, 1.0, 0.0);
glScalef(3.0, 3.0, 3.0);
glEnable(GL_CULL_FACE);
Whale001();
Whale002();
Whale003();
Whale004();
Whale005();
Whale006();
Whale007();
Whale008();
Whale009();
Whale010();
Whale011();
Whale012();
Whale013();
Whale014();
Whale015();
Whale016();
glDisable(GL_CULL_FACE);
glPopMatrix();
}
/* Simple program: Create a blank window, wait for keypress, quit.
Please see the SDL documentation for details on using the SDL API:
/Developer/Documentation/SDL/docs.html
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "SDL.h"
extern void Atlantis_Init ();
extern void Atlantis_Reshape (int w, int h);
extern void Atlantis_Animate ();
extern void Atlantis_Display ();
static SDL_Surface *gScreen;
static void initAttributes ()
{
// Setup attributes we want for the OpenGL context
int value;
// Don't set color bit sizes (SDL_GL_RED_SIZE, etc)
// Mac OS X will always use 8-8-8-8 ARGB for 32-bit screens and
// 5-5-5 RGB for 16-bit screens
// Request a 16-bit depth buffer (without this, there is no depth buffer)
value = 16;
SDL_GL_SetAttribute (SDL_GL_DEPTH_SIZE, value);
// Request double-buffered OpenGL
// The fact that windows are double-buffered on Mac OS X has no effect
// on OpenGL double buffering.
value = 1;
SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, value);
}
static void printAttributes ()
{
// Print out attributes of the context we created
int nAttr;
int i;
int attr[] = { SDL_GL_RED_SIZE, SDL_GL_BLUE_SIZE, SDL_GL_GREEN_SIZE,
SDL_GL_ALPHA_SIZE, SDL_GL_BUFFER_SIZE, SDL_GL_DEPTH_SIZE };
char *desc[] = { "Red size: %d bits\n", "Blue size: %d bits\n", "Green size: %d bits\n",
"Alpha size: %d bits\n", "Color buffer size: %d bits\n",
"Depth bufer size: %d bits\n" };
nAttr = sizeof(attr) / sizeof(int);
for (i = 0; i < nAttr; i++) {
int value;
SDL_GL_GetAttribute (attr[i], &value);
printf (desc[i], value);
}
}
static void createSurface (int fullscreen)
{
Uint32 flags = 0;
flags = SDL_OPENGL;
if (fullscreen)
flags |= SDL_FULLSCREEN;
// Create window
gScreen = SDL_SetVideoMode (640, 480, 0, flags);
if (gScreen == NULL) {
fprintf (stderr, "Couldn't set 640x480 OpenGL video mode: %s\n",
SDL_GetError());
SDL_Quit();
exit(2);
}
}
static void initGL ()
{
Atlantis_Init ();
Atlantis_Reshape (gScreen->w, gScreen->h);
}
static void drawGL ()
{
Atlantis_Animate ();
Atlantis_Display ();
}
static void mainLoop ()
{
SDL_Event event;
int done = 0;
int fps = 24;
int delay = 1000/fps;
int thenTicks = -1;
int nowTicks;
while ( !done ) {
/* Check for events */
while ( SDL_PollEvent (&event) ) {
switch (event.type) {
case SDL_MOUSEMOTION:
break;
case SDL_MOUSEBUTTONDOWN:
break;
case SDL_KEYDOWN:
/* Any keypress quits the app... */
case SDL_QUIT:
done = 1;
break;
default:
break;
}
}
// Draw at 24 hz
// This approach is not normally recommended - it is better to
// use time-based animation and run as fast as possible
drawGL ();
SDL_GL_SwapBuffers ();
// Time how long each draw-swap-delay cycle takes
// and adjust delay to get closer to target framerate
if (thenTicks > 0) {
nowTicks = SDL_GetTicks ();
delay += (1000/fps - (nowTicks-thenTicks));
thenTicks = nowTicks;
if (delay < 0)
delay = 1000/fps;
}
else {
thenTicks = SDL_GetTicks ();
}
SDL_Delay (delay);
}
}
int main(int argc, char *argv[])
{
// Init SDL video subsystem
if ( SDL_Init (SDL_INIT_VIDEO) < 0 ) {
fprintf(stderr, "Couldn't initialize SDL: %s\n",
SDL_GetError());
exit(1);
}
// Set GL context attributes
initAttributes ();
// Create GL context
createSurface (0);
// Get GL context attributes
printAttributes ();
// Init GL state
initGL ();
// Draw, get events...
mainLoop ();
// Cleanup
SDL_Quit();
return 0;
}
#!/bin/csh
###
## This script creates "Xcode.tar.gz" in the parent directory
###
# remove build products
rm -rf SDL/build
rm -rf SDLTest/build
# remove Finder info files
find . -name ".DS_Store" -exec rm "{}" ";"
# remove user project prefs
find . -name "*.pbxuser" -exec rm "{}" ";"
find . -name "*.mode1" -exec rm "{}" ";"
find . -name "*.perspective" -exec rm "{}" ";"
# create the archive
(cd .. && gnutar -zcvf Xcode.tar.gz Xcode)
#! /bin/csh -ef
set prog = `/usr/bin/basename $0`
set usage = "Usage: $prog [-f] root-dir info-file [tiff-file] [-d dest-dir] [-r resource-dir] [-traditional | -gnutar]"
set noglob
if (-x /usr/bin/mkbom) then
set mkbom=/usr/bin/mkbom
set lsbom=/usr/bin/lsbom
else
set mkbom=/usr/etc/mkbom
set lsbom=/usr/etc/lsbom
endif
if (-x /usr/bin/awk) then
set awk=/usr/bin/awk
else
set awk=/bin/awk
endif
set gnutar=/usr/bin/gnutar
set tar=/usr/bin/tar
set pax=/bin/pax
# gather parameters
if ($#argv == 0) then
echo $usage
exit(1)
endif
while ( $#argv > 0 )
switch ( $argv[1] )
case -d:
if ( $?destDir ) then
echo ${prog}: dest-dir parameter already set to ${destDir}.
echo $usage
exit(1)
else if ( $#argv < 2 ) then
echo ${prog}: -d option requires destination directory.
echo $usage
exit(1)
else
set destDir = $argv[2]
shift; shift
breaksw
endif
case -f:
if ( $?rootDir ) then
echo ${prog}: root-dir parameter already set to ${rootDir}.
echo $usage
exit(1)
else if ( $#argv < 2 ) then
echo ${prog}: -f option requires package root directory.
echo $usage
exit(1)
else
set rootDir = $argv[2]
set fflag
shift; shift
breaksw
endif
case -r:
if ( $?resDir ) then
echo ${prog}: resource-dir parameter already set to ${resDir}.
echo $usage
exit(1)
else if ( $#argv < 2 ) then
echo ${prog}: -r option requires package resource directory.
echo $usage
exit(1)
else
set resDir = $argv[2]
shift; shift
breaksw
endif
case -traditional:
set usetar
unset usegnutar
unset usepax
breaksw
case -gnutar:
set usegnutar
unset usepax
unset usetar
case -B:
# We got long file names, better use bigtar instead
#set archiver = /NextAdmin/Installer.app/Resources/installer_bigtar
echo 2>&1 ${prog}: -B flag is no longer relevant.
shift
breaksw
case -*:
echo ${prog}: Unknown option: $argv[1]
echo $usage
exit(1)
case *.info:
if ( $?info ) then
echo ${prog}: info-file parameter already set to ${info}.
echo $usage
exit(1)
else
set info = "$argv[1]"
shift
breaksw
endif
case *.tiff:
if ( $?tiff ) then
echo ${prog}: tiff-file parameter already set to ${tiff}.
echo $usage
exit(1)
else
set tiff = "$argv[1]"
shift
breaksw
endif
default:
if ( $?rootDir ) then
echo ${prog}: unrecognized parameter: $argv[1]
echo $usage
exit(1)
else
set rootDir = "$argv[1]"
shift
breaksw
endif
endsw
end
# check for mandatory parameters
if ( ! $?rootDir ) then
echo ${prog}: missing root-dir parameter.
echo $usage
exit(1)
else if ( ! $?info) then
echo ${prog}: missing info-file parameter.
echo $usage
exit(1)
endif
# destDir gets default value if unset on command line
if ( $?destDir ) then
/bin/mkdir -p $destDir
else
set destDir = .
endif
# derive the root name for the package from the root name of the info file
set root = `/usr/bin/basename $info .info`
# create package directory
set pkg = ${destDir}/${root}.pkg
echo Generating Installer package $pkg ...
if ( -e $pkg ) /bin/rm -rf $pkg
/bin/mkdir -p -m 755 $pkg
# (gnu)tar/pax and compress root directory to package archive
echo -n " creating package archive ... "
if ( $?fflag ) then
set pkgTop = ${rootDir:t}
set parent = ${rootDir:h}
if ( "$parent" == "$pkgTop" ) set parent = "."
else
set parent = $rootDir
set pkgTop = .
endif
if ( $?usetar ) then
set pkgArchive = $pkg/$root.tar.Z
(cd $parent; $tar -w $pkgTop) | /usr/bin/compress -f -c > $pkgArchive
else if ( $?usegnutar ) then
set pkgArchive = $pkg/$root.tar.gz
(cd $parent; $gnutar zcf $pkgArchive $pkgTop)
else
set pkgArchive = $pkg/$root.pax.gz
(cd $parent; $pax -w -z -x cpio $pkgTop) > $pkgArchive
endif
/bin/chmod 444 $pkgArchive
echo done.
# copy info file to package
set pkgInfo = $pkg/$root.info
echo -n " copying ${info:t} ... "
/bin/cp $info $pkgInfo
/bin/chmod 444 $pkgInfo
echo done.
# copy tiff file to package
if ( $?tiff ) then
set pkgTiff = $pkg/$root.tiff
echo -n " copying ${tiff:t} ... "
/bin/cp $tiff $pkgTiff
/bin/chmod 444 $pkgTiff
echo done.
endif
# copy resources to package
if ( $?resDir ) then
echo -n " copying ${resDir:t} ... "
# don't want to see push/pop output
pushd $resDir > /dev/null
# get lists of resources. We'll want to change
# permissions on just these things later.
set directoriesInResDir = `find . -type d`
set filesInResDir = `find . -type f`
popd > /dev/null
# copy the resource directory contents into the package directory
foreach resFile (`ls $resDir`)
cp -r $resDir/$resFile $pkg
end
pushd $pkg > /dev/null
# Change all directories to +r+x, except the package
# directory itself
foreach resFileItem ($directoriesInResDir)
if ( $resFileItem != "." ) then
chmod 555 $resFileItem
endif
end
# change all flat files to read only
foreach resFileItem ($filesInResDir)
chmod 444 $resFileItem
end
popd > /dev/null
echo done.
endif
# generate bom file
set pkgBom = $pkg/$root.bom
echo -n " generating bom file ... "
/bin/rm -f $pkgBom
if ( $?fflag ) then
$mkbom $parent $pkgBom >& /dev/null
else
$mkbom $rootDir $pkgBom >& /dev/null
endif
/bin/chmod 444 $pkgArchive
echo done.
# generate sizes file
set pkgSizes = $pkg/$root.sizes
echo -n " generating sizes file ... "
# compute number of files in package
set numFiles = `$lsbom -s $pkgBom | /usr/bin/wc -l`
# compute package size when compressed
@ compressedSize = `/usr/bin/du -k -s $pkg | $awk '{print $1}'`
@ compressedSize += 3 # add 1KB each for sizes, location, status files
@ infoSize = `/bin/ls -s $pkgInfo | $awk '{print $1}'`
@ bomSize = `/bin/ls -s $pkgBom | $awk '{print $1}'`
if ( $?tiff ) then
@ tiffSize = `/bin/ls -s $pkgTiff | $awk '{print $1}'`
else
@ tiffSize = 0
endif
@ installedSize = `/usr/bin/du -k -s $rootDir | $awk '{print $1}'`
@ installedSize += $infoSize + $bomSize + $tiffSize + 3
# echo size parameters to sizes file
echo NumFiles $numFiles > $pkgSizes
echo InstalledSize $installedSize >> $pkgSizes
echo CompressedSize $compressedSize >> $pkgSizes
echo done.
echo " ... finished generating $pkg."
exit(0)
# end package
#!/bin/csh
###
## This script installs the stationary
###
sudo -v -p "Please enter the administrator password: "
# project templates
sudo /Developer/Tools/CpMac -r "Project Stationary/SDL Application" "/Developer/ProjectBuilder Extras/Project Templates/Application/"
sudo /Developer/Tools/CpMac -r "Project Stationary/SDL Cocoa Application" "/Developer/ProjectBuilder Extras/Project Templates/Application/"
sudo /Developer/Tools/CpMac -r "Project Stationary/SDL Custom Cocoa Application" "/Developer/ProjectBuilder Extras/Project Templates/Application/"
sudo /Developer/Tools/CpMac -r "Project Stationary/SDL OpenGL Application" "/Developer/ProjectBuilder Extras/Project Templates/Application/"
# target templates
sudo mkdir -p "/Developer/ProjectBuilder Extras/Target Templates/SDL"
sudo /Developer/Tools/CpMac -r "Project Stationary/Application.trgttmpl" "/Developer/ProjectBuilder Extras/Target Templates/SDL"
#!/bin/csh
###
## This script removes the Developer SDL package
###
setenv HOME_DIR ~
sudo -v -p "Enter administrator password to remove SDL: "
sudo rm -rf "$HOME_DIR/Library/Frameworks/SDL.framework"
# will only remove the Frameworks dir if empty (since we put it there)
sudo rmdir "$HOME_DIR/Library/Frameworks"
sudo rm -r "$HOME_DIR/Readme SDL Developer.txt"
sudo rm -r "/Developer/Documentation/SDL"
sudo rm -r "/Developer/Documentation/ManPages/man3/SDL"*
sudo rm -r "/Developer/ProjectBuilder Extras/Project Templates/Application/SDL Application"
sudo rm -r "/Developer/ProjectBuilder Extras/Project Templates/Application/SDL Cocoa Application"
sudo rm -r "/Developer/ProjectBuilder Extras/Project Templates/Application/SDL Custom Cocoa Application"
sudo rm -r "/Developer/ProjectBuilder Extras/Project Templates/Application/SDL OpenGL Application"
sudo rm -r "/Developer/ProjectBuilder Extras/Target Templates/SDL"
sudo rm -r "/Library/Receipts/SDL-devel.pkg"
# rebuild apropos database
sudo /usr/libexec/makewhatis
unsetenv HOME_DIR
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment