imported source from Mupen64Plus SVN repository rev 1416. removed many non-core items. restructured directories for mupen64plus v2.0 project

This commit is contained in:
Richard Goedeken 2009-10-02 00:10:43 -04:00
commit 4fcb71627c
316 changed files with 121948 additions and 0 deletions

69
LICENSES Normal file
View file

@ -0,0 +1,69 @@
Mupen64Plus LICENSES
--------------------
Mupen64Plus is licensed under the GNU General Public License version 2. Please see the
included doc/gpl-license file for the terms and conditions of the GNU General Public License.
The authors of Mupen64Plus are:
* Richard Goedeken (Richard42)
* John Chadwick (NMN)
* James Hood (Ebenblues)
* Scott Gorman (okaygo)
* Scott Knauert (Tillin9)
* Jesse Dean (DarkJezter)
* Louai Al-Khanji (slougi)
* Bob Forder (orbitaldecay)
* Jason Espinosa (hasone)
* HyperHacker
* and others.
Mupen64Plus is based on GPL-licensed source code from Mupen64 v0.5, originally written by:
* Hacktarux
* Dave2001
* Zilmar
* Gregor Anich (Blight)
* Juha Luotio (JttL)
* and others.
The Glide64 video plugin is GPL-licensed and was originally written by:
* Dave2001
* Gonetz
* Gugaman
* Hacktarux
* Josh
* Ziggy
* Günther
The icons included with Glide64 are derived from GPL2-licensed Gnome SVG icons.
The Rice Video plugin is GPL-licensed and was originally written by:
* Rice1964
* Mudlord
Mupen64Plus includes a GPL-license demo rom written by:
* Marshallh
The OGLFT library used for the On-Screen Display is based on GPL/LGPL-licensed code Copyright 2002 lignum Computing. Please see the included doc/lgpl-license file for the terms and conditions of the GNU Lesser General Public License. More information about this library is available at the following websites:
- http://oglft.sourceforge.net/index.html
- http://directory.fsf.org/project/OGLFT/
Additionally, mupen includes a number of components licensed under other OSI approved licenses:
The GPL license:
* LZMA decoder by Igor Pavlov and Lasse Collin
* 7zip SDK simple C decoder by Igor Pavlov
The BSD license:
* minizip by Gilles Vollant and others, ftp://ftp.info-zip.org/pub/infozip/license.html
The zlib/libpng license:
* Adler-32 by Mark Adler
* libpng by Glenn Randers-Pehrson, Peter Deutsch, and Guy Eric Schalnat
* MD5 hasing code by Peter Deutsch
The (zlib-like) bzip2 license:
* libbzip2 by Julian R Seward. Please see the included doc/bzip2-license file for the terms and conditions of the bzip2 license.
The Bitstream license:
* The font(s) in the fonts/ directory are licensed by the Bitstream license. Please see the included doc/font-license file for the terms and conditions of the bzip2 license.

184
README Normal file
View file

@ -0,0 +1,184 @@
Mupen64Plus README
------------------
The most current version of this README and more documentation can be found on the Mupen64Plus wiki:
http://code.google.com/p/mupen64plus/wiki/README
Mupen64Plus is based off of mupen64, originally created by Hacktarux. The Mupen64Plus package contains the mupen64 emulator program (renamed mupen64plus) plus graphics, sound, input, and RSP plugins.
README Sections
1. Requirements for building or running Mupen64Plus
2. Building From Source
3. Installation
4. Multi-user Support
5. Key Commands In Emulator
6. Known Issues
1. Requirements and Pre-requisites
----------------------------------
*Binary Package Requirements*
- GTK2 libraries (unless built from source with GUI=NONE - see note)
- SDL 1.2
- SDL_ttf
- libpng
- freetype 2
- zlib
*Source Build Requirements*
In addition to the binary libraries, the following packages are required if you build Mupen64Plus from source:
- GNU C and C++ compiler, libraries, and headers
- GNU make
- Development packages for all the libraries above
- libsamplerate (aka Secret Rabbit Code)
Most of these pre-requisites are installed by default, but some are more uncommon. Here is an example for adding the 'SDL_ttf' development packages on Fedora systems:
# yum install SDL_ttf SDL_ttf-devel
And on Debian systems:
# apt-get install libsdl-ttf2.0-0 libsdl-ttf2.0-dev
There are also a number of packages required for specific options:
- libsamplerate (aka Secret Rabbit Code for higher quality audio)
- binutils-dev (dis-asm.h for debugger)
- Qt4 libraries and headers (for Qt4 GUI)
2. Building From Source
-----------------------
If you downloaded the binary distribution of Mupen64Plus, skip to the Installation section. To build the source distribution, unzip and cd into the source directory, then build using make:
$ unzip Mupen64Plus-x-y-z-src.zip
$ cd Mupen64Plus-x-y-z-src
$ make all
Type 'make' by itself to view all available build options:
$ make
Mupen64Plus makefile.
Targets:
all == Build Mupen64Plus and all plugins
clean == remove object files
rebuild == clean and re-build all
install == Install Mupen64Plus and all plugins
uninstall == Uninstall Mupen64Plus and all plugins
Options:
BITS=32 == build 32-bit binaries on 64-bit machine
LIRC=1 == enable LIRC support
NO_RESAMP=1 == disable libsamplerate support in jttl_audio
NO_ASM=1 == build without assembly (no dynamic recompiler or MMX/SSE code)
GUI=NONE == build without GUI support
GUI=GTK2 == build GTK2 GUI support (default)
GUI=QT4 == build QT4 GUI support
Install Options:
PREFIX=path == install/uninstall prefix (default: /usr/local/)
SHAREDIR=path == path to install shared data (default: PREFIX/share/mupen64plus/)
BINDIR=path == path to install mupen64plus binary (default: PREFIX/bin/)
LIBDIR=path == path to install plugin libs (default: SHAREDIR/plugins/)
MANDIR=path == path to install manual files (default: PREFIX/man/man1/)
Debugging Options:
PROFILE=1 == build gprof instrumentation into binaries for profiling
DBGSYM=1 == add debugging symbols to binaries
DBG=1 == build graphical debugger
DBG_CORE=1 == print debugging info in r4300 core
DBG_COUNT=1 == print R4300 instruction count totals (64-bit dynarec only)
DBG_COMPARE=1 == enable core-synchronized r4300 debugging
DBG_PROFILE=1 == dump profiling data for r4300 dynarec to data file
Previous to version 1.3, building mupen64 built two programs: mupen64 and mupen64_nogui. mupen64 had a gtk graphical frontend including a rom browser. mupen64_nogui contained no graphical frontend and all options were specified via the commandline. As of version 1.3, the mupen64 and mupen64_nogui codebases have been combined. Now, building mupen64plus results in one executable called mupen64plus that can either be run with a gui (default) or without a gui, by specifying --nogui at the commandline. For backwards compatability, if a symbolic link to the mupen64plus executable called mupen64plus_nogui (or mupen64_nogui) is created, running the mupen64plus_nogui symlink is equivalent to running mupen64plus with the --nogui flag.
NOTE: If you want to build a nogui-only version of mupen64plus, i.e. without gtk+ dependencies, pass the GUI=NONE option to make, like this:
$ make GUI=NONE all
Also note, that this only disables gtk+ dependencies where avaliable. Currently (August, 2008) some plugins such as rice video and glide64 must be built with gtk. This is a known issue and being addressed.
3. Installation
---------------
*Binary Distribution*
To install the binary distribution of Mupen64Plus, su to root and run the provided install.sh script:
$ su
# ./install.sh
# exit
$
The install script will copy the executable to /usr/local/bin and a directory called /usr/local/share/mupen64plus will be created to hold plugins and other files used by mupen64plus.
NOTE: By default, install.sh uses /usr/local for the install prefix. Although the user can specify an alternate prefix to install.sh at the commandline, the mupen64plus binary was compiled to look for the install directory in /usr/local, so specifying an alternate prefix to install.sh will cause problems (mupen64plus will not find the install directory). If you want to use a prefix other than /usr/local, you will have to download the source package and build with the PREFIX option (see below).
*Source Distribution*
After building mupen64plus and all plugins, su to root and type 'make install' to install Mupen64Plus. The install process will copy the executable to $PREFIX/bin and a directory called $PREFIX/share/mupen64plus will be created to hold plugins and other files used by mupen64plus. By default, PREFIX is set to /usr/local. This can be changed by passing the PREFIX option to make. NOTE: you must pass the prefix, when building AND installing. For example, to install mupen64plus to /usr, do this:
$ make PREFIX=/usr all
$ su
# make PREFIX=/usr install
# exit
$
4. Multi-user Support
---------------------
As of version 1.3, Mupen64Plus now has support for multi-user environments.
The mupen64plus program will look for user configuration files in a .mupen64plus directory in the user's home directory. If the directory does not exist, it will be created and a default mupen64plus.conf file will be written to that directory on exit. If desired, an alternate config directory can be specified using the --configdir commandline option.
By default, the mupen64plus program will look for plugins, icons, and language translation files in the install directory $PREFIX/share/mupen64plus (see Installation section for details). If this directory does not exist, mupen64plus will try to use the current working directory. An alternate installation directory can be specified using the --installdir commandline option.
Run 'mupen64plus --help' for a complete list of commandline options:
$ mupen64plus --help
Usage: mupen64plus [parameter(s)] [romfile]
Parameters:
--nogui : do not display GUI.
--noask : do not prompt user if rom file is hacked or a bad dump.
--noosd : disable onscreen display.
--fullscreen : turn fullscreen mode on.
--romnumber (number) : specify which rom in romfile, if multirom archive.
--gfx (plugin-file) : use gfx plugin given by (path)
--audio (plugin-file) : use audio plugin given by (path)
--input (plugin-file) : use input plugin given by (path)
--rsp (plugin-file) : use rsp plugin given by (path)
--emumode (mode) : set emu mode to: 0=Interpreter 1=DynaRec 2=Pure Interpreter
--sshotdir (dir) : set screenshot directory to (dir)
--configdir (dir) : force config dir (must contain mupen64plus.conf)
--installdir (dir) : force install dir (place to look for plugins, icons, lang, etc)
--testshots (list) : take screenshots at frames given in comma-separated (list), then quit
-h, --help : see this help message
5. Key Commands In Emulator
---------------------------
The keys or joystick/mouse inputs which will be mapped to the N64 controller for playing the games are determined by the input plugin. The emulator core also supports several key commands during emulation, which are fixed and cannot be changed. They are:
Escape == Quit the emulator
0-9 == Select virtual 'slot' for save/load state (F5 and F7) commands
F5 == Save emulator state
F7 == Load emulator state
F9 == Reset emulator
F10 == slow down emulator by 5%
F11 == speed up emulator by 5%
F12 == take screenshot
Alt-Enter == Toggle between windowed and fullscreen (may not be supported by all video plugins)
Pause == Pause on/off
m or M == Mute/unmute sound
/ or ? == single frame advance while paused
F == Fast Forward (playback at 250% normal speed while F key is pressed)
[ == Decrease volume
] == Increase volume
6. Known Issues
-----------------------
As of March 2008, the RiceVideoLinux plugin may be unstable with users of the open source drivers for an ATI Radeon graphics adapter when fog is enabled. If you have are using the open source Radeon driver, you should set the "EnableFog" value in RiceVideo.cfg to 0.

473
RELEASE Normal file
View file

@ -0,0 +1,473 @@
Mupen64Plus v1.5 - January 4, 2009
----------------------------------
Major New Features:
- support for Macintosh OSX platform with Intel CPUs
- Qt4 GUI by slougi, Tillin9, and others
- Rom Cache System (r636, others), by Tillin9, Okaygo, and Hasone.
Minor New Features:
- r1235: Debugger: memory breakpoint speedup
- r1170-1178,1181: QT GUI: translations for English, Norwegian, German, and Dutch
- r1155: Use configurable key commands for special emulator functions
- r1134: got our own custom test ROM, courtesy of Marshallh
- r1046: debugger: new r4300 disassembler from ZZT32
- r829: jttl_audio: added GTK GUI configuration dialog
- r793: soft reset (hit F9)
- r782: jttl_audio: both SDL-based and OSS-based volume control methods are now supported
- r765: added savestate conversion tool to be able to load pre-v1.5 savestate files
- r711: 7-zip support
- r692: Multi-file Zip support
- r667: GTK GUI: user-configurable columns in ROM browser
- r659: LZMA archive support
- r638: BZip2 archive support
- r629,634: LIRC - added support for speedup, slowdown, pause, and frame advance
Updates:
- r1007,1032: GTK GUI improvements
- r970, 1019: use SDL threading support instead of pthreads
- r935,938,940: Gtk GUI updates for core and Jttl
- r642,655-657,663,664,747,759,761-763,768-770,774,775,780,781,783,786,787,825,828,931: mupen64plus.ini updates: Good Names, stars, EEPROM types, players, rumble support
Bugfixes:
- r1247: rsp_hle: memory overwrite bug with Zelda:OOT
- r1234: out of bound array bug in memory access function handlers
- r1222,1223,1228,1229: Debugger fixes
- r1183: Blight Input: sometimes the axis direction would flip
- r1133: Added stop rumble to load savestate, fixes issue 165
- r1077: GTK GUI bugfixes
- r1063: rice video: crash in MMX/SSE checking functions
- r800: logical error in strcpy loop in util.c
- r798: small bugfixes in blight_input: 1. only save config file after running config dialog, not every time DLL is closed. 2. If rumble is not available on a controller, don't allow user to switch between rumble and mempack. 3. If rumble is selected in config file but not available on a controller, select mempack instead.
- r789: 3 glN64 bugfixes (segfaults on a 64-bit system in Perfect Dark): prevent clamp values from being negative, handle TMEM wrap-arounds from wacky height/line values in texture cache load and texture CRC functions
- r788: rice video: add checks for uint32 height/width parameters which can be negative, causing segfault on 64-bit systems
- r784: 64-bit problem causing GUI crashes - gotta save/restore all the callee-saved registers around the dynarec
- r758: fixed some savestate problems
- r748: Fixed 64-bit dynarec crash in genj_idle() and genjal_idle()
- r715: Bugfixes thanks to Valgrind. Two using strcpy with source and destination overlay, i.e. strcpy(p,p+1)
- r700: set ScreenUpdateSetting=1 in rice video ini file for Conkers BFD
- r694: require bash shell scripting for install.sh
- r686: fixed OSD crash bug after running a game, disabling OSD, then running another game
- r684: OGLFT measuring functions were taking a huge chunk of CPU time. Refactored code to measure only once and store the line size and the message sizes instead of re-measuring all the time. This eliminated nearly all of the OSD overhead on my PC
- r681: Refactored OGLFT to do color setting outside of glyph compiling, so the OSD fading doesnt force bitmaps to be continually recreated with calls to renderGlyph. Seems to have cut the excessive cpu usage of the OSD about by half
- r680: removed many unused classes from OGLFT font library code
- r676: bugfix in my BYTESWAP macros
- r674: Removed glide64/Tmem_nasm.asm source file and the project dependency on nasm/yasm assemblers
- r673: removed inline assembly sections in rdp_loadblock and rdp_loadtile, including their dependency on functions in Tmem_nasm.asm. Replaced with new C code. This fixes a segfault on some 64-bit source builds
- r669: string function causing crash on 64-bit linux
- r667: issue #88 - added basic view menu in GTK GUI
- r628,633: Small patch to get glide64.so to compile with O3 optimizations
- r622: Fixed segfault in Glide64 as per issue 133
- r619: fix LIRC build to integrate w/ new screenshot mechanism
- r608: another couple of memory leak fixes from Tub, in main/config.c
- r605: fix from Tub for free() bug in main/util.c/list_delete()
- r587: issue #111: close screenshot file after saving
Mupen64Plus v1.4 - June 14, 2008
-----------------------------------
- New feature: Graphical debugger for R4300 core
- New feature: On Screen Display
- New feature: KDE4 GUI (experimental)
- New feature: cheat system with Gameshark codes
- New feature: search/filter box in GTK GUI
- New feature: Single frame advance
- New feature: adjust emulator playback speed up or down in 5% increments
- New feature: Rumble Pak support with force feedback
- New feature: Map emulator functions (fullscreen, stop emulation, etc) to joystick buttons or axis movements.
- New feature: Volume up/down
- Blight Input: Individually configure each direction of X and Y axis, which allows inverting the axis
- JTTL_Audio: libsamplerate support for high quality audio resampling
- GTK GUI: Removed second status bar which was not used
- GTK GUI: Implemented accelerator keys
- GTK GUI: Replaced custom directory browser with GTK file chooser
- GTK GUI: numerous small changes and fixes
- Added Mupen64Plus 'man' (manual) page
- Removed mupen64_audio plugin, as it was unnecessary and mostly broken
- Added NoMemoryExpansion parameter to emulate 4MB console; fixes some games
- Overhaul of rom handling functions; numerous small fixes
- Bugfix: Removed NoAudioDelay core option to resolve issue #48
- Bugfix: check for stopped state in dynarec jump function, to fix unresponsive emulator when game gets stuck in loop
- Bugfix: GTK GUI: #6 - if a ROM is selected in the ROM browser and 'play' is pressed, emulation will start
- Bugfix: GTK GUI: #62 - ROM browser column sorting works
- Bugfix: Rice Video: Support hi-res textures with different scale factors for X and Y
- Bugfix: Blight Input: don't use 100% CPU in configuration dialog
Mupen64Plus v1.3 - March 29th, 2008
-----------------------------------
- New feature: Glide64 video plugin for 32-bit and 64-bit, renamed project Mupen64Plus
- New feature: Combine mupen64 and mupen64_nogui into a single binary
- New feature: ability to change icon size
- New feature: support different directories for install (plugins, icons, etc) and config (save games, config files)
- New feature: support for creating/using ~/.mupen64plus dir for storing user data
- New feature: support for installation via "make install" or "./install.sh"
- New feature: support for plugins given via command line option in GUI mode
- New feature: config dialog checkbox to toggle "noask" setting
- New feature: pause/continue functionality with LIRC
- Removed messagebox utility and replaced it with cleaner alert_message/confirm_message calls
- GTK GUI: Set parent window for all popups so WM will center popup windows over the main gui window
- Added README file with information about usage of Mupen64Plus and plugins
- Removed mupen64_soft_gfx, as it didn't work
- Removed Win32 code from RSP HLE plugin,
- Change fullscreen hotkey to Alt+Enter
- Only plugin filenames (not paths) are stored in the mupen64plus.conf file
- Modified pre.mk and glide64 makefile to auto-select yasm or nasm
- Bugfix: Rice Video: Make configuration during gameplay possible again
- Bugfix: many compiler warnings and errors in Glide64
- Bugfix: segfault in Goldeneye and Perfect Dark for 64-bit dynarec
- Bugfix: 64-bit dynarec bug in genld()
- Bugfix: buffer overflow allocating temp strings for basename/dirname
- Bugfix: GTK GUI: Exiting via File -> Exit wasn't writing out config file to disk
- Bugfix: GTK GUI: "About" menu does not pop up while emulation is running
- Bugfix: Glide64: Refactored a bunch of inline asm code with potential bugs
- Bugfix: Added plugin error checking before emulator is started
- Bugfix: Logo not loading in "about" window
- Bugfix: Segfault in plugin_scan_directory()
- Bugfix: ROM pause/continue while playing
- Bugfix: Too many dialog windows when loading a bad dump or hacked rom
- Bugfix: Closing emulation window now stops emulator
- Bugfix: Rice Video: config dialog bug, now it displays proper resolution
- Bugfix: GTK GUI: "Toolbar Style" now works
- Bugfix: Glide64: changed inline asm label syntax, for compatibility with gcc 4.3.0
- Bugfix: Many other minor bug fixes, GTK warnings fixes, translation corrections, etc
Mupen64-amd64 v1.2 - February 10th, 2008
----------------------------------------
- New feature: Dynamic Recompiler for 64-bit
- New feature: New ROM Browser for Mupen64 GUI build
- New feature: LIRC remote control integration for NOGUI build
- Added R4300 instruction counting capability to 64-bit Dynarec
- Added R4300 profile data output for 32-bit and 64-bit dynamic recompilers
- TLB Optimization / bugfix
- Revised makefiles to support PPC builds
- Bugfix: memory leaks in mupenIniApi.c
- Bugfix: corrupted filenames being saved to disk for mupen64.ini
- Bugfix: crash in jttl_audio
- Bugfix: crash when running game from gui after first time
- Bugfix: spurious noise blip when running game from gui after first time
RiceVideoLinux v1.2 - February 10th, 2008
-----------------------------------------
- Revised makefiles to support PPC builds
- Added more logging to hi-res texture loading
- Bugfix: Texture dumping now works
Mupen64-amd64 v1.1 - December 9th, 2007
----------------------------------------
- New icons for GTK GUI
- Removed GTK 1.2 GUI build; GTK 2.0 is required now
- Added file pointer checking for frwite() calls and error logging
- Added scrolling to the the rom list widget
- Added main/version.h file to store Mupen64-amd64 package version
- Print joystick numbers along with names in blight input to tell multiple devices apart
- Merged okaygo's TLB hack for Goldeneye from Mupen64++
- Rework GTK GUI config dialog; fixed bugs in ROM directory list
- Bugfix: segfault from playing same game twice in a row from GUI
- Bugfix: segfault from fwrite() failure in dma_pi_read in memory/dma.c
- Bugfix: exit properly instead of segfault after dyna_stop is called
- Bugfix: blight input: SDL_PumpEvents must be called from thread which initialized SDL video mode
- Bugfix: blight_input: joystick handling caused glitch in config dialog
- Bugfix: makefile: 32-bit CFLAGS must be used when doing 32-bit build on 64-bit machine
- Bugfix: Added makefile to root folder for building releases
RiceVideoLinux v1.1 - December 9th, 2007
-----------------------------------------
- Removed configure script and config.h; added SDL and GTK library checking and handling in main makefile
- Added capability to load 24-bit PNG files into 32-bit texture buffer
- Added more error logging to hi-res texture code
- Added combiner type logging to DeviceBuilder class
- Bugfix: added quotes around BUILD_NUMBER to prevent segfault on About box
- Bugfix: SSE vertex lighting inline ASM code was incorrect
- Bugfix: makefile: 32-bit CFLAGS must be used when doing 32-bit build on 64-bit machine
- Bugfix: segfault with hi-res textures (incorrect scale factor used when creating memory buffer)
- Bugfix: modified DrawSprite function in RenderExt.cpp to eliminate gaps between textures in Puyo Puyo 4
- Bugfix: opengl error in ApplyTextureFilter due to wrong enum type
- Bugfix: Simplified fragment program and removed ATTRIB parameters to fix problems on Intel X3100 hardware
Mupen64-amd64 v1.0 - November 12th, 2007
----------------------------------------
- Forked from Mupen64 v0.5
- Ported to 64-bit architecture by NMN/SirRichard42
- Fixed texture cache problem in glN64
- Print more information during plugin loading process
- Added blight input config file for logitech dual-action style controllers
- Added SDL_GL_SWAP_CONTROL attribute in glN64 to prevent tearing
- Changed glVoids to voids due to strange compilation bug that occurs on certain systems
- Totally refactored makefiles; now plugins are built as sub-modules
- Better logging for R4300 core selection, disallow Dynamic Recompilation for 64-bit builds at compile time
- Set execstack attribute for all mupen64 binaries, to prevent segfault when Dynamic Recompilation is used
- Lots of code cleanup
- Removed 'multi-user' mode of operation
- Removed 'configure' script and config.h file
- Refactored plugin loading code in _nogui build, much more user-friendly now
- Added comments and SDL shutdown code to main.c
- Bugfix: fixed memory leaks in plugin.c
- Bugfix: strcpy in main/gui_gtk/config.c should not copy overlapping strings
- Bugfix: blight audio: only close down audio and timer sub-systems when exiting
RiceVideoLinux v1.0 - November 12th, 2007
-----------------------------------------
- Forked from RiceVideo 6.1.1 beta 10
- Ported to Linux by Hacktarux
- Ported to 64-bit architecture by SirRichard42
- Added rudimentary debug support for Linux
- Merged all Non-Win32 changes from Mudlord's RiceVideo SVN 6.1.3.2 (mostly hi-res texture load/save)
- Added more logging information
- Tweaked Z-Buffer and Z-Bias (Decal Z-mode) handling to be like that of D3D renderer
- Added screenshot capability for Linux build
- Cleaned up Makefile, added 32-bit and debug build modes, help info
- Removed all Win32 code, massive cleanup
- Fixed uninitialized data members in several places
- Bugfix: crash in Banjo Kazooie - dont delete cached texture if its currently loaded in the g_textures array
- Bugfix: crash in Carmaggedon caused by illegal values in texture loading function
- Bugfix: screen flashes in Mario Kart and Kirby64, tweaked .ini ScreenUpdateSetting
what's new in 0.5:
- Core
+ detection of invalid code cache for ambiguous region now use
adler32 (faster than previous algorithm)
+ fixed a bug in ini file compression
+ added support for framebuffer effects functions : these functions
are there to help the plugins that support framebuffer extension
to zilmar's spec. These functions are based on rice's idea. I've
worked closely with Gonetz to implement these and the only plugin
that support this feature is Glide64 0.8 (when option is enabled).
Many hard to emulate framebuffer effects are supported by this
feature. Mariokart's monitor in first race running fullspeed and
puzzle effect in banjo's intro are two examples that i can think
about but there are many more.
+ detection of VI interupt rate works on weird country codes
+ better detection of self modifying code in dma
+ warnings fixed on new gcc versions
+ rsp's dmem and imem are now contiguous in PC's memory (some windows
plugins were requiring this)
+ slightly improved audio timing
+ better detection of self modifying code when accessing memory
through TLB
+ fixed a bug in RSP memory write
+ reading from ai_current_delay register should work even when
Count register is looping
+ in interpreter code : fixed a bug in jump opcodes (detection
of exceptions in delay slot in some rare conditions)
+ the event scheduler has better support for Count register loops
+ better AI interrupt handling (for musyx games for example)
+ jump opcodes changed in pure interpreter core so that they are
timed exactly like on the other cores (easier to debug this way)
+ fixed a bug when accessing memory through invalid TLB in LDL, LDR,
LWL, LWR, SWL, SDL, SDR, SWR opcodes
+ added LL, SC opcodes
+ two consecutive jump opcodes doesn't crash in the dynarec (result
is undefined according to the r4300 manual but some games are doing
it).
+ basic implementation of fpu opcodes in dynarec
+ division by 0 in FPU opcodes is returning NaN
+ all jump opcodes implemented in the dynarec
+ faster inside function loop with dynarec (register cache)
+ various bug fixes in dynarec opcodes
+ memory access improvements in dynarec
- Linux version
+ GUI and all plugins have been switched to GKT2 (all old plugins
should be recompiled for GTK2)
+ detection of GTK 1.2 or GTK 2 in the configure script : if both
are detected, the user can choose which one to use
+ configure script rewritten so that it's compatible with standard
unix shells instead of bash
+ much improved multi-user install support : if multi-user is choosen
in configure script, mupen64 should be compiled ("make") and installed
("make install"). Then, when a user launch mupen64, it will create
automatically a .mupen64 folder in his home and put all required files
there.
+ language saved and restored correctly when quitting mupen64
+ the console version (mupen64_nogui) has command line support and can
read settings from the gui version config file thanks to jogibear's patch
+ autoincrement save slot option when quick saving (thanks to jdratlif's
patch)
+ speed limiter in the core
+ support for plugin configuration changes when a rom is running
- Windows version
+ autoincrement save slot option when quick saving (thanks to jdratlif's
patch)
+ stabilty improvements on the GUI (when closing a rom for example)
+ added support for readScreen function to support avi recording feature
on plugins that don't use opengl or directx (ie: glide64...)
- Sound plugin
+ thread synchronisation improvements
what's new in 0.4:
- A totally new core based on a dynamic recompiler with register caching,
it doesn't compile the fpu yet but it's already much faster compared
to older versions of mupen64 :)
- Self mod code detection has been improved and emulation is faster now
- A lot of little fixes that should improve compaibitlity quite a bit
- A new video recording feature (record in own mupen64 movie format that
can be converted later into a standard avi file)
- The windows GUI has been redesigned by linker
- A lot of other things i forgot... sorry :P
what's new in 0.3:
- All versions
+ General speed up, 10-20 in most games
Save states long loading time fixed, now it should load in less than
a second
+ sound sync is far more accurate now (thanks to Azimer)
it makes some additionnal games booting
+ 64dd detection to fix F-zero
+ a little idle loops bug has been fixed
- Windows port
+ Configuration and initialisation of plugins now can be done prior
running a rom. It fixes numerous configuration issues with plugins as
well
+ Recent roms menu with option to clear and freeze
+ Command line arguments support with option to run in GUIless mode,
compatible with 1964 options, read more about it in pdf
+ Choosing and saving of plugins used per game, access it from Rom
Properties
+ Reset rom menu added
+ Speed Modifier to allow game to run at any speed between 1-200% of
original
Use + and - to increase, decrease it, while in the game. And . to
return to 100%.
+ Start game in fullscreen option
+ Pause emulation when idle fixes
+ Global plugin settings (should be unchecked if you want to use plugins
per game option from rom properties)
+ Switch on/off ToolBar (ALT+T) and Status Bar (ALT+S), useful when
plugin sets wrong resolution in windowed mode, and for those who hate
toolbars :)
+ Selection of columns to show in rom browser
+ English language template updated
+ Support for debugview by linker
Put dll in the main folder, if you want to see log output
+ Tonnes of little fixes...
- RSP hle plugin
+ mario kart sound fixed
what's new in 0.2:
- Core
+ better sound plugin integration
+ optimizations in interrupt handling
+ a totally new interpreter core (half of a compiler => far much faster)
it caches the opcodes when they're decoded
+ self modifying code detection code for the new interpreter and the
compiler when it'll be implemented
+ RSP plugin integration
+ pif2 implemented for banjo tooie
- RSP hle plugin
+ the first version of this plugin based on uhle sound code
+ 3 main audio ucode implemented (based on uhle)
+ mp3 ucode implemented (direct asm to c translation)
+ jpeg ucode (direct asm to c translation)
+ boot code for btooie and dk
+ on windows: ability to use the hle part of a sound plugin while using another
to output the sound (example: using hle from Azimer's plugin and
ouputing with Jabo's plugin)
This option doesn't work with azimer's audio plugin 0.3 version
Please see more info about RSP and this feature in
readme.pdf in chapter "3.3.2 Configuration"
- Sound Plugin for linux
+ a new lle sound plugin that's using the OSS api
- Windows port
+ Major cleanup of gui code and bug fixes
+ Gui improvements in rombrowser
+ Gui changes in configuration sheets and about dialog
+ Updates in language support and template
Dialog with proper credits to translators ,send us your translations now :)
+ Support for screenshots from menu (depends on video plugin) (F3 key)
+ Added some shortcuts for gui functions to accelerators
+ Option to choose directories of plugins,screenshots and save states in sheets
+ Auto limit VI/s according to game region (60 or 50)
+ Ini updated with latest N64 releases
+ ...
what's new in 0.1:
- Core
+ sram bug zelda oot fixed
+ flashram is working
+ a new interupt system that'll enabled
more accurate timing in the future but can cause
some compatibility issues right now
+ bug in DMULT/DMULTU opcode fixed
+ some optimizations in jump instructions
+ sound plugins support implemented but not well supported
use sound at your own risk :D
+ a clean tlb implementation
+ tlb exception handled correctly
+ compressed save states with slots
+ the whole memory map has been almost completes
+ newly emulated games include goldeneye, conker's bad fur day
and perfect dark :)
- Windows port
+ Zipped Cache to Rom Browser
+ Multy slot save states
+ Md5 based Ini
+ Rom properties dialog
+ Sound support
+ Config plugins dialog
Allows you to chose and configure plugins
+ Multy directories in rom browser
with recursion as an option
+ Audit roms dialog
+ Many bugs fixed and minor features added
+ ...
- Linux port
+ A new gui made by Blight very similar to the windows one
Everything in the gui is new so one line many new things ;)
what's new in 0.0.90:
- this is a huge update many games are playable now :) but only pure
interpreter work on this release it will be fixed in the future
but currently i am only working on compatibility
- i have totally rewritten the pure interpreter core
- nearly all missing opcodes have been added
- interrupt code has been totally rewritten and should never crash now
- tlb code rewritten, it's faster even if it's not perfect yet
- some fpu opcodes have been debugged
- fpu precision emulation improvements (only for x86 processors)
- many bugs to allow port to big endian processors
- fixed endianness when cpu write directly to pif ram
- rewritten dma code for pure interpreter (with this core it always
work now )
- update dp status register when a display list has been processed
it fixed a lot of roms
- implemented 8Mb RDRAM
- implemented memory pack, eeprom, sram (thanks to Jabo and Zilmar
for the pj64 source code on this part)
- flashram is partially implemented (it's enough to get zelda2 starting)
- a new debugger for linux was made by DavFR (it's for linux and
it uses gtk library)
- zip file support
- a new gui for windows port has been made by ShadowPri, it features
a rom browser with *classic* UHLE look,multy directories support ,
a toolbar (thx Schibo for help on it :), multy languages support,
saving of configuration, ....
- and much more ;)
what's new in 0.0.4:
- a new pure interpreter core (better compatibility but really slow,
will help to debug in the future)
- input plugins (a basic keyboard plugin is included and the obsidian
joystick plugin )
- coprocessor unusable exception implemented
- gui for windows
- again many little bugs i can't remember fixed
- automatic comparison between two cores via a pipe (for debugging)
- ....
what's new in 0.0.3:
- unaligned dma exception fix
- a little gui in gtk
- new opcodes implemented
- memory map fixes
- better initial registers (this was find in the pj64 source code
thanks Zilmar and Jabo)
- implemented Zilmar spec Gfx plugins
- included : a linux port of the tr64 plugin v0.5c
what's new in 0.0.2:
- MARIO64 works!!!
- sound temporarly disabled (Just to not hurt your ears because
hle audio doesn't work :)
- various speed improvements
- various stupid bugs removed
what's new in 0.0.1:
- everything it's the first public release :)

7
TODO Normal file
View file

@ -0,0 +1,7 @@
Mupen64Plus TODO:
The Mupen64Plus issues are now tracked on the Google Code site:
Visit the URI:
http://code.google.com/p/mupen64plus/issues/list

BIN
data/fonts/font.ttf Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 842 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 697 B

BIN
data/icons/16x16/cpu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 621 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 531 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 668 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 794 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 635 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 563 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 641 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 755 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 758 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 484 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 501 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 499 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 876 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 983 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 874 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 785 B

BIN
data/icons/16x16/star.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 755 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 797 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 565 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 582 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 931 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 813 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 796 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 924 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 798 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 721 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 736 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 736 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
data/icons/22x22/star.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 734 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
data/icons/32x32/cpu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
data/icons/32x32/star.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,007 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

193
data/icons/LICENSES Normal file
View file

@ -0,0 +1,193 @@
Mupen64plus provides a number of open source licensed icons and artwork resources.
The following icons:
applications-utilities.png
preferences-system-network.png
preferences-system.png
16x16/document-open.png
16x16/document-save.png
16x16/media-playback-pause.png
16x16/media-playback-start.png
16x16/media-playback-stop.png
16x16/preferences-system.png
16x16/star.png (renamed from bookmarks.png)
16x16/view-fullscreen.png
16x16/edit-delete.png
16x16/document-revert.png
16x16/document-save-as.png
16x16/document-properties.png
16x16/view-refresh.png
16x16/video-display.png
16x16/window-close.png
16x16/cpu.png
16x16/audio-card.png
16x16/document-save-as.png
16x16/application-exit.png
16x16/tools-wizard.png
22x22/document-open.png
22x22/document-save.png
22x22/media-playback-pause.png
22x22/media-playback-start.png
22x22/media-playback-stop.png
22x22/preferences-system.png
22x22/star.png (renamed from bookmarks.png)
22x22/view-fullscreen.png
22x22/edit-delete.png
22x22/document-revert.png
22x22/document-save-as.png
22x22/document-properties.png
22x22/view-refresh.png
22x22/tools-wizard.png
32x32/audio-card.png
32x32/dialog-error.png
32x32/dialog-question.png
32x32/dialog-warning.png
32x32/document-open.png
32x32/document-save.png
32x32/media-playback-pause.png
32x32/media-playback-stop.png
32x32/video-display.png
32x32/cpu.png
32x32/input-gaming.png
32x32/media-playback-start.png
32x32/preferences-system.png
32x32/star.png (renamed from bookmarks.png)
32x32/view-fullscreen.png
32x32/edit-delete.png
32x32/document-revert.png
32x32/document-save-as.png
32x32/document-properties.png
32x32/view-refresh.png
32x32/tools-wizard.png
are Copyright: The Oxygen Icon Theme
| Copyright (C) 2007 David Vignoni <david@icon-king.com>
| Copyright (C) 2007 Johann Ollivier Lapeyre <johann@oxygen-icons.org>
| Copyright (C) 2007 Kenneth Wimer <kwwii@bootsplash.org>
| Copyright (C) 2007 Nuno Fernades Pinheiro <nf.pinheiro@gmail.com>
| Copyright (C) 2007 Riccardo Iaconelli <riccardo@oxygen-icons.org>
| Copyright (C) 2007 David Miller <miller@oxygen-icons.org>
|
| and others.
|
| You may copy them under the Creative Common Attribution-ShareAlike 3.0
| license, as found here:
|
| http://creativecommons.org/licenses/by-sa/3.0/
|
| or the GNU Library General Public License (with following clarification).
|
| This library is free software; you can redistribute it and/or
| modify it under the terms of the GNU Library 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
| Library General Public License for more details.
|
| You should have received a copy of the GNU Library General Public
| License along with this library; if not, write to the Free Software
| Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA
|
| Clarification:
|
| The GNU Lesser General Public License or LGPL is written for
| software libraries in the first place. We expressly want the LGPL to
| be valid for this artwork library too.
|
| KDE Oxygen theme icons is a special kind of software library, it is an
| artwork library, it's elements can be used in a Graphical User Interface, or
| GUI.
|
| Source code, for this library means:
| - where they exist, SVG;
| - otherwise, if applicable, the multi-layered formats xcf or psd, or
| otherwise png.
|
| The LGPL in some sections obliges you to make the files carry
| notices. With images this is in some cases impossible or hardly useful.
|
| With this library a notice is placed at a prominent place in the directory
| containing the elements. You may follow this practice.
|
| The exception in section 6 of the GNU Lesser General Public License covers
| the use of elements of this art library in a GUI.
16x16/mupen64plus.png
16x16/mupen64cart.png
22x22/mupen64cart.png
32x32/mupen64plus.png
32x32/mupen64cart.png
mupen64plus-large.png
australia.png
europe.png
france.png
germany.png
italy.png
japan.png
japanusa.png
spain.png
usa.png
mupen64cart.png
are Copyright: The Mupen64plus Team
| Copyright (C) 2008 Tillin9
|
| You may copy them under the Creative Common Attribution-ShareAlike 3.0
| license, as found here:
|
| http://creativecommons.org/licenses/by-sa/3.0/
mupen64logo.png
are Copyright: The Mupen64plus Team
| Copyright (C) 2008 Marshallh, Tillin9
|
| You may copy them under the Creative Common Attribution-ShareAlike 3.0
| license, as found here:
|
| http://creativecommons.org/licenses/by-sa/3.0/
mupen64plus.svg
mupen64cart.svg
are Copyright: The Mupen64plus Team
| Copyright (C) 2008 Tillin9
|
| You may copy them under the Creative Common Attribution-ShareAlike 3.0
| license, as found here:
|
| http://creativecommons.org/licenses/by-sa/3.0/
|
| or under the terms of the GNU General Public License as published by
| the Free Software Foundation; either version 2 of the License, or
| (at your option) any later version.
|
| You should have received a copy of the GNU General Public License
| along with this program; if not, write to the
| Free Software Foundation, Inc.,
| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
mupen64logo.svg
are Copyright: The Mupen64plus Team
| Copyright (C) 2008 Marshallh, Tillin9
|
| You may copy them under the Creative Common Attribution-ShareAlike 3.0
| license, as found here:
|
| http://creativecommons.org/licenses/by-sa/3.0/
|
| or under the terms of the GNU General Public License as published by
| the Free Software Foundation; either version 2 of the License, or
| (at your option) any later version.
|
| You should have received a copy of the GNU General Public License
| along with this program; if not, write to the
| Free Software Foundation, Inc.,
| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
data/icons/australia.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 655 B

BIN
data/icons/europe.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 719 B

BIN
data/icons/france.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 487 B

BIN
data/icons/germany.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 431 B

BIN
data/icons/italy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 480 B

BIN
data/icons/japan.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 532 B

BIN
data/icons/japanusa.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 659 B

896
data/icons/mupen64cart.svg Normal file
View file

@ -0,0 +1,896 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg2"
sodipodi:version="0.32"
inkscape:version="0.46"
width="256"
height="256"
version="1.0"
sodipodi:docname="Mupencart.svg'"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
inkscape:export-filename="/home/templarapheonix/Desktop/Mupen64cart.png"
inkscape:export-xdpi="198.08128"
inkscape:export-ydpi="198.08128">
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:description>This icon is original work created by Tillin9 for Mupen64plus.
This icon is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
You may also copy it under the Creative Common Attribution-ShareAlike 3.0 license, as found here: http://creativecommons.org/licenses/by-sa/3.0/
It is the author's desire that SVG / vector format copies be GPLed and rasterizations licensed under Creative Commons. This is because there are no clear guidelines to applying the GPL to artwork, whereas vector data consitutes source.</dc:description>
<dc:source>GPL (v2 or later) </dc:source>
<dc:rights>
<cc:Agent>
<dc:title>Copyright (C) Tillin9</dc:title>
</cc:Agent>
</dc:rights>
<dc:creator>
<cc:Agent>
<dc:title>Tillin9</dc:title>
</cc:Agent>
</dc:creator>
<dc:date>August 18, 2008</dc:date>
<dc:title>Mupen64plus ROM Icon</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs5">
<linearGradient
id="linearGradient5199">
<stop
style="stop-color:#aaff61;stop-opacity:1;"
offset="0"
id="stop5201" />
<stop
style="stop-color:#0e530d;stop-opacity:1;"
offset="1"
id="stop5203" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5199"
id="linearGradient5228"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.1025355,0,0,0.1025355,67.657185,48.31256)"
x1="260"
y1="452.36218"
x2="380"
y2="692.36218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3786"
id="linearGradient2552"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-2.050304,-1.40625)"
x1="64.584572"
y1="43.5"
x2="64.584572"
y2="58.5" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3786"
id="linearGradient2555"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1,0,0,1,165.04946,-19.90625)"
x1="64.584572"
y1="43.5"
x2="64.584572"
y2="58.5" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3832"
id="linearGradient2558"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1,0,0,1,127.81485,-1.745716)"
x1="27.349958"
y1="101.33946"
x2="65.280579"
y2="82.839462" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3824"
id="linearGradient2561"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(66.964015,-4.745716)"
x1="20.173897"
y1="97.839462"
x2="46.827847"
y2="84.839462" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3840"
id="linearGradient2564"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1,0,0,1,127.11884,-1.40625)"
x1="48.18214"
y1="79.5"
x2="42.031227"
y2="82.5" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3802"
id="linearGradient2567"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1,0,0,1,127.11884,-1.40625)"
x1="46.131836"
y1="57.5"
x2="33.830013"
y2="37.5" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3848"
id="linearGradient2570"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1,0,0,1,127.11884,-1.40625)"
x1="64.584572"
y1="35.5"
x2="31.779709"
y2="51.5" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3802"
id="linearGradient2573"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(35.880315,-19.90625)"
x1="46.131836"
y1="57.5"
x2="33.830013"
y2="37.5" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3786"
id="linearGradient2576"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-39.980925,-19.90625)"
x1="64.584572"
y1="43.5"
x2="64.584572"
y2="58.5" />
<linearGradient
id="linearGradient3832">
<stop
style="stop-color:#980000;stop-opacity:1;"
offset="0"
id="stop3834" />
<stop
style="stop-color:#ff0000;stop-opacity:1;"
offset="1"
id="stop3836" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3832"
id="linearGradient2579"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-2.746313,-1.745716)"
x1="27.349958"
y1="101.33946"
x2="65.280579"
y2="82.839462" />
<linearGradient
id="linearGradient3824">
<stop
style="stop-color:#980000;stop-opacity:1;"
offset="0"
id="stop3826" />
<stop
style="stop-color:#ff0000;stop-opacity:1;"
offset="1"
id="stop3828" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3824"
id="linearGradient2582"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1,0,0,1,58.104517,-4.745716)"
x1="20.173897"
y1="97.839462"
x2="46.827847"
y2="84.839462" />
<linearGradient
id="linearGradient3840">
<stop
style="stop-color:#980000;stop-opacity:1;"
offset="0"
id="stop3842" />
<stop
style="stop-color:#ff0000;stop-opacity:1;"
offset="1"
id="stop3844" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3840"
id="linearGradient2585"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-2.050304,-1.40625)"
x1="48.18214"
y1="79.5"
x2="42.031227"
y2="82.5" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3802"
id="linearGradient2588"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-2.050304,-1.40625)"
x1="46.131836"
y1="57.5"
x2="33.830013"
y2="37.5" />
<linearGradient
id="linearGradient3848">
<stop
id="stop3850"
offset="0"
style="stop-color:#980000;stop-opacity:1;" />
<stop
id="stop3852"
offset="1"
style="stop-color:#ff0000;stop-opacity:1;" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3848"
id="linearGradient2591"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-2.050304,-1.40625)"
x1="64.584572"
y1="35.5"
x2="31.779709"
y2="51.5" />
<linearGradient
id="linearGradient3802">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop3804" />
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="1"
id="stop3806" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3802"
id="linearGradient2594"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1,0,0,1,89.188217,-19.90625)"
x1="46.131836"
y1="57.5"
x2="33.830013"
y2="37.5" />
<linearGradient
id="linearGradient3786">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop3788" />
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="1"
id="stop3790" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3786"
id="linearGradient2597"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-2.0503041,-38.40625)"
x1="64.584572"
y1="43.5"
x2="64.584572"
y2="58.5" />
<linearGradient
id="linearGradient3323">
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="0"
id="stop3325" />
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="1"
id="stop3327" />
</linearGradient>
<linearGradient
id="linearGradient3313">
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="0"
id="stop3315" />
<stop
id="stop3321"
offset="1"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
style="stop-color:#999999;stop-opacity:1"
offset="1"
id="stop3317" />
</linearGradient>
<linearGradient
id="linearGradient3300">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3302" />
<stop
style="stop-color:#c0c0c0;stop-opacity:1;"
offset="1"
id="stop3304" />
</linearGradient>
<linearGradient
id="linearGradient3289">
<stop
style="stop-color:#ffffff;stop-opacity:0.94117647;"
offset="0"
id="stop3291" />
<stop
style="stop-color:#c0c0c0;stop-opacity:0;"
offset="1"
id="stop3293" />
</linearGradient>
<linearGradient
id="linearGradient3266">
<stop
style="stop-color:#444444;stop-opacity:1;"
offset="0"
id="stop3268" />
<stop
style="stop-color:#e0e0e0;stop-opacity:1;"
offset="1"
id="stop3270" />
</linearGradient>
<linearGradient
id="linearGradient3204">
<stop
style="stop-color:#555555;stop-opacity:1;"
offset="0"
id="stop3206" />
<stop
style="stop-color:#c0c0c0;stop-opacity:1;"
offset="1"
id="stop3208" />
</linearGradient>
<linearGradient
id="linearGradient3188">
<stop
style="stop-color:#444444;stop-opacity:1;"
offset="0"
id="stop3190" />
<stop
style="stop-color:#c0c0c0;stop-opacity:1;"
offset="1"
id="stop3192" />
</linearGradient>
<linearGradient
id="linearGradient3170">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop3172" />
<stop
style="stop-color:#999999;stop-opacity:0;"
offset="1"
id="stop3174" />
</linearGradient>
<linearGradient
id="linearGradient3162">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3164" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3166" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="-9.8892703 : 34.507233 : 1"
inkscape:vp_y="7.8673468 : 44.617941 : 0"
inkscape:vp_z="352.25188 : 64.713871 : 0"
inkscape:persp3d-origin="324.57842 : 6.9540847 : 1"
id="perspective9" />
<filter
inkscape:collect="always"
id="filter3355"
x="-0.12856042"
width="1.2571208"
y="-0.11250842"
height="1.2250168">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.55575245"
id="feGaussianBlur3357" />
</filter>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3266"
id="linearGradient3903"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2810448,25.754389,5.406553)"
x1="-2.9461544"
y1="36.299095"
x2="-8.7543888"
y2="12.786029" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3188"
id="linearGradient3905"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,-0.4217956,0,0.8884894,25.401297,6.4182255)"
x1="-1.9911088"
y1="16.668089"
x2="-4.6346431"
y2="16.648296" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3289"
id="linearGradient3907"
gradientUnits="userSpaceOnUse"
x1="5"
y1="16"
x2="7"
y2="16" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3323"
id="linearGradient3909"
gradientUnits="userSpaceOnUse"
x1="21"
y1="17"
x2="5"
y2="9.4640388" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3323"
id="linearGradient3929"
gradientUnits="userSpaceOnUse"
x1="21"
y1="17"
x2="5"
y2="9.4640388"
gradientTransform="matrix(9.9938836,0,0,9.9938836,-36.969239,-58.26436)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3289"
id="linearGradient3932"
gradientUnits="userSpaceOnUse"
x1="5"
y1="16"
x2="7"
y2="16"
gradientTransform="matrix(9.9938836,0,0,9.9938836,-36.969239,-58.26436)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3188"
id="linearGradient3935"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(9.9938836,-4.2153761,0,8.8794596,216.88837,5.8786386)"
x1="-1.9911088"
y1="16.668089"
x2="-4.6346431"
y2="16.648296" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3266"
id="linearGradient3939"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(9.9938836,0,0,2.808729,220.41713,-4.2318986)"
x1="-2.9461544"
y1="36.299095"
x2="-8.7543888"
y2="12.786029" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3266"
id="linearGradient2513"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(9.9938836,0,0,2.808729,220.41713,-4.2318986)"
x1="-2.9461544"
y1="36.299095"
x2="-8.7543888"
y2="12.786029" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3188"
id="linearGradient2515"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(9.9938836,-4.2153761,0,8.8794596,216.88837,5.8786386)"
x1="-1.9911088"
y1="16.668089"
x2="-4.6346431"
y2="16.648296" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3289"
id="linearGradient2517"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(9.9938836,0,0,9.9938836,-36.969239,-58.26436)"
x1="5"
y1="16"
x2="7"
y2="16" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3323"
id="linearGradient2519"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(9.9938836,0,0,9.9938836,-36.969239,-58.26436)"
x1="21"
y1="17"
x2="5"
y2="9.4640388" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3786"
id="linearGradient2521"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-2.0503041,-38.40625)"
x1="64.584572"
y1="43.5"
x2="64.584572"
y2="58.5" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3802"
id="linearGradient2523"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1,0,0,1,89.188217,-19.90625)"
x1="46.131836"
y1="57.5"
x2="33.830013"
y2="37.5" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3848"
id="linearGradient2525"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-2.050304,-1.40625)"
x1="64.584572"
y1="35.5"
x2="31.779709"
y2="51.5" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3802"
id="linearGradient2527"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-2.050304,-1.40625)"
x1="46.131836"
y1="57.5"
x2="33.830013"
y2="37.5" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3840"
id="linearGradient2529"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-2.050304,-1.40625)"
x1="48.18214"
y1="79.5"
x2="42.031227"
y2="82.5" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3824"
id="linearGradient2531"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1,0,0,1,58.104517,-4.745716)"
x1="20.173897"
y1="97.839462"
x2="46.827847"
y2="84.839462" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3832"
id="linearGradient2533"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-2.746313,-1.745716)"
x1="27.349958"
y1="101.33946"
x2="65.280579"
y2="82.839462" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3786"
id="linearGradient2535"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-39.980925,-19.90625)"
x1="64.584572"
y1="43.5"
x2="64.584572"
y2="58.5" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3802"
id="linearGradient2537"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(35.880315,-19.90625)"
x1="46.131836"
y1="57.5"
x2="33.830013"
y2="37.5" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3848"
id="linearGradient2539"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1,0,0,1,127.11884,-1.40625)"
x1="64.584572"
y1="35.5"
x2="31.779709"
y2="51.5" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3802"
id="linearGradient2541"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1,0,0,1,127.11884,-1.40625)"
x1="46.131836"
y1="57.5"
x2="33.830013"
y2="37.5" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3840"
id="linearGradient2543"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1,0,0,1,127.11884,-1.40625)"
x1="48.18214"
y1="79.5"
x2="42.031227"
y2="82.5" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3824"
id="linearGradient2545"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(66.964015,-4.745716)"
x1="20.173897"
y1="97.839462"
x2="46.827847"
y2="84.839462" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3832"
id="linearGradient2547"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1,0,0,1,127.81485,-1.745716)"
x1="27.349958"
y1="101.33946"
x2="65.280579"
y2="82.839462" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3786"
id="linearGradient2549"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1,0,0,1,165.04946,-19.90625)"
x1="64.584572"
y1="43.5"
x2="64.584572"
y2="58.5" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3786"
id="linearGradient2551"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-2.050304,-1.40625)"
x1="64.584572"
y1="43.5"
x2="64.584572"
y2="58.5" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5199"
id="linearGradient2553"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.1025355,0,0,0.1025355,67.657185,48.31256)"
x1="260"
y1="452.36218"
x2="380"
y2="692.36218" />
</defs>
<sodipodi:namedview
inkscape:window-height="707"
inkscape:window-width="955"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
guidetolerance="10.0"
gridtolerance="10.0"
objecttolerance="10.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
showgrid="false"
inkscape:snap-global="true"
showguides="true"
inkscape:guide-bbox="true"
inkscape:zoom="1"
inkscape:cx="22.690456"
inkscape:cy="170.9859"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:current-layer="svg2">
<inkscape:grid
type="xygrid"
id="grid3276"
visible="true"
enabled="true" />
</sodipodi:namedview>
<g
id="g2483"
transform="translate(0,-6)">
<path
transform="matrix(9.9938836,0,0,9.9938836,-36.969239,-58.26436)"
id="path3353"
d="M 25.34375,19.40625 C 23.858014,19.524356 22.069811,20.253854 20.3125,21.53125 C 17.933332,23.260676 16.252069,25.559959 15.71875,27.5625 L 21.96875,30.65625 C 22.634712,30.334331 23.326102,29.958609 24,29.46875 C 27.514623,26.913958 29.547713,23.069603 28.53125,20.875 C 28.023019,19.777699 26.829486,19.288144 25.34375,19.40625 z"
style="fill:#444444;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3355)" />
<path
transform="matrix(9.9938836,0,0,9.9938836,-36.969239,-58.26436)"
d="M 12.03125,6.8125 C 8.8562727,6.7672188 6.1491546,7.60884 4.71875,8.5625 C 4.5762203,8.6616808 4.4938269,8.8264678 4.5,9 L 4.5,22 C 4.4952382,22.197485 4.6047577,22.380017 4.78125,22.46875 L 20.78125,30.46875 C 20.879551,30.511721 20.988886,30.522654 21.09375,30.5 C 22.549976,30.271916 23.73073,29.397324 24.4375,28.28125 C 24.484885,28.195438 24.506581,28.097805 24.5,28 L 24.5,14 C 24.506581,13.902195 24.484885,13.804562 24.4375,13.71875 C 20.969629,8.5169439 16.113576,6.8707217 12.03125,6.8125 z"
id="path3404"
style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1"
inkscape:original="M 12.03125 7.3125 C 8.9567499 7.2686518 6.2928441 8.1380525 5 9 L 5 22 L 21 30 C 22.296875 29.796875 23.366735 29 24 28 L 24 14 C 20.625 8.9375 15.984179 7.3688763 12.03125 7.3125 z "
inkscape:radius="0.51082277"
sodipodi:type="inkscape:offset" />
<path
style="fill:url(#linearGradient2513);fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1"
d="M 13.000179,31.680592 C 42.532828,11.990985 142.92067,-8.294942 202.88397,81.65001 C 197.93585,90.966868 187.35001,99.21507 172.90232,101.63778 L 13.000179,31.680592 L 13.000179,31.680592 z"
id="path3262"
sodipodi:nodetypes="ccccc" />
<path
sodipodi:nodetypes="ccccc"
id="rect3154"
d="M 13.000179,31.680592 C 72.750601,21.752285 112.93901,21.686709 172.90232,101.63778 L 172.90232,241.55215 L 13.000179,161.60108 L 13.000179,31.680592 z"
style="fill:#c0c0c0;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccccc"
id="rect3178"
d="M 172.90232,101.63778 C 185.91993,98.961276 196.82811,91.643894 202.88397,81.65001 L 202.88397,221.56438 C 196.55519,231.55826 185.86313,239.52214 172.90232,241.55215 L 172.90232,101.63778 z"
style="fill:url(#linearGradient2515);fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccccc"
id="rect3278"
d="M 13.000179,31.680592 C 20.038359,30.515556 27.05825,29.530151 32.987946,28.796333 L 32.987946,171.59496 L 13.000179,161.60108 L 13.000179,31.680592 z"
style="fill:url(#linearGradient2517);fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1" />
<path
sodipodi:nodetypes="cccscc"
id="rect3310"
d="M 13.000179,31.680592 C 72.963481,21.686709 112.93901,21.686709 172.90232,101.63778 L 172.90232,101.63778 C 142.92067,81.65001 178.82288,130.5064 172.90232,121.62554 C 112.93901,31.680592 72.963481,31.680592 13.000179,41.674476 L 13.000179,31.680592 z"
style="opacity:0.5;fill:url(#linearGradient2519);fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1" />
<path
style="fill:#444444;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1"
d="M 42.150493,69.11802 C 80.115793,62.809601 105.65144,62.767927 143.75201,113.56869 L 143.75201,202.47 L 42.150493,151.66925 L 42.150493,69.11802 z"
id="path3351"
sodipodi:nodetypes="ccccc" />
<g
transform="matrix(0.6742666,0.338008,0,0.6742666,49.15093,63.717705)"
id="g3806">
<path
sodipodi:type="inkscape:offset"
inkscape:radius="2"
inkscape:original="M 62.53125 7.09375 L 49.21875 13.59375 L 39.125 33.25 L 37.9375 32.09375 L 24.59375 25.59375 L 11.28125 32.09375 L 11.28125 93.09375 L 24.59375 99.59375 L 37.9375 93.09375 L 37.9375 80.09375 L 40.34375 81.25 L 49.21875 77 L 49.21875 111.59375 L 62.53125 118.09375 L 75.875 111.59375 L 75.875 77 L 84.75 81.25 L 87.125 80.09375 L 87.125 93.09375 L 100.46875 99.59375 L 113.78125 93.09375 L 113.78125 32.09375 L 100.46875 25.59375 L 87.125 32.09375 L 85.9375 33.25 L 75.875 13.59375 L 62.53125 7.09375 z M 42.03125 40.09375 L 42.0625 40.09375 L 48.03125 51.75 L 48 51.78125 L 42.03125 40.09375 z "
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4621"
d="M 62.4375,5.09375 C 62.167082,5.1027666 61.901305,5.1665532 61.65625,5.28125 L 48.34375,11.78125 C 47.950444,11.975757 47.632007,12.294194 47.4375,12.6875 L 38.5,30.125 L 25.46875,23.78125 C 24.916364,23.512529 24.271136,23.512529 23.71875,23.78125 L 10.40625,30.28125 C 9.7134798,30.618337 9.2758905,31.323342 9.28125,32.09375 L 9.28125,93.09375 C 9.2758905,93.864158 9.7134798,94.569163 10.40625,94.90625 L 23.71875,101.40625 C 24.271136,101.67497 24.916364,101.67497 25.46875,101.40625 L 38.8125,94.90625 C 39.50527,94.569163 39.94286,93.864158 39.9375,93.09375 L 39.9375,83.1875 C 40.366689,83.288163 40.817111,83.244219 41.21875,83.0625 L 47.21875,80.1875 L 47.21875,111.59375 C 47.21339,112.36416 47.65098,113.06916 48.34375,113.40625 L 61.65625,119.90625 C 62.208636,120.17497 62.853864,120.17497 63.40625,119.90625 L 76.75,113.40625 C 77.44277,113.06916 77.88036,112.36416 77.875,111.59375 L 77.875,80.1875 L 83.875,83.0625 C 84.263962,83.247857 84.70238,83.302659 85.125,83.21875 L 85.125,93.09375 C 85.11964,93.864158 85.55723,94.569163 86.25,94.90625 L 99.59375,101.40625 C 100.14614,101.67497 100.79136,101.67497 101.34375,101.40625 L 114.65625,94.90625 C 115.34902,94.569163 115.78661,93.864158 115.78125,93.09375 L 115.78125,32.09375 C 115.78661,31.323342 115.34902,30.618337 114.65625,30.28125 L 101.34375,23.78125 C 100.79136,23.512529 100.14614,23.512529 99.59375,23.78125 L 86.59375,30.125 L 77.65625,12.6875 C 77.461743,12.294194 77.143306,11.975757 76.75,11.78125 L 63.40625,5.28125 C 63.104058,5.1388311 62.771008,5.0743697 62.4375,5.09375 L 62.4375,5.09375 z" />
<path
sodipodi:nodetypes="ccccc"
id="path3794"
d="M 62.534267,20.09375 L 49.207292,13.59375 L 62.534267,7.09375 L 75.861242,13.59375 L 62.534267,20.09375 z"
style="fill:url(#linearGradient2521);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccccc"
id="path3810"
d="M 62.534267,20.09375 L 49.207292,13.59375 L 36.905469,37.59375 L 50.232444,44.09375 L 62.534267,20.09375 z"
style="fill:url(#linearGradient2523);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:url(#linearGradient2525);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 62.534267,44.09375 L 62.534267,20.09375 L 50.232444,44.09375 L 37.930621,32.09375 L 48.18214,52.09375 L 62.534267,44.09375 L 62.534267,44.09375"
id="path3734"
sodipodi:nodetypes="ccccccc" />
<path
style="fill:url(#linearGradient2527);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 24.603646,38.59375 L 37.930621,32.09375 L 50.232444,56.09375 L 36.905469,62.59375 L 24.603646,38.59375 z"
id="path3720"
sodipodi:nodetypes="ccccc" />
<path
style="fill:url(#linearGradient2529);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 40.332696,81.26475 L 49.207292,77 L 49.207292,72.59375 L 40.332696,81.26475 z"
id="path3736"
sodipodi:nodetypes="cccc" />
<path
sodipodi:nodetypes="cccc"
id="path3742"
d="M 37.930621,80.093746 L 37.930621,93.09375 L 24.603646,99.59375 L 24.603646,60.593746"
style="fill:url(#linearGradient2531);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="opacity:0.95999995;fill:url(#linearGradient2533);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 49.207292,111.59375 L 62.534267,118.09375 L 62.534267,57.09375 L 49.207292,50.59375 L 36.905469,62.59375 L 24.603646,38.59375 L 11.276671,32.09375 L 11.276671,93.09375 L 24.603646,99.59375 L 24.603646,60.59375 L 33.50087,77.933216 L 40.332493,81.265221 L 49.207292,72.59375 L 49.207292,111.59375 z"
id="path2384"
sodipodi:nodetypes="cccccccccccccc" />
<path
style="fill:url(#linearGradient2535);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 24.603646,38.59375 L 11.276671,32.09375 L 24.603646,25.59375 L 37.930621,32.09375 L 24.603646,38.59375 z"
id="path3796"
sodipodi:nodetypes="ccccc" />
<path
style="fill:url(#linearGradient2537);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 62.534265,20.09375 L 75.86124,13.59375 L 88.163063,37.59375 L 74.836088,44.09375 L 62.534265,20.09375 z"
id="path3889"
sodipodi:nodetypes="ccccc" />
<path
sodipodi:nodetypes="ccccccc"
id="path3891"
d="M 62.534265,44.09375 L 62.534265,20.09375 L 74.836088,44.09375 L 87.137911,32.09375 L 76.886392,52.09375 L 62.534265,44.09375 L 62.534265,44.09375"
style="fill:url(#linearGradient2539);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccccc"
id="path3893"
d="M 100.46489,38.59375 L 87.137911,32.09375 L 74.836088,56.09375 L 88.163063,62.59375 L 100.46489,38.59375 z"
style="fill:url(#linearGradient2541);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="cccc"
id="path3895"
d="M 84.735836,81.26475 L 75.86124,77 L 75.86124,72.59375 L 84.735836,81.26475 z"
style="fill:url(#linearGradient2543);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:url(#linearGradient2545);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 87.137911,80.093746 L 87.137911,93.09375 L 100.46489,99.59375 L 100.46489,60.593746"
id="path3897"
sodipodi:nodetypes="cccc" />
<path
sodipodi:nodetypes="cccccccccccccc"
id="path3899"
d="M 75.86124,111.59375 L 62.534265,118.09375 L 62.534265,57.09375 L 75.86124,50.59375 L 88.163063,62.59375 L 100.46489,38.59375 L 113.79186,32.09375 L 113.79186,93.09375 L 100.46489,99.59375 L 100.46489,60.59375 L 91.567662,77.933216 L 84.736039,81.265221 L 75.86124,72.59375 L 75.86124,111.59375 z"
style="fill:url(#linearGradient2547);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccccc"
id="path3901"
d="M 100.46489,38.59375 L 113.79186,32.09375 L 100.46489,25.59375 L 87.137911,32.09375 L 100.46489,38.59375 z"
style="fill:url(#linearGradient2549);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:url(#linearGradient2551);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 62.534267,57.09375 L 49.207292,50.59375 L 62.534267,44.09375 L 75.861242,50.59375 L 62.534267,57.09375 z"
id="path3714"
sodipodi:nodetypes="ccccc" />
<path
sodipodi:type="inkscape:offset"
inkscape:radius="1.7423463"
inkscape:original="M 94.3125 82.40625 L 94.3125 94.6875 L 82 94.6875 L 82 107 L 94.3125 107 L 94.3125 119.3125 L 106.625 119.3125 L 106.625 107 L 118.9375 107 L 118.9375 94.6875 L 106.625 94.6875 L 106.625 82.40625 L 94.3125 82.40625 z "
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path5220"
d="M 94.3125,80.65625 C 93.847761,80.654251 93.401479,80.837983 93.072856,81.166606 C 92.744233,81.495229 92.560501,81.941511 92.5625,82.40625 L 92.5625,92.9375 L 82,92.9375 C 81.535261,92.935501 81.088979,93.119233 80.760356,93.447856 C 80.431733,93.776479 80.248001,94.222761 80.25,94.6875 L 80.25,107 C 80.248001,107.46474 80.431733,107.91102 80.760356,108.23964 C 81.088979,108.56827 81.535261,108.752 82,108.75 L 92.5625,108.75 L 92.5625,119.3125 C 92.560501,119.77724 92.744233,120.22352 93.072856,120.55214 C 93.401479,120.88077 93.847761,121.0645 94.3125,121.0625 L 106.625,121.0625 C 107.08974,121.0645 107.53602,120.88077 107.86464,120.55214 C 108.19327,120.22352 108.377,119.77724 108.375,119.3125 L 108.375,108.75 L 118.9375,108.75 C 119.40224,108.752 119.84852,108.56827 120.17714,108.23964 C 120.50577,107.91102 120.6895,107.46474 120.6875,107 L 120.6875,94.6875 C 120.6895,94.222761 120.50577,93.776479 120.17714,93.447856 C 119.84852,93.119233 119.40224,92.935501 118.9375,92.9375 L 108.375,92.9375 L 108.375,82.40625 C 108.377,81.941511 108.19327,81.495229 107.86464,81.166606 C 107.53602,80.837983 107.08974,80.654251 106.625,80.65625 L 94.3125,80.65625 z"
transform="translate(-4.88271e-2,-0.65625)" />
<path
sodipodi:type="inkscape:offset"
inkscape:radius="0"
inkscape:original="M 94.3125 82.40625 L 94.3125 94.6875 L 82 94.6875 L 82 107 L 94.3125 107 L 94.3125 119.3125 L 106.625 119.3125 L 106.625 107 L 118.9375 107 L 118.9375 94.6875 L 106.625 94.6875 L 106.625 82.40625 L 94.3125 82.40625 z "
style="fill:url(#linearGradient2553);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path5212"
d="M 94.3125,82.40625 L 94.3125,94.6875 L 82,94.6875 L 82,107 L 94.3125,107 L 94.3125,119.3125 L 106.625,119.3125 L 106.625,107 L 118.9375,107 L 118.9375,94.6875 L 106.625,94.6875 L 106.625,82.40625 L 94.3125,82.40625 z"
transform="translate(-4.88271e-2,-0.65625)" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 38 KiB

BIN
data/icons/mupen64logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

709
data/icons/mupen64logo.svg Normal file
View file

@ -0,0 +1,709 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 11.0, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
<svg:svg
xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/"
xmlns:xap="http://ns.adobe.com/xap/1.0/"
xmlns:ns0="http://ns.adobe.com/SaveForWeb/1.0/"
xmlns:ns="http://ns.adobe.com/Variables/1.0/"
xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
xmlns:x="adobe:ns:meta/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
i:viewOrigin="18.9536 451.3608"
i:rulerOrigin="0 0"
i:pageBounds="0 792 612 0"
width="460"
height="136"
viewBox="0 0 410.748 115.882"
overflow="visible"
enable-background="new 0 0 410.748 115.882"
xml:space="preserve"
id="svg2"
sodipodi:version="0.32"
inkscape:version="0.46"
sodipodi:docname="logo.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
version="1.0"
style="overflow:visible"
inkscape:export-filename="/home/templarapheonix/Desktop/mupen_logo.png"
inkscape:export-xdpi="198.08128"
inkscape:export-ydpi="198.08128"><svg:defs
id="defs38"><svg:linearGradient
id="linearGradient5199"><svg:stop
style="stop-color:#aaff61;stop-opacity:1;"
offset="0"
id="stop5201" /><svg:stop
style="stop-color:#0e530d;stop-opacity:1;"
offset="1"
id="stop5203" /></svg:linearGradient><svg:linearGradient
id="linearGradient3824"><svg:stop
style="stop-color:#980000;stop-opacity:1;"
offset="0"
id="stop3826" /><svg:stop
style="stop-color:#ff0000;stop-opacity:1;"
offset="1"
id="stop3828" /></svg:linearGradient><svg:linearGradient
id="linearGradient3840"><svg:stop
style="stop-color:#980000;stop-opacity:1;"
offset="0"
id="stop3842" /><svg:stop
style="stop-color:#ff0000;stop-opacity:1;"
offset="1"
id="stop3844" /></svg:linearGradient><svg:linearGradient
id="linearGradient3848"><svg:stop
id="stop3850"
offset="0"
style="stop-color:#980000;stop-opacity:1;" /><svg:stop
id="stop3852"
offset="1"
style="stop-color:#ff0000;stop-opacity:1;" /></svg:linearGradient><svg:linearGradient
id="linearGradient3802"><svg:stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop3804" /><svg:stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="1"
id="stop3806" /></svg:linearGradient><svg:linearGradient
id="linearGradient3786"><svg:stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop3788" /><svg:stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="1"
id="stop3790" /></svg:linearGradient><svg:linearGradient
id="linearGradient3832"><svg:stop
style="stop-color:#980000;stop-opacity:1;"
offset="0"
id="stop3834" /><svg:stop
style="stop-color:#ff0000;stop-opacity:1;"
offset="1"
id="stop3836" /></svg:linearGradient><inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 57.941002 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="410.74799 : 57.941002 : 1"
inkscape:persp3d-origin="205.37399 : 38.627335 : 1"
id="perspective42" />
<svg:linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3832"
id="linearGradient2902"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1,0,0,1,22.68122,-173.79661)"
x1="27.349958"
y1="101.33946"
x2="65.280579"
y2="82.839462" />
<svg:linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3786"
id="linearGradient4222"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-50.039686,-43.255328)"
x1="64.584572"
y1="43.5"
x2="64.584572"
y2="58.5" /><svg:linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3802"
id="linearGradient4224"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1,0,0,1,41.198835,-24.755328)"
x1="46.131836"
y1="57.5"
x2="33.830013"
y2="37.5" /><svg:linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3848"
id="linearGradient4226"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-50.039686,-6.2553278)"
x1="64.584572"
y1="35.5"
x2="31.779709"
y2="51.5" /><svg:linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3802"
id="linearGradient4228"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-50.039686,-6.2553278)"
x1="46.131836"
y1="57.5"
x2="33.830013"
y2="37.5" /><svg:linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3840"
id="linearGradient4230"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-50.039686,-6.2553278)"
x1="48.18214"
y1="79.5"
x2="42.031227"
y2="82.5" /><svg:linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3824"
id="linearGradient4232"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1,0,0,1,10.115135,-9.5947938)"
x1="20.173897"
y1="97.839462"
x2="46.827847"
y2="84.839462" /><svg:linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3832"
id="linearGradient4234"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-50.735695,-6.5947938)"
x1="27.349958"
y1="101.33946"
x2="65.280579"
y2="82.839462" /><svg:linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3786"
id="linearGradient4236"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-87.970307,-24.755328)"
x1="64.584572"
y1="43.5"
x2="64.584572"
y2="58.5" /><svg:linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3802"
id="linearGradient4238"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-12.109067,-24.755328)"
x1="46.131836"
y1="57.5"
x2="33.830013"
y2="37.5" /><svg:linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3848"
id="linearGradient4240"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1,0,0,1,79.129458,-6.2553278)"
x1="64.584572"
y1="35.5"
x2="31.779709"
y2="51.5" /><svg:linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3802"
id="linearGradient4242"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1,0,0,1,79.129458,-6.2553278)"
x1="46.131836"
y1="57.5"
x2="33.830013"
y2="37.5" /><svg:linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3840"
id="linearGradient4244"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1,0,0,1,79.129458,-6.2553278)"
x1="48.18214"
y1="79.5"
x2="42.031227"
y2="82.5" /><svg:linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3824"
id="linearGradient4246"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(18.974633,-9.5947938)"
x1="20.173897"
y1="97.839462"
x2="46.827847"
y2="84.839462" /><svg:linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3832"
id="linearGradient4248"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1,0,0,1,79.825468,-6.5947938)"
x1="27.349958"
y1="101.33946"
x2="65.280579"
y2="82.839462" /><svg:linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3786"
id="linearGradient4250"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1,0,0,1,117.06008,-24.755328)"
x1="64.584572"
y1="43.5"
x2="64.584572"
y2="58.5" /><svg:linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3786"
id="linearGradient4252"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-50.039686,-6.2553278)"
x1="64.584572"
y1="43.5"
x2="64.584572"
y2="58.5" /></svg:defs><sodipodi:namedview
inkscape:window-height="707"
inkscape:window-width="1400"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
guidetolerance="10.0"
gridtolerance="10.0"
objecttolerance="10.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
showgrid="false"
inkscape:zoom="1.89"
inkscape:cx="121.37305"
inkscape:cy="38.556811"
inkscape:window-x="443"
inkscape:window-y="426"
inkscape:current-layer="svg2"
inkscape:snap-global="false"><inkscape:grid
type="xygrid"
id="grid3998"
visible="true"
enabled="true" /></sodipodi:namedview>
<svg:metadata
id="metadata4">
<ns:variableSets>
<ns:variableSet
varSetName="binding1"
locked="none">
<ns:variables />
<ns:sampleDataSets />
</ns:variableSet>
</ns:variableSets>
<ns0:sfw>
<ns0:slices />
<ns0:sliceSourceBounds
x="18.954"
y="335.479"
width="410.748"
height="115.882"
bottomLeftOrigin="true" />
</ns0:sfw>
<xpacket /><x:xmpmeta
x:xmptk="XMP toolkit 3.0-29, framework 1.6">
<svg:metadata
id="metadata40"><rdf:RDF>
<rdf:Description
rdf:about="uuid:984e83e6-4db0-495d-b9bb-e58f3e6931cf">
</rdf:Description>
<rdf:Description
rdf:about="uuid:984e83e6-4db0-495d-b9bb-e58f3e6931cf">
</rdf:Description>
<rdf:Description
rdf:about="uuid:984e83e6-4db0-495d-b9bb-e58f3e6931cf">
<xap:CreateDate>2008-08-06T01:39:26Z</xap:CreateDate>
<xap:ModifyDate>2008-08-18T17:50:47Z</xap:ModifyDate>
<xap:CreatorTool>Illustrator</xap:CreatorTool>
<xap:MetadataDate>2008-08-10T21:18:20-05:00</xap:MetadataDate>
<xap:Thumbnails>
<rdf:Alt>
<rdf:li
rdf:parseType="Resource">
<xapGImg:format>JPEG</xapGImg:format>
<xapGImg:width>256</xapGImg:width>
<xapGImg:height>72</xapGImg:height>
<xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgASAEAAwER
AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7
FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVs00UMTzTOsUMSl5JHIVVVRUsxOwAGEAk0F
fNX5n/8AOTmoSXc+leSCsFpGSj6y6h5JSNiYEcFUXwZgSf8AJzsuzfZyIAnn3P8AN/W6zPrTyj83
i13rPnLzPdMtzeX+sXEhqY2eW4P0JVqD2AzpIYcOEbCMB8A4RlKXeX0F/wA4paDrulL5nbVNOurB
bj6j9XN1DJCJOH1kNw5qvLjyFaZyftPnhPw+GQlXFyN/zXYaGBF2O579nKOwecfnn+ZI8leUXFnI
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
UHPj0r3pXtm5fNjV7N4odirsVdirsVdirsVf/9k=</xapGImg:image>
</rdf:li>
</rdf:Alt>
</xap:Thumbnails>
</rdf:Description>
<rdf:Description
rdf:about="uuid:984e83e6-4db0-495d-b9bb-e58f3e6931cf">
<xapMM:DocumentID>uuid:e627a855-cb9e-4c67-bb7a-1bcc665d7fec</xapMM:DocumentID>
</rdf:Description>
<rdf:Description
rdf:about="uuid:984e83e6-4db0-495d-b9bb-e58f3e6931cf">
<dc:format>image/svg+xml</dc:format>
</rdf:Description>
<cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>Mupen64plus Logo</dc:title><dc:creator><cc:Agent><dc:title>marshallh</dc:title></cc:Agent></dc:creator><dc:date>August 19, 2008</dc:date><dc:rights><cc:Agent><dc:title>Copyright (C) marshallh, Tillin9</dc:title></cc:Agent></dc:rights><dc:source>GPL (v2 or later) </dc:source><dc:description>This icon is original work created by marshallh and Tillin9 for Mupen64plus.
This icon is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
You may also copy it under the Creative Common Attribution-ShareAlike 3.0 license, as found here: http://creativecommons.org/licenses/by-sa/3.0/
It is the authors' desire that SVG / vector format copies be GPLed and rasterizations licensed under Creative Commons. This is because there are no clear guidelines to applying the GPL to artwork, whereas vector data consitutes source.</dc:description></cc:Work></rdf:RDF></svg:metadata></x:xmpmeta>
<xpacket />
</svg:metadata>
<svg:path
sodipodi:type="inkscape:offset"
inkscape:radius="0.27165872"
inkscape:original="M 232.03125 69.28125 C 229.98696 69.28125 228.40674 69.534137 227.28125 70.0625 C 226.15493 70.591697 225.59375 71.274954 225.59375 72.09375 C 225.59375 72.794624 226.04245 73.379557 226.9375 73.875 C 227.83255 74.370445 229.13448 74.698747 230.84375 74.8125 C 231.35878 74.848335 231.79873 74.880415 232.1875 74.90625 C 232.57627 74.932084 233.01624 74.942502 233.46875 74.96875 C 235.18677 75.07959 236.03125 75.524537 236.03125 76.28125 C 236.03125 76.682523 235.69629 77.003322 235 77.25 C 234.30371 77.496681 233.3459 77.625001 232.125 77.625 C 231.06702 77.625 230.03007 77.519592 229.0625 77.34375 C 228.09495 77.167906 227.24129 76.947516 226.5 76.65625 L 224.53125 77.75 C 226.59262 78.631717 229.11858 79.061253 232.09375 79.0625 C 234.21012 79.0625 235.89992 78.832947 237.15625 78.34375 C 238.41257 77.854555 239.03125 77.166713 239.03125 76.28125 C 239.03125 75.624962 238.60005 75.010863 237.71875 74.46875 C 236.83662 73.926635 235.46927 73.610843 233.625 73.5 C 233.14456 73.473749 232.71419 73.462086 232.34375 73.4375 C 231.9729 73.412915 231.66835 73.366666 231.40625 73.34375 C 230.40203 73.268745 229.68378 73.112514 229.25 72.875 C 228.81539 72.637486 228.59375 72.398348 228.59375 72.125 C 228.59375 71.667474 228.92037 71.323349 229.5625 71.09375 C 230.20462 70.864154 230.98329 70.750001 231.90625 70.75 C 232.7738 70.75 233.60578 70.800829 234.4375 70.9375 C 235.26922 71.074175 236.05788 71.280401 236.78125 71.5 L 238.4375 70.28125 C 237.53328 69.9904 236.54466 69.752094 235.46875 69.5625 C 234.39286 69.373739 233.25216 69.281246 232.03125 69.28125 z "
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.41669059;stroke-opacity:1"
id="path4020"
d="M 232.03125,69 C 229.96456,69 228.3401,69.25674 227.15625,69.8125 C 225.97991,70.365199 225.3125,71.150829 225.3125,72.09375 C 225.3125,72.910568 225.87184,73.604312 226.8125,74.125 C 227.76072,74.649876 229.07779,74.978304 230.8125,75.09375 C 231.32702,75.129549 231.76616,75.161578 232.15625,75.1875 C 232.55373,75.213913 232.991,75.224101 233.4375,75.25 C 234.27606,75.3041 234.91255,75.434808 235.28125,75.625 C 235.64995,75.815192 235.75,76.003949 235.75,76.28125 C 235.75,76.406298 235.72314,76.502871 235.59375,76.625 C 235.46436,76.747129 235.23238,76.88446 234.90625,77 C 234.25592,77.230397 233.32687,77.343751 232.125,77.34375 C 231.08506,77.34375 230.07777,77.235652 229.125,77.0625 C 228.16908,76.88877 227.31238,76.688613 226.59375,76.40625 C 226.52405,76.375599 226.4447,76.375599 226.375,76.40625 L 224.40625,77.5 C 224.36774,77.523029 224.33553,77.555238 224.3125,77.59375 C 224.28112,77.629254 224.25958,77.672346 224.25,77.71875 C 224.24595,77.802203 224.28053,77.882878 224.34375,77.9375 C 224.37029,77.964656 224.40223,77.985947 224.4375,78 C 226.54332,78.900728 229.0925,79.342492 232.09375,79.34375 C 234.22976,79.34375 235.9437,79.102406 237.25,78.59375 C 237.90423,78.339003 238.43032,78.043298 238.78125,77.65625 C 239.13218,77.269202 239.3125,76.787252 239.3125,76.28125 C 239.3125,75.50597 238.8006,74.819363 237.875,74.25 C 236.92628,73.666959 235.52334,73.330964 233.65625,73.21875 C 233.64584,73.21815 233.63541,73.21815 233.625,73.21875 C 233.14011,73.192256 232.73723,73.180291 232.375,73.15625 C 232.01679,73.132503 231.713,73.086588 231.4375,73.0625 C 230.45163,72.988865 229.742,72.825947 229.375,72.625 C 229.17431,72.515323 229.04678,72.431665 228.96875,72.34375 C 228.89072,72.255835 228.875,72.188251 228.875,72.125 C 228.875,71.960881 228.91032,71.847149 229.03125,71.71875 C 229.15218,71.590351 229.36195,71.448979 229.65625,71.34375 C 230.25969,71.127985 231.00569,71.031251 231.90625,71.03125 C 232.76319,71.03125 233.5925,71.085032 234.40625,71.21875 C 235.22194,71.352791 235.97141,71.532611 236.6875,71.75 C 236.74802,71.77225 236.81448,71.77225 236.875,71.75 C 236.89709,71.742317 236.9181,71.731814 236.9375,71.71875 L 238.59375,70.5 C 238.605,70.490449 238.61545,70.479998 238.625,70.46875 C 238.68822,70.414128 238.7228,70.333453 238.71875,70.25 C 238.70917,70.203596 238.68763,70.160504 238.65625,70.125 C 238.62466,70.082184 238.5812,70.049586 238.53125,70.03125 C 237.61326,69.735971 236.61747,69.47266 235.53125,69.28125 C 234.43805,69.089451 233.26588,68.999996 232.03125,69 z"
transform="matrix(1.9004227,0,0,2.1605426,-144.06213,-54.080394)" /><svg:path
sodipodi:type="inkscape:offset"
inkscape:radius="0.31680581"
inkscape:original="M 209.78125 69.375 L 209.78125 75.71875 C 209.78125 76.722975 210.48283 77.545802 211.84375 78.15625 C 213.20466 78.766702 214.84947 79.062496 216.8125 79.0625 C 218.76553 79.0625 220.447 78.766705 221.8125 78.15625 C 223.17799 77.545799 223.84375 76.722973 223.84375 75.71875 L 223.84375 69.375 L 220.84375 69.375 L 220.84375 75.5625 C 220.84375 76.227955 220.46088 76.743733 219.6875 77.09375 C 218.91413 77.44377 217.95215 77.625001 216.8125 77.625 C 215.67285 77.625 214.71047 77.443773 213.9375 77.09375 C 213.16454 76.74373 212.78124 76.22837 212.78125 75.5625 L 212.78125 69.375 L 209.78125 69.375 z "
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.41669059;stroke-opacity:1"
id="path4016"
d="M 209.6875,69.0625 C 209.60664,69.087455 209.53913,69.143718 209.5,69.21875 C 209.47644,69.267321 209.46569,69.321105 209.46875,69.375 L 209.46875,75.71875 C 209.46875,76.870528 210.29793,77.800184 211.71875,78.4375 C 213.13176,79.071324 214.81765,79.374996 216.8125,79.375 C 218.79752,79.375 220.51835,79.071941 221.9375,78.4375 C 223.3648,77.799418 224.15625,76.862993 224.15625,75.71875 L 224.15625,69.375 C 224.15918,69.259813 224.09935,69.152114 224,69.09375 C 223.95143,69.070193 223.89765,69.059436 223.84375,69.0625 L 220.84375,69.0625 C 220.72856,69.059567 220.62086,69.1194 220.5625,69.21875 C 220.53894,69.267321 220.52819,69.321105 220.53125,69.375 L 220.53125,75.5625 C 220.53125,76.106439 220.26515,76.494492 219.5625,76.8125 C 218.84161,77.138767 217.91856,77.312501 216.8125,77.3125 C 215.70644,77.3125 214.78289,77.138713 214.0625,76.8125 C 213.36014,76.494449 213.09374,76.106791 213.09375,75.5625 L 213.09375,69.375 C 213.09668,69.259813 213.03685,69.152114 212.9375,69.09375 C 212.88893,69.070193 212.83515,69.059436 212.78125,69.0625 L 209.78125,69.0625 C 209.75017,69.057851 209.71858,69.057851 209.6875,69.0625 z"
transform="matrix(1.94804,0,0,2.1653652,-157.18841,-54.536442)" /><svg:path
sodipodi:type="inkscape:offset"
inkscape:radius="0.27165872"
inkscape:original="M 196.09375 69.375 L 196.09375 79 L 208.75 79 L 208.75 77.625 L 199.09375 77.625 L 199.09375 69.375 L 196.09375 69.375 z "
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.41669059;stroke-opacity:1"
id="path4012"
d="M 196.03125,69.09375 C 196.02,69.103301 196.00955,69.113752 196,69.125 C 195.95005,69.143336 195.90659,69.175934 195.875,69.21875 C 195.84362,69.254254 195.82208,69.297346 195.8125,69.34375 C 195.8119,69.354158 195.8119,69.364592 195.8125,69.375 L 195.8125,79 C 195.8171,79.032898 195.82769,79.064673 195.84375,79.09375 C 195.86209,79.143698 195.89468,79.187162 195.9375,79.21875 C 195.973,79.250127 196.0161,79.271673 196.0625,79.28125 C 196.07291,79.28185 196.08334,79.28185 196.09375,79.28125 L 208.75,79.28125 C 208.7829,79.276652 208.81467,79.26606 208.84375,79.25 C 208.8937,79.231664 208.93716,79.199066 208.96875,79.15625 C 209.00013,79.120746 209.02167,79.077654 209.03125,79.03125 C 209.03185,79.020842 209.03185,79.010408 209.03125,79 L 209.03125,77.625 C 209.02665,77.592102 209.01606,77.560327 209,77.53125 C 208.98166,77.481302 208.94907,77.437838 208.90625,77.40625 C 208.87075,77.374873 208.82765,77.353327 208.78125,77.34375 C 208.77084,77.34315 208.76041,77.34315 208.75,77.34375 L 199.375,77.34375 L 199.375,69.375 C 199.3704,69.342102 199.35981,69.310327 199.34375,69.28125 C 199.32541,69.231302 199.29282,69.187838 199.25,69.15625 C 199.2145,69.124873 199.1714,69.103327 199.125,69.09375 C 199.11459,69.09315 199.10416,69.09315 199.09375,69.09375 L 196.09375,69.09375 C 196.07299,69.091346 196.05201,69.091346 196.03125,69.09375 z"
transform="matrix(2.1602145,0,0,2.1878456,-203.35559,-56.141721)" /><svg:path
sodipodi:type="inkscape:offset"
inkscape:radius="0.32599047"
inkscape:original="M 181.03125 69.375 L 181.03125 79 L 184.03125 79 L 184.03125 75.21875 L 188.5625 75.21875 C 190.58803 75.21875 192.13453 74.934199 193.1875 74.3125 C 194.24047 73.691631 194.78125 73.030454 194.78125 72.34375 C 194.78125 71.824554 194.57254 71.362939 194.15625 70.96875 C 193.73998 70.574561 193.22171 70.255846 192.625 70.03125 C 191.8562 69.740816 191.11588 69.548337 190.40625 69.46875 C 189.69663 69.389162 188.95587 69.374999 188.1875 69.375 L 181.03125 69.375 z M 184.03125 70.75 L 188.34375 70.75 C 189.21213 70.75 189.9483 70.819158 190.5 71 C 191.35963 71.273349 191.78125 71.73122 191.78125 72.3125 C 191.78125 72.695855 191.51586 73.049567 190.96875 73.375 C 190.42163 73.701269 189.58048 73.84375 188.46875 73.84375 L 184.03125 73.84375 L 184.03125 70.75 z "
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.41669059;stroke-opacity:1"
id="path4008"
d="M 180.90625,69.0625 C 180.78593,69.118749 180.71176,69.242365 180.71875,69.375 L 180.71875,79 C 180.72565,79.169648 180.8616,79.305598 181.03125,79.3125 L 184.03125,79.3125 C 184.2009,79.305598 184.33685,79.169648 184.34375,79 L 184.34375,75.53125 L 188.5625,75.53125 C 190.61856,75.53125 192.20795,75.264356 193.34375,74.59375 C 194.44188,73.946254 195.09375,73.201599 195.09375,72.34375 C 195.09375,71.737191 194.84405,71.1629 194.375,70.71875 C 193.92434,70.291996 193.38363,69.957241 192.75,69.71875 C 191.96102,69.420693 191.18003,69.239526 190.4375,69.15625 C 189.70717,69.074339 188.95988,69.062499 188.1875,69.0625 L 181.03125,69.0625 C 180.98997,69.054438 180.94753,69.054438 180.90625,69.0625 L 180.90625,69.0625 z M 184.34375,71.0625 L 188.34375,71.0625 C 189.19482,71.0625 189.91274,71.150732 190.40625,71.3125 C 190.80064,71.43791 191.05698,71.61307 191.21875,71.78125 C 191.38052,71.94943 191.46875,72.100677 191.46875,72.3125 C 191.46875,72.545403 191.31022,72.797695 190.8125,73.09375 C 190.35576,73.366122 189.55263,73.53125 188.46875,73.53125 L 184.34375,73.53125 L 184.34375,71.0625 z"
transform="matrix(1.9895419,0,0,2.1769939,-171.17418,-55.329089)" /><svg:path
sodipodi:type="inkscape:offset"
inkscape:radius="0.84456319"
inkscape:original="M 259.78125 29.8125 C 259.22496 29.773331 258.48715 29.724577 257.375 29.84375 C 253.36435 30.042094 249.97974 31.282781 247.4375 33.625 C 244.61817 36.245984 242.84375 40.280974 242.84375 45.125 C 242.84375 51.281187 246.21459 56.40625 253.125 56.40625 C 258.68449 56.40625 262.62499 52.185295 262.625 47.0625 C 262.625 41.702192 258.95441 38.656248 254.625 38.65625 C 252.24278 38.65625 250.42841 39.417428 249.15625 40.6875 L 249.03125 40.6875 C 249.70671 37.710246 252.07677 34.927939 257.4375 34.53125 C 258.39089 34.451245 259.10662 34.397915 259.78125 34.4375 L 259.78125 29.8125 z M 252.65625 42.9375 C 255.23681 42.9375 256.49999 44.992364 256.5 47.375 C 256.5 49.995984 255.13678 51.96875 253.03125 51.96875 L 253 51.96875 C 250.26068 51.96875 248.96292 49.490157 248.84375 46.75 C 248.84375 46.035792 248.8954 45.575855 249.09375 45.21875 C 249.65003 43.947427 251.0274 42.937499 252.65625 42.9375 z "
style="fill:#000000;stroke:#000000;stroke-width:0.61612201;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3992"
d="M 259.84375,28.96875 C 259.29789,28.930316 258.47398,28.885471 257.34375,29 C 257.3155,29.002863 257.30992,28.996928 257.28125,29 C 253.14728,29.215813 249.56891,30.518042 246.875,33 C 243.86851,35.794973 242,40.074725 242,45.125 C 242,48.357241 242.88741,51.38665 244.75,53.625 C 246.61259,55.86335 249.46101,57.25 253.125,57.25 C 259.11197,57.25 263.46874,52.618391 263.46875,47.0625 C 263.46875,41.316636 259.35054,37.812498 254.625,37.8125 C 253.22191,37.8125 251.99005,38.098012 250.90625,38.5625 C 252.01379,36.92052 253.96586,35.636523 257.5,35.375 C 258.44946,35.295325 259.12327,35.246309 259.71875,35.28125 C 259.95308,35.298386 260.18395,35.217145 260.35591,35.057044 C 260.52787,34.896944 260.62538,34.672452 260.625,34.4375 L 260.625,29.8125 C 260.62578,29.370036 260.28497,29.00196 259.84375,28.96875 L 259.84375,28.96875 z M 252.65625,43.78125 C 253.72236,43.78125 254.38419,44.157287 254.875,44.78125 C 255.36581,45.405213 255.65625,46.332932 255.65625,47.375 C 255.65625,48.539068 255.346,49.516176 254.875,50.15625 C 254.404,50.796324 253.82025,51.125 253.03125,51.125 L 253,51.125 C 251.88507,51.125 251.17832,50.687159 250.625,49.90625 C 250.07168,49.125341 249.74178,47.966919 249.6875,46.71875 C 249.6875,46.04526 249.76465,45.767412 249.84375,45.625 C 249.85502,45.604607 249.86545,45.583755 249.875,45.5625 C 250.29189,44.609739 251.3765,43.781249 252.65625,43.78125 z"
transform="matrix(2.0621311,0,0,2.0347153,-182.7926,-48.427014)" /><svg:path
sodipodi:type="inkscape:offset"
inkscape:radius="0"
inkscape:original="M 259.78125 29.8125 C 259.22496 29.773331 258.48715 29.724577 257.375 29.84375 C 253.36435 30.042094 249.97974 31.282781 247.4375 33.625 C 244.61817 36.245984 242.84375 40.280974 242.84375 45.125 C 242.84375 51.281187 246.21459 56.40625 253.125 56.40625 C 258.68449 56.40625 262.62499 52.185295 262.625 47.0625 C 262.625 41.702192 258.95441 38.656248 254.625 38.65625 C 252.24278 38.65625 250.42841 39.417428 249.15625 40.6875 L 249.03125 40.6875 C 249.70671 37.710246 252.07677 34.927939 257.4375 34.53125 C 258.39089 34.451245 259.10662 34.397915 259.78125 34.4375 L 259.78125 29.8125 z M 252.65625 42.9375 C 255.23681 42.9375 256.49999 44.992364 256.5 47.375 C 256.5 49.995984 255.13678 51.96875 253.03125 51.96875 L 253 51.96875 C 250.26068 51.96875 248.96292 49.490157 248.84375 46.75 C 248.84375 46.035792 248.8954 45.575855 249.09375 45.21875 C 249.65003 43.947427 251.0274 42.937499 252.65625 42.9375 z "
style="fill:#0024bf;stroke:#ffffff;stroke-width:0.65388131;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3990"
d="M 259.78125,29.8125 C 259.22496,29.773331 258.48715,29.724577 257.375,29.84375 C 253.36435,30.042094 249.97974,31.282781 247.4375,33.625 C 244.61817,36.245984 242.84375,40.280974 242.84375,45.125 C 242.84375,51.281187 246.21459,56.40625 253.125,56.40625 C 258.68449,56.40625 262.62499,52.185295 262.625,47.0625 C 262.625,41.702192 258.95441,38.656248 254.625,38.65625 C 252.24278,38.65625 250.42841,39.417428 249.15625,40.6875 L 249.03125,40.6875 C 249.70671,37.710246 252.07677,34.927939 257.4375,34.53125 C 258.39089,34.451245 259.10662,34.397915 259.78125,34.4375 L 259.78125,29.8125 z M 252.65625,42.9375 C 255.23681,42.9375 256.49999,44.992364 256.5,47.375 C 256.5,49.995984 255.13678,51.96875 253.03125,51.96875 L 253,51.96875 C 250.26068,51.96875 248.96292,49.490157 248.84375,46.75 C 248.84375,46.035792 248.8954,45.575855 249.09375,45.21875 C 249.65003,43.947427 251.0274,42.937499 252.65625,42.9375 z"
transform="matrix(2.0621311,0,0,2.0347153,-182.7926,-48.427014)" /><svg:path
sodipodi:type="inkscape:offset"
inkscape:radius="0.76836693"
inkscape:original="M 273.53125 30.15625 L 263.8125 45.875 L 263.8125 49.8125 L 275.25 49.8125 L 275.25 55.96875 L 280.96875 55.96875 L 280.96875 49.8125 L 284 49.8125 L 284 45.28125 L 280.96875 45.28125 L 280.96875 30.15625 L 273.53125 30.15625 z M 275.28125 34.75 L 275.40625 34.75 C 275.32624 36.417596 275.24999 38.014076 275.25 39.5625 L 275.25 45.28125 L 269.40625 45.28125 L 269.4375 45.21875 L 272.84375 39.5625 C 273.71713 37.93449 274.44703 36.417594 275.28125 34.75 z "
style="fill:#000000;stroke:#000000;stroke-width:0.61612201;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3988"
d="M 273.53125,29.375 C 273.2619,29.376345 273.01291,29.518623 272.875,29.75 L 263.15625,45.46875 C 263.07722,45.589721 263.03389,45.730524 263.03125,45.875 L 263.03125,49.8125 C 263.02775,50.020754 263.10893,50.221508 263.25621,50.368787 C 263.40349,50.516065 263.60425,50.59725 263.8125,50.59375 L 274.46875,50.59375 L 274.46875,55.96875 C 274.46525,56.177004 274.54643,56.377758 274.69371,56.525037 C 274.84099,56.672315 275.04175,56.7535 275.25,56.75 L 280.96875,56.75 C 281.177,56.7535 281.37776,56.672315 281.52504,56.525037 C 281.67232,56.377758 281.7535,56.177004 281.75,55.96875 L 281.75,50.59375 L 284,50.59375 C 284.20825,50.59725 284.40901,50.516065 284.55629,50.368787 C 284.70357,50.221508 284.78475,50.020754 284.78125,49.8125 L 284.78125,45.28125 C 284.78475,45.072996 284.70357,44.872242 284.55629,44.724963 C 284.40901,44.577685 284.20825,44.4965 284,44.5 L 281.75,44.5 L 281.75,30.15625 C 281.7535,29.947996 281.67232,29.747242 281.52504,29.599963 C 281.37776,29.452685 281.177,29.3715 280.96875,29.375 L 273.53125,29.375 z M 274.53125,37.96875 C 274.51719,38.494989 274.46875,39.044602 274.46875,39.5625 L 274.46875,44.5 L 270.78125,44.5 L 273.5,39.96875 C 273.51071,39.958635 273.52114,39.948214 273.53125,39.9375 C 273.89085,39.267188 274.20457,38.61622 274.53125,37.96875 z"
transform="matrix(2.0348475,0,0,2.1046935,-171.6592,-51.387646)" /><svg:path
sodipodi:type="inkscape:offset"
inkscape:radius="0.74581826"
inkscape:original="M 232.34375 41.40625 C 228.58812 41.40625 226.32212 43.56575 225.40625 45.03125 L 225.28125 45.03125 L 224.96875 41.90625 L 218.90625 41.90625 C 218.99792 43.921365 219.09375 46.268591 219.09375 49.0625 L 219.09375 64.3125 L 226.0625 64.3125 L 226.0625 51.40625 C 226.0625 50.764964 226.0979 50.114191 226.28125 49.65625 C 226.78502 48.373676 227.95113 47.0625 229.875 47.0625 C 232.3939 47.0625 233.40625 49.020667 233.40625 51.90625 L 233.40625 64.3125 L 240.34375 64.3125 L 240.34375 51.09375 C 240.34375 44.498371 236.92401 41.406251 232.34375 41.40625 z "
style="fill:#000000;stroke:#000000;stroke-width:0.61612201;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3976"
d="M 232.34375,40.65625 C 229.34601,40.65625 227.20582,41.946411 225.875,43.28125 L 225.71875,41.84375 C 225.68809,41.453182 225.36051,41.152892 224.96875,41.15625 L 218.90625,41.15625 C 218.70143,41.154892 218.50507,41.237817 218.36323,41.385572 C 218.22138,41.533327 218.14654,41.73291 218.15625,41.9375 C 218.2478,43.949922 218.34375,46.285645 218.34375,49.0625 L 218.34375,64.3125 C 218.34265,64.511748 218.42131,64.703153 218.56221,64.844044 C 218.7031,64.984936 218.8945,65.0636 219.09375,65.0625 L 226.0625,65.0625 C 226.26175,65.0636 226.45315,64.984936 226.59404,64.844044 C 226.73494,64.703153 226.8136,64.511748 226.8125,64.3125 L 226.8125,51.40625 C 226.8125,50.792411 226.86371,50.199846 226.96875,49.9375 C 227.39257,48.858464 228.29,47.8125 229.875,47.8125 C 230.94119,47.8125 231.52564,48.149146 231.96875,48.8125 C 232.41186,49.475854 232.65625,50.550677 232.65625,51.90625 L 232.65625,64.3125 C 232.65515,64.511748 232.73381,64.703153 232.87471,64.844044 C 233.0156,64.984936 233.207,65.0636 233.40625,65.0625 L 240.34375,65.0625 C 240.543,65.0636 240.7344,64.984936 240.87529,64.844044 C 241.01619,64.703153 241.09485,64.511748 241.09375,64.3125 L 241.09375,51.09375 C 241.09375,47.667157 240.20344,45.047654 238.625,43.28125 C 237.04656,41.514846 234.80171,40.656251 232.34375,40.65625 z"
transform="matrix(2.1598653,0,0,2.211555,-208.47012,-58.025335)" /><svg:path
sodipodi:type="inkscape:offset"
inkscape:radius="0.72581476"
inkscape:original="M 207.6875 41.375 C 199.94706 41.375 196.375 47.633006 196.375 53.3125 C 196.375 60.365821 200.74039 64.781249 208.34375 64.78125 C 211.36684 64.78125 214.14738 64.305888 216.4375 63.34375 L 215.53125 58.625 C 213.65322 59.266287 211.72554 59.593749 209.34375 59.59375 C 206.09189 59.59375 203.26043 58.212667 203.03125 55.28125 L 217.4375 55.34375 C 217.52875 54.793718 217.68751 53.753403 217.6875 52.5625 C 217.6875 47.020515 214.92416 41.374999 207.6875 41.375 z M 207.34375 46 C 210.50435 46 211.21875 48.882404 211.21875 50.53125 L 202.96875 50.53125 C 203.15209 48.699062 204.3665 45.999999 207.34375 46 z "
style="fill:#000000;stroke:#000000;stroke-width:0.61612201;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3974"
d="M 207.6875,40.65625 C 203.62168,40.65625 200.54802,42.322818 198.5625,44.75 C 196.57698,47.177182 195.65625,50.320588 195.65625,53.3125 C 195.65625,56.988899 196.80054,60.079876 199,62.21875 C 201.19946,64.357624 204.40157,65.499999 208.34375,65.5 C 211.44293,65.5 214.31392,65.010331 216.71875,64 C 217.02696,63.871258 217.20753,63.548808 217.15625,63.21875 L 216.25,58.5 C 216.21475,58.286105 216.08574,58.09916 215.89827,57.990307 C 215.7108,57.881454 215.48449,57.862085 215.28125,57.9375 C 213.47545,58.554122 211.65901,58.874999 209.34375,58.875 C 207.82057,58.875 206.42468,58.520926 205.4375,57.90625 C 204.69271,57.4425 204.25391,56.796087 204,56 L 217.4375,56.0625 C 217.78931,56.064917 218.09221,55.814696 218.15625,55.46875 C 218.24944,54.907039 218.40626,53.817912 218.40625,52.5625 C 218.40625,49.670872 217.69031,46.707993 215.96875,44.4375 C 214.24719,42.167007 211.49457,40.656249 207.6875,40.65625 z M 207.34375,46.71875 C 208.70341,46.71875 209.37392,47.272299 209.84375,48.03125 C 210.17841,48.571856 210.32782,49.208925 210.40625,49.8125 L 203.875,49.8125 C 204.03456,49.194904 204.27665,48.562709 204.6875,48.03125 C 205.27831,47.266996 206.07446,46.71875 207.34375,46.71875 z"
transform="matrix(2.1780212,0,0,2.172861,-216.10678,-56.455307)" /><svg:path
sodipodi:type="inkscape:offset"
inkscape:radius="0.74645191"
inkscape:original="M 186.625 41.40625 C 183.37314 41.40625 180.80551 42.6957 179.15625 45.03125 L 179.0625 45.03125 L 178.75 41.90625 L 172.71875 41.90625 C 172.81043 44.013037 172.875 46.506082 172.875 49.4375 L 172.875 73.375 L 179.84375 73.375 L 179.84375 62.25 L 179.9375 62.25 C 180.94506 63.7155 183.04776 64.812497 185.75 64.8125 C 190.74237 64.8125 195.9375 60.965051 195.9375 52.8125 C 195.9375 45.667506 191.5257 41.406251 186.625 41.40625 z M 184.15625 46.875 C 187.27059 46.875 188.875 49.583963 188.875 53.15625 C 188.875 56.957719 187.08517 59.468749 184.0625 59.46875 C 182.04738 59.46875 180.45836 58.034275 180 56.15625 C 179.90833 55.69789 179.84375 55.237114 179.84375 54.6875 L 179.84375 51.625 C 179.84375 51.212893 179.90833 50.772521 180 50.40625 C 180.45836 48.344882 182.18654 46.874998 184.15625 46.875 z "
style="fill:#000000;stroke:#000000;stroke-width:0.61612201;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3972"
d="M 186.625,40.65625 C 183.8122,40.65625 181.41812,41.626005 179.65625,43.34375 L 179.5,41.84375 C 179.46904,41.453328 179.14164,41.153203 178.75,41.15625 L 172.71875,41.15625 C 172.51399,41.155076 172.31774,41.238058 172.17593,41.385771 C 172.03413,41.533484 171.95922,41.732959 171.96875,41.9375 C 172.05998,44.033943 172.125,46.517043 172.125,49.4375 L 172.125,73.375 C 172.12407,73.574196 172.20279,73.765501 172.34364,73.906356 C 172.4845,74.04721 172.6758,74.125929 172.875,74.125 L 179.84375,74.125 C 180.04295,74.125929 180.23425,74.04721 180.37511,73.906356 C 180.51596,73.765501 180.59468,73.574196 180.59375,73.375 L 180.59375,63.96875 C 181.87794,64.944299 183.66507,65.562498 185.75,65.5625 C 191.12588,65.5625 196.6875,61.282164 196.6875,52.8125 C 196.6875,45.360233 191.9584,40.656251 186.625,40.65625 z M 184.15625,47.625 C 185.49699,47.625 186.39199,48.140418 187.0625,49.09375 C 187.73301,50.047082 188.125,51.481857 188.125,53.15625 C 188.125,54.939835 187.6982,56.348154 187,57.28125 C 186.3018,58.214346 185.36713,58.71875 184.0625,58.71875 C 182.40162,58.71875 181.10365,57.545781 180.71875,55.96875 C 180.63272,55.538616 180.59375,55.178642 180.59375,54.6875 L 180.59375,51.625 C 180.59375,51.290876 180.64125,50.903418 180.71875,50.59375 C 180.71897,50.583334 180.71897,50.572916 180.71875,50.5625 C 181.10714,48.815806 182.5579,47.624998 184.15625,47.625 z"
transform="matrix(2.1671517,0,0,2.1728754,-218.89319,-56.72525)" /><svg:path
sodipodi:type="inkscape:offset"
inkscape:radius="0.71880901"
inkscape:original="M 148.84375 41.90625 L 148.84375 55.0625 C 148.84375 61.978731 152.13848 64.812497 156.71875 64.8125 C 160.74939 64.8125 162.84828 62.53008 163.71875 61.15625 L 163.875 61.15625 L 164.1875 64.3125 L 170.21875 64.3125 C 170.12708 62.434476 170.06251 60.056001 170.0625 57.125 L 170.0625 41.90625 L 163.09375 41.90625 L 163.09375 55.25 C 163.09375 55.845451 162.99585 56.337894 162.8125 56.75 C 162.39998 57.849229 161.26719 59.187501 159.34375 59.1875 C 156.87027 59.1875 155.8125 57.221021 155.8125 53.96875 L 155.8125 41.90625 L 148.84375 41.90625 z "
style="fill:#000000;stroke:#000000;stroke-width:0.61612201;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3970"
d="M 148.6875,41.1875 C 148.35245,41.262071 148.11686,41.563102 148.125,41.90625 L 148.125,55.0625 C 148.125,58.634757 148.98347,61.256276 150.53125,63 C 152.07903,64.743724 154.28038,65.531248 156.71875,65.53125 C 159.92184,65.53125 162.04339,64.169628 163.3125,62.84375 L 163.46875,64.375 C 163.50131,64.747332 163.81375,65.032603 164.1875,65.03125 L 170.21875,65.03125 C 170.4149,65.031398 170.6026,64.951387 170.73832,64.809767 C 170.87404,64.668147 170.94599,64.477219 170.9375,64.28125 C 170.84647,62.416327 170.78126,60.045445 170.78125,57.125 L 170.78125,41.90625 C 170.78118,41.509325 170.45942,41.187572 170.0625,41.1875 L 163.09375,41.1875 C 162.69683,41.187572 162.37507,41.509325 162.375,41.90625 L 162.375,55.25 C 162.375,55.766663 162.29178,56.164126 162.15625,56.46875 C 162.14552,56.478844 162.13509,56.489266 162.125,56.5 C 161.79714,57.373635 160.93377,58.468751 159.34375,58.46875 C 158.2975,58.46875 157.7076,58.12273 157.25,57.40625 C 156.7924,56.68977 156.53125,55.516957 156.53125,53.96875 L 156.53125,41.90625 C 156.53118,41.509325 156.20942,41.187572 155.8125,41.1875 L 148.84375,41.1875 C 148.79182,41.181823 148.73943,41.181823 148.6875,41.1875 L 148.6875,41.1875 z"
transform="matrix(2.1714707,0,0,2.2166338,-219.63743,-58.505115)" /><svg:path
i:knockout="Off"
d="M 388.41118,66.408718 L 388.41118,53.451835 L 365.13882,53.451835 L 365.13882,45.178156 L 384.93649,12.07995 L 400.04609,12.07995 L 400.04609,43.924918 L 406.26886,43.924918 L 406.26886,53.451835 L 400.04609,53.451835 L 400.04609,66.408718 L 388.41118,66.408718 z M 388.41118,43.924918 L 388.41118,31.888886 C 388.41118,28.62993 388.57143,25.285029 388.73423,21.775252 L 388.49177,21.775252 C 386.79424,25.285029 385.33924,28.462424 383.56205,31.888886 L 376.61349,43.757409 L 376.53291,43.924918 L 388.41118,43.924918 z"
id="path11"
style="fill:#0024bf;stroke:#ffffff;stroke-width:1.33939565;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><svg:path
i:knockout="Off"
d="M 149.61695,68.126039 C 149.61695,74.622996 149.816,79.90258 150.01508,84.065471 L 136.88687,84.065471 L 136.19018,77.060508 L 135.89156,77.060508 C 134.00134,80.105782 129.42656,85.182167 120.67413,85.182167 C 110.72819,85.182167 103.56736,78.88841 103.56736,63.55766 L 103.56736,34.419258 L 118.68529,34.419258 L 118.68529,61.120144 C 118.68529,68.329241 120.97268,72.695336 126.34379,72.695336 C 130.52047,72.695336 133.00694,69.750734 133.90274,67.314146 C 134.30089,66.40066 134.49995,65.283961 134.49995,63.964065 L 134.49995,34.419258 L 149.61784,34.419258 L 149.61784,68.126039 L 149.61695,68.126039 z"
id="path15"
style="fill:#e80000;fill-opacity:1;stroke:#ffffff;stroke-width:1.33939564999999994;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><svg:path
i:knockout="Off"
d="M 155.77995,50.685752 C 155.77995,44.316142 155.58128,38.942496 155.38261,34.364709 L 168.4847,34.364709 L 169.18002,41.131793 L 169.37869,41.131793 C 172.9529,36.056934 178.51104,33.269155 185.55831,33.269155 C 196.17889,33.269155 205.70766,42.525231 205.70766,58.050415 C 205.70766,75.764893 194.4911,84.125508 183.6719,84.125508 C 177.81571,84.125508 173.2491,81.73702 171.06555,78.552672 L 170.8669,78.552672 L 170.8669,102.73637 L 155.77995,102.73637 L 155.77995,50.685752 z M 170.86779,62.131126 C 170.86779,63.32537 170.96712,64.320422 171.1658,65.316383 C 172.15913,69.397094 175.63309,72.481848 180.00016,72.481848 C 186.55074,72.481848 190.42204,67.007702 190.42204,58.747581 C 190.42204,50.985445 186.94807,45.112912 180.19883,45.112912 C 175.93021,45.112912 172.15913,48.297262 171.1658,52.776358 C 170.96712,53.57222 170.86779,54.56818 170.86779,55.463638 L 170.86779,62.131126 L 170.86779,62.131126 z"
id="path17"
style="fill:#e80000;fill-opacity:1;stroke:#ffffff;stroke-width:1.33939564999999994;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><svg:path
i:knockout="Off"
d="M 226.08496,63.694111 C 226.58414,70.063678 232.76915,73.049724 239.85176,73.049724 C 245.03937,73.049724 249.22867,72.352557 253.31905,70.959129 L 255.31387,81.209286 C 250.32593,83.299878 244.24072,84.294927 237.65637,84.294927 C 221.0961,84.294927 211.62026,74.740125 211.62026,59.414238 C 211.62026,47.073487 219.40167,33.438905 236.26054,33.438905 C 252.02215,33.438905 258.00751,45.68006 258.00751,57.722024 C 258.00751,60.30969 257.70801,62.598566 257.50925,63.793708 L 226.08496,63.694111 z M 243.94122,53.343456 C 243.94122,49.760746 242.34574,43.490777 235.46188,43.490777 C 228.97736,43.490777 226.38444,49.362367 225.98512,53.343456 L 243.94122,53.343456 z"
id="path19"
style="fill:#e80000;fill-opacity:1;stroke:#ffffff;stroke-width:1.33939564999999994;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><svg:path
i:knockout="Off"
d="M 264.75827,50.487654 C 264.75827,44.30877 264.56025,39.14265 264.36225,34.686111 L 277.42028,34.686111 L 278.11331,41.573658 L 278.41032,41.573658 C 280.38848,38.332623 285.23586,33.571053 293.3475,33.571053 C 303.24025,33.571053 310.65983,40.358153 310.65983,54.944193 L 310.65983,84.21857 L 295.6227,84.21857 L 295.6227,56.767912 C 295.6227,50.386288 293.44654,46.031119 288.00603,46.031119 C 283.85077,46.031119 281.37756,48.968969 280.2895,51.805449 C 279.89348,52.818215 279.79449,54.236458 279.79449,55.654699 L 279.79449,84.220413 L 264.75736,84.220413 L 264.75736,50.487654 L 264.75827,50.487654 z"
id="path21"
style="fill:#e80000;fill-opacity:1;stroke:#ffffff;stroke-width:1.33939564999999994;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><svg:path
i:knockout="Off"
d="M 188.97102,116.63279 L 188.97102,95.674379 L 203.24766,95.674379 C 204.77634,95.674379 206.24787,95.761463 207.65971,95.934722 C 209.07153,96.107991 210.54389,96.510755 212.07344,97.143024 C 213.26059,97.631974 214.26701,98.306871 215.09521,99.165026 C 215.92341,100.02318 216.3371,101.01831 216.3371,102.14859 C 216.3371,103.64355 215.28754,105.06865 213.19262,106.42028 C 211.09766,107.77372 208.03359,108.44863 204.0037,108.44863 L 194.93587,108.44863 L 194.93587,116.63188 L 188.97102,116.63188 L 188.97102,116.63279 z M 194.93667,98.681517 L 194.93667,105.44239 L 203.789,105.44239 C 206.00084,105.44239 207.65223,105.08771 208.74076,104.37742 C 209.82926,103.66895 210.37476,102.89607 210.37476,102.06151 C 210.37476,100.79606 209.52004,99.866246 207.80977,99.271159 C 206.71213,98.877464 205.30029,98.681517 203.57262,98.681517 L 194.93667,98.681517 z"
id="path25"
style="fill:#6bba3f;fill-opacity:1;stroke:#ffffff;stroke-width:0.66969783;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><svg:path
i:knockout="Off"
d="M 220.25811,116.67735 L 220.25811,95.614472 L 226.73466,95.614472 L 226.73466,113.6698 L 247.56842,113.6698 L 247.56842,116.67735 L 220.25811,116.67735 z"
id="path27"
style="fill:#6bba3f;fill-opacity:1;stroke:#ffffff;stroke-width:0.66972035;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><svg:path
i:knockout="Off"
d="M 251.49658,109.4546 L 251.49658,95.660419 L 257.33699,95.660419 L 257.33699,109.09639 C 257.33699,110.53825 258.09029,111.63543 259.59601,112.39335 C 261.10178,113.15127 262.96472,113.53023 265.18481,113.53023 C 267.4049,113.53023 269.26702,113.15127 270.77357,112.39335 C 272.28012,111.63543 273.03262,110.53735 273.03262,109.09639 L 273.03262,95.660419 L 278.87139,95.660419 L 278.87139,109.4537 C 278.87139,111.62821 277.54094,113.37684 274.88093,114.69869 C 272.22086,116.02053 268.98939,116.67921 265.18481,116.67921 C 261.36075,116.67921 258.12356,116.02053 255.47246,114.69869 C 252.82133,113.37684 251.49658,111.62911 251.49658,109.4546 z"
id="path29"
style="fill:#6bba3f;fill-opacity:1;stroke:#ffffff;stroke-width:0.66969783;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><svg:path
i:knockout="Off"
d="M 282.64533,113.89826 L 286.40838,111.52782 C 287.81714,112.15712 289.44133,112.66218 291.28007,113.0421 C 293.11885,113.42201 295.04473,113.61197 297.05533,113.61197 C 299.37556,113.61197 301.19612,113.34639 302.51934,112.81342 C 303.84259,112.28045 304.50542,111.58094 304.50542,110.71397 C 304.50542,109.07907 302.87175,108.14188 299.60677,107.9024 C 298.74681,107.84569 297.94699,107.78807 297.20817,107.73226 C 296.46933,107.67644 295.61014,107.60891 294.63136,107.53149 C 291.38303,107.28571 288.90838,106.62582 287.2074,105.55539 C 285.50644,104.48495 284.65515,103.19216 284.65515,101.67788 C 284.65515,99.908833 285.72422,98.453081 287.86469,97.309734 C 290.00357,96.168177 293.01512,95.597403 296.90012,95.597403 C 299.22034,95.597403 301.40281,95.80356 303.44744,96.211394 C 305.49211,96.621018 307.37442,97.139575 309.09283,97.767965 L 305.92209,100.36707 C 304.5474,99.892634 303.06814,99.505504 301.48751,99.210213 C 299.90693,98.914922 298.29067,98.767281 296.64194,98.767281 C 294.88792,98.767281 293.40156,99.014855 292.18128,99.510904 C 290.96097,100.00697 290.35121,100.7488 290.35121,101.7373 C 290.35121,102.32788 290.76297,102.88066 291.58892,103.39381 C 292.4133,103.90697 293.77927,104.24458 295.68771,104.40663 C 296.18583,104.45615 296.78769,104.50476 297.49244,104.55788 C 298.19643,104.61099 299.00336,104.66501 299.91643,104.72173 C 303.4213,104.9612 306.01158,105.66432 307.688,106.83557 C 309.36284,108.00684 310.20148,109.29874 310.20148,110.71667 C 310.20148,112.62976 309.00569,114.11523 306.61816,115.17216 C 304.23061,116.22907 301.02427,116.75665 297.00229,116.75665 C 291.34821,116.75394 286.56283,115.80325 282.64533,113.89826 z"
id="path31"
style="fill:#6bba3f;fill-opacity:1;stroke:#ffffff;stroke-width:0.66969783;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><svg:g
id="g3901"
transform="matrix(0.9057368,0,0,0.9051991,37.74448,-1.6510286)"><svg:path
transform="translate(-47.989382,-4.8490778)"
d="M 62.4375,5.09375 C 62.167082,5.1027666 61.901305,5.1665532 61.65625,5.28125 L 48.34375,11.78125 C 47.950444,11.975757 47.632007,12.294194 47.4375,12.6875 L 38.5,30.125 L 25.46875,23.78125 C 24.916364,23.512529 24.271136,23.512529 23.71875,23.78125 L 10.40625,30.28125 C 9.7134798,30.618337 9.2758905,31.323342 9.28125,32.09375 L 9.28125,93.09375 C 9.2758905,93.864158 9.7134798,94.569163 10.40625,94.90625 L 23.71875,101.40625 C 24.271136,101.67497 24.916364,101.67497 25.46875,101.40625 L 38.8125,94.90625 C 39.50527,94.569163 39.94286,93.864158 39.9375,93.09375 L 39.9375,83.1875 C 40.366689,83.288163 40.817111,83.244219 41.21875,83.0625 L 47.21875,80.1875 L 47.21875,111.59375 C 47.21339,112.36416 47.65098,113.06916 48.34375,113.40625 L 61.65625,119.90625 C 62.208636,120.17497 62.853864,120.17497 63.40625,119.90625 L 76.75,113.40625 C 77.44277,113.06916 77.88036,112.36416 77.875,111.59375 L 77.875,80.1875 L 83.875,83.0625 C 84.263962,83.247857 84.70238,83.302659 85.125,83.21875 L 85.125,93.09375 C 85.11964,93.864158 85.55723,94.569163 86.25,94.90625 L 99.59375,101.40625 C 100.14614,101.67497 100.79136,101.67497 101.34375,101.40625 L 114.65625,94.90625 C 115.34902,94.569163 115.78661,93.864158 115.78125,93.09375 L 115.78125,32.09375 C 115.78661,31.323342 115.34902,30.618337 114.65625,30.28125 L 101.34375,23.78125 C 100.79136,23.512529 100.14614,23.512529 99.59375,23.78125 L 86.59375,30.125 L 77.65625,12.6875 C 77.461743,12.294194 77.143306,11.975757 76.75,11.78125 L 63.40625,5.28125 C 63.104058,5.1388311 62.771008,5.0743697 62.4375,5.09375 L 62.4375,5.09375 z"
id="path4621"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:original="M 62.53125 7.09375 L 49.21875 13.59375 L 39.125 33.25 L 37.9375 32.09375 L 24.59375 25.59375 L 11.28125 32.09375 L 11.28125 93.09375 L 24.59375 99.59375 L 37.9375 93.09375 L 37.9375 80.09375 L 40.34375 81.25 L 49.21875 77 L 49.21875 111.59375 L 62.53125 118.09375 L 75.875 111.59375 L 75.875 77 L 84.75 81.25 L 87.125 80.09375 L 87.125 93.09375 L 100.46875 99.59375 L 113.78125 93.09375 L 113.78125 32.09375 L 100.46875 25.59375 L 87.125 32.09375 L 85.9375 33.25 L 75.875 13.59375 L 62.53125 7.09375 z M 42.03125 40.09375 L 42.0625 40.09375 L 48.03125 51.75 L 48 51.78125 L 42.03125 40.09375 z "
inkscape:radius="2"
sodipodi:type="inkscape:offset" /><svg:path
style="fill:url(#linearGradient4222);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 14.544885,15.244672 L 1.21791,8.7446722 L 14.544885,2.2446722 L 27.87186,8.7446722 L 14.544885,15.244672 z"
id="path3794"
sodipodi:nodetypes="ccccc" /><svg:path
style="fill:url(#linearGradient4224);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 14.544885,15.244672 L 1.21791,8.7446722 L -11.083913,32.744672 L 2.243062,39.244672 L 14.544885,15.244672 z"
id="path3810"
sodipodi:nodetypes="ccccc" /><svg:path
sodipodi:nodetypes="ccccccc"
id="path3734"
d="M 14.544885,39.244672 L 14.544885,15.244672 L 2.243062,39.244672 L -10.058761,27.244672 L 0.192758,47.244672 L 14.544885,39.244672 L 14.544885,39.244672"
style="fill:url(#linearGradient4226);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><svg:path
sodipodi:nodetypes="ccccc"
id="path3720"
d="M -23.385736,33.744672 L -10.058761,27.244672 L 2.243062,51.244672 L -11.083913,57.744672 L -23.385736,33.744672 z"
style="fill:url(#linearGradient4228);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><svg:path
sodipodi:nodetypes="cccc"
id="path3736"
d="M -7.656686,76.415672 L 1.21791,72.150922 L 1.21791,67.744672 L -7.656686,76.415672 z"
style="fill:url(#linearGradient4230);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><svg:path
style="fill:url(#linearGradient4232);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M -10.058761,75.244668 L -10.058761,88.244672 L -23.385736,94.744672 L -23.385736,55.744668"
id="path3742"
sodipodi:nodetypes="cccc" /><svg:path
sodipodi:nodetypes="cccccccccccccc"
id="path2384"
d="M 1.21791,106.74467 L 14.544885,113.24467 L 14.544885,52.244672 L 1.21791,45.744672 L -11.083913,57.744672 L -23.385736,33.744672 L -36.712711,27.244672 L -36.712711,88.244672 L -23.385736,94.744672 L -23.385736,55.744672 L -14.488512,73.084138 L -7.656889,76.416143 L 1.21791,67.744672 L 1.21791,106.74467 z"
style="opacity:0.95999995;fill:url(#linearGradient4234);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><svg:path
sodipodi:nodetypes="ccccc"
id="path3796"
d="M -23.385736,33.744672 L -36.712711,27.244672 L -23.385736,20.744672 L -10.058761,27.244672 L -23.385736,33.744672 z"
style="fill:url(#linearGradient4236);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><svg:path
sodipodi:nodetypes="ccccc"
id="path3889"
d="M 14.544883,15.244672 L 27.871858,8.7446722 L 40.173681,32.744672 L 26.846706,39.244672 L 14.544883,15.244672 z"
style="fill:url(#linearGradient4238);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><svg:path
style="fill:url(#linearGradient4240);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 14.544883,39.244672 L 14.544883,15.244672 L 26.846706,39.244672 L 39.148529,27.244672 L 28.89701,47.244672 L 14.544883,39.244672 L 14.544883,39.244672"
id="path3891"
sodipodi:nodetypes="ccccccc" /><svg:path
style="fill:url(#linearGradient4242);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 52.475508,33.744672 L 39.148529,27.244672 L 26.846706,51.244672 L 40.173681,57.744672 L 52.475508,33.744672 z"
id="path3893"
sodipodi:nodetypes="ccccc" /><svg:path
style="fill:url(#linearGradient4244);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 36.746454,76.415672 L 27.871858,72.150922 L 27.871858,67.744672 L 36.746454,76.415672 z"
id="path3895"
sodipodi:nodetypes="cccc" /><svg:path
sodipodi:nodetypes="cccc"
id="path3897"
d="M 39.148529,75.244668 L 39.148529,88.244672 L 52.475508,94.744672 L 52.475508,55.744668"
style="fill:url(#linearGradient4246);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><svg:path
style="fill:url(#linearGradient4248);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 27.871858,106.74467 L 14.544883,113.24467 L 14.544883,52.244672 L 27.871858,45.744672 L 40.173681,57.744672 L 52.475508,33.744672 L 65.802478,27.244672 L 65.802478,88.244672 L 52.475508,94.744672 L 52.475508,55.744672 L 43.57828,73.084138 L 36.746657,76.416143 L 27.871858,67.744672 L 27.871858,106.74467 z"
id="path3899"
sodipodi:nodetypes="cccccccccccccc" /><svg:path
style="fill:url(#linearGradient4250);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 52.475508,33.744672 L 65.802478,27.244672 L 52.475508,20.744672 L 39.148529,27.244672 L 52.475508,33.744672 z"
id="path3901"
sodipodi:nodetypes="ccccc" /><svg:path
sodipodi:nodetypes="ccccc"
id="path3714"
d="M 14.544885,52.244672 L 1.21791,45.744672 L 14.544885,39.244672 L 27.87186,45.744672 L 14.544885,52.244672 z"
style="fill:url(#linearGradient4252);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /></svg:g><svg:path
sodipodi:type="arc"
style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.75;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4136"
sodipodi:cx="221.82419"
sodipodi:cy="152.30473"
sodipodi:rx="1.3362902"
sodipodi:ry="0"
d="M 223.16048,152.30473 A 1.3362902,0 0 1 1 220.4879,152.30473 A 1.3362902,0 0 1 1 223.16048,152.30473 z" /></svg:svg>

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

1478
data/icons/mupen64plus.svg Normal file

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
data/icons/spain.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 527 B

BIN
data/icons/usa.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 528 B

15366
data/mupen64plus.cht Normal file

File diff suppressed because it is too large Load diff

13
data/mupen64plus.conf Normal file
View file

@ -0,0 +1,13 @@
[Default]
PluginDirectory =
Gfx Plugin = ricevideo.so
Audio Plugin = jttl_audio.so
Input Plugin = blight_input.so
RSP Plugin = mupen64_hle_rsp_azimer.so
RomDirsScanRecursive = false
NoCompiledJump = false
NoMemoryExpansion = true
AutoIncSaveSlot = false
Core = 1

View file

@ -0,0 +1,10 @@
[Desktop Entry]
Encoding=UTF-8
Type=Application
Exec=mupen64plus --installdir SHARE_DIR
Icon=SHARE_DIR/icons/mupen64plus-large.png
Comment=Mupen64Plus Nintendo 64 Emulator
Terminal=false
Name=Mupen64Plus
GenericName=Nintendo 64 Emulator
Categories=Game;

16004
data/mupen64plus.ini Normal file

File diff suppressed because it is too large Load diff

232
doc/Audio_1.1.h Normal file
View file

@ -0,0 +1,232 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Mupen64plus - Audio_1.1.h *
* Mupen64Plus homepage: http://code.google.com/p/mupen64plus/ *
* Copyright (C) 2002 Zilmar *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/**********************************************************************************
Notes:
------
Setting the approprate bits in the MI_INTR_REG and calling CheckInterrupts which
are both passed to the DLL in InitiateAudio will generate an Interrupt from with in
the plugin.
**********************************************************************************/
#ifndef _AUDIO_H_INCLUDED__
#define _AUDIO_H_INCLUDED__
#if defined(__cplusplus)
extern "C" {
#endif
/* Note: BOOL, BYTE, WORD, DWORD, TRUE, FALSE are defined in windows.h */
#define PLUGIN_TYPE_AUDIO 3
#define EXPORT __declspec(dllexport)
#define CALL _cdecl
#define SYSTEM_NTSC 0
#define SYSTEM_PAL 1
#define SYSTEM_MPAL 2
#ifndef __PLUGIN_INFO__
#define __PLUGIN_INFO__
/***** Structures *****/
typedef struct {
WORD Version; /* Should be set to 0x0101 */
WORD Type; /* Set to PLUGIN_TYPE_AUDIO */
char Name[100]; /* Name of the DLL */
/* If DLL supports memory these memory options then set them to TRUE or FALSE
if it does not support it */
BOOL NormalMemory; /* a normal BYTE array */
BOOL MemoryBswaped; /* a normal BYTE array where the memory has been pre
bswap on a dword (32 bits) boundry */
} PLUGIN_INFO;
#endif //__PLUGIN_INFO__
typedef struct {
HWND hwnd;
HINSTANCE hinst;
BOOL MemoryBswaped; // If this is set to TRUE, then the memory has been pre
// bswap on a dword (32 bits) boundry
// eg. the first 8 bytes are stored like this:
// 4 3 2 1 8 7 6 5
BYTE * HEADER; // This is the rom header (first 40h bytes of the rom
// This will be in the same memory format as the rest of the memory.
BYTE * RDRAM;
BYTE * DMEM;
BYTE * IMEM;
DWORD * MI_INTR_REG;
DWORD * AI_DRAM_ADDR_REG;
DWORD * AI_LEN_REG;
DWORD * AI_CONTROL_REG;
DWORD * AI_STATUS_REG;
DWORD * AI_DACRATE_REG;
DWORD * AI_BITRATE_REG;
void (*CheckInterrupts)( void );
} AUDIO_INFO;
/******************************************************************
Function: AiDacrateChanged
Purpose: This function is called to notify the dll that the
AiDacrate registers value has been changed.
input: The System type:
SYSTEM_NTSC 0
SYSTEM_PAL 1
SYSTEM_MPAL 2
output: none
*******************************************************************/
EXPORT void CALL AiDacrateChanged (int SystemType);
/******************************************************************
Function: AiLenChanged
Purpose: This function is called to notify the dll that the
AiLen registers value has been changed.
input: none
output: none
*******************************************************************/
EXPORT void CALL AiLenChanged (void);
/******************************************************************
Function: AiReadLength
Purpose: This function is called to allow the dll to return the
value that AI_LEN_REG should equal
input: none
output: The amount of bytes still left to play.
*******************************************************************/
EXPORT DWORD CALL AiReadLength (void);
/******************************************************************
Function: AiUpdate
Purpose: This function is called to allow the dll to update
things on a regular basis (check how long to sound to
go, copy more stuff to the buffer, anyhting you like).
The function is designed to go in to the message loop
of the main window ... but can be placed anywhere you
like.
input: if Wait is set to true, then this function should wait
till there is a messgae in the its message queue.
output: none
*******************************************************************/
EXPORT void CALL AiUpdate (BOOL Wait);
/******************************************************************
Function: CloseDLL
Purpose: This function is called when the emulator is closing
down allowing the dll to de-initialise.
input: none
output: none
*******************************************************************/
EXPORT void CALL CloseDLL (void);
/******************************************************************
Function: DllAbout
Purpose: This function is optional function that is provided
to give further information about the DLL.
input: a handle to the window that calls this function
output: none
*******************************************************************/
EXPORT void CALL DllAbout ( HWND hParent );
/******************************************************************
Function: DllConfig
Purpose: This function is optional function that is provided
to allow the user to configure the dll
input: a handle to the window that calls this function
output: none
*******************************************************************/
EXPORT void CALL DllConfig ( HWND hParent );
/******************************************************************
Function: DllTest
Purpose: This function is optional function that is provided
to allow the user to test the dll
input: a handle to the window that calls this function
output: none
*******************************************************************/
EXPORT void CALL DllTest ( HWND hParent );
/******************************************************************
Function: GetDllInfo
Purpose: This function allows the emulator to gather information
about the dll by filling in the PluginInfo structure.
input: a pointer to a PLUGIN_INFO stucture that needs to be
filled by the function. (see def above)
output: none
*******************************************************************/
EXPORT void CALL GetDllInfo ( PLUGIN_INFO * PluginInfo );
/******************************************************************
Function: InitiateSound
Purpose: This function is called when the DLL is started to give
information from the emulator that the n64 audio
interface needs
Input: Audio_Info is passed to this function which is defined
above.
Output: TRUE on success
FALSE on failure to initialise
** note on interrupts **:
To generate an interrupt set the appropriate bit in MI_INTR_REG
and then call the function CheckInterrupts to tell the emulator
that there is a waiting interrupt.
*******************************************************************/
EXPORT BOOL CALL InitiateAudio (AUDIO_INFO Audio_Info);
/******************************************************************
Function: ProcessAList
Purpose: This function is called when there is a Alist to be
processed. The Dll will have to work out all the info
about the AList itself.
input: none
output: none
*******************************************************************/
EXPORT void CALL ProcessAList(void);
/******************************************************************
Function: RomClosed
Purpose: This function is called when a rom is closed.
input: none
output: none
*******************************************************************/
EXPORT void CALL RomClosed (void);
/******************************************************************
NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
ORIGINAL SPEC
Function: SetConfigDir
Purpose: To pass the location where config files should be read/
written to.
input: path to config directory
output: none
*******************************************************************/
EXPORT void CALL SetConfigDir( char *configDir );
#if defined(__cplusplus)
}
#endif
#endif

285
doc/Audio_1.2.h Normal file
View file

@ -0,0 +1,285 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Mupen64plus - Audio_1.2.h *
* Mupen64Plus homepage: http://code.google.com/p/mupen64plus/ *
* Copyright (C) 2007-2008 Richard42 Ebenblues *
* Copyright (C) 2002 Zilmar *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/**********************************************************************************
Notes:
------
Setting the approprate bits in the MI_INTR_REG and calling CheckInterrupts which
are both passed to the DLL in InitiateAudio will generate an Interrupt from with in
the plugin.
**********************************************************************************/
#ifndef _AUDIO_H_INCLUDED__
#define _AUDIO_H_INCLUDED__
#if defined(__cplusplus)
extern "C" {
#endif
/* Note: BOOL, BYTE, WORD, DWORD, TRUE, FALSE are defined in windows.h */
#define PLUGIN_TYPE_AUDIO 3
#define EXPORT __declspec(dllexport)
#define CALL _cdecl
#define SYSTEM_NTSC 0
#define SYSTEM_PAL 1
#define SYSTEM_MPAL 2
#ifndef __PLUGIN_INFO__
#define __PLUGIN_INFO__
/***** Structures *****/
typedef struct {
WORD Version; /* Should be set to 0x0101 */
WORD Type; /* Set to PLUGIN_TYPE_AUDIO */
char Name[100]; /* Name of the DLL */
/* If DLL supports memory these memory options then set them to TRUE or FALSE
if it does not support it */
BOOL NormalMemory; /* a normal BYTE array */
BOOL MemoryBswaped; /* a normal BYTE array where the memory has been pre
bswap on a dword (32 bits) boundry */
} PLUGIN_INFO;
#endif //__PLUGIN_INFO__
typedef struct {
HWND hwnd;
HINSTANCE hinst;
BOOL MemoryBswaped; // If this is set to TRUE, then the memory has been pre
// bswap on a dword (32 bits) boundry
// eg. the first 8 bytes are stored like this:
// 4 3 2 1 8 7 6 5
BYTE * HEADER; // This is the rom header (first 40h bytes of the rom
// This will be in the same memory format as the rest of the memory.
BYTE * RDRAM;
BYTE * DMEM;
BYTE * IMEM;
DWORD * MI_INTR_REG;
DWORD * AI_DRAM_ADDR_REG;
DWORD * AI_LEN_REG;
DWORD * AI_CONTROL_REG;
DWORD * AI_STATUS_REG;
DWORD * AI_DACRATE_REG;
DWORD * AI_BITRATE_REG;
void (*CheckInterrupts)( void );
} AUDIO_INFO;
/******************************************************************
Function: AiDacrateChanged
Purpose: This function is called to notify the dll that the
AiDacrate registers value has been changed.
input: The System type:
SYSTEM_NTSC 0
SYSTEM_PAL 1
SYSTEM_MPAL 2
output: none
*******************************************************************/
EXPORT void CALL AiDacrateChanged (int SystemType);
/******************************************************************
Function: AiLenChanged
Purpose: This function is called to notify the dll that the
AiLen registers value has been changed.
input: none
output: none
*******************************************************************/
EXPORT void CALL AiLenChanged (void);
/******************************************************************
Function: AiReadLength
Purpose: This function is called to allow the dll to return the
value that AI_LEN_REG should equal
input: none
output: The amount of bytes still left to play.
*******************************************************************/
EXPORT DWORD CALL AiReadLength (void);
/******************************************************************
Function: AiUpdate
Purpose: This function is called to allow the dll to update
things on a regular basis (check how long to sound to
go, copy more stuff to the buffer, anyhting you like).
The function is designed to go in to the message loop
of the main window ... but can be placed anywhere you
like.
input: if Wait is set to true, then this function should wait
till there is a messgae in the its message queue.
output: none
*******************************************************************/
EXPORT void CALL AiUpdate (BOOL Wait);
/******************************************************************
Function: CloseDLL
Purpose: This function is called when the emulator is closing
down allowing the dll to de-initialise.
input: none
output: none
*******************************************************************/
EXPORT void CALL CloseDLL (void);
/******************************************************************
Function: DllAbout
Purpose: This function is optional function that is provided
to give further information about the DLL.
input: a handle to the window that calls this function
output: none
*******************************************************************/
EXPORT void CALL DllAbout ( HWND hParent );
/******************************************************************
Function: DllConfig
Purpose: This function is optional function that is provided
to allow the user to configure the dll
input: a handle to the window that calls this function
output: none
*******************************************************************/
EXPORT void CALL DllConfig ( HWND hParent );
/******************************************************************
Function: DllTest
Purpose: This function is optional function that is provided
to allow the user to test the dll
input: a handle to the window that calls this function
output: none
*******************************************************************/
EXPORT void CALL DllTest ( HWND hParent );
/******************************************************************
Function: GetDllInfo
Purpose: This function allows the emulator to gather information
about the dll by filling in the PluginInfo structure.
input: a pointer to a PLUGIN_INFO stucture that needs to be
filled by the function. (see def above)
output: none
*******************************************************************/
EXPORT void CALL GetDllInfo ( PLUGIN_INFO * PluginInfo );
/******************************************************************
Function: InitiateSound
Purpose: This function is called when the DLL is started to give
information from the emulator that the n64 audio
interface needs
Input: Audio_Info is passed to this function which is defined
above.
Output: TRUE on success
FALSE on failure to initialise
** note on interrupts **:
To generate an interrupt set the appropriate bit in MI_INTR_REG
and then call the function CheckInterrupts to tell the emulator
that there is a waiting interrupt.
*******************************************************************/
EXPORT BOOL CALL InitiateAudio (AUDIO_INFO Audio_Info);
/******************************************************************
Function: ProcessAList
Purpose: This function is called when there is a Alist to be
processed. The Dll will have to work out all the info
about the AList itself.
input: none
output: none
*******************************************************************/
EXPORT void CALL ProcessAList(void);
/******************************************************************
Function: RomClosed
Purpose: This function is called when a rom is closed.
input: none
output: none
*******************************************************************/
EXPORT void CALL RomClosed (void);
/******************************************************************
Function: PauseAudio
Purpose: This function is called when plugin should pause or
re-enable sound. Audio should be enabled by default.
input: TRUE when audio should be paused.
FALSE when audio sould continue playing.
output: TRUE when audio is paused.
FALSE when audio plays.
*******************************************************************/
EXPORT BOOL CALL PauseAudio (BOOL Pause);
/******************************************************************
NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
ORIGINAL SPEC
Function: SetConfigDir
Purpose: To pass the location where config files should be read/
written to.
input: path to config directory
output: none
*******************************************************************/
EXPORT void CALL SetConfigDir( char *configDir );
/******************************************************************
NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
ORIGINAL SPEC
Function: VolumeUp
Purpose: To increase the audio volume
input: none
output: none
*******************************************************************/
EXPORT void CALL VolumeUp(void);
/******************************************************************
NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
ORIGINAL SPEC
Function: VolumeDown
Purpose: To decrease the audio volume
input: none
output: none
*******************************************************************/
EXPORT void CALL VolumeDown(void);
/******************************************************************
NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
ORIGINAL SPEC
Function: VolumeMute
Purpose: Toggles between muted and not muted
input: none
output: none
*******************************************************************/
EXPORT void CALL VolumeMute(void);
/******************************************************************
NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
ORIGINAL SPEC
Function: VolumeGet
Purpose: Return the current volume level
input: none
output: string containing volume level state (percentage or mute)
*******************************************************************/
EXPORT const char * CALL VolumeGetString(void);
#if defined(__cplusplus)
}
#endif
#endif

325
doc/Graphics_1.3.h Normal file
View file

@ -0,0 +1,325 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Mupen64plus - Graphics_1.3.h *
* Mupen64Plus homepage: http://code.google.com/p/mupen64plus/ *
* Copyright (C) 2002 Zilmar *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/***********************************************************************************
Notes:
------
Setting the approprate bits in the MI_INTR_REG and calling CheckInterrupts which
are both passed to the DLL in InitiateGFX will generate an Interrupt from with in
the plugin.
The Setting of the RSP flags and generating an SP interrupt should not be done in
the plugin
**********************************************************************************/
#ifndef _GFX_H_INCLUDED__
#define _GFX_H_INCLUDED__
#if defined(__cplusplus)
extern "C" {
#endif
/* Plugin types */
#define PLUGIN_TYPE_GFX 2
#define EXPORT __declspec(dllexport)
#define CALL _cdecl
#ifndef __PLUGIN_INFO__
#define __PLUGIN_INFO__
/***** Structures *****/
typedef struct {
WORD Version; /* Set to 0x0103 */
WORD Type; /* Set to PLUGIN_TYPE_GFX */
char Name[100]; /* Name of the DLL */
/* If DLL supports memory these memory options then set them to TRUE or FALSE
if it does not support it */
BOOL NormalMemory; /* a normal BYTE array */
BOOL MemoryBswaped; /* a normal BYTE array where the memory has been pre
bswap on a dword (32 bits) boundry */
} PLUGIN_INFO;
#endif //__PLUGIN_INFO
typedef struct {
HWND hWnd; /* Render window */
HWND hStatusBar; /* if render window does not have a status bar then this is NULL */
BOOL MemoryBswaped; // If this is set to TRUE, then the memory has been pre
// bswap on a dword (32 bits) boundry
// eg. the first 8 bytes are stored like this:
// 4 3 2 1 8 7 6 5
BYTE * HEADER; // This is the rom header (first 40h bytes of the rom
// This will be in the same memory format as the rest of the memory.
BYTE * RDRAM;
BYTE * DMEM;
BYTE * IMEM;
DWORD * MI_INTR_REG;
DWORD * DPC_START_REG;
DWORD * DPC_END_REG;
DWORD * DPC_CURRENT_REG;
DWORD * DPC_STATUS_REG;
DWORD * DPC_CLOCK_REG;
DWORD * DPC_BUFBUSY_REG;
DWORD * DPC_PIPEBUSY_REG;
DWORD * DPC_TMEM_REG;
DWORD * VI_STATUS_REG;
DWORD * VI_ORIGIN_REG;
DWORD * VI_WIDTH_REG;
DWORD * VI_INTR_REG;
DWORD * VI_V_CURRENT_LINE_REG;
DWORD * VI_TIMING_REG;
DWORD * VI_V_SYNC_REG;
DWORD * VI_H_SYNC_REG;
DWORD * VI_LEAP_REG;
DWORD * VI_H_START_REG;
DWORD * VI_V_START_REG;
DWORD * VI_V_BURST_REG;
DWORD * VI_X_SCALE_REG;
DWORD * VI_Y_SCALE_REG;
void (*CheckInterrupts)( void );
} GFX_INFO;
/******************************************************************
Function: CaptureScreen
Purpose: This function dumps the current frame to a file
input: pointer to the directory to save the file to
output: none
*******************************************************************/
EXPORT void CALL CaptureScreen ( char * Directory );
/******************************************************************
Function: ChangeWindow
Purpose: to change the window between fullscreen and window
mode. If the window was in fullscreen this should
change the screen to window mode and vice vesa.
input: none
output: none
*******************************************************************/
EXPORT void CALL ChangeWindow (void);
/******************************************************************
Function: CloseDLL
Purpose: This function is called when the emulator is closing
down allowing the dll to de-initialise.
input: none
output: none
*******************************************************************/
EXPORT void CALL CloseDLL (void);
/******************************************************************
Function: DllAbout
Purpose: This function is optional function that is provided
to give further information about the DLL.
input: a handle to the window that calls this function
output: none
*******************************************************************/
EXPORT void CALL DllAbout ( HWND hParent );
/******************************************************************
Function: DllConfig
Purpose: This function is optional function that is provided
to allow the user to configure the dll
input: a handle to the window that calls this function
output: none
*******************************************************************/
EXPORT void CALL DllConfig ( HWND hParent );
/******************************************************************
Function: DllTest
Purpose: This function is optional function that is provided
to allow the user to test the dll
input: a handle to the window that calls this function
output: none
*******************************************************************/
EXPORT void CALL DllTest ( HWND hParent );
/******************************************************************
Function: DrawScreen
Purpose: This function is called when the emulator receives a
WM_PAINT message. This allows the gfx to fit in when
it is being used in the desktop.
input: none
output: none
*******************************************************************/
EXPORT void CALL DrawScreen (void);
/******************************************************************
Function: GetDllInfo
Purpose: This function allows the emulator to gather information
about the dll by filling in the PluginInfo structure.
input: a pointer to a PLUGIN_INFO stucture that needs to be
filled by the function. (see def above)
output: none
*******************************************************************/
EXPORT void CALL GetDllInfo ( PLUGIN_INFO * PluginInfo );
/******************************************************************
Function: InitiateGFX
Purpose: This function is called when the DLL is started to give
information from the emulator that the n64 graphics
uses. This is not called from the emulation thread.
Input: Gfx_Info is passed to this function which is defined
above.
Output: TRUE on success
FALSE on failure to initialise
** note on interrupts **:
To generate an interrupt set the appropriate bit in MI_INTR_REG
and then call the function CheckInterrupts to tell the emulator
that there is a waiting interrupt.
*******************************************************************/
EXPORT BOOL CALL InitiateGFX (GFX_INFO Gfx_Info);
/******************************************************************
Function: MoveScreen
Purpose: This function is called in response to the emulator
receiving a WM_MOVE passing the xpos and ypos passed
from that message.
input: xpos - the x-coordinate of the upper-left corner of the
client area of the window.
ypos - y-coordinate of the upper-left corner of the
client area of the window.
output: none
*******************************************************************/
EXPORT void CALL MoveScreen (int xpos, int ypos);
/******************************************************************
Function: ProcessDList
Purpose: This function is called when there is a Dlist to be
processed. (High level GFX list)
input: none
output: none
*******************************************************************/
EXPORT void CALL ProcessDList(void);
/******************************************************************
Function: ProcessRDPList
Purpose: This function is called when there is a Dlist to be
processed. (Low level GFX list)
input: none
output: none
*******************************************************************/
EXPORT void CALL ProcessRDPList(void);
/******************************************************************
Function: RomClosed
Purpose: This function is called when a rom is closed.
input: none
output: none
*******************************************************************/
EXPORT void CALL RomClosed (void);
/******************************************************************
Function: RomOpen
Purpose: This function is called when a rom is open. (from the
emulation thread)
input: none
output: none
*******************************************************************/
EXPORT void CALL RomOpen (void);
/******************************************************************
Function: ShowCFB
Purpose: Useally once Dlists are started being displayed, cfb is
ignored. This function tells the dll to start displaying
them again.
input: none
output: none
*******************************************************************/
EXPORT void CALL ShowCFB (void);
/******************************************************************
Function: UpdateScreen
Purpose: This function is called in response to a vsync of the
screen were the VI bit in MI_INTR_REG has already been
set
input: none
output: none
*******************************************************************/
EXPORT void CALL UpdateScreen (void);
/******************************************************************
Function: ViStatusChanged
Purpose: This function is called to notify the dll that the
ViStatus registers value has been changed.
input: none
output: none
*******************************************************************/
EXPORT void CALL ViStatusChanged (void);
/******************************************************************
Function: ViWidthChanged
Purpose: This function is called to notify the dll that the
ViWidth registers value has been changed.
input: none
output: none
*******************************************************************/
EXPORT void CALL ViWidthChanged (void);
/******************************************************************
Function: ReadScreen
Purpose: Capture the current screen
Input: none
Output: dest - 24-bit RGB data
width - width of image
height - height of image
******************************************************************/
EXPORT void CALL ReadScreen (void **dest, int *width, int *height);
/******************************************************************
NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
ORIGINAL SPEC
Function: SetConfigDir
Purpose: To pass the location where config files should be read/
written to.
input: path to config directory
output: none
*******************************************************************/
EXPORT void CALL SetConfigDir( char *configDir );
/******************************************************************
NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
ORIGINAL SPEC
Function: SetRenderingCallback
Purpose: Allows emulator to register a callback function that will
be called by the graphics plugin just before the the
frame buffers are swapped.
This was added as a way for the emulator to draw emulator-
specific things to the screen, e.g. On-screen display.
input: pointer to callback function. The function expects
to receive the current window width and height.
output: none
*******************************************************************/
EXPORT void CALL SetRenderingCallback(void (*callback)());
#if defined(__cplusplus)
}
#endif
#endif

114
doc/HiRezTexture.txt Normal file
View file

@ -0,0 +1,114 @@
How to use high resolution textures in Rice Video 6.1.0 and after
1. There are two new options added in Rice Video version 6.1.0 under the "Texture Filters" tab
LOAD option: "Loading hi-res textures if available"
DUMP option: "Dump textures to files"
2. Dumping textures
a. If DUMP option is enabled, all textures used during the game play will be dumpped
into a folder "[your_emulator_main_folder]\plugin\texture_dump\[current game name]\".
[current game name] refers to N64 game internal name.
For example, name for Zelda OoT is "THE LEGEND OF ZELDA".
You can use your N64 emulator to check it. For 1964, the internal name is shown
as one of the "Rom Information".
b. Textures from different games will be dumpped into different folders.
The plugin will create the folder if the folder does not exist.
c. Textures are dumpped in either PNG or BMP format
- RGBA, IA (intensity and alpha) textures are dumpped in 3 (or 2) files
[filename part 1 - 4]_all.png
[filename part 1 - 4]_rgb.png
[filename part 1 - 4]_a.png if the alpha channel is not all 0xFF
Please read the later section regarding filenameing.
*_all.png files are 32bit per pixel PNG files with RGBA channels
*_rgb.png files are 24bit per pixel PNG files with RGB channels.
*_a.png files are 24bit per pixel PNG files with alpha channel only as intensity.
- I (intensity only) textures are dumpped in 2 files, the alpha channel is not needed
[filename part 1 - 4]_rgb.png
[filename part 1 - 4]_all.png
- Color indexed textures are dumpped in 1 file
[filename part 1 - 4]_ci.bmp
ATTENTION here: the color indexed bmp image is palletted image. If you want to modify
this image, you MUST NOT change the pallettes.
These palletted BMP files could have either 16 pallettes or 256 pallettes, depending
on the original texture format in the N64 game.
d. texture dump option can be enabled/disabled during the game play.
e. The plugin keeps tracking all dumpped textures of the current game. Textures
will not be redumpped if the texture has been dumpped.
3. Loading high resolution textures
a. If LOAD option is enabled, the plugin will try to load it when corresponding texture is used
in the game.
b. LOAD option can be enabled/disabled during the game play
c. All high resolution textures must be placed under folder:
"[your_emulator_main_folder]\plugin\hires_texture\[current game name]\"
d. [current game name] must match the N64 game internal name
e. Under the [current game name] folder, subfolders can be created and textures can be placed
into the subfolders. The plugin will search all the subfolders recursively. Subfolders can help
to manage all the textures.
f. File files and format:
In general, high resolution files to be loaded must follow the same filenames as dumpped.
- Color indexed textures must be still in palletted BMP format
- For RGBA, IA and I textures, you can provide
*_rgb.png, *_a.png or
*_rgb.bmp, *_a.bmp or
*_all.png
- Don't provide duplicate files for the same textures. If you provide the *_rgb, *_a files
and also *_all.png file, the actually loaded files are not determined.
4. File naming
Example: THE LEGEND OF ZELDA#0A74F78C#4#1_rgb.png
[part 1]#[part 2]#[part 3]#[part 4]_[part 5].[extension]
part 1: The N64 game internal name
part 2: CRC32
part 3: Texture format in N64 game
0 = RGBA
1 = YUV
2 = CI
3 = IA
4 = I
part 4: Texture size in N64 game
0 = 4 bit
1 = 8 bit
2 = 16 bit
3 = 32 bit
part 5: dumpped texture format
rgb = 24 bit RGB format
a = 24 bit alpha channel only in 24 bit RGB intensity
all = 32 bit RGB format
ci = color indexed (BMP) format
extension:
PNG
BMP
5. How to make your own hi-rez textures
a. The hi-rez texture size could be 2, 3 or 4 times as the orginal N64 texture size
b. Don't use other customerized texture sizes
c. If the original texture has alpha channel, you MUST also provide the alpha channel by
- Use *_all.png 32bit format
- use both *_rgb and *_a files to provide RGB and alpha separately
d. Color indexed textures must be prepared in color indexed format, not in RGB/A format
e. Instead of *_rgb.png and *_a.png, you can provide your textures in *_rgb.bmp and *_a.bmp.
BMP files are uncompressed, can be loaded faster
f. *_rgb.png, *_a.png, *_rgb.bmp, *_a.bmp must be provided in 24 bit RGB format, not in other
formats. Alpha *_a.* files must be 24 bit, only in 2 bit or 8 bit
g. Filename must be kept the same as the original dumped texture filenames

258
doc/Input_1.1.h Normal file
View file

@ -0,0 +1,258 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Mupen64plus - Input_1.1.h *
* Mupen64Plus homepage: http://code.google.com/p/mupen64plus/ *
* Copyright (C) 2002 Zilmar *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#ifndef _CONTR_H_INCLUDED__
#define _CONTR_H_INCLUDED__
#if defined(__cplusplus)
extern "C" {
#endif
/* Note: BOOL, BYTE, WORD, DWORD, TRUE, FALSE are defined in windows.h */
#define PLUGIN_TYPE_CONTROLLER 4
/*** Conteroller plugin's ****/
#define PLUGIN_NONE 1
#define PLUGIN_MEMPAK 2
#define PLUGIN_RUMBLE_PAK 3 // not implemeted for non raw data
#define PLUGIN_TANSFER_PAK 4 // not implemeted for non raw data
#define PLUGIN_RAW 5 // the controller plugin is passed in raw data
/*********************************************************************************
Note about Conteroller plugin's:
the rumble pak needs a function for the force feed back joystick and tranfer pak
probaly needs a function for the plugin to be able to select the GB rom and
eeprom... maybe this should be done by the emu instead of the plugin, but I think
it probaly should be done by the plugin. I will see about adding these functions
in the next spec
**********************************************************************************/
#define EXPORT __declspec(dllexport)
#define CALL _cdecl
#ifndef __PLUGIN_INFO__
#define __PLUGIN_INFO__
/***** Structures *****/
typedef struct {
WORD Version; /* Should be set to 0x0101 */
WORD Type; /* Set to PLUGIN_TYPE_CONTROLLER */
char Name[100]; /* Name of the DLL */
BOOL Reserved1;
BOOL Reserved2;
} PLUGIN_INFO;
#endif //__PLUGIN_INFO__
typedef struct {
BOOL Present;
BOOL RawData;
int Plugin;
} CONTROL;
typedef union {
DWORD Value;
struct {
unsigned R_DPAD : 1;
unsigned L_DPAD : 1;
unsigned D_DPAD : 1;
unsigned U_DPAD : 1;
unsigned START_BUTTON : 1;
unsigned Z_TRIG : 1;
unsigned B_BUTTON : 1;
unsigned A_BUTTON : 1;
unsigned R_CBUTTON : 1;
unsigned L_CBUTTON : 1;
unsigned D_CBUTTON : 1;
unsigned U_CBUTTON : 1;
unsigned R_TRIG : 1;
unsigned L_TRIG : 1;
unsigned Reserved1 : 1;
unsigned Reserved2 : 1;
signed Y_AXIS : 8;
signed X_AXIS : 8;
};
} BUTTONS;
typedef struct {
HWND hMainWindow;
HINSTANCE hinst;
BOOL MemoryBswaped; // If this is set to TRUE, then the memory has been pre
// bswap on a dword (32 bits) boundry, only effects header.
// eg. the first 8 bytes are stored like this:
// 4 3 2 1 8 7 6 5
BYTE * HEADER; // This is the rom header (first 40h bytes of the rom)
CONTROL *Controls; // A pointer to an array of 4 controllers .. eg:
// CONTROL Controls[4];
} CONTROL_INFO;
/******************************************************************
Function: CloseDLL
Purpose: This function is called when the emulator is closing
down allowing the dll to de-initialise.
input: none
output: none
*******************************************************************/
EXPORT void CALL CloseDLL (void);
/******************************************************************
Function: ControllerCommand
Purpose: To process the raw data that has just been sent to a
specific controller.
input: - Controller Number (0 to 3) and -1 signalling end of
processing the pif ram.
- Pointer of data to be processed.
output: none
note: This function is only needed if the DLL is allowing raw
data, or the plugin is set to raw
the data that is being processed looks like this:
initilize controller: 01 03 00 FF FF FF
read controller: 01 04 01 FF FF FF FF
*******************************************************************/
EXPORT void CALL ControllerCommand ( int Control, BYTE * Command);
/******************************************************************
Function: DllAbout
Purpose: This function is optional function that is provided
to give further information about the DLL.
input: a handle to the window that calls this function
output: none
*******************************************************************/
EXPORT void CALL DllAbout ( HWND hParent );
/******************************************************************
Function: DllConfig
Purpose: This function is optional function that is provided
to allow the user to configure the dll
input: a handle to the window that calls this function
output: none
*******************************************************************/
EXPORT void CALL DllConfig ( HWND hParent );
/******************************************************************
Function: DllTest
Purpose: This function is optional function that is provided
to allow the user to test the dll
input: a handle to the window that calls this function
output: none
*******************************************************************/
EXPORT void CALL DllTest ( HWND hParent );
/******************************************************************
Function: GetDllInfo
Purpose: This function allows the emulator to gather information
about the dll by filling in the PluginInfo structure.
input: a pointer to a PLUGIN_INFO stucture that needs to be
filled by the function. (see def above)
output: none
*******************************************************************/
EXPORT void CALL GetDllInfo ( PLUGIN_INFO * PluginInfo );
/******************************************************************
Function: GetKeys
Purpose: To get the current state of the controllers buttons.
input: - Controller Number (0 to 3)
- A pointer to a BUTTONS structure to be filled with
the controller state.
output: none
*******************************************************************/
EXPORT void CALL GetKeys(int Control, BUTTONS * Keys );
/******************************************************************
Function: InitiateControllers
Purpose: This function initialises how each of the controllers
should be handled.
input: - The handle to the main window.
- A controller structure that needs to be filled for
the emulator to know how to handle each controller.
output: none
*******************************************************************/
EXPORT void CALL InitiateControllers (CONTROL_INFO ControlInfo);
/******************************************************************
Function: ReadController
Purpose: To process the raw data in the pif ram that is about to
be read.
input: - Controller Number (0 to 3) and -1 signalling end of
processing the pif ram.
- Pointer of data to be processed.
output: none
note: This function is only needed if the DLL is allowing raw
data.
*******************************************************************/
EXPORT void CALL ReadController ( int Control, BYTE * Command );
/******************************************************************
Function: RomClosed
Purpose: This function is called when a rom is closed.
input: none
output: none
*******************************************************************/
EXPORT void CALL RomClosed (void);
/******************************************************************
Function: RomOpen
Purpose: This function is called when a rom is open. (from the
emulation thread)
input: none
output: none
*******************************************************************/
EXPORT void CALL RomOpen (void);
/******************************************************************
Function: WM_KeyDown
Purpose: To pass the WM_KeyDown message from the emulator to the
plugin.
input: wParam and lParam of the WM_KEYDOWN message.
output: none
*******************************************************************/
EXPORT void CALL WM_KeyDown( WPARAM wParam, LPARAM lParam );
/******************************************************************
Function: WM_KeyUp
Purpose: To pass the WM_KEYUP message from the emulator to the
plugin.
input: wParam and lParam of the WM_KEYDOWN message.
output: none
*******************************************************************/
EXPORT void CALL WM_KeyUp( WPARAM wParam, LPARAM lParam );
/******************************************************************
NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
ORIGINAL SPEC
Function: SetConfigDir
Purpose: To pass the location where config files should be read/
written to.
input: path to config directory
output: none
*******************************************************************/
EXPORT void CALL SetConfigDir( char *configDir );
#if defined(__cplusplus)
}
#endif
#endif

229
doc/Rsp_1.1.h Normal file
View file

@ -0,0 +1,229 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Mupen64plus - Rsp_1.1.h *
* Mupen64Plus homepage: http://code.google.com/p/mupen64plus/ *
* Copyright (C) 2002 Zilmar *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#ifndef __RSP_1_1_H__
#define __RSP_1_1_H__
#if defined(__cplusplus)
extern "C" {
#endif
/* Note: BOOL, BYTE, WORD, DWORD, TRUE, FALSE are defined in windows.h */
#define PLUGIN_TYPE_RSP 1
#define PLUGIN_TYPE_GFX 2
#define PLUGIN_TYPE_AUDIO 3
#define PLUGIN_TYPE_CONTROLLER 4
#ifndef __PLUGIN_INFO__
#define __PLUGIN_INFO__
typedef struct {
WORD Version; /* Should be set to 0x0101 */
WORD Type; /* Set to PLUGIN_TYPE_RSP */
char Name[100]; /* Name of the DLL */
/* If DLL supports memory these memory options then set them to TRUE or FALSE
if it does not support it */
BOOL NormalMemory; /* a normal BYTE array */
BOOL MemoryBswaped; /* a normal BYTE array where the memory has been pre
bswap on a dword (32 bits) boundry */
} PLUGIN_INFO;
#endif //__PLUGIN_INFO__
typedef struct {
HINSTANCE hInst;
BOOL MemoryBswaped; /* If this is set to TRUE, then the memory has been pre
bswap on a dword (32 bits) boundry */
BYTE * RDRAM;
BYTE * DMEM;
BYTE * IMEM;
DWORD * MI_INTR_REG;
DWORD * SP_MEM_ADDR_REG;
DWORD * SP_DRAM_ADDR_REG;
DWORD * SP_RD_LEN_REG;
DWORD * SP_WR_LEN_REG;
DWORD * SP_STATUS_REG;
DWORD * SP_DMA_FULL_REG;
DWORD * SP_DMA_BUSY_REG;
DWORD * SP_PC_REG;
DWORD * SP_SEMAPHORE_REG;
DWORD * DPC_START_REG;
DWORD * DPC_END_REG;
DWORD * DPC_CURRENT_REG;
DWORD * DPC_STATUS_REG;
DWORD * DPC_CLOCK_REG;
DWORD * DPC_BUFBUSY_REG;
DWORD * DPC_PIPEBUSY_REG;
DWORD * DPC_TMEM_REG;
void (*CheckInterrupts)( void );
void (*ProcessDlistList)( void );
void (*ProcessAlistList)( void );
void (*ProcessRdpList)( void );
void (*ShowCFB)( void );
} RSP_INFO;
typedef struct {
/* Menu */
/* Items should have an ID between 5001 and 5100 */
HMENU hRSPMenu;
void (*ProcessMenuItem) ( int ID );
/* Break Points */
BOOL UseBPoints;
char BPPanelName[20];
void (*Add_BPoint) ( void );
void (*CreateBPPanel) ( HWND hDlg, RECT rcBox );
void (*HideBPPanel) ( void );
void (*PaintBPPanel) ( PAINTSTRUCT ps );
void (*ShowBPPanel) ( void );
void (*RefreshBpoints) ( HWND hList );
void (*RemoveBpoint) ( HWND hList, int index );
void (*RemoveAllBpoint) ( void );
/* RSP command Window */
void (*Enter_RSP_Commands_Window) ( void );
} RSPDEBUG_INFO;
typedef struct {
void (*UpdateBreakPoints)( void );
void (*UpdateMemory)( void );
void (*UpdateR4300iRegisters)( void );
void (*Enter_BPoint_Window)( void );
void (*Enter_R4300i_Commands_Window)( void );
void (*Enter_R4300i_Register_Window)( void );
void (*Enter_RSP_Commands_Window) ( void );
void (*Enter_Memory_Window)( void );
} DEBUG_INFO;
/******************************************************************
Function: CloseDLL
Purpose: This function is called when the emulator is closing
down allowing the dll to de-initialise.
input: none
output: none
*******************************************************************/
__declspec(dllexport) void CloseDLL (void);
/******************************************************************
Function: DllAbout
Purpose: This function is optional function that is provided
to give further information about the DLL.
input: a handle to the window that calls this function
output: none
*******************************************************************/
__declspec(dllexport) void DllAbout ( HWND hParent );
/******************************************************************
Function: DllConfig
Purpose: This function is optional function that is provided
to allow the user to configure the dll
input: a handle to the window that calls this function
output: none
*******************************************************************/
__declspec(dllexport) void DllConfig ( HWND hParent );
/******************************************************************
Function: DllTest
Purpose: This function is optional function that is provided
to allow the user to test the dll
input: a handle to the window that calls this function
output: none
*******************************************************************/
__declspec(dllexport) void DllTest ( HWND hParent );
/******************************************************************
Function: DoRspCycles
Purpose: This function is to allow the RSP to run in parrel with
the r4300 switching control back to the r4300 once the
function ends.
input: The number of cylces that is meant to be executed
output: The number of cycles that was executed. This value can
be greater than the number of cycles that the RSP
should have performed.
(this value is ignored if the RSP is stoped)
*******************************************************************/
__declspec(dllexport) DWORD DoRspCycles ( DWORD Cycles );
/******************************************************************
Function: GetDllInfo
Purpose: This function allows the emulator to gather information
about the dll by filling in the PluginInfo structure.
input: a pointer to a PLUGIN_INFO stucture that needs to be
filled by the function. (see def above)
output: none
*******************************************************************/
__declspec(dllexport) void GetDllInfo ( PLUGIN_INFO * PluginInfo );
/******************************************************************
Function: GetRspDebugInfo
Purpose: This function allows the emulator to gather information
about the debug capabilities of the dll by filling in
the DebugInfo structure.
input: a pointer to a RSPDEBUG_INFO stucture that needs to be
filled by the function. (see def above)
output: none
*******************************************************************/
__declspec(dllexport) void GetRspDebugInfo ( RSPDEBUG_INFO * RSPDebugInfo );
/******************************************************************
Function: InitiateRSP
Purpose: This function is called when the DLL is started to give
information from the emulator that the n64 RSP
interface needs
input: Rsp_Info is passed to this function which is defined
above.
CycleCount is the number of cycles between switching
control between the RSP and r4300i core.
output: none
*******************************************************************/
__declspec(dllexport) void InitiateRSP ( RSP_INFO Rsp_Info, DWORD * CycleCount);
/******************************************************************
Function: InitiateRSPDebugger
Purpose: This function is called when the DLL is started to give
information from the emulator that the n64 RSP
interface needs to intergrate the debugger with the
rest of the emulator.
input: DebugInfo is passed to this function which is defined
above.
output: none
*******************************************************************/
__declspec(dllexport) void InitiateRSPDebugger ( DEBUG_INFO DebugInfo);
/******************************************************************
Function: RomClosed
Purpose: This function is called when a rom is closed.
input: none
output: none
*******************************************************************/
__declspec(dllexport) void RomClosed (void);
#if defined(__cplusplus)
}
#endif
#endif // __RSP_1_1_H__

42
doc/bzip2-license Normal file
View file

@ -0,0 +1,42 @@
--------------------------------------------------------------------------
This program, "bzip2", the associated library "libbzip2", and all
documentation, are copyright (C) 1996-2007 Julian R Seward. All
rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. The origin of this software must not be misrepresented; you must
not claim that you wrote the original software. If you use this
software in a product, an acknowledgment in the product
documentation would be appreciated but is not required.
3. Altered source versions must be plainly marked as such, and must
not be misrepresented as being the original software.
4. The name of the author may not be used to endorse or promote
products derived from this software without specific prior written
permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Julian Seward, jseward@bzip.org
bzip2/libbzip2 version 1.0.5 of 10 December 2007
--------------------------------------------------------------------------

40
doc/font-license Normal file
View file

@ -0,0 +1,40 @@
Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.
Bitstream Vera Sans
Bitstream Vera Sans - Roman Release 1.10 Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.
Bitstream Vera is a trademark of Bitstream, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts
accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to
reproduce and distribute the Font Software, including without limitation the rights to use, copy,
merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom
the Font Software is furnished to do so, subject to the following conditions:
The above copyright and trademark notices and this permission notice shall be included in all copies
of one or more of the Font Software typefaces.
The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or
characters in the Fonts may be modified and additional glyphs or characters may be added to the
Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word
"Vera".
This License becomes null and void to the extent applicable to Fonts or Font Software that has been
modified and is distributed under the "Bitstream Vera" names.
The Font Software may be sold as part of a larger software package but no copy of one or more of the
Font Software typefaces may be sold by itself.
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE
GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL,
SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR
OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER
DEALINGS IN THE FONT SOFTWARE.
Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc.,
shall not be used in advertising or otherwise to promote the sale, use or other dealings in this
Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc.,
respectively. For further information, contact: fonts at gnome dot org.http://www.bitstream.com

342
doc/gpl-license Normal file
View file

@ -0,0 +1,342 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
675 Mass Ave, Cambridge, MA 02139, USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
Appendix: How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) 19yy <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) 19yy name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

505
doc/lgpl-license Normal file
View file

@ -0,0 +1,505 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 2.1, February 1999
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
[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.]
Preamble
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 use
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 the 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.
In other 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 ensure 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.
GNU LESSER GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. 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.
1. 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.
2. 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:
a) The modified work must itself be a software library.
b) You must cause the files modified to carry prominent notices
stating that you changed the files and the date of any change.
c) You must cause the whole of the work to be licensed at no
charge to all third parties under the terms of this License.
d) 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.)
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.
3. 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.
4. 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.
5. 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.
6. 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:
a) 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.)
b) 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.
c) 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.
d) 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.
e) Verify that the user has already received a copy of these
materials or that you have already sent this user a copy.
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.
7. 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:
a) 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.
b) 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.
8. 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.
9. 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.
10. 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.
11. 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.
12. 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.
13. 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.
14. 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.
NO WARRANTY
15. 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.
16. 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.
END OF TERMS AND CONDITIONS
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.
<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.1 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 Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
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:
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
That's all there is to it!

Some files were not shown because too many files have changed in this diff Show more