[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash/doc/C/preformatted gnashuser.ref.in [release_0_8_2_
From: |
Sandro Santilli |
Subject: |
[Gnash-commit] gnash/doc/C/preformatted gnashuser.ref.in [release_0_8_2_rc1] |
Date: |
Tue, 04 Mar 2008 16:39:09 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Branch: release_0_8_2_rc1
Changes by: Sandro Santilli <strk> 08/03/04 16:39:09
Removed files:
doc/C/preformatted: gnashuser.ref.in
Log message:
remove unused file
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/preformatted/gnashuser.ref.in?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1.2.2&r2=0
Patches:
Index: gnashuser.ref.in
===================================================================
RCS file: gnashuser.ref.in
diff -N gnashuser.ref.in
--- gnashuser.ref.in 3 Mar 2008 23:46:45 -0000 1.1.2.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,4583 +0,0 @@
-START-INFO-DIR-ENTRY
-This is gnash_ref.info, produced by makeinfo version 4.11 from gnash_ref.texi.
-
-* Gnash Reference Manual: (gnash_ref). Gnash
-END-INFO-DIR-ENTRY
-
-
-File: gnash_ref.info, Node: Top, Next: Introduction, Up: (dir)
-
-Gnash Reference Manual
-**********************
-
-* Menu:
-
-* Introduction::
-* Building from Source::
-* Software Internals::
-* Gnash Extensions::
-* RTMP Protocol::
-* Mozilla/Firefox NSAPI Plugin::
-* Appendix::
-* Authors::
-* GNU Free Documentation License::
-
---- The Detailed Node Listing ---
-
-Introduction
-
-* Audience::
-* What Is Supported ?::
-
-Building from Source
-
-* Overview::
-* Getting The Source::
-* Code Dependencies::
-* Testing Dependencies::
-* Documentation Dependencies::
-* Configuring Gnash::
-* Compiling the Code::
-* Creating the Documentation::
-* Running the Tests::
-
-Software Internals
-
-* A Tour of Gnash::
-* Sound handling in Gnash::
-* Testing : Testing.
-* Adding New ActionScript Class::
-
-Gnash Extensions
-
-* Creating A New Extension::
-* Debugging An Extension::
-* Included Extensions::
-
-RTMP Protocol
-
-* AMF Format::
-
-Mozilla/Firefox NSAPI Plugin
-
-* Plugin C API::
-* Plugin C++ API::
-* OpenGL and Threads::
-* Plugin Event Handling::
-
-Appendix
-
-* Code Style::
-
-GNU Free Documentation License
-
-* 0. PREAMBLE: 0_ PREAMBLE.
-* 1. APPLICABILITY AND DEFINITIONS: 1_ APPLICABILITY AND DEFINITIONS.
-* 2. VERBATIM COPYING: 2_ VERBATIM COPYING.
-* 3. COPYING IN QUANTITY: 3_ COPYING IN QUANTITY.
-* 4. MODIFICATIONS: 4_ MODIFICATIONS.
-* 5. COMBINING DOCUMENTS: 5_ COMBINING DOCUMENTS.
-* 6. COLLECTIONS OF DOCUMENTS: 6_ COLLECTIONS OF DOCUMENTS.
-* 7. AGGREGATION WITH INDEPENDENT WORKS: 7_ AGGREGATION WITH INDEPENDENT WORKS.
-* 8. TRANSLATION: 8_ TRANSLATION.
-* 9. TERMINATION: 9_ TERMINATION.
-* 10. FUTURE REVISIONS OF THIS LICENSE: 10_ FUTURE REVISIONS OF THIS LICENSE.
-* Addendum::
-
-
-File: gnash_ref.info, Node: Introduction, Next: Building from Source, Prev:
Top, Up: Top
-
-1 Introduction
-**************
-
-Gnash is a free SWF movie player. It is available as a stand-alone
-application or as a plugin for several popular web browsers. It
-supports playing media from a disk or streaming over a network
-connection. Some popular video sharing sites like YouTube are supported
-from a wide vaariety of devices from embedded ones to modern desktops.
-
- Gnash has a better focus on security, allowing the user tight
-control of all network or disk based I/O. Gnash also supports extending
-ActionScript by creating your own. You can write wrappers for any
-development library, and import them into the player much like perl or
-python does.
-
-* Menu:
-
-* Audience::
-* What Is Supported ?::
-
-
-File: gnash_ref.info, Node: Audience, Next: What Is Supported ?, Up:
Introduction
-
-1.1 Audience
-============
-
-This manual is primarily focused on users interested in how to get
-Gnash installed from a package, and basic usage as a web browser
-plugin. For more technical details, please refer to the Gnash Reference
-manual.
-
-
-File: gnash_ref.info, Node: What Is Supported ?, Prev: Audience, Up:
Introduction
-
-1.2 What Is Supported ?
-=======================
-
-Gnash is known to compile for most any POSIX and ANSI C++ conforming
-system if you have all the dependent libraries installed. Systems we
-test on, and which Gnash is know to run on are Ubuntu, Fedora, Debian,
-OpenBSD, NetBSD, FreeBSD, Win32, and Darwin (OSX) primarily.
-Occasionally other platforms are built, primarily by those distribution
-maintainers. This includes BeOS, Haiku, Syllable, OS/2, Solaris,
-Slackware, and Gentoo.
-
- Gnash is a capable of reading up to SWF v9 files and opcodes, but
-primarily supports SWF v7, with better SWF v8 and v9 support under
-heavy developement. With the 0.8.2 release, Gnash includes initial
-parser support for SWF v8 and v9. Not all ActionScript 2 classes are
-implemented yet, but all of the most heavily used ones are. Many
-ActionScript 2 classes are partially implemented; there is support for
-all of the commonly used methods of each class.
-
- Gnash has implemented about 80% of ActionScript v. 2.0, and has
-begun implementing ActionScript v. 3.0. Gnash supports the majority of
-Flash opcodes up to SWF version 9, and a wide sampling of ActionScript
-classes for SWF version 8.
-
- As ActionsScript 3 is a more developed version of ActionScript 2,
-many of the same classes work for both. Support has been added to
-Gnash's ActionScript library to support the new ActionScript 3 filters,
-which get applied to every class. Implementing ActionScript clases is
-often the easiest way for new Gnash developers to make a contribution
-without a deep internal knpowledge of Gnash.
-
- Gnash has included video support since early 2007, but this is an
-every changing field of reverse engineering. Many of the popular video
-sharing sites use SWF v8 or v9, which Gnash still has imperfect support
-for. This is improving all the time, so often builds from a development
-snapshot will work when using the older release packaged in your
-distribution doesn't. You can find daily snapshots of the latest CVS
-tree at: http://www.gnashdev.org/dev_snapshots
-(http://www.gnashdev.org/dev_snapshots/).
-
- Gnash uses ffmpeg for codecs, so any file supported by Mplayer
-should work with Gnash. Gnash supports the loading of patent free
-codecs like Ogg Vorbis or Theora from disk based files, while work is
-being done to support these codecs when embedded in a SWF file. Ffmpeg
-contains the codecs used by the current SWF defintion, FLV, VP6 (ON2),
-H.263, H.264, and MP3.
-
-
-File: gnash_ref.info, Node: Building from Source, Next: Software Internals,
Prev: Introduction, Up: Top
-
-2 Building from Source
-**********************
-
-* Menu:
-
-* Overview::
-* Getting The Source::
-* Code Dependencies::
-* Testing Dependencies::
-* Documentation Dependencies::
-* Configuring Gnash::
-* Compiling the Code::
-* Creating the Documentation::
-* Running the Tests::
-
-
-File: gnash_ref.info, Node: Overview, Next: Getting The Source, Up:
Building from Source
-
-2.1 Overview
-============
-
-The typical process of building from source will involve getting the
-source (*note Getting The Source::), build dependencies (*note Code
-Dependencies::), configuration (*note Configuring Gnash::), compilation
-(*note Compiling the Code::), testing (*note Running the Tests::), and
-installation (*note Installation::). A simplified overview of the
-process would be:
-
-
- ./autogen.sh
- ./configure
- make
- make check
- make install
-
- If you are compiling with GCC you will probably need to use a machine
-with at least 128 megabytes of physical RAM; 64MB is not enough for a
-couple of the files, even with swap enabled and optimisation turned off.
-
- At present the Gnash source is about 30 MB to extracted and
-configured and requires a total of about 125 megabytes to compile it.
-
- Continue reading for detailed step-by-step instructions of the
-entire procedure.
-
-
-File: gnash_ref.info, Node: Getting The Source, Next: Code Dependencies,
Prev: Overview, Up: Building from Source
-
-2.2 Getting The Source
-======================
-
-* Menu:
-
-* Releases::
-* CVS Access::
-
-
-File: gnash_ref.info, Node: Releases, Next: CVS Access, Up: Getting The
Source
-
-2.2.1 Releases
---------------
-
-Tarballs of official releases can be found in the download area of the
-project's GNU Savannah page at http://savannah.gnu.org/projects/gnash
-(http://savannah.gnu.org/projects/gnash) or under
-http://ftp.gnu.org/gnu/gnash (http://ftp.gnu.org/gnu/gnash)
-
-
-File: gnash_ref.info, Node: CVS Access, Prev: Releases, Up: Getting The
Source
-
-2.2.2 CVS Access
-----------------
-
-The latest Gnash development sources are available via anonymous CVS.
-Use the following commands to check them out (just hit return when you
-are prompted for the password):
-
-
- export CVS_RSH=ssh
- cvs -z3 -d:pserver:address@hidden:/sources/gnash co gnash
-
-you will then be able to update your copy from the repository using
-
-
- cd gnash
- cvs update -d
-
- If you only have access to the internet via a web proxy, you will
-find daily source snapshots of the latest CVS tree in
-http://www.gnashdev.org/dev_snapshots
-(http://www.gnashdev.org/dev_snapshots/)
-
-
-File: gnash_ref.info, Node: Code Dependencies, Next: Testing Dependencies,
Prev: Getting The Source, Up: Building from Source
-
-2.3 Code Dependencies
-=====================
-
-Gnash has a number of dependencies on other packages. If you install
-the dependencies using a package manager, be certain to install the
-development versions of the packages. The normal versions are often
-missing the headers Gnash needs to compile.
-
- Some dependencies have other dependencies, like GTk also needs
-glib2, atk, and pango to produce a fully linked executable. Different
-distributions also use differing dependencies, sometimes a package will
-depend on libxml2 on one system, but libexpat on another.
-
-*Code Dependency Table*
-
-Name Level Version DescriptionExplanationapt-get RPM/Yum
- package packageBSD
- package
-Boost Required 1.32 or Boost is In Gnash, `libboost-thread-dev,`
- higher a library Boost
libboost-date-time-devlibboost-thread-devel,
- of libraries
libboost-devlibboost-date-time-devel
- portable are used ' '`
- C++ extensively,
boost-headers,
- classes primarily boost-libs,
- and boost-gthread or just
- templates. and boost '
- boost-date-time.
- Boost is
- used for
- thread
- and mutext
- handling.
-libxml2 Required Libxml2 This
`libxml2-dev'`libxml2-devel'`libxml2'
- is the library
- GNOME XML is used
- parser to parse
- library messages
- and is for the
- available XML
- at XMLNode,
- http://xmlsoft.orgor
- (http://xmlsoft.org).XMLSocket
- ActionScript
- classes.
-AGG Possibly 2.4 or AGG is Gnash
`libagg-dev'`agg-devel'`agg'
- Required higher the requires
- AntiGrain the
- low-level installation
- 2D of at
- graphics least one
- library. renderer.
- AGG is
- considered
- the _best
- supported_
- renderer
- for Gnash.
-OpenGL Possibly OpenGL Gnash
`libgl1-mesa-dev'`libmesa-devel'`mesa'
- Required is a requires
- standard the
- specificationinstallation
- defining a of at
- cross-languageleast one
- cross-platformrenderer.
- API for If you
- writing don't
- applicationshave a
- which hardware
- produce accelerated
- 3D and 2D driver,
- graphics. you're
- It better
- supports off using
- hardware AGG for
- acceleration.the
- You can renderer.
- download
- a free
- implementation
- from
- http://www.mesa3d.org
- (http://www.mesa3d.org),
- although
- it
- doesn't
- support
- hardware
- acceleration.
-Cairo Possibly Cairo is Gnash
`libcairo2-dev'`cairo-devel'`cairo'
- Required a 2D requires
- graphics the
- library installation
- with of at
- support least one
- for renderer.
- multiple Cairo is
- output considered
- devices. the
- It will _least
- automaticallysupported_
- use renderer
- graphic for Gnash.
- card
- acceleration
- when
- available,
- and has
- an
- experimental
- OpenGL
- backend.
-GTK Possibly 2.2 or GTK is Gnash
`libgtk2.0-dev'`gtk-devel'`gtk+2'
- Required higher the GIMP requires
- Toolkit the
- GUI installation
- library of at
- used by least one
- the GNOME GUI
- desktop. library.
- It uses GTK is
- Cairo considered
- internally.to be the
- Gtk _best
- enables supported_
- better GUI
- integrationlibrary
- with option
- Firefox, for Gnash.
- as well
- as better
- event
- handling
- and
- higher
- level GUI
- constructs
- like
- menus and
- dialog
- boxes.
-GtkGlExt Possibly GtkGlExt This
`libgtkglext1-dev'`gtkglext-devel'`gtkglext'
- Required integrates library
- OpenGL is
- into GTK. required
- in order
- to use
- the GTK
- GUI
- library
- in
- conjunction
- with the
- OpenGL
- renderer.
-SDL Possibly The Gnash
`libsdl1.2-dev'`SDL-devel'`SDL-1.2'
- Required Simple requires
- DirectMediathe
- Layer is installation
- a of at
- cross-platformleast one
- multimedia GUI
- library library.
- which SDL may
- provides also be
- abstractionused as a
- for sound
- audio, handler
- graphics, regardless
- sound and of
- input whether
- APIs. it is
- SDL is employed
- available as a GUI
- from library.
- http://www.libsdl.orgThe GUI
- (http://www.libsdl.org).library
- is
- _poorly
- supported_
- in Gnash,
- but the
- sound
- handler
- is the
- _best
- supported_
- in Gnash.
-FLTK Possibly 2.0 or The Fast Gnash No No
- Required higher Light requires distributiondistribution
- ToolKit the packages packages
- is a installationare are
- portable of at available. available.No
- GUI least one distribution
- library GUI packages
- which is library. are
- intended FLTK may available.
- as a be used
- replacementin
- for the conjunction
- SDL GUI. with the
- Cairo and
- AGG
- renderers.
-KDE Possibly Kdelibs Gnash
`kdelibs3-dev,`kdelibs-devel,
- Required is a requires
kdebase-dev'kdebase-devel'`kdelibs,
- collection the kdebase'
- of installation
- libraries of at
- needed to least one
- compile GUI
- KDE library.
- applications.Kdelibs
- is also
- required
- for the
- Kpart
- plugin
- for
- Konqueror.
-Gstreamer Optional Gstreamer If you
`libgstreamer0.8-dev'`gstreamer-devel'`gstreamer-0.10'
- is a would
- video like
- handler. video
- playback,
- you must
- install
- one of
- the video
- handlers.
-gst-ffmpeg Possibly gst-ffmpegThis
`gstreamer0.8-ffmpeg-dev'`gstreamer-ffmpeg-devel'`gstreamer-ffmpeg'
- Required allows package
- you to is
- use the required
- FFMPEG if you
- decoder would
- with like to
- Gstreamer. use
- Gstreamer
- as a
- video
- handler.
-FFMPEG Possibly FFMPEG If you
`ffmpeg-dev'`ffmpeg-devel'`ffmpeg'
- Required is a would
- video like
- handler. video
- playback,
- you must
- install
- one of
- the video
- handlers.
- When
- using the
- gstreamer-ffmpeg
- plugin,
- ffmpeg
- doesn't
- need to be
- installed,
- as it's
- part of
- the
- plugin.
- For
- systems
- without
- Gstreamer
- support,
- ffmpeg
- can be
- used
- directly.
-JPEG Optional JPEG This
`libjpeg62-dev'`libjpeg'`jpeg'
- (http://www.ijg.org/)library
- is a is used
- lossy for
- image rendering
- format JPEGs.
- which is
- heavily
- used for
- images.
-PNG Optional PNG This
`libpng12-dev'`libpng'`png'
- (http://www.libpng.org/pub/png/)library
- is a is used
- patent-freefor
- image rendering
- format PNGs.
- which is
- comparable
- to _GIF_.
-libcurl Optional libcurl This
`libcurl4-gnutls'`libcurl'`curl'
- is the library
- multiprotocalis used
- file for URL
- transfer downloading.
- library.
-Glib2 Optional Glib2 is This
`glib2-dev'`glib2-devel'`glib2'
- a library
- dependency is used
- of Gtk, for
- and is a convenience.
- collection
- of
- commonly
- used
- functions.
-Atk Optional Atk is a This `atk-dev'
`atk-devel'`atk'
- dependency library
- of Gtk, is used
- and is for
- used for accessiblity..
- accessibility
- support.
-Pango Optional Pango is This
`pango-dev'`pango-devel'`pango'
- a library
- dependency is used
- of Gtk, for font
- and is handling.
- used for
- font
- handling.
-automake Possibly 1.6.0 Automake This `automake'
`automake'`automake'
- Required is a tool package
- for is
- generating required
- _Makefile.in_to run
- files. _autogen.sh_,
- which is
- a
- requirement
- if you
- are using
- the
- development
- source
- from CVS.
-autoconf Possibly 2.59 Autoconf This `autoconf'
`autoconf'`autoconf'
- Required is a package
- package is
- for required
- generating to run
- configure _autogen.sh_,
- scripts. which is
- a
- requirement
- if you
- are using
- the
- development
- source
- from CVS.
-gettext Possibly 0.14.6 Gettext This `gettext'
`gettext'`gettext'
- Required is part package
- of the is
- GNU required
- Translationto run
- Project. _autogen.sh_,
- which is
- a
- requirement
- if you
- are using
- the
- development
- source
- from CVS.
-libtool Possibly 1.5.22 This is This
`libltdl3-dev'`libtool'`libtool'
- Required a generic package
- library is
- support required
- script. to run
- _autogen.sh_,
- which is
- a
- requirement
- if you
- are using
- the
- development
- source
- from CVS.
-
-
-File: gnash_ref.info, Node: Testing Dependencies, Next: Documentation
Dependencies, Prev: Code Dependencies, Up: Building from Source
-
-2.4 Testing Dependencies
-========================
-
-Gnash tries to run as many tests as possible, but will simply skip
-tests if the tools to run them are unavailable.
-
-*Testing Dependency Table*
-
-Name Level Version DescriptionExplanationapt-get RPM/Yum
- package packageBSD
- package
-Ming Optional 0.4.0_beta4 Ming is Ming is No No
- or higher an the distributiondistribution
- ActionScriptprimary packages packages
- compiler. compiler are are
- for available. available.No
- ActionScript distribution
- testcases. packages
- are
- available.
-Mtasc Optional 1.12 or Mtasc is Mtasc is `mtasc' No
- higher an used in distribution
- ActionScriptsome packages
- compiler. tests. are
- available.No
- distribution
- packages
- are
- available.
-swfc Optional part of Swfc a Swfc is No No
- swftools swf used in distributiondistribution
- 0.8.1 decompiler.some packages packages
- testcases. are are
- available. available.No
- distribution
- packages
- are
- available.
-swfmill Optional 0.2.12 Swfmill Swfmill No No
- is an is used distributiondistribution
- XML-based in some packages packages
- SWF testcases. are are
- (Shockwave available. available.No
- Flash) distribution
- processing packages
- tool. are
- available.
-Python Optional 2.4 or Python Python is `python'
`python'`python'
- higher is a used by
- scripting part of
- language. the
- testing
- framework.
-DejaGnu Optional 1.4 or DejaGnu DejaGnu `dejagnu'
`dejagnu'`dejagnu'
- higher is a is used
- testing to run
- framework. multiple
- tests in
- an
- automated
- fashion.
-
-
-File: gnash_ref.info, Node: Documentation Dependencies, Next: Configuring
Gnash, Prev: Testing Dependencies, Up: Building from Source
-
-2.5 Documentation Dependencies
-==============================
-
-The following packages are used to build Gnash's documentation.
-
-*Documentation Dependency Table*
-
-Name Level Version DescriptionExplanationapt-get RPM/Yum
- package packageBSD
- package
-Docbook Required Docbook Gnash
`docbook-utils'`docbook-dtd41-sgml'
-
(http://http://docbook.sourceforge.net/)documentationand and
- is is an is
`docbook-dsssl'`docbook-style-dsssl'docbook
- industry-standardwritten
- XML in
- format Docbook.
- for
- technical
- documentation.
- You can
- download
- it from
-
http://sourceforge.net/project/showfiles.php?group_id=21935#files
-
(http://sourceforge.net/project/showfiles.php?group_id=21935#files).
-DocBook2X Optional This DocBook2X
`docbook2x'`docbook2x'`docbook2x'
- software is
- package required
- converts to
- Docbook produce
- documents HTML and
- to the Texinfo
- traditionalformats.
- man page
- format,
- GNU
- Texinfo
- format,
- and HTML
- (via
- Texinfo)
- format.
- It is
- available
- at
- http://docbook2x.sourceforge.net/
- (http://docbook2x.sourceforge.net/).
-DocBook-utilsOptional This
DocBook-utils`docbook-utils'`docbook-utils'`docbook-utils'
- software is
- package required
- converts to
- Docbook produce
- documents HTML and
- to the Texinfo
- traditionalformats.
- man page
- format,
- GNU
- Texinfo
- format,
- and HTML
- (via
- Texinfo)
- format.
-Texinfo Possibly Texinfo Texinfo `texinfo'
`texinfo'`texinfo'
- Required can be is
- used to required
- convert if you
- DocBook2X wish to
- output product
- into GNU GNU info
- info pages.
- pages.
- You can
- download
- it from
- http://ftp.gnu.org/gnu/texinfo/
- (http://ftp.gnu.org/gnu/texinfo/).
-FOP Optional 0.20.5 FormattingFOP is `fop' `fop'`fop'
- Objects required
- Processor for PDF
- is a output.
- print
- formatter
- driven by
- XSL
- formatting
- objects.
- It is a
- Java
- application
- which can
- output
- PDF, PCL,
- PS, SVG,
- XML,
- Print,
- AWT, MIF,
- and Text.
- It is
- available
- at
- http://xmlgraphics.apache.org/fop/
- (http://xmlgraphics.apache.org/fop/).
-Java Possibly FOP Sun's Download Download
-(j2re) Required requires Java the the
- Sun's runtime package package
- Java (j2re) is from Sun from Sun
- runtime required
(http://java.sun.com).(http://java.sun.com).
- (GCJ does to use
- not work FOP.
- with
- FOP).
- You can
- download
- it from
- http://java.sun.com
- (http://java.sun.com).
-JAI Possibly Sun's JAI is Download Download
- Required Java required the the
- Advanced if you package package
- Imaging wish to from Sun from Sun
- API can include
(http://java.sun.com/products/java-media/jai/iio.html).(http://java.sun.com/products/java-media/jai/iio.html).
- be graphics
- downloaded in a PDF
- from file being
-
http://java.sun.com/products/java-media/jai/iio.htmlgenerated
-
(http://java.sun.com/products/java-media/jai/iio.html).with FOP.
-
- If you install j2re, set the _JAVA_HOME_ environment variable to the
-top directory of the j2re installation. If you encounter problems with
-the Java installation, you may also need to add this path to the
-_CLASSPATH_ environment variable.
-
-
-File: gnash_ref.info, Node: Configuring Gnash, Prev: Documentation
Dependencies, Up: Building from Source
-
-2.6 Configuring Gnash
-=====================
-
-Gnash, like most GNU projects, allows a user to select various options
-before compiling its source code. These options include selecting from
-the available features, specifying custom paths for installation, and
-cross compiling support uses GNU Autoconf
-(http://www.gnu.org/software/autoconf/) for configuration.
-
- If you opted to download the [Cross reference to non-existant ID
-"sourcerepo"] of Gnash, the _configure_ script will not be included.
-It can be created by running _autogen.sh_ from the source root
-directory:
-
-
- ./autogen.sh
-
-Note that there are some dependencies (*note Code Dependencies::) for
-autogen.
-
- All the standard `configure' options are available. In addition,
-Gnash has two types of options: those that [Cross reference to
-non-existant ID "features"], and those that specify custom paths for
-development packages (*note Specifying Custom Paths::) which are not
-found during the default search. A complete list of _all_
-configuration options, including standard ones, can be seen by typing:
-
-
- ./configure --help |less
-
-Read further for a more detailed explanation of Gnash-specific options.
-
- The syntax for running _configure_ is as follows:
-
-
- configure <options>
-
-The example below shows the `configure' options which create the
-smallest working standalone version of Gnash. In this example,
-`configure' is being run from the source root directory:
-
-
- ./configure --disable-debugger --disable-cygnal \
- --disable-plugin --enable-media=ffmpeg --enable-gui=sdl
-
- By default, you shouldn't need to supply any options to configure.
-The configure script will attempt to determine what to build based on
-the development libraries you have installed. The default configuration
-for Gnash is both GTK and KDE GUIs, the AGG renderer, and Gstreamer for
-mltimedia support, with no extensions built.
-
- Being higher portable, Gnash has many configuration options
-available, and not all are supposed to work together. A common mistake
-when configuring Gnash is to supply too many options, overdriving
-Gnash's ability to do the right thing.
-
-* Menu:
-
-* Features::
-* Specifying Custom Paths::
-
-
-File: gnash_ref.info, Node: Features, Next: Specifying Custom Paths, Up:
Configuring Gnash
-
-2.6.1 Features
---------------
-
-Some switches can be used during configuration to enable or disable
-features of Gnash. Some of the most important configuration options are:
-
- * `--enable-gui' lets you specify your GUI of choice. The default
- option is GTK.
-
- * `--enable-renderer' allows a renderer to be chosen. The default
- renderer is AGG.
-
- * `--enable-media' permits a media handler to be selected. The
- default is Gstreamer.
-
- A complete list of available features follows.
-
-*Configuration Options - Features*
-
-Option Function
-`--enable-debugger' Enable support for the Flash
- debugger. The debugger is mainly of
- interest to Flash developers, and
- is still under development.
-`--enable-lirc' Enable support for the LIRC remote
- control protocol.
-`--enable-cygnal' Build the Cygnal streaming media
- server.
-`--disable-menus' Disable building all the menus for
- the GUI. THis is used by mobile
- devices without as much screen
- space.
-`--enable-docbook' Enable the generation of HTML,
- INFO, and MAN versions of the
- documentation from the Docbook XML.
- You will then be able to use `make
- html', `make info', and `make man'
- commands. By default, man,info and
- html pages are generated.
-`--enable-gui=gtk|sdl|kde|fltk|fb|hildon|alp'Select the Graphic User Interface
- to use (choose one).?
- [undisplayable block object]
-`--enable-i810-lod-bias' Enable fix for Intel 810 LOD bias
- problem. Older versions of libMesa
- on the Intel i810 or i815 graphics
- processor need this flag or Gnash
- will core dump. This has been fixed
- in newer versions (summer 2005) of
- libMesa.
-`--enable-media=ffmpeg|gst|none' Select the specified media decoder
- and sound engine. FFMPEG uses the
- SDL sound engine; GST uses its own.
- `GST' is the default decoder. ?
- [undisplayable block object] You
- should only select one media
- decoder.
-`--disable-nsapi'`--enable-nsapi' Force disable/enable building the
- NPAPI plugin. By default the
- Mozilla plugin is built if the GTK
- gui is selected. Specify the
- `--with-npapi-plugindir=' option to
- specify where the plugin should be
- installed.
-`--disable-kparts'`--enable-kparts' Force disable/enable building the
- KPARTS plugin. By default the KDE
- plugin is built if the kde gui is
- selected. Specify the
- `--with-kde-plugindir=' and
- `--with-kde-servicesdir=' options
- (or more generally the
- `--with-kde-pluginprefix=' one) to
- specify where the plugin should be
- installed. The default installation
- dir is extracted from kde-config.
-`--disable-plugins' Disable build of both kparts and
- npapi plugins
-`--enable-renderer=opengl|cairo|agg' Enable support for the a graphics
- backend. Currently only `opengl' and
- `agg' work sufficiently. OpenGL is
- used when you have hardware
- accelerated graphics. AGG i used
- when you do not have hardware
- accelerated graphics. Typically
- most desktop machines have OpenGL
- support, and most embedded systems
- do not. OpenGl is the default when
- building Gnash, although the
- quality of AGG's rendering is
- currently superior to OpenGL.
-`--enable-sdk-install' Enable installing the libraries and
- headers as an SDK.
-`--disable-shared' Enable installing the shared
- libraries and headers. Note that
- the extensions mechanism may not
- work if shared libraries are
- disabled.
-`--enable-strict' Turn verbose GCC compiler warnings.
- By default only `-Wall' is used
- with GCC.
-`--enable-fps-debug' Enable FPS debugging code. When
- this feature is compiled in you can
- use the -f switch of Gnash to have
- FPS printed at regular intervals.
-`--enable-write' Makes the Mozilla plugin write the
- currently playing SWF movie to
- `/tmp'.
-`--disable-mit-shm' Disable support for the MIT-SHM X
- extensions. Currently support is
- only available using GTK gui and
- AGG renderer. Keeping it enabled
- is not a problem as it will not be
- used if not available in the
- current X session.
-
-
-File: gnash_ref.info, Node: Specifying Custom Paths, Prev: Features, Up:
Configuring Gnash
-
-2.6.2 Specifying Custom Paths
------------------------------
-
-By default, none of these options should be required unless you want
-Gnash to use a specific version of a development package, or if the
-configure test fails to find a component. Please [Cross reference to
-non-existant ID "bugreport"] if a configure test fails.
-
- The following custom path options are available:
-
-*Custom Path Options*
-
-Option Function
-`--x-includes=DIR' X include files are in DIR.
-`--x-libraries=DIR' X library files are in DIR.
-`--with-libxml=PFX' Prefix to where libxml is
- installed.
-`--with-libxml-libraries=DIR' Directory where libxml library is
- installed.
-`--with-libxml-includes=DIR' Directory where libxml header
- files are installed.
-`--with-docbook=DIR' Directory where the DocBook
- style-sheets are installed.
-`--with-sdl-prefix=PFX' Prefix where SDL is installed.
-`--with-zlib-incl' Directory where zlib header is
- installed.
-`--with-zlib-lib' Directory where zlib library is
- installed.
-`--with-jpeg-incl' Directory where jpeg header is
- installed.
-`--with-jpeg-lib' Directory where jpeg library is
- installed.
-`--with-png-incl' Directory where png header is
- installed.
-`--with-png-lib' Directory where png library is
- installed.
-`--with-qt-dir' Directory where QT is installed.
- This is only used by the Klash
- plugin.
-`--with-qt-includes' Directory where the QT header
- files are installed. This is only
- used by the Klash plugin.
-`--with-qt-libraries' Directory where the QT libraries
- are installed. This is only used by
- the Klash plugin.
-`--with-npapi-plugindir' This is the directory to install
- the NPAPI (Mozilla) plugin in. By
- default it goes to
- ~/.mozilla/plugins.
-`--with-kde-pluginprefix' This option sets the default
- install dir for all KPARTS (kde)
- files. The plugin will be
- installed in PREFIX/lib/kde3, use
- `-with-kde-plugindir' to override.
- The service file in
- PREFIX/share/services, use
- `--with-kde-servicesdir' to
- override. The config file in
- PREFIX/share/config, use
- `--with-kde-configdir' to override.
- The appdata file in
- PREFIX/share/apps/klash, use
- `--with-kde-appsdatadir' to
- override.
-`--with-kde-plugindir' This is the directory to install
- the KPARTS (kde) plugin in. By
- default it is what's set by
- -with-kde-pluginprefix or what's
- returned by kde-config -install
- module -expandvars, or
- $(prefix)/share/services if
- kde-config is not found.
-`--with-kde-servicesdir' This is the directory to install
- the KPARTS (kde) service in. By
- default it is what's set by
- -with-kde-pluginprefix or what's
- returned by kde-config -install
- services -expandvars, or
- $(libdir)/kde3 if kde-config is not
- found.
-`--with-kde-configdir' This is the directory to install
- the KPARTS (kde) config files in.
- By default it is what's set by
- -with-kde-pluginprefix or what's
- returned by kde-config -install
- config -expandvars, or
- $(prefix)/share/config if
- kde-config is not found.
-`--with-kde-appsdatadir' This is the directory to install
- the KPARTS (kde) application data
- files in. By default it is what's
- set by -with-kde-pluginprefix or
- what's returned by kde-config
- -install data -expandvars, or
- $(prefix)/share/apps if kde-config
- is not found.
-`--with-ming' Ming is used to build test cases,
- but not by the Gnash player itself.
-`--with-ogg_incl' Directory where the libogg headers
- are installed.
-`--with-ogg_lib' Directory where the libogg library
- is installed.
-`--with-gstreamer-incl' Directory where the Gstreamer
- headers are installed. Gstreamer
- version 0.10 or greater must be
- used.
-`--with-gstreamer-lib' Directory where the Gstreamer
- library is installed. Gstreamer
- version 0.10 or greater must be
- used.
-`--with-opengl-includes' Directory where OpenGL (libMesa)
- headers are installed.
-`--with-opengl-lib' Directory where the OpenGL
- (libMesa) library is installed.
-`--with-glext-incl' Directory where GtkGlExt headers
- are installed.
-`--with-glext-lib' Directory where the GtkGlExt
- library is installed.
-`--with-gtk2-incl' Directory where the Gtk2 headers
- are installed.
-`--with-gtk2-lib' Directory where the Gtk2 library
- is installed.
-`--with-cairo_incl' Directory where the Cairo headers
- are installed.
-`--with-cairo-lib' Directory where the Cairo library
- is installed.
-`--with-glib-incl' Directory where the Glib headers
- are installed.
-`--with-glib-lib' Directory where the Glib library
- is installed.
-`--with-pango-incl' Directory where the Pango headers
- are installed.
-`--with-pango-lib' Directory where the Pango library
- is installed.
-`--with-atk-incl' Directory where the ATK headers
- are installed.
-`--with-atk-lib' Directory where the ATK library is
- installed.
-`--with-pthread-incl' Directory where the Pthread
- headers are installed.
-`--with-pthread-lib' Directory where the Pthread
- library is installed.
-`--with-agg-incl' Directory where the AGG
- (Antigrain) headers are installed.
-`--with-agg-lib' Directory where the AGG
- (Antigrain) library is installed.
-`--with-ffmpeg-incl' Directory where the FFMPEG headers
- are installed.
-`--with-ffmpeg-lib' Directory where the FFMPEG library
- is installed.
-`--with-boost-incl' Directory where the Boost headers
- are installed.
-`--with-boost-lib' Directory where the Boost library
- is installed.
-`--with-curl-incl' Directory where the libCurl
- headers are installed.
-`--with-curl-lib' Directory where the libCurl
- library is installed.
-
- Once you have [Cross reference to non-existant ID
-"pre-configuration"] Gnash, you are ready to build the code. Gnash is
-built using _GNU make_.
-
-* Menu:
-
-* Overview::
-* Getting The Source::
-* Code Dependencies::
-* Testing Dependencies::
-* Documentation Dependencies::
-* Configuring Gnash::
-* Compiling the Code::
-* Creating the Documentation::
-* Running the Tests::
-
-
-File: gnash_ref.info, Node: Compiling the Code, Next: Creating the
Documentation, Up: Building from Source
-
-2.7 Compiling the Code
-======================
-
-The most basic way to compile code is simply:
-
-
- make
-
-If the compilation ends with an error, check the output of _configure_
-and ensure that you are not missing any required prerequisites. The
-output of `make' can be verbose; you may wish to pipe the output to a
-file.
-
- The variables used by _make_ can be redefined when the program is
-invoked, if you desire it. The most interesting flags are _CFLAGS_
-and _CXXFLAGS_, which are often used to enable debugging or turn of
-optimization. The default value for both of these variables is _-O2
--g_. A list of influential environment variables can be seen in the
-configuration help:
-
- ./configure --help
-
- In the following example, debugging is enabled and optimization is
-disabled:
-
- make CFLAGS=-g CXXFLAGS=-g
-
-
-File: gnash_ref.info, Node: Creating the Documentation, Next: Running the
Tests, Prev: Compiling the Code, Up: Building from Source
-
-2.8 Creating the Documentation
-==============================
-
-By default, documentation is not built when you install (*note
-Installation::) Gnash. This is because there are a number of [Cross
-reference to non-existant ID "docdepend"]. Documentation is built when
-it is specified with a specific target in the generated `Makefile' in
-the `doc/C' sub-directory. If you type `make install' in this
-directory, all documents will be built.
-
- You must specify a target output format when you wish to create
-documentation. The available output formats are: `html', `pdf', `info',
-`man', and `alldocs'. It is also possible to output `GNOME help' if
-the [Cross reference to non-existant ID "features"] `--enable-ghelp'
-was used. The `alldocs' target will build all output formats except
-_GNOME help_. For example, to create HTML output, type:
-
-
- make html
-
- Gnash also uses Doxygen
-(http://www.stack.nl/~dimitri/doxygen/index.html) to produce _HTML_
-documentation of Gnash internals. You must have Doxygen installed to
-produce this documentation, which is built from the `doc' directory
-with the command (documents will be placed in the subdirectory
-`apidoc/html'):
-
-
- make apidoc
-
-
-File: gnash_ref.info, Node: Running the Tests, Prev: Creating the
Documentation, Up: Building from Source
-
-2.9 Running the Tests
-=====================
-
-Before beginning the potentially lengthy install, it is wise to test
-the installation. If a test fails, please report it by following the
-[Cross reference to non-existant ID "bugreport"].
-
-* Menu:
-
-* Using DejaGnu::
-* Running The Tests Manually::
-* Installation::
-* Cross Configuring::
-
-
-File: gnash_ref.info, Node: Using DejaGnu, Next: Running The Tests Manually,
Up: Running the Tests
-
-2.9.1 Using DejaGnu
--------------------
-
-The easiest way to run Gnash's test suite is to install _DejaGnu
-(http://www.gnu.org/software/dejagnu)_. After installing DejaGnu, run:
-
-
- make check
-
-* Menu:
-
-* Increasing Verbosity::
-* Running Some Tests::
-
-
-File: gnash_ref.info, Node: Increasing Verbosity, Next: Running Some Tests,
Up: Using DejaGnu
-
-2.9.1.1 Increasing Verbosity
-............................
-
-If you encounter a problem with a test, increasing the verbosity may
-make the issue easier to spot. Additional details are visible when
-_RUNTESTFLAGS_ are used to add the _verbose_ and _all_ options. The
-`verbose' option prints more information about the testing process,
-while the `all' option includes details on passing tests.
-
-
- make check RUNTESTFLAGS="-v -a"
-
-
-File: gnash_ref.info, Node: Running Some Tests, Prev: Increasing Verbosity,
Up: Using DejaGnu
-
-2.9.1.2 Running Some Tests
-..........................
-
-It is possible to run just a single test, or a subdirectory of tests,
-by specifying the directory or compiled test file.
-
- Some tests rely on _testsuite/Dejagnu.swf_, which in turn relies on
-_Ming_. This file is created when you run `make check' for the entire
-testsuite, and can also be created on demand:
-
-
- make -C testsuite Dejagnu.swf
-
- In this example, the `clip_as_button2' test is compiled and run:
-
-
- make -C testsuite/samples clip_as_button2-TestRunner
- cd testsuite/samples && ./clip_as_button2-TestRunner
-
-This creates and runs all the tests in the directory `movies.all':
-
-
- make -C testsuite/movies.all check
-
-
-File: gnash_ref.info, Node: Running The Tests Manually, Next: Installation,
Prev: Using DejaGnu, Up: Running the Tests
-
-2.9.2 Running The Tests Manually
---------------------------------
-
-You may also run test cases by hand, which can be useful if you want to
-see all the debugging output from the test case. Often the messages
-which come from deep within Gnash are most useful for development.
-
- The first step is to compile the test case, which can be done with
-`make XML-v#.swf' where the '#' is replaced with the _target_ SWF
-version or versions. For example:
-
-
- make XML-v{5,6,7,8}.swf
-
-* Menu:
-
-* Movie tests::
-* ActionScript Unit Tests::
-
-
-File: gnash_ref.info, Node: Movie tests, Next: ActionScript Unit Tests, Up:
Running The Tests Manually
-
-2.9.2.1 Movie tests
-...................
-
-This creates a Flash movie version of the test case, which can be run
-with a standalone Flash player. For instance, the target for SWF
-version 6 could be run with Gnash:
-
-
- gnash -v XML-v6.swf
-
-
-File: gnash_ref.info, Node: ActionScript Unit Tests, Prev: Movie tests, Up:
Running The Tests Manually
-
-2.9.2.2 ActionScript Unit Tests
-...............................
-
-Unit tests for ActionScript classes in `testsuite/actionscript.all' are
-run without a graphical display:
-
-
- gprocessor -v XML-v6.swf
-
-
-File: gnash_ref.info, Node: Installation, Next: Cross Configuring, Prev:
Running The Tests Manually, Up: Running the Tests
-
-2.9.3 Installation
-------------------
-
-Now that Gnash has been compiled and tested, use the following command
-to install it:
-
-
- make install
-
-The above command installs the standalone player. If the correct files
-were found by `configure' and if the `--disable-plugin' option was not
-specified, the Gnash browser plugin is also installed.
-
- Gnash installs a number of libraries (*note Libraries::), namely:
-_libbase_, _libgeometry_, _libbackend_, _libserver_, and _libmozsdk_.
-Executables (*note Executables::) consist of the (optional) plugin,
-`gprocessor', `cygnal', and `gnash'. Documentation (*note
-Documentation::) may also be installed. The installation location is
-controlled with the _-prefix_ configure option (*note Specifying Custom
-Paths::), except for plugins, which are explicitly set with
-_-plugin-dir_.
-
- Note that if you are using a single file-system _NFS_ mounted to
-multiple platforms, the configuration option (*note Specifying Custom
-Paths::) _-exec-prefix_ may be used to specify where platform-dependent
-executables and libraries are installed.
-
-* Menu:
-
-* Libraries::
-* Executables::
-* Documentation::
-
-
-File: gnash_ref.info, Node: Libraries, Next: Executables, Up: Installation
-
-2.9.3.1 Libraries
-.................
-
-Installed libraries are located in `/usr/local/lib' by default. If the
-_-prefix_ option was used in [Cross reference to non-existant ID
-"pre-configuration"], the libraries will be installed in the directory
-`lib' inside the path you specified. If the libraries are stored in a
-non-standard location, you must identify the path in one of two ways.
-
- The traditional way to do this on UNIX platforms is to set the
-_LD_LIBRARY_PATH_ variable to the path plus `/lib'. For example, if you
-installed in `/home/gnash', the _LD_LIBRARY_PATH_ path would be
-`/home/gnash/lib'. Multiple paths are delimited with a colon (':').
-
- GNU/Linux allows the custom path to be added to `/etc/ld.so.conf'.
-After adding the path, run _ldconfig_ as root to update the runtime
-cache.
-
-
-File: gnash_ref.info, Node: Executables, Next: Documentation, Prev:
Libraries, Up: Installation
-
-2.9.3.2 Executables
-...................
-
-The Mozilla plugin is built from headers (the Mozilla SDK) provided
-with Gnash and does not need extra development packages to be
-installed. By default, the plugin is installed to
-`~/.mozilla/plugins/'. To enable the plugin for other users, copy the
-file `libgnashplugin.so' to `.mozilla/plugins/' in their home directory.
-You may also specify the plugin installation directory by using the
-`--with-plugindir' option at configuration time (*note Specifying
-Custom Paths::).
-
- These defaults are likely to change in future versions of Gnash.
-
- The remaining executables are installed in the `bin' subdirectory of
-the directory specified by during configuration. If no path was
-specified, the default is `/usr/local/bin'.
-
-
-File: gnash_ref.info, Node: Documentation, Prev: Executables, Up:
Installation
-
-2.9.3.3 Documentation
-.....................
-
-Documentation is not built by default; please refer to the section on
-documentation (*note Creating the Documentation::) for more information
-on building documentation.
-
- `man' and `info' are installed in `/usr/local/share/man' and
-`/usr/local/share/info' respectively, unless the `--mandir' or
-`--infodir' configuration options (*note Specifying Custom Paths::) are
-used.
-
- _GNOME help_ documentation uses the directory
-`/usr/local/share/gnash/doc/gnash/C/' by default. A configuration file
-in the Gnash source tree, `doc/C/gnash.omf' is used to specify under
-which menu item Gnash appears in the _GNOME help_ system.
-
-
-File: gnash_ref.info, Node: Cross Configuring, Prev: Installation, Up:
Running the Tests
-
-2.9.4 Cross Configuring
------------------------
-
-To cross configure and compile Gnash, begin by building a target system
-on your workstation. This includes cross compilers for the target
-architecture, and some system headers. You will also need to cross
-compile all the [Cross reference to non-existant ID "docdepend"]
-normally needed to build Gnash. This can on occasion be a daunting
-process, as not libraries will cross configure and cross compile. There
-is more information about cross compiling all the dependant packages on
-the http://www.gnashdev.org (http://www.gnashdev.org) web site.
-
- If you need to build your own tool chain, that is beyond the scope
-of this manual. There are various resources on the web for howto's on
-building GCC based cross toolchains. Two popular sites are
-http://frank.harvard.edu/~coldwell/toolchain/
-(http://frank.harvard.edu/~coldwell/toolchain/) and
-http://www.kegel.com/crosstool/ (http://www.kegel.com/crosstool/). This
-can also be a very time consuming and frustrating process, even for
-experienced developers.
-
- Because the process of building your own cross tool chain can be
-harder than one may wish, there are several other cross development
-environments that simulate a native environment to make it easier to
-develop. These also let you develop for both native and cross builds.
-Several popular ones are Access Linux Platform
-(http://www.access-company.com/products/linux/alp.html), Scratchbox
-(http://www.scratchbox.org/), Open Embedded
-(http://www.openembedded.org/), Maemo (http://maemo.org/).
-
- To build for an ARM based system on an x86 based systems, configure
-like this using the traditional style cross toolchain, configure like
-this:
-
-
- ../../gnash/configure --build=i686-pc-linux-gnu
- --host=arm-linux --prefix=/usr/local/arm/oe --disable-nsapi
- --disable-kparts --enable-gui=fb --enable-renderer=agg
- --disable-shared --disable-menus
-
- The important configuration options are the ones which specify the
-architecture for the build:
-
--target
- The target architecture, where the final executables are expected
- to run.
-
--host
- The host architecture, where the executables are expected to run.
- Usually this is the same as the _-target_, except when building a
- compiler as a Canadian Cross. In this case, you might build a
- cross compiler on a UNIX system which runs on a win32 machine,
- producing code for a third architecture, such as ARM. In this
- example, _-target_ would be 'arm-unknown-linux-gnu', while _-host_
- would be 'win32'.
-
--build
- This is the system the build is running on.
-
- The following example of _configure_ builds for an ARM system on an
-x86 system. It was run after an ARM system was built in `/usr/arm' and
-other required libraries were cross compiled.
-
-
- ./configure -target=arm-unknown-linux-gnu --prefix=/usr/arm \
- --host=arm-unknown-linux-gnu --build=i686-pc-linux-gnu
--disable-plugin
-
-
-File: gnash_ref.info, Node: Software Internals, Next: Gnash Extensions,
Prev: Building from Source, Up: Top
-
-3 Software Internals
-********************
-
-* Menu:
-
-* A Tour of Gnash::
-* Sound handling in Gnash::
-* Testing : Testing.
-* Adding New ActionScript Class::
-
-
-File: gnash_ref.info, Node: A Tour of Gnash, Next: Sound handling in Gnash,
Up: Software Internals
-
-3.1 A Tour of Gnash
-===================
-
-The top level of Gnash has several libraries, _libgnashbase_,
-_libgnashgeo_, _libgnashserver_, _libgnashasobjs_ and
-_libgnashbackend_. There are several utility programs included for
-debug parsing and processing of Flash movie files, and other useful
-utilitis for examining local Shared Objects and sniffingh
-LocalConnections.
-
-* Menu:
-
-* The Libraries::
-* The Applications::
-* The Plugin::
-* The Debug Logging System::
-
-
-File: gnash_ref.info, Node: The Libraries, Next: The Applications, Up: A
Tour of Gnash
-
-3.1.1 The Libraries
--------------------
-
-* Menu:
-
-* libgnashbase::
-* libgnashgeo::
-* libgnashgui::
-* libgnashserver::
-* libgnashasobjs::
-* libgnashamf::
-* libgnashbackend::
-* libgnashplugin::
-* libklashpart::
-
-
-File: gnash_ref.info, Node: libgnashbase, Next: libgnashgeo, Up: The
Libraries
-
-3.1.1.1 libgnashbase
-....................
-
-Libgnashbase contains support classes used by the rest of the code.This
-library has no dependencies on any of the other Gnash libraries.
-
- Gnash makes heavy use of smart pointers, so memory allocations are
-freed up automatically by the interpreter. Both STL and Boost smart
-pointers are used.
-
-
-File: gnash_ref.info, Node: libgnashgeo, Next: libgnashgui, Prev:
libgnashbase, Up: The Libraries
-
-3.1.1.2 libgnashgeo
-...................
-
-Libgnashgeo contains code for device independent graphics routines.
-
-
-File: gnash_ref.info, Node: libgnashgui, Next: libgnashserver, Prev:
libgnashgeo, Up: The Libraries
-
-3.1.1.3 libgnashgui
-...................
-
-Libgnashgui contains code for a portable GUI class that supports using
-GTK2, a framebuffer, SDL, or KDE, FLTK, or Aqua.
-
-
-File: gnash_ref.info, Node: libgnashserver, Next: libgnashasobjs, Prev:
libgnashgui, Up: The Libraries
-
-3.1.1.4 libgnashserver
-......................
-
-Libgnashserver is the guts of the interpreter itself. This is where the
-main code for the interpreter lives. Includes in libserver are the two
-support libraries for the parser and the core of the virtual machine.
-
-
-File: gnash_ref.info, Node: libgnashasobjs, Next: libgnashamf, Prev:
libgnashserver, Up: The Libraries
-
-3.1.1.5 libgnashasobjs
-......................
-
-Libgnashasobjs contains all the ActionScript classes used by the
-interpreter.
-
-
-File: gnash_ref.info, Node: libgnashamf, Next: libgnashbackend, Prev:
libgnashasobjs, Up: The Libraries
-
-3.1.1.6 libgnashamf
-...................
-
-AMF is the data format used internally by SWF files. This is Gnash's
-support library to handle AMF data. This is used by the ActionScript
-classes SharedObject and LocalConnection. This is also used by the
-NetStream class when using thre RTMP streaming network protocol.
-
-
-File: gnash_ref.info, Node: libgnashbackend, Next: libgnashplugin, Prev:
libgnashamf, Up: The Libraries
-
-3.1.1.7 libgnashbackend
-.......................
-
-Libgnashbackend is a library containing the rendering code that glues
-this display to the Gnash. Supported rendering backends are OpenGL,
-Cairo, and AGG.
-
-
-File: gnash_ref.info, Node: libgnashplugin, Next: libklashpart, Prev:
libgnashbackend, Up: The Libraries
-
-3.1.1.8 libgnashplugin
-......................
-
-Libgnashplugin is the Mozilla/Firefox plugin.
-
-
-File: gnash_ref.info, Node: libklashpart, Prev: libgnashplugin, Up: The
Libraries
-
-3.1.1.9 libklashpart
-....................
-
-Libklashpart is the Konqueror plugin.
-
-
-File: gnash_ref.info, Node: The Applications, Next: The Plugin, Prev: The
Libraries, Up: A Tour of Gnash
-
-3.1.2 The Applications
-----------------------
-
-There are currently a few standalone programs in Gnash, which serve to
-either assist with Gnash development or play flash movies.
-
-* Menu:
-
-* The Standalone Player::
-* Gprocesser::
-* SOLdumper::
-* Dumpshm::
-
-
-File: gnash_ref.info, Node: The Standalone Player, Next: Gprocesser, Up:
The Applications
-
-3.1.2.1 The Standalone Player
-.............................
-
-This is the standalone OpenGL back-end used to play movies. There are
-several command-line options and keyboard control keys used by Gnash.
-
-
-File: gnash_ref.info, Node: Gprocesser, Next: SOLdumper, Prev: The
Standalone Player, Up: The Applications
-
-3.1.2.2 Gprocesser
-..................
-
-Gprocesser is used to print out the actions (using the -va option) or
-the parsing (using the -vp option) of a flash movie. It is also used to
-produce the _.gsc_ files that Gnash uses to cache data, thereby
-speeding up the loading of files.
-
-
-File: gnash_ref.info, Node: SOLdumper, Next: Dumpshm, Prev: Gprocesser,
Up: The Applications
-
-3.1.2.3 SOLdumper
-.................
-
-SOLDumper is a utility program used to find and dump the content of
-_Local Shared Objects_, also called "Flash Cookies" by some.
-
-
-File: gnash_ref.info, Node: Dumpshm, Prev: SOLdumper, Up: The Applications
-
-3.1.2.4 Dumpshm
-...............
-
-Dumpshm is a program used to find and dump the contents of the
-_LocalConnection_ shared memory segment.
-
-
-File: gnash_ref.info, Node: The Plugin, Next: The Debug Logging System,
Prev: The Applications, Up: A Tour of Gnash
-
-3.1.3 The Plugin
-----------------
-
-The plugin is designed to work within Mozilla or Firefox, although
-there is Konqueror support as well. The plugin uses the Mozilla NSAPI
-plugin API to be cross platform, and is portable, as well as being well
-integrated into Mozilla based browsers.
-
-* Menu:
-
-* Current Status::
-* GUI Support::
-* Mozplugger::
-* Klash::
-
-
-File: gnash_ref.info, Node: Current Status, Next: GUI Support, Up: The
Plugin
-
-3.1.3.1 Current Status
-......................
-
-As of March 30, 2006, the plugin works! This works in a fashion similar
-to MozPlugger in that the standalone player is used instead of using a
-thread. This gets around the issue of having to maintain a separate
-player to support the plugin. It also gets around the other issues that
-Gnash itself is not thread safe at this time.
-
- As of Jan, 2007, streaming video, ala "YouTube" works, along with
-other video sharing sites.
-
-
-File: gnash_ref.info, Node: GUI Support, Next: Mozplugger, Prev: Current
Status, Up: The Plugin
-
-3.1.3.2 GUI Support
-...................
-
-Any plugin that wants to display in a browser window needs to be tied
-into the windowing system of the platform being used. On GNU/Linux
-systems, Firefox is a GTK2+ application. There is also KDE support
-through the use of the Klash plugin.
-
- Gnash can use either several different GUI toolkits to create the
-window, and to handle events for the standalone player.
-
- The SDL version is more limited, but runs on all platforms,
-including win32. It has no support for event handling, which means
-mouse clicks, keyboard presses, and window resizing doesn't work. I
-personally find the default event handler slow and unresponsive. Gnash
-has support to use fast events, (currently not enabled) which is an SDL
-hack using a background thread to pump events into the SDL event queue
-at a much higher rate.
-
- There are a variety of development libraries that build a GUI widget
-system on top of SDL and OpenGL. The use of these to add menus and
-dialog boxes to the SDL version is being considered.
-
- The GTK support is currently the most functional, and the best
-integrated into Firefox. The performance of this version is better than
-the SDL version because of the more efficient event handling within
-GTK. For the best end user experience, use the GTK enabled version.
-
- GTK also allows Gnash to have menus and dialog boxes. Currently this
-is only being utilized in a limited fashion for now. There is a right
-mouse button menu that allows the user to control the movie being
-player the same way the existing keyboard commands do.
-
-
-File: gnash_ref.info, Node: Mozplugger, Next: Klash, Prev: GUI Support,
Up: The Plugin
-
-3.1.3.3 Mozplugger
-..................
-
-Mozplugger (http://mozplugger.mozdev.org/) is a _Mozilla/Firefox_
-plugin that uses external programs to play video, audio, and other
-multimedia content in the browser. With some support added to the
-external application, it's possible to force the external program to
-use the internal window in the browser where this plugin is supposed to
-display. This enables one to then run the standalone player and display
-its output in the browser.
-
- While this is not an optimal solution, it does enable one to use
-Gnash as the flash player when browsing. The main issue appears to be
-that the Flash movie being played doesn't get any mouse or keyboard
-input. That may be a mozplugger configuration issue, however.
-
- Use of MozPlugger is obsolete now that the Gnash plugin works.
-Still, this may be useful still on some platforms.
-
- Add this to your _$(HOME)/.mozilla/mozpluggerrc_ file to enable this:
-
-
- application/x-shockwave-flash:swf:Shockwave Gnash
- nokill embed noisy ignore_errors hidden fill swallow(Gnash) loop:
gnash -v "$file" -x $window
- : gnash -v "$file" -x $window
-
- Once this is added, you must delete the
-_$(HOME)/.mozilla/firefox/pluginreg.dat_ file to force Firefox to
-register the plugins again. This is an ASCII text file, so if the patch
-has been added correctly, you'll see an entry for _swf_ files after it
-is recreated. You will need to restart Firefox to recreate this file.
-
- This file is not recreated immediately when restarting Firefox, but
-waits till the first time a plugin is used. You can force creation of
-this file by typing _about:plugins_ into the URL entry of the browser
-window. The output will also contain information about the mozplugger.
-You should see an entry for Gnash now.
-
-
-File: gnash_ref.info, Node: Klash, Prev: Mozplugger, Up: The Plugin
-
-3.1.3.4 Klash
-.............
-
-Klash is MozPlugger type support for KDE's Konqueror web browser. Klash
-makes Gnash a _kpart_, so it's integrated into KDE better than when
-using MozPlugger. Klash uses the standalone player, utilizing Gnash's
-"-x" window plugin command line option.
-
- By default, Klash is not built. To enable building Klash, use the
-_-enable-klash_ option when configuring. Other than installing, there
-is nothing else that needs to be done to install Klash.
-
-
-File: gnash_ref.info, Node: The Debug Logging System, Prev: The Plugin, Up:
A Tour of Gnash
-
-3.1.4 The Debug Logging System
-------------------------------
-
-Gnash supports a debug logging system which supports both C and C++
-natively. This means you can use both _printf()_ style debug messages
-and C++ _iostreams_ style, where you can print C++ objects directly as
-you would when using _cout_.
-
- In the beginning, Gnash only supported the C API for debug logging,
-so it is the most heavily used in Gnash. This API was used in the
-_log_msg()_ and _log_error()_ functions, and used a callback to set
-them up.
-
- If a filename is not specified at object construction time, a
-default name of _gnash-dbg.log_ is used. If Gnash is started from the
-command line, the debug log will be created in the current directory.
-When executing Gnash from a launcher under _GNOME_ or _KDE_ the debug
-file goes in your home directory, since that's considered the current
-directory.
-
- There is common functionality between using the C or C++ API.
-Optional output is based on flags that can be set or unset. Multiple
-levels of verbosity are supported, so you can get more output by
-supplying multiple _-v_ options on the command line. You can also
-disable the creation of the debug log.
-
- Currently the use of the C++ API for logging is discouraged, do to
-performance issues.and the generic log_msg() has been replaced by more
-spcific function calls to allow more control of what gets displayed and
-logged.
-
-* Menu:
-
-* Logging System C API::
-* Logging System C++ API::
-
-
-File: gnash_ref.info, Node: Logging System C API, Next: Logging System C++
API, Up: The Debug Logging System
-
-3.1.4.1 Logging System C API
-............................
-
-These functions are clones of the originals as they were used for
-Gnash. These function the same as always except output can be logged to
-disk now as well. These currently print no timestamp with the output,
-which is the older functionality. As these functions are implemented on
-top of the C++ API now, they can be used without corrupting the output
-buffers.
-
-log_error(const char* fmt, ...)
- Display an error message if verbose output is enabled. By default
- the error messages are always written to the disk file, but
- optionally displayed in the terminal.
-
-void log_unimpl
- Displays a warning to the user about missing Gnash features. We
- expect all calls to this function to disappear over time, as we
- implement those features of Flash.
-
-void log_trace
- Used only for explicit user traces
-
-void log_debug
- Logs debug information.
-
-void log_action
- Log action execution information. Wrap all calls to this function
- (and other related statements) into an IF_VERBOSE_ACTION macro, so
- to allow completely removing all the overhead at compile time and
- reduce it at runtime.
-
-void log_parse
- Log SWF parsing Wrap all calls to this function (and other
- related statements) into an IF_VERBOSE_PARSE macro, so to allow
- completely removing all the overhead at compile time and reduce it
- at runtime.
-
-void log_security
- Display a message with security related information.
-
-void log_swferror
- This indicates an error in how the binary SWF file was
- constructed, i.e.probably a bug in the tools used to build the SWF
- file. Wrap all calls to this function (and other related
- statements) into an IF_VERBOSE_MALFORMED_SWF macro, so to allow
- completely removing all the overhead at compile time and reduce it
- at runtime.
-
-log_warning(const char* fmt, ...)
- Display a warning message if verbose output is enabled. By default
- the error messages are always written to the disk file, but
- optionally displayed in the terminal.
-
-
-File: gnash_ref.info, Node: Logging System C++ API, Prev: Logging System C
API, Up: The Debug Logging System
-
-3.1.4.2 Logging System C++ API
-..............................
-
-This is the new C++ streams based API that can be used to print C++
-objects natively. All output lines are timestamped.
-
- There are two macros used for program tracing. these can be used in
-both C or C++ code with one little difference. Since C doesn't have
-destructors, you must call _GNASH_REPORT_RETURN_ at the end of a
-function to display the function returning message.
-
-GNASH_REPORT_FUNCTION;
- When this is included in a C++ method, a message is printed when
- entering and exiting this method by hooking into the constructor
- and destructor. These are always written to the disk file, but
- optionally written to the screen only at the highest levels of
- verbosity.
-
-GNASH_REPORT_RETURN;
- This is used by C functions to print the returning from function
- debug message. For C++, this macro is executed automatically by
- the destructor.
-
- This is the main API for the logging system. By default everything
-is setup to write to the default _gnash-dbg.log_ file whenever a
-verbose option is supplied. Optionally it is possible to open a log
-file with a specified name, allowing multiple output files.
-
-closeLog(void)
- Close a debug log. The disk file remains.
-
-removeLog(void)
- Delete the debug log file from disk.
-
-setVerbosity(void)
- Increment the verbosity level.
-
-setVerbosity(int)
- Set the verbosity level.
-
-setStamp(bool flag)
- If _flag_ is _true_, then print a timestamp prefixed to every
- output line. If _flag_ is _false_, then don't print a timestamp.
-
-setWriteDisk(bool flag)
- If _flag_ is _true_, then create the disk file. If _flag_ is
- _false_, then don't create the disk file.
-
-
-File: gnash_ref.info, Node: Sound handling in Gnash, Next: Testing, Prev: A
Tour of Gnash, Up: Software Internals
-
-3.2 Sound handling in Gnash
-===========================
-
-When a SWF-file contains audio Gnash uses its sound handlers to play it.
-At the moment there are two sound handlers, but it is likely that more
-will be made.
-
- There are two different settings related to sound support: _[Cross
-reference to non-existant ID "pluginsound"]_ and _[Cross reference to
-non-existant ID "standalonesound"]_. This was done in order to allow
-the plugin to be independently configured, for instance to block sound
-from advertisements.
-
-* Menu:
-
-* Sound types::
-* Sound parsing::
-* Sound playback::
-* The SDL sound backend::
-* The Gstreamer backend::
-* Future audio backends::
-* Detailed description of the Gstreamer backend::
-
-
-File: gnash_ref.info, Node: Sound types, Next: Sound parsing, Up: Sound
handling in Gnash
-
-3.2.1 Sound types
------------------
-
-Sounds can be divided into two groups: event-sounds and soundstreams.
-Event-sounds are contained in a single SWF frame, but the playtime can
-span multiple frames. Soundstreams can be (and normally are) divided
-between the SWF frames the soundstreams spans. This means that if a
-gotoframe-action jumps to a frame which contains data for a soundstream,
-playback of the stream can be picked up from there.
-
-
-File: gnash_ref.info, Node: Sound parsing, Next: Sound playback, Prev:
Sound types, Up: Sound handling in Gnash
-
-3.2.2 Sound parsing
--------------------
-
-When Gnash parses a SWF-file, it creates a sound handler if possible
-and hands over the sounds to it. Since the event-sounds are contained
-in one frame, the entire event-sound is retrieved at once, while a
-soundstream maybe not be completely retrieved before the entire
-SWF-file has been parsed. But since the entire soundstream doesn't need
-to be present when playback starts, it is not necessary to wait.
-
-
-File: gnash_ref.info, Node: Sound playback, Next: The SDL sound backend,
Prev: Sound parsing, Up: Sound handling in Gnash
-
-3.2.3 Sound playback
---------------------
-
-When a sound is about to be played Gnash calls the sound handler, which
-then starts to play the sound and return. All the playing is done by
-threads (in both SDL and Gstreamer), so once started the audio and
-graphics are not sync'ed with each other, which means that we have to
-trust both the graphic backend and the audio backend to play at correct
-speed.
-
-
-File: gnash_ref.info, Node: The SDL sound backend, Next: The Gstreamer
backend, Prev: Sound playback, Up: Sound handling in Gnash
-
-3.2.4 The SDL sound backend
----------------------------
-
-The current SDL sound backend has replaced the original sound handler,
-based on SDL_mixer, which by design had some limitations, making it
-difficult to implement needed features such as support for soundstreams.
-The SDL sound backend supports both event-sounds and soundstreams,
-using Gnash's internal ADPCM, and optionally MP3 support, using either
-FFMPEG or LIBMAD. When it receives sound data it is stored without
-being decoded, unless it is ADPCM, which is decoded in the parser. When
-playing, backend relies on a function callback for retrieving output
-sound, which is decoded and re-sampled if needed, and all sound output
-is mixed together. The current SDL sound backend was made since Gnash
-needed a working sound backend as soon as possible, and since the
-gstreamer backend at the time suffered from bugs and/or lack of
-features in gstreamer. The result was the most complete and best sound
-handler so far. The advantages of the SDL sound handler is speed, and
-ease of use, while its only real disadvantage is that it has to be
-compiled with MP3 support, which some Linux distributions will probably
-not like...
-
-
-File: gnash_ref.info, Node: The Gstreamer backend, Next: Future audio
backends, Prev: The SDL sound backend, Up: Sound handling in Gnash
-
-3.2.5 The Gstreamer backend
----------------------------
-
-The Gstreamer backend, though not complete, supports both soundstreams
-and event-sounds. When receiving sound data it stores it compressed,
-unless if it's ADPCM event-sounds, which it decodes by the parser.
-When the playback starts, the backend sets up a Gstreamer bin
-containing a decoder (and other things needed) and places it in a
-Gstreamer pipeline, which plays the audio. All the sound data is not
-passed at once, but in small chunks, and via callbacks the pipeline
-gets fed. The advantages of the Gstreamer backend is that it supports
-both kinds of sound, it avoids all the legal MP3-stuff, and it should
-be relatively easy to add VORBIS support. The drawbacks are that it has
-longer "reply delay" when starting the playback of a sound, and it
-suffers under some bugs in Gstreamer that are yet to be fixed.
-
-
-File: gnash_ref.info, Node: Future audio backends, Next: Detailed
description of the Gstreamer backend, Prev: The Gstreamer backend, Up: Sound
handling in Gnash
-
-3.2.6 Future audio backends
----------------------------
-
-It would probably be desirable to make more backends in the future,
-either because other and better backend systems are brought to our
-attention, or perhaps because an internal sound handling is better
-suited for embedded platform with limited software installed.
-
-
-File: gnash_ref.info, Node: Detailed description of the Gstreamer backend,
Prev: Future audio backends, Up: Sound handling in Gnash
-
-3.2.7 Detailed description of the Gstreamer backend
----------------------------------------------------
-
-Gstreamer uses pipelines, bins and elements. Pipelines are the main
-bin, where all other bins or elements are places. Visually the audio
-pipeline in Gnash looks like this:
-
-
- ___
- |Bin|_
- |___| \
- ___ \ _____ ____________
- |Bin|___|Adder|_____|Audio output|
- |___| |_____| |____________|
- ___ /
- |Bin|_/
- |___|
-
- There is one bin for each sound which is being played. If a sound is
-played more the once at the same time, multiple bins will be made. The
-bins contains:
-
-
-
-
|source|---|capsfilter|---|decoder|---|aconverter|---|aresampler|---|volume|
-
- In the source element we place parts of the undecoded sound data, and
-when playing the pipeline will pull the data from the element. Via
-callbacks it is refilled if needed. In the capsfilter the data is
-labeled with the format of the data. The decoder (surprise!) decodes
-the data. The audioconverter converts the now raw sound data into a
-format accepted by the adder, all input to the adder must in the same
-format. The audio re-sampler re-samples the raw sound data into a sample
-accepted by the adder, all input to the adder must in the same sample
-rate. The volume element makes it possible to control the volume of
-each sound.
-
- When a sound is done being played it emits a End-Of-Stream-signal
-(EOS), which is caught by an event-handler-callback, which then makes
-sure that the bin in question is removed from the pipeline. When a
-sound is told by Gnash to stop playback before it has ended playback,
-we do something (not yet finally implemented), which makes the bin emit
-an EOS, and the event-handler-callback will remove the sound from the
-pipeline. Unfortunately Gstreamer currently has a bug which causes the
-entire pipeline to stop playing when unlinking an element from the
-pipeline; so far no fix is known.
-
- Gstreamer also contains a bug concerning linking multiple elements to
-the adder in rapid succession, which causes to adder to "die" and stop
-the playback.
-
-
-File: gnash_ref.info, Node: Testing, Next: Adding New ActionScript Class,
Prev: Sound handling in Gnash, Up: Software Internals
-
-3.3 Testing
-===========
-
-Instructions on running tests (*note Running the Tests::) can be found
-in the section on building Gnash.
-
-* Menu:
-
-* Testing Tools::
-* Test Cases::
-* Writing ActionScript Tests::
-* Writing Ming-based self-contained SWF tests::
-* Writing self-contained SWF tests with other compilers::
-* Writing Test Runners::
-
-
-File: gnash_ref.info, Node: Testing Tools, Next: Test Cases, Up: Testing
-
-3.3.1 Testing Tools
--------------------
-
-Currently Gnash uses three other tools to help with testing. Two of
-these are free compilers for the Flash format. This lets us write
-simple test cases for Gnash to test specific features, and to see how
-the features operate.
-
- The primary compiler used at this time is Ming (http://ming.sf.net).
-Since release 0.3, _Ming_ includes a command-line compiler, _makeswf_.
-This allows test case development to be done entirely with free tools.
-
- The other tools are optional. DejaGnu
-(http://www.gnu.org/software/dejagnu) is used to run multiple test
-cases in an automated manner. _DejaGnu_ is used by many other GNU
-(http://www.gnu.org) projects like GCC (http://gcc.gnu.org) and Samba
-(http://www.samba.org).
-
-
-File: gnash_ref.info, Node: Test Cases, Next: Writing ActionScript Tests,
Prev: Testing Tools, Up: Testing
-
-3.3.2 Test Cases
-----------------
-
-ActionScript test cases are located under testsuite/actionscript.all/;
-these are organized in one file for the ActionScript class. Other
-Ming-generated tests are under testsuite/ming-misc.all/; these are
-typically used to test specific tag types. Full movies are located in
-testsuite/movies.all/ and sample movies are found in testsuite/samples/.
-Other directories in testsuite/ are (or shall be) used for other kind
-of tests.
-
-
-File: gnash_ref.info, Node: Writing ActionScript Tests, Next: Writing
Ming-based self-contained SWF tests, Prev: Test Cases, Up: Testing
-
-3.3.3 Writing ActionScript Tests
---------------------------------
-
-Writing ActionScript tests is very simple. The _makeswf_ compiler makes
-use of the C preprocessor, thus allowing the inclusion of definitions
-for macros and external files. We use these feature to provide common
-utilities for test units.
-
- Each test unit sets an _rcsid_ variable, includes the _check.as_
-file and performs some checks using the provided macros. Here is an
-example:
-
-
-
- // This variable will be used by check.as
- // to show testcase info as part of the test runs.
- rcsid="Name and version of this testcase, usually the RCS id";
-
- #include "check.as"
-
- // Test object creation
- check(new Object() instanceOf Object);
-
- // Test parseInt
- check(isNaN(parseInt('none')));
-
- // Test assignment
- var a = 1;
- check_equals(a, 1);
-
- // .. your tests here ...
-
- The check(expr) macro will _trace_ PASSED or FAILED together with
-the expression being evaluated and the line number of the check. This
-is the format expected by DejaGnu.
-
- The _check_equals(obtained, expected)_ macro uses equality operator
-_==_ to check for equality. When possible, use of the _check_equals()_
-macro is preferred over _check()_ because it shows what the actual
-result was in case of a failure.
-
- Additionally, the check.as file provides a transparent way to send
-results to a TextField rather then using trace. This is very useful
-when you use a flash player without tracing support.
-
- Test units are built by running _make TestName-v#.swf_. This will
-use TestName.as as source and the value of # as target version.
-Allowed target version are from 5 to 8 (inclusive).
-
- Note that if you get a syntax error from the compiler, the line
-number will refer to the pre-processed file. This file is called
-_TestName.as.pp_ or _TestName-v#.swf.frame#.pp_ (depending on Ming
-version) and it's not thrown away by _makeswf_ to make debugging easier.
-
- Sometimes an expression is only supported by a specific SWF version,
-or it's evaluated differently by different SWF versions. For this
-purpose the framework provides an OUTPUT_VERSION macro that you can use
-to switch code based on output version. For example:
-
-
-
- #if OUTPUT_VERSION >= 7
- check(_root.getSWFVersion == OUTPUT_VERSION);
- #endif
-
-
-File: gnash_ref.info, Node: Writing Ming-based self-contained SWF tests,
Next: Writing self-contained SWF tests with other compilers, Prev: Writing
ActionScript Tests, Up: Testing
-
-3.3.4 Writing Ming-based self-contained SWF tests
--------------------------------------------------
-
-Ming-based test cases are located in testsuite/misc-ming.all and
-contain a test generator and a test runner. The test generator
-(usually a C program) is used to produce the SWF file, while the test
-runner (a C++ program) will run it using a MovieTester class. Note
-that only the test generator needs Ming, not the test runner, so if
-Ming isn't installed on the user's host, the test cases can still be
-run as long as SWF has been distributed.
-
- Producing tests using Ming has the advantage that you can easily see
-and modify the full source code for the SWF movie, and you can use some
-facilities (*note Using Ming-based test generators facilities::)
-provided by the Gnash testing framework to easily run tests.
-
- For generic Ming API documentation, see http://www.libming.org
-(http://www.libming.org/).
-
-* Menu:
-
-* Using Ming-based test generators facilities::
-
-
-File: gnash_ref.info, Node: Using Ming-based test generators facilities, Up:
Writing Ming-based self-contained SWF tests
-
-3.3.4.1 Using Ming-based test generators facilities
-...................................................
-
-Ming-based test generator facilities, which might be moved into a
-loadable SWF in the future, can be currently used by your test
-generator by including the ming_utils.h file and calling the
-appropriate functions.
-
- The most useful facility provided for Ming-based SWF test generators
-is a Dejagnu-like TestState ActionScript class. In order to use this
-facility you must call 'add_dejagnu_functions()' right after Movie
-creation. The function takes an SWFMovie object and some parameters
-specifying depth and location of the "visual" trace textfield; it
-instantiates a global 'TestState' ActionScript object to keep track of
-test's state.
-
- You will _not_ need to directly invoke the TestState object created
-by the 'add_dejagnu_functions()' routine, rather you will be using C
-macros hiding its complexity:
-
-
-
- check(SWFMovie mo, const char* expr)
-
- Evaluate an ActionScript expression.
-
- xcheck(SWFMovie mo, const char* expr)
-
- Evaluate an ActionScript expression.
- A failure is expected
- (for cases where the call exposes a known bug).
-
- check_equals(SWFMovie mo, const char* obtained, const char* expected)
-
- Evaluate an ActionScript expression against an expected output.
-
- xcheck_equals(SWFMovie mo, const char* obtained, const char* expected)
-
- Evaluate an ActionScript expression against an expected output.
- A failure is expected (for cases where the call exposes a known
bug).
-
- print_tests_summary(SWFMovie mo)
-
- This will print a summary of tests run, and should be
- called as the last step in your SWF generator.
-
- Test cases generated using Ming and the provided facilities (*note
-Using Ming-based test generators facilities::) will be self-contained,
-which means they can be used as tests by simply running them with
-whatever Player you might have. Any 'check' or 'check_equals' result
-will be both traced and printed in a textfield. You can use 'gprocessor
--v' to have Gnash use them as tests.
-
- See section Writing Test Runners (*note Writing Test Runners::) for
-information about writing SWF test runners.
-
-
-File: gnash_ref.info, Node: Writing self-contained SWF tests with other
compilers, Next: Writing Test Runners, Prev: Writing Ming-based
self-contained SWF tests, Up: Testing
-
-3.3.5 Writing self-contained SWF tests with other compilers
------------------------------------------------------------
-
-If you want/need to use a different compiler for your test cases
-(there's plenty of open source tools for generating SWF out there), you
-can still make use of a loadable SWF utility provided as part of the
-Gnash testsuite to let your test consistent with the rest of the suite.
-
- The loadable module is called Dejagnu.swf and is built during make
-check under testsuite/misc-ming.all. In order to use it you will need
-to load it into your SWF. We currently load it with an IMPORT tag for
-our ActionScript based test cases, but you can probably also use
-loadMovie or whatever works in the target SWF you're generating. Just
-make sure that the module is initialized before using it. You can check
-this by inspecting the dejagnu_module_initialized variable, which will
-be set to 'true' when all initialization actions contained in the
-Dejagnu.swf file are executed.
-
- Once the module is loaded you will be able to invoke the following
-functions, all registered against the _root sprite (effects of _lockroot
-untested):
-
-
-
- check(expression, [message]);
-
- Evaluate the expression.
- Trace result (PASSED: expression / FAILED: expression).
- If fails, *visually* trace the failure.
- If second argument is given, it will be used instead of
- 'expression' for printing results.
-
- check_equals(obtained, expected)
-
- Evaluate an expression against an expected output.
- Trace result (PASSED: obtained == expected / FAILED: expected
X, obtained Y)
- If fails, *visually* trace the failure.
-
- xcheck(expression, [message]);
-
- Evaluate the expression.
- Trace result (XPASSED: expression / XFAILED: expression).
- If fails, *visually* trace the failure.
- If second argument is given, it will be used instead of
- 'expression' for printing results.
-
- xcheck_equals(obtained, expected)
-
- Evaluate an expression against an expected output.
- Trace result (XPASSED: obtained == expected / XFAILED: expected
X, obtained Y)
- If fails, *visually* trace the failure.
-
- note(string)
-
- Print string, both as debugging and *visual* trace.
-
- totals()
-
- Print a summary of tests run, both as debugging and
*visual* traces.
-
- Visual traces are lines of text pushed to a textarea defined by the
-Dejagnu.swf module. The textarea is initially placed at 0, 50 and is
-600x800 in size. You can resize/move the clip after loading it. Also,
-you can completely make the clip invisible if that bothers you. The
-important thing is the *debuggin* trace (call to the trace function).
-The latter will be used by the testing framework.
-
- See section Writing Test Runners (*note Writing Test Runners::) for
-information about writing a test runners for your self-contained tests.
-
-
-File: gnash_ref.info, Node: Writing Test Runners, Prev: Writing
self-contained SWF tests with other compilers, Up: Testing
-
-3.3.6 Writing Test Runners
---------------------------
-
-Test runners are executables that run one or more tests, writing
-results in Dejagnu form to standard output.
-
- The Dejagnu form uses a standard set of labels when printing test
-results. These are:
-
-Label Meaning
-PASSED The test succeeded.
-FAILED The test failed.
-XPASSED The test succeeded, but was
- expected to fail.
-XFAILED The test failed, and was expected
- to fail.
-UNRESOLVED The results of the test could not
- be automatically parsed.
-UNTESTED This test case is not complete.
-UNSUPPORTED The test case relies on a
- conditional feature which is not
- present in your environment.
-
- The following labels may also appear:
-
-Label Meaning
-ERROR There was a serious error in
- running the test.
-WARNING There may have been a problem with
- running the test.
-NOTE There was some additional
- information given about the test.
-
-* Menu:
-
-* Using the generic test runner for self-contained SWF tests::
-* Writing Movie testers::
-
-
-File: gnash_ref.info, Node: Using the generic test runner for self-contained
SWF tests, Next: Writing Movie testers, Up: Writing Test Runners
-
-3.3.6.1 Using the generic test runner for self-contained SWF tests
-..................................................................
-
-The simplest test runner is one that simply invokes Gnash in verbose
-mode against a self-contained SWF test movie. Self-contained SWF test
-movies are the ones that print the PASSED/FAILED etc. lines using
-ActionScript (traces). By invoking Gnash in verbose mode this movie
-will behave as a compliant "Test Runner".
-
- A generator for simple test runners can be found in
-testsuite/generic-testrunner.sh. The script can be invoked by passing
-it $(top_builddir) as the first argument and the name of the SWF file
-(without the path) as the second argument. This will create a specific
-runner for your test in the current build directory. A simple
-Makefile.am rule for doing this follows:
-
-
- MyTest-Runner: $(srcdir)/../generic-testrunner.sh MyTest.swf
- sh $(srcdir)/../generic-testrunner.sh $(top_builddir) MyTest.swf
> $@
- chmod +x $@
-
- By default, the generated test runner will play the movie up to the
-last frame. If you want the movie to be played more then once (maybe
-because you're exactly testing loop features) you can use the -r switch
-to the generic-testrunner.sh call. The following will create a runner
-playing the movie twice:
-
-
- MyTest-Runner: $(srcdir)/../generic-testrunner.sh MyTest.swf
- sh $(srcdir)/../generic-testrunner.sh -r2 $(top_builddir)
MyTest.swf > $@
- chmod +x $@
-
- In case your test movie stops before the last frame, or you want to
-control the exact number of times to call the frame advancement
-routine, you can use the -f switch to control that.
-
-
- MyTest-Runner: $(srcdir)/../generic-testrunner.sh MyTest.swf
- sh $(srcdir)/../generic-testrunner.sh -f10 $(top_builddir)
MyTest.swf > $@
- chmod +x $@
-
-When both -f and -r are given, the first exit condition reached will
-take effect.
-
-
-File: gnash_ref.info, Node: Writing Movie testers, Prev: Using the generic
test runner for self-contained SWF tests, Up: Writing Test Runners
-
-3.3.6.2 Writing Movie testers
-.............................
-
-There are some parts of Gnash that can NOT be tested by only using
-ActionScript tests. Examples include: frame advancements, actual
-actions execution, gui events and so on.
-
- In this case you might want to use the MovieTester class to
-implement a C++ test runner. Be aware that you can *mix* tests in the
-MovieTester-based class with *self-contained* tests in the SWF file as
-long as you activate verbosity for the debug logfile. This is done, for
-example, for the DefineEditTextVariableNameTest.swf file. The
-corresponding test runner (DefineEditTextVariableNameTest-Runner) is a
-C++ runner based on MovieTester class. If you run the runner you see
-two kinds of test results: the ones coming from the ActionScript
-engine, and the ones coming from the test runner. You can distinguish
-between the two because the former contains an additional timestamp and
-the latter does not. Also, you'll see two final summaries for the two
-test sets. The 'make check' rule, which uses the testsuite/simple.exp
-output parser as its work-horse, will count test results from both test
-sets.
-
- Movie testers are executables which load an SWF, generate events
-(both user or system) on it, and check its state using a standard
-interface.
-
- To help this process a MovieTester class is defined in the
-testsuite/MovieTester.{h,cpp} files; see Doxygen documentation for more
-information.
-
- Note that you do NOT need access to the SWF source code in order to
-implement a Movie tester for it. Some knowledge about the expected
-behavior suffices.
-
-
-File: gnash_ref.info, Node: Adding New ActionScript Class, Prev: Testing,
Up: Software Internals
-
-3.4 Adding New ActionScript Class
-=================================
-
-In this document, the term 'ActionScript class' refers to the C++ class
-which is instantiated by Gnash when some ActionScript code instantiates
-a corresponding class. The C++ class stores instance data and
-implements the methods which are called on the object in the
-ActionScript code.
-
- Adding a new ActionScript class is relatively simple, but the
-process is complicated by the fact that the interface has evolved over
-time and the current code base represents several different formats.
-This document describes the current interface. The Boolean class
-should be considered the authoritative example of a modern ActionScript
-class.
-
- ActionScript classes contain a header file and a C++ implementation.
-The name is usually the name of the class as it is called in the
-ActionScript specifications; for instance _Boolean.cpp_ for the Boolean
-class.
-
-* Menu:
-
-* Prototype::
-* Declaration::
-* Instantiation::
-* Methods::
-* Dynamic Properties::
-* The as_value Object Type::
-* Object ActionScript Class::
-
-
-File: gnash_ref.info, Node: Prototype, Next: Declaration, Up: Adding New
ActionScript Class
-
-3.4.1 Prototype
----------------
-
-In ActionScript, a prototype is a base object which contains all the
-methods that an instantiated object will contain. In short, it
-contains every part of the class except for the portions dealing with
-the storage of instance data.
-
- In Gnash, the prototype of an ActionScript object is implemented as
-an _as_object_. At startup, the methods and properties of the
-ActionScript class are attached to the _as_object_. The following
-example demonstrates how methods can be attached:
-
-
- static void
- attachBooleanInterface(as_object& o) {
- o.init_member("toString", new builtin_function(boolean_tostring));
- o.init_member("valueOf", new builtin_function(boolean_valueof));
- }
-
- Static properties can also be added to the ActionScript prototype
-(dynamic properties (*note Dynamic Properties::) are addressed later).
-They are attached in a similar way:
-
-
- o.init_member("myProperty", as_value("HelloWorld"));
-
- Properties which have been added in this manner can be directly
-accessed in ActionScript code without a function call, as this piece of
-ActionScript code compiled by Ming's _makeswf_ compiler demonstrates:
-
-
- // Get the value of the myProperty property
- if (node.myProperty == "HelloWorld") {
- trace("MATCHED");
- }
-
-
-File: gnash_ref.info, Node: Declaration, Next: Instantiation, Prev:
Prototype, Up: Adding New ActionScript Class
-
-3.4.2 Declaration
------------------
-
-A new class should derive from _as_object_, which is the base class of
-every ActionScript object in Gnash.
-
-
-File: gnash_ref.info, Node: Instantiation, Next: Methods, Prev:
Declaration, Up: Adding New ActionScript Class
-
-3.4.3 Instantiation
--------------------
-
-When a new object is needed, instance data is added to the methods and
-properties inherited from the prototype.
-
- The init method should be called in the constructor in _Global.cpp_,
-where all other ActionScript classes are similarly referenced. This
-method constructs a prototype, which is implemented as an _as_object_.
-In addition, the method registers the constructor to be used for future
-object creation, and attaches methods and properties to the prototype.
-
-
-File: gnash_ref.info, Node: Methods, Next: Dynamic Properties, Prev:
Instantiation, Up: Adding New ActionScript Class
-
-3.4.4 Methods
--------------
-
-Every method you implement and attach (*note Prototype::) will receive
-an _fn_call_ data structure as an argument when it is called.
-
-* Menu:
-
-* Accessing Arguments::
-* Returning a Value to ActionScript::
-* Additional fn_call Members::
-
-
-File: gnash_ref.info, Node: Accessing Arguments, Next: Returning a Value to
ActionScript, Up: Methods
-
-3.4.4.1 Accessing Arguments
-...........................
-
-The arguments stored in _fn_call_ should be accessed using _arg()_. For
-instance, the first element can be popped with _fn.arg(0)_.
-
- The element popped off the stack is an _as_value_ object (*note The
-as_value Object Type::).
-
-
-File: gnash_ref.info, Node: Returning a Value to ActionScript, Next:
Additional fn_call Members, Prev: Accessing Arguments, Up: Methods
-
-3.4.4.2 Returning a Value to ActionScript
-.........................................
-
-The return value should be an _as_value_ object (*note The as_value
-Object Type::). For example:
-
-
- return as_value('Goodbye, cruel world.');
-
-
-File: gnash_ref.info, Node: Additional fn_call Members, Prev: Returning a
Value to ActionScript, Up: Methods
-
-3.4.4.3 Additional fn_call Members
-..................................
-
-There are two other useful members of the _fn_call_ structure, namely
-_this_ptr_ and _nargs_. The former points to the class which is
-invoking this method, while the latter is a count of the number of
-arguments in the stack (*note Accessing Arguments::).
-
- You may also see instances of the _env_ pointer being used. This
-is being deprecated. Instances which could be replaced with _arg()_
-(*note Accessing Arguments::) are already deprecated; other uses will
-be deprecated in the near future.
-
- Beyond the _arg() (*note Accessing Arguments::)_ method, there is
-one method of note. _dump_args()_ can be used in debugging to output
-the entire argument stack.
-
-
-File: gnash_ref.info, Node: Dynamic Properties, Next: The as_value Object
Type, Prev: Methods, Up: Adding New ActionScript Class
-
-3.4.5 Dynamic Properties
-------------------------
-
-This section describes accessors to dynamic properties. Read-only
-properties are described in the prototype (*note Prototype::) section.
-
- Accessors should be written as a single get/set method. Previously
-this was done by overriding _get_member()_ and _set_member()_, but this
-practice is deprecated.
-
- The accessor is written so that it sets the property if it is called
-with an argument, and puts the property in the _fn_call_ (*note
-Methods::) result pointer (*note Returning a Value to ActionScript::).
-For instance:
-
-
- void
- MyClass::myProperty_getset(const fn_call& fn) {
- boost::intrusive_ptr<MyClass> ptr = ensureType<MyClass>(fn.this_ptr);
-
- // setter
- if ( fn.nargs > 0 ) {
- bool h = fn.arg(0).to_bool();
- ptr->MyMethod(h);
- return;
- }
-
- // getter
- bool h = ptr->MyMethod();
- fn.result->set_bool(h);
- }
-
- It has not yet been decided whether properties should be set in the
-exported interface (*note Prototype::) or attached to instances of the
-class. A property is attached in the following manner:
-
-
- boost::intrusive_ptr<builtin_function> gettersetter;
- gettersetter = new builtin_function(&MyClass::myProperty_getset, NULL);
- o.init_property("myProperty", *gettersetter, *gettersetter);
-
-
-File: gnash_ref.info, Node: The as_value Object Type, Next: Object
ActionScript Class, Prev: Dynamic Properties, Up: Adding New ActionScript
Class
-
-3.4.6 The as_value Object Type
-------------------------------
-
-The _as_value_ class is used throughout the interpreter to create
-generic objects to hold data.
-
-* Menu:
-
-* Data Types::
-* Determining the Type::
-* Fetching the Value::
-* Setting the Value and Type::
-* Further Reading::
-
-
-File: gnash_ref.info, Node: Data Types, Next: Determining the Type, Up: The
as_value Object Type
-
-3.4.6.1 Data Types
-..................
-
-The following data types are supported: _NULLTYPE_, _BOOLEAN_, _STRING_,
-_NUMBER_, _OBJECT_, _AS_FUNCTION_, and _MOVIECLIP_ (sprite). The type
-_C_FUNCTION_ is being deprecated.
-
-
-File: gnash_ref.info, Node: Determining the Type, Next: Fetching the Value,
Prev: Data Types, Up: The as_value Object Type
-
-3.4.6.2 Determining the Type
-............................
-
-Several methods allow you to determine if a value stored in _as_value_
-is of a specific type. These follow the form of _is_TYPE_, for example
-_is_as_function()_ and _is_number()_. In general, the type names match
-the data types (*note Data Types::) listed above, with the exception of
-the type _MOVIECLIP_ which has a method _is_sprite()_.
-
-
-File: gnash_ref.info, Node: Fetching the Value, Next: Setting the Value and
Type, Prev: Determining the Type, Up: The as_value Object Type
-
-3.4.6.3 Fetching the Value
-..........................
-
-Another set of methods will return a representation of the value as a
-particular type. They follow the _to_TYPE_ naming convention. Examples
-are _to_number()_ and _to_bool()_. The type names are as listed (*note
-Data Types::) earlier, except for _MOVIECLIP_, which uses _to_sprite()_.
-
-
-File: gnash_ref.info, Node: Setting the Value and Type, Next: Further
Reading, Prev: Fetching the Value, Up: The as_value Object Type
-
-3.4.6.4 Setting the Value and Type
-..................................
-
-Finally, there is the _set_TYPE_ series of methods. They change the
-type to the type specified in the method name, and set the value to the
-one given as an argument. It is also possible to accomplish the same
-thing with the _=_ operator. Again, type names match those named
-earlier (*note Data Types::), except in the case of _MOVIECLASS_. Its
-method is called _set_sprite()_.
-
-
-File: gnash_ref.info, Node: Further Reading, Prev: Setting the Value and
Type, Up: The as_value Object Type
-
-3.4.6.5 Further Reading
-.......................
-
-Please refer to _as_value.h_ or the Doxygen documentation (see
-'Processing The Documentation' in the Gnash manual for instructions on
-generating documents with Doxygen) for more information about which
-methods are available for the _as_value_ object.
-
-
-File: gnash_ref.info, Node: Object ActionScript Class, Prev: The as_value
Object Type, Up: Adding New ActionScript Class
-
-3.4.7 Object ActionScript Class
--------------------------------
-
-This class implements an Object object.
-
-* Menu:
-
-* The Methods of the Class::
-* The Properties of the Object Class::
-* Object Class Conformance::
-
-
-File: gnash_ref.info, Node: The Methods of the Class, Next: The Properties
of the Object Class, Up: Object ActionScript Class
-
-3.4.7.1 The Methods of the Class
-................................
-
-addProperty()
-
-registerClass()
-
-toString()
-
-unwatch()
-
-valueOf()
-
-watch()
-
-Sharedclear()
-
-Sharedflush()
-
-SharedgetLocal()
-
-SharedgetSize()
-
-
-File: gnash_ref.info, Node: The Properties of the Object Class, Next: Object
Class Conformance, Prev: The Methods of the Class, Up: Object ActionScript
Class
-
-3.4.7.2 The Properties of the Object Class
-..........................................
-
-constructor
-
-__proto__
-
-__resolve
-
-Shareddata
-
-SharedonStatus
-
-
-File: gnash_ref.info, Node: Object Class Conformance, Prev: The Properties
of the Object Class, Up: Object ActionScript Class
-
-3.4.7.3 Object Class Conformance
-................................
-
-Class Name Conformance
-addProperty() This method has an unknown status.
-registerClass() This method has an unknown status.
-toString() This method has an unknown status.
-unwatch() This method has an unknown status.
-valueOf() This method has an unknown status.
-watch() This method has an unknown status.
-Sharedclear() This method has an unknown status.
-Sharedflush() This method has an unknown status.
-SharedgetLocal() This method has an unknown status.
-SharedgetSize() This method has an unknown status.
-constructor This property has an unknown
- status.
-__proto__ This property has an unknown
- status.
-__resolve This property has an unknown
- status.
-Shareddata This property has an unknown
- status.
-SharedonStatus This property has an unknown
- status.
-
-
-File: gnash_ref.info, Node: Gnash Extensions, Next: RTMP Protocol, Prev:
Software Internals, Up: Top
-
-4 Gnash Extensions
-******************
-
-Gnash supports extending the Flash specification by creating custom
-ActionScript classes that are compiled code, as opposed to the existing
-method of defining custom classes as ActionScript. Executing compiled
-code has many performance benefits over having to interpret the byte
-stream of the ActionScript opcodes.
-
- I can already hear people complaining now about the concept of
-extending Flash, so this in no way affects Gnash's ability to play
-Flash movies when functioning as a browser plugin. Gnash's goal is
-still to function in a way that is compatible with the current
-proprietary Flash player.
-
- But at the same time, we see Flash as the ideal scripting language
-for a digital multi-media streaming environment. There are many
-resources for Flash movie creators for widgets, higher level APIs, all
-sorts of desirable things. But for those of use committed to using free
-software tools for Flash, our options are very limited.
-
- Rather than launching a multi-year project to duplicate all classes
-in the commercial Flash IDE, it's much more efficient to use existing
-development libraries much like Python or Perl do. The extension
-mechanism in Gnash allows wrappers to be created for any C or C++
-development library. Unlike the proprietary Flash IDE, which compiles
-all the extension libraries into byte codes from ActionScript, the
-support is moved to the player side. Movies with all of the goodies of
-the proprietary IDE in them play in Gnash just fine, as it's all just
-byte codes by then.
-
- This trick works because until Flash player version 9, all the
-ActionScript class names and methods are passed as ASCII strings into
-the Flash movie. So the Gnash Virtual Machine just loads the extension
-file if that class name is invoked in the movie. All extension files
-specify the class name and methods it implements in an identical style
-as adding any new ActionScript class. The advantage is the class itself
-is compiled code, and runs much faster than the equivalent byte codes
-which all have to be interpreted..
-
-* Menu:
-
-* Creating A New Extension::
-* Debugging An Extension::
-* Included Extensions::
-
-
-File: gnash_ref.info, Node: Creating A New Extension, Next: Debugging An
Extension, Up: Gnash Extensions
-
-4.1 Creating A New Extension
-============================
-
-Each new extension should live in it's own directory. The extensions
-included in Gnash are all in the gnash/extensions directory. Creating
-an extension requires a Makefile.am,
-
- If you are adding this extension to the Gnash source tree itself,
-then you need to make two changes to add the new extension.
-
- The first change is to add the directory to the list in
-extensions/Makefile.am. This can be done either by adding the new
-directory to the SUBDIRS setting, or by wrapping it in a conditional
-test.
-
- The other change is to add it to the AC_OUTPUT list in
-_configure.ac_ so the new directory will be configured along with the
-rest of Gnash.
-
- Each extension should have an ActionScript source file included that
-tests the new class, and this file should be referenced in the new
-Makefile.am in the _check_PROGRAMS_ variable so that "make check" works.
-
- When creating an extension that is a wrapper for an existing
-development library API, it's often better to make this a thin layer,
-than to get carried away with creating beautiful abstractions.
-Higher-level classes that offer a lot of new functionality are fine,
-but is different than wrapping a library so it can be used from within
-Gnash.
-
-* Menu:
-
-* Crafting an Extension::
-
-
-File: gnash_ref.info, Node: Crafting an Extension, Up: Creating A New
Extension
-
-4.1.1 Crafting an Extension
----------------------------
-
-All extensions have the same requirements, namely setting up a few
-defined function callbacks, which the Gnash VM then uses to do the
-right thing. The initial two function callbacks are for handling the
-interface of the newly created object so that Gnash can find and use it.
-
- The first function is commonly called _attachInterface_, and this
-sets the other function callbacks for all the methods this class
-supports. The method callbacks are attached to the parent class by
-using _init_member()_ to set a C function pointer to the string value
-used in the Flash movie.
-
-
- // Attach DummyClass 'func1' and 'func2' methods to the given object
- static void
- attachInterface(as_object& obj) {
- obj.init_member("func1", &ext_func1);
- obj.init_member("func2", &ext_func2);
- }
-
- The second function is commonly called _getInterface()_, and this
-returns a pointer to a static prototype of the class. Gnash uses
-garbage collection for ActionScript objects so you need to register the
-static with the VM to give it a chance to be marked as reachable.
-
-
- static as_object*
- getInterface()
- {
- static boost::intrusive_ptr<as_object> o;
- if (o == NULL) {
- o = new as_object();
- VM::get().addStatic(o);
- attachInterface(*o);
- }
- return o.get();
- }
-
- This is the callback that gets executed when constructing a new
-object for the VM. In this example we'll assume the new ActionScript
-class is called _DummyExt_, and has two methods, _func1_ and _func2_.
-
-
- static as_value
- dummyext_ctor(const fn_call& fn)
- {
- DummyExt *obj = new DummyExt(); // will setup prototypes
-
- return as_value(obj);
- }
-
- The trick for the above simple constructor to work is that class
-appartenence is setup in the C++ DummyExt constructor itself, which
-should derive from as_object and construct the base passing it the
-interface (prototype) of it's class.
-
-
- class DummyExt : public as_object
- {
- public:
- DummyExt()
- :
- as_object(getInterface()) // returns the static prototype
- {}
-
- };
-
- Initialize the extension. This is looked for by the extension
-handling code in each extension, and is executed when the extension is
-loaded. This is the main entry point into the extension. This function
-can be found because the prefix of _dummyext_, which also matches the
-file name of the extension. Gnash uses the name of the extension file
-itself when looking for the init function.
-
-
- extern "C" {
- void
- dummyext_class_init(as_object &obj)
- {
- static builtin_function* cl=NULL;
- if (!cl)
- {
- // Create a builtin function using the given
constructor
- // to instanciate objects and exporting the given
interface
- cl = new builtin_function(&dummyext_ctor, getInterface());
- VM::get().addStatic(cl); // will forbid to collect the class
- }
-
- obj.init_member("DummyExt", cl);
- }
- } // end of extern C
-
- The callbacks are all C functions. Like all the other code that
-implements ActionScript, parameters to the function are passed in using
-the _fn_call_ data structure. The return code, if any, is also returned
-using this data structure. _this_ptr_ is the object that the method is
-a member of.
-
-
- // Creates a new button with the label as the text.
- as_value func1(const fn_call& fn) {
- // Following line will ensure 'func1' is called for a
DummyExt instance,
- // or would throw an exception which should behave as if we
returned the
- // undefined value.
- boost::intrusive_ptr<DummyExt> ptr =
ensureType<DummyExt>(fn.this_ptr);
-
- if (fn.nargs > 0) {
- std::string label = fn.arg(0).to_string();
- bool ret = ptr->dummy_text_label(label);
- return as_value(ret);
- }
- }
-
-
-File: gnash_ref.info, Node: Debugging An Extension, Next: Included
Extensions, Prev: Creating A New Extension, Up: Gnash Extensions
-
-4.2 Debugging An Extension
-==========================
-
-As extensions are loaded dynamically at runtime, debugging one can be
-difficult. You can use GDB, but you have the problem of not being able
-to set a breakpoint in Gnash until _after_ the extension has been
-loaded into Gnash's VM. The easy solution is to use the Gnash debugger.
-
- You can insert these few lines in any file that you wish to manually
-start the debugger. Once at the console, you can attach GDB to the
-process. Then you can set breakpoints, etc... and you are at the point
-of execution where the console was started. To then continue playing
-the movie, type the _c_ (for continue) command to the Gnash console.
-
-
- // Get the debugger instance
- static Debugger& debugger = Debugger::getDefaultInstance();
-
- // Enable the debugger
- debugger.enabled(true);
- // Stop and drop into a console
- debugger.console();
-
- You can also resort to the time honored technique of creating a loop
-before the point you want to set a breakpoint for. Gnash will stop
-playing the movie at this point, and then you can externally attach GDB
-to the running process, or type _^C_ to drop into the GDB command
-console.
-
-
- bool stall = true;
- while (stall) {
- sleep 1;
- }
-
- Once you have set the breakpoints you want, reset the value of the
-_stall_ variable to break out of the loop, and the Flash movie will
-then continue playing.
-
-
- (gdb) set variable stall = false;
- continue
-
-
-File: gnash_ref.info, Node: Included Extensions, Prev: Debugging An
Extension, Up: Gnash Extensions
-
-4.3 Included Extensions
-=======================
-
-Gnash has some extensions included in the distribution. This is mostly
-because they were written by the Gnash team. Extensions can be external
-to gnash, Gnash needs no compiled in knowledge to load an extension
-file.
-
-* Menu:
-
-* Gtk Extension::
-* File I/O Extension::
-* MySQL Extension::
-
-
-File: gnash_ref.info, Node: Gtk Extension, Next: File I/O Extension, Up:
Included Extensions
-
-4.3.1 Gtk Extension
--------------------
-
-The GTK ActionScript class follows the same API as Gtk2, even down to
-the same arguments to the same function names. This means you're
-actually programming GTK,you're just using ActionScript instead of
-python, perl, or C. This extension makes it possible to write Flash
-movies that use the Gtk2 widgets for user interface components.
-
-window_new
- Create a new window.
-
-signal_connect
- Add an event handler to a widget.
-
-container_set_border_width
- Set the width of the window border.
-
-button_new_with_label
- Create a new button and give it the specified label.
-
-signal_connect_swapped
- Swap signals. Commonly used for _delete_ event handling.
-
-container_add
- Add one widget to another as a child.
-
-widget_show
- Display the widget on the screen.
-
-main
- Start the main GTK event loop. This function does not return.
-
-
-File: gnash_ref.info, Node: File I/O Extension, Next: MySQL Extension,
Prev: Gtk Extension, Up: Included Extensions
-
-4.3.2 File I/O Extension
-------------------------
-
-Flash movies are traditionally forbidden from accessing the filesystem,
-but this may be necessary for some embedded applications. Especially in
-the case of a user console, currently there is no way to get input into
-a Flash movie but through a TextField.
-
-fopen
- Open the file.
-
-fread
- Read a series of bytes from the opened file.
-
-fgetc
- Read a single byte from the opened file.
-
-fgets
- Read a single line until a Carriage Return from the opened file.
-
-gets
- Read a single line from the standard in.
-
-getchar
- Read a single character from the standard in.
-
-fwrite
-
-fputc
- Write a single character to the opened file.
-
-fputs
- Write a single line to the opened file.
-
-puts
- Write a single line to standard out..
-
-putchar
- Write a single character to standard out..
-
-fflush
- Flush the current opened file to disk.
-
-fseek
- Seek to a location within the opened file.
-
-ftell
- Report the current position within the opened file.
-
-fclose
- Close the opened file.
-
-
-File: gnash_ref.info, Node: MySQL Extension, Prev: File I/O Extension, Up:
Included Extensions
-
-4.3.3 MySQL Extension
----------------------
-
-The MySQL ActionScript class follows the same API as MySQL, even down
-to the same arguments to the same function names. This enables a Flash
-movie to have direct access to a MySQL database. Traditionally Flash
-movies have had no database support, they either had to use arrays, or
-use XML to communicate to an application specific external database
-daemon.
-
-connect
- Connect to a MySQL database.
-
-qetData
- Get data from the database.
-
-disconnect
- Disconnect from a MySQL database.
-
-query
- Execute an SQL query to the database.
-
-fetch_row
- Fetch a row from the query results.
-
-num_fields
-
-free_result
- Free the results of a query.
-
-store_results
- Store the results of a query.
-
-
-File: gnash_ref.info, Node: RTMP Protocol, Next: Mozilla/Firefox NSAPI
Plugin, Prev: Gnash Extensions, Up: Top
-
-5 RTMP Protocol
-***************
-
-This document is based mostly on my own reverse engineering of the RTMP
-protocol and AMF format. _tcpdump_ and _ethereal_ are your friend. Some
-additional info that got me started was from the Red5
-(http://www.osflash.org/red5) project. _Red5_ is the only other open
-source Flash server. So some details are still vague, but as the
-implementation appears to work, we'll figure out what they are later.
-
- The Real Time Messaging Protocol was created by MacroMedia (now
-Adobe) for delivering Flash objects and video over a network
-connection. Currently the only servers which support this format are
-the MacroMedia Media sever, and the Open Source Red5 project.
-
- This is a simple protocol, optimized for poor bandwidth connections.
-It can support up to 64 concurrent streams over the same network
-connection. Part of each AMF packet header contains the index number of
-the stream. A single RTMP message can contain multiple AMF packets.
-
- An RTMP connection uses Tcp/ip port 1935. It is also possible to
-tunnel RTMP over an HTTP connection using port 80. Each AMF packet is
-128 bytes long except for streaming audio, which has 64 byte packets.
-
- The basics of the RTMP protocol are as follows. All communications
-are initiated by the client.
-
-Image of the RTMP protocol.
-
- The client starts the RTMP connection by sending a single byte with
-a value of 0x3. This byte is followed by a data block of 1536 bytes.
-The format if this data block is unknown, but it appears to not be
-actually used by the protocol except as a handshake.
-
- The server receives this packet, stores the 1536 byte data block,
-and then send a single byte with the value of 0x3, followed by two 1536
-data blocks. The second data block is the full contents of the original
-data block as sent by the client.
-
- The client receives the 1536 byte data block, and if they match, the
-connection is established. After the handshake process is done, there
-are three other messages that the client sends to the sever to start
-the data flowing.
-
- The first AMF packet sent to the server contains the _connect_
-packet. This doesn't appear to do much but notify the server the client
-is happy with the handshake, and ready to start reading packets.
-
- The second packet is the _NetConnection_ object from the client.
-This ActionScript class is used by the Flash movie to create the
-network connection to the server.
-
- The third packet is the _NetStream_ object from the client. This is
-the ActionScript class used to specify the file to be streamed by the
-server.
-
- The RTMP packet for our example looks like this:
-
-
- 030000190000c91400000000020007connect00?f0000000000000030003app0200#
- software/gnash/tests/1153948634.flv0008flashVer02000cLNX 6,0,82,0
0006
- swfUrl02001dfile:///file|%2Ftmp%2Fout.swfc30005tcUrl\002\0004
- rtmp://localhost/software/gnash/tests/1153948634.flv\000\000\t
- \002\000\005userx
-
-We'll take this apart in a bit, but you can see how all three AMF
-packets are in the same message. The message is received in several 128
-byte blocks, with the last one being less than that. The total size of
-the RTMP message is in the header, so the reader can tell if the entire
-message was read or not.
-
- The RTMP header is first, followed by the connect message as an
-ASCII string as the message body. The following AMF packet is the
-_NetConnection_ one, which specifies that this is coming from a Flash
-application. This also contains the file path the server can use to
-find the file to stream. This is then followed by the version number,
-which I assume is the version of the Flash player, so the server knows
-what it is talking to.
-
- The third packet is the one from _NetStream_, which specifies the
-URL used for the movie, followed by the user name for a semblance of
-security.
-
- For the next level of detail, we'll explain the format of AMF. AMF
-is used by the RTMP protocol to transfer data. Each Flash object is
-encapsulated in an AMF packet, including streaming audio or video.
-
- The first byte of the RTMP header determines two things about the
-rest of the message. The first 2 bits of this byte signify the total
-size of the RTMP header. The RTMP header is of a variable size, so this
-is important.
-
-00
- This specifies the header contains 12 bytes, including this one.
-
-01
- This specifies the header contains 8 bytes, including this one.
-
-02
- This specifies the header contains 4 bytes, including this one.
-
-03
- This specifies the header contains 1 byte, so this is the complete
- header.
-
- The other 6 bits in this byte represent the AMF index. As a single
-RTMP connection can support multiple data streams, this signifies which
-stream this packet is for. Once an AMF object is fully received by the
-client, the AMF index may be reused.
-
- For messages with headers of at least 4 bytes, the next 3 bytes are
-used by audio and video data packets, but at this time the meaning of
-this field is unknown.
-
- For messages with a 8 byte or larger header, the next 3 bytes
-determine the size of the RTMP message being transmitted. Messages with
-a 1 byte or 4 byte header use a standard size, 128 bytes for video, and
-64 bytes for audio.
-
- For messages with an 8 byte or larger header, the next byte is the
-type of the AMF object.
-
-0x3
- This specifies the content type of the RTMP packet is the number
- of bytes read. This is used to start the RTMP connection.
-
-0x4
- This specifies the content type of the RTMP message is a _ping_
- packet.
-
-0x5
- This specifies the content type of the RTMP message is server
- response of some type.
-
-0x6
- This specifies the content type of the RTMP packet is client
- request of some type.
-
-0x8
- This specifies the content type of the RTMP packet is an audio
- message.
-
-0x9
- This specifies the content type of the RTMP message is a video
- packet.
-
-0x12
- This specifies the content type of the RTMP message is notify.
-
-0x13
- This specifies the content type of the RTMP message is shared
- object.
-
-0x14
- This specifies the content type of the RTMP message is remote
- procedure call. This invokes the method of a Flash class remotely.
-
- There are two sets of data types to consider. One set is used by the
-to specify the content type of the AMF object, the other is an
-ActionScript data type tag used to denote which type of object is being
-transferred.
-
- The values of the initial type byte are:
-
-0x0
- This specifies the data in the AMF packet is a numeric value. All
- numeric values in Flash are 64 bit, _big-endian_.
-
-0x1
- This specifies the data in the AMF packet is a boolean value.
-
-0x2
- This specifies the data in the AMF packet is an _ASCII_ string.
-
-0x3
- This specifies the data in the AMF packet is a Flash object. The
- Flash object data type field further along in the message
- specifies which type of ActionScript object it is.
-
-0x4
- This specifies the data in the AMF packet is a Flash movie, ie.
- another Flash movie.
-
-0x5
- This specifies the data in the AMF packet is a NULL value. NULL is
- often used as the return code from calling Flash functions.
-
-0x6
- This specifies the data in the AMF packet is a undefined. This is
- also used as the return code from calling Flash functions.
-
-0x7
- This specifies the data in the AMF packet is a reference.
-
-0x8
- This specifies the data in the AMF packet is a ECMA array.
-
-0x9
- This specifies the data in the AMF packet is the end of an object
- definition. As an object is transmitted with multiple AMF packets,
- this lets the server know when the end of the object is reached.
-
-0xa
- This specifies the data in the AMF packet is a Strict array.
-
-0xb
- This specifies the data in the AMF packet is a date.
-
-0xc
- This specifies the data in the AMF packet is a multi-byte string.
- Multi-byte strings are used for international language support to
- represent non _ASCII_ fonts.
-
-0xd
- This specifies the data in the AMF packet is a an unsupported
- feature.
-
-0xe
- This specifies the data in the AMF packet is a record set.
-
-0xf
- This specifies the data in the AMF packet is a AML object. XML
- objects are then parsed by the _XML_ ActionScript class.
-
-0x10
- This specifies the data in the AMF packet is a typed object.
-
- For messages with a 12 byte header, the last 4 bytes are the routing
-of the message. If the destination is the server, this value is the
-NetStream object source. If the destination is the client, this is the
-NetStream object for this RTMP message. A value of 0x00000000 appears
-to be reserved for the NetConnection object.
-
- Multiple AMF streams can be contained in a single RTMP messages, so
-it's important to check the index of each AMF packet.
-
- An example RTMP header might look like this. (spaces added between
-fields for clarity) All the numbers are in hex.
-
-
- 03 000019 0000c9 14 000000000
-
-03
- The first two bits of this byte are the size of the header, which
- in this example is 00, for a 12 byte header. The next 6 bits is
- the AMF stream index number, which in this example is 0x3.
-
-000019
- These 3 bytes currently have an unknown purpose.
-
-000c9
- Since this example has a 12 byte header, this is the size of the
- RTMP message, in this case 201 bytes.
-
-14
- This is the content type of the RTMP message, which in this case
- is to invoke a remote function call. (which we later see is the
- connect function).
-
-00000000
- The source is the NetConnection object used to start this
- connection.
-
-* Menu:
-
-* AMF Format::
-
-
-File: gnash_ref.info, Node: AMF Format, Up: RTMP Protocol
-
-5.1 AMF Format
-==============
-
-The AMF format is used in the LocalConnection, SharedObject,
-NetConnection, and NetStream ActionScript classes. This is a means of
-binary data interchange between Flash movies, or between a Flash player
-and a Flash server.
-
- Like the RTMP messages, an AMF packet header can be of a variable
-size. The size is either the same as the initial header of the RTMP
-message, or a 1 byte header, which is commonly used for streaming audio
-or video data.
-
- The body of an AMF packet may look something like this example. The
-spaces have been added for clarity.
-
-
- 02 0007 636f6e6e656374
-
-02
- This is a single byte header. The value of the first 2 bits is
- 0x3, and the AMF index is also 0x3.
-
-0007
- This is the length in bytes of the string.
-
-63 6f 6e 6e 65 63 74
- This is the string. Note that there is no null terminator since
- the length is specified.
-
-
-File: gnash_ref.info, Node: Mozilla/Firefox NSAPI Plugin, Next: Appendix,
Prev: RTMP Protocol, Up: Top
-
-6 Mozilla/Firefox NSAPI Plugin
-******************************
-
-The Mozilla SDK has two API layers for plugins. The older layer is
-documented in the Geeko Plugin API Reference
-(http://www.gnu.org/software/gnash/manual/plugin.pdf), and the newer
-layer doesn't appear to be documented. The new API is simpler, and is
-portable across multiple versions of Mozilla or Firefox. The new API is
-just a layer on top of the older one, so this manual still applies.
-
- Most of the programming of a plugin is filling in real emphasis for
-the standard API functions and methods. Firefox uses these to create
-the plugin, and to send it data.
-
- When initializing or destroying a plugin, no matter how many
-instances are being used, the C API is used. These functions are
-typically called once for each plugin that is loaded.
-
-* Menu:
-
-* Plugin C API::
-* Plugin C++ API::
-* OpenGL and Threads::
-* Plugin Event Handling::
-
-
-File: gnash_ref.info, Node: Plugin C API, Next: Plugin C++ API, Up:
Mozilla/Firefox NSAPI Plugin
-
-6.1 Plugin C API
-================
-
-The lower layer is a C based API which is used by Firefox to initialize
-and destroy a plugin. This is so a plugin can be portable across
-multiple systems, since C++ emphasis is not portable between most C++
-compilers. This is where most of the behind the scenes work is done in
-a plugin. For Gnash, the sources this lower layer are in
-_plugin/mozilla-sdk_. They were added to the Gnash source tree so it
-wouldn't be necessary to have the Mozilla development packages
-installed to compile the Gnash plugin.
-
- This is also the older API used for plugins, so is usually the one
-used if you dig around for plugin examples on the web. These are the
-main functions which have to be implemented in a plugin for it to be
-recognized by the browser, and to be initialized and destroyed.
-
-NS_PluginInitialize
- This C function gets called once when the plugin is loaded,
- regardless of how many instantiations there are actually playing
- movies. So this is where all the one time only initialization
- stuff goes that is shared by all the threads.
-
-NS_NewPluginInstance
- This instantiates a new object for the browser. Returning a
- pointer to the C++ plugin object is what ties the C++ and C
- emphasis parts of the API together.
-
-NS_DestroyPluginInstance
- This destroys our instantiated object when the browser is done.
-
-NS_PluginShutdown
- This is called when a plugin is shut down, so this is where all
- the one time only shutdown stuff goes.
-
-NPP_GetMIMEDescription
- This is called to get the MIME types the plugin supports.
-
-NS_PluginGetValue
- This is used by Firefox to query information from the plugin, like
- the supported MIME type, the version number, and a description.
-
-
-File: gnash_ref.info, Node: Plugin C++ API, Next: OpenGL and Threads, Prev:
Plugin C API, Up: Mozilla/Firefox NSAPI Plugin
-
-6.2 Plugin C++ API
-==================
-
-The higher level layer is the one we are most concerned with. This is
-an instantiation of the _nsPluginInstanceBase_ class, as defined by the
-Mozilla SDK, for our plugin. With this API, a plugin is mostly defining
-the standard entry points for Firefox, and the emphasis that implements
-the glue between the Firefox and our plugin.
-
- These are called for each instantiation of plugin. If there are
-three Flash movies on a web page, then three instances are created.
-Unfortunately for plugin programmers, these functions may randomly be
-called more than once, so it's good to use initialization flags for
-things that should only be done one per thread. For instance,
-_nsPluginInstance::init()_ and _nsPluginInstance::SetWindow()_ are
-called more than once, so the plugin must protect against actions that
-could be destructive.
-
-nsPluginInstance::nsPluginInstance
- Create a new plugin object.
-
-nsPluginInstance::init
- This methods initializes the plugin object, and is called for
- every movie which gets played. This is where the thread-specific
- information goes.
-
-nsPluginInstance::SetWindow
- This sets up the window the plugin is supposed to render into.
- This calls passes in various information used by the plugin to
- setup the window. This may get called multiple times by each
- instantiated object, so it can't do much but window specific setup
- here. This is where the main emphasis is that sets up the window
- for the plugin.
-
-nsPluginInstance::NewStream
- Opens a new incoming data stream, which is the flash movie we want
- to play. A URL can be pretty ugly, like in this example:
-
http://www.sickwave.com/swf/navbar/navbar_sw.swf?atfilms=http%3a//www.atm.com/af/home/&shickwave=http%3a//www.sickwave.com&gblst=http%3a//gbst.sickwave.com/gb/gbHome.jsp&known=0
-
../flash/gui.swf?ip_addr=foobar.com&ip_port=3660&show_cursor=true&path_prefix=../flash/&trapallkeys=true"
- So this is where we parse the URL to get all the options passed in
- when invoking the plugin.
-
-nsPluginInstance::Write
- Read the data stream from Mozilla/Firefox. For now we read the
- bytes and write them to a disk file.
-
-nsPluginInstance::WriteReady
- Return how many bytes we can read into the buffer.
-
-nsPluginInstance::DestroyStream
- Destroy the data stream we've been reading. For Gnash, when the
- stream is destroyed means we've grabbed the entire movie. So we
- signal the thread to start reading and playing the movie.
-
-nsPluginInstance::shut
- This is where the movie playing specific shutdown emphasis goes.
-
-nsPluginInstance::~nsPluginInstance
- This destroys our plugin object.
-
-NS_PluginInitialize::initGL
- This is a Gnash internal function that sets up OpenGL.
-
-NS_PluginInitialize::destroyContext
- This is a Gnash internal function that destroys a GLX context.
-
-nsPluginInstance::getVersion
- This returns the version of Mozilla this plugin supports.
-
-nsPluginInstance::GetValue
- This returns information to the browser about the plugin's name
- and description.
-
-nsPluginInstance::URLNotify
-
-
-File: gnash_ref.info, Node: OpenGL and Threads, Next: Plugin Event Handling,
Prev: Plugin C++ API, Up: Mozilla/Firefox NSAPI Plugin
-
-6.3 OpenGL and Threads
-======================
-
-Neither OpenGL nor X11 has any built-in support for threads. Most
-actions aren't even atomic, so care has to be made to not corrupt any
-internal data. While it is difficult to render OpenGL from multiple
-threads, it can be done with the proper locking. The downside is the
-locking adds a performance hit, since all the threads will have to have
-the access synchronized by using mutexes.
-
- The X11 context is maintained one per instantiation of the plugin.
-It is necessary to lock access to the X11 context when using threads by
-using _XLockDisplay()_ and _XUnlockDisplay()_. A connection to the X11
-server is opened for every instantiation of the plugin using
-_XOpenDisplay()_.
-
- The _GLX Context_ is maintained one per instantiation of the plugin
-for a web page. If there are more than one Flash movie, there is more
-than one GLX Context. A GLX context can be created by using
-_glXCreateContext()_, and then later destroyed by using
-_glXDestroyContext()_. When swapping threads, the context is changed
-using _glXMakeCurrent()_.
-
- All the emphasis that directly accesses a GLX context or the X11
-display must be wrapped with a mutex.
-
-
-File: gnash_ref.info, Node: Plugin Event Handling, Prev: OpenGL and Threads,
Up: Mozilla/Firefox NSAPI Plugin
-
-6.4 Plugin Event Handling
-=========================
-
-Firefox on most UNIX systems is a GTK+ application, so it is possible
-to have the plugin hook into the X11 event handling via GLX or GTK.
-Since Firefox uses GTK, so does Gnash. This also allows the addition of
-a right-click mouse menu for controlling the player. The GTK build of
-Gnash offers the best browsing experience as it's more functional than
-the SDL version.
-
- It is also possible to disable the _GTK_ support so only the older
-_SDL_ support is used. In this case Gnash can't support event handling
-within the browser. This means that when using the SDL of the plugin,
-mouse clicks and keys pressed get ignored. Windows also can't be
-resized, and sometimes they overrun their boundaries as well. To
-disable the GTK support and force SDL to be used anyway, configure with
-_-disable-glext_
-
-
-File: gnash_ref.info, Node: Appendix, Next: Authors, Prev: Mozilla/Firefox
NSAPI Plugin, Up: Top
-
-7 Appendix
-**********
-
-* Menu:
-
-* Code Style::
-
-
-File: gnash_ref.info, Node: Code Style, Up: Appendix
-
-7.1 Code Style
-==============
-
-I know any discussion of coding styles leads to strong opinions, so
-I'll state simply I follow the GNU Coding Standards
-(http://www.gnu.org/prep/standards/standards.html). Where there is some
-flexibility as to the location of braces, I prefer mine on the end of a
-line when using an _if_, _while_, or _do_ statement. I find this more
-compact style easier to read and parse by eye. I'm also a big fan of
-always using braces around _if_ statements, even if they're one liners.
-
- Here's my tweaked style settings for _Emacs_, the one true editor to
-rule them all.
-
-
- (defconst my-style
- '((c-tab-always-indent . t)
- (c-auto-newline . t)
- (c-hanging-braces-alist . (
- (brace-list-intro)
- (namespace-open)
- (inline-open)
- (block-open)
- (brace-list-open)
- (brace-list-close)
- (brace-entry-open)
- (brace-else-brace)
- (brace-elseif-brace)
- (class-open after)
- (class-close)
- (defun-open after)
- (defun-close)
- (extern-lang-open)
- (inexpr-class-open)
- (statement-open)
- (substatement-open)
- (inexpr-class-close)))
- (c-hanging-colons-alist . ((member-init-intro before)
- (inher-intro)
- (case-label after)
- (label after)
- (access-label after)))
- (c-offsets-alist . (
- (innamespace . 0)
- (case-label . 2)
- ))
- (c-cleanup-list . (
- (scope-operator)
- (empty-defun-braces)
- (brace-else-brace)
- (brace-elseif-brace)
- (defun-close-semi)
- (list-close-comma)
- )
- )
- ;; no automatic newlines after ';' if following line non-blank or
inside
- ;; one-line inline methods
- (add-to-list 'c-hanging-semi&comma-criteria
- 'c-semi&comma-no-newlines-before-nonblanks)
- (add-to-list 'c-hanging-semi&comma-criteria
- 'c-semi&comma-no-newlines-for-oneline-inliners)
- ; (knr-argdecl-intro . -)
- (c-echo-syntactic-information-p . t)
- )
- "My GNU Programming Style")
-
- Another coding consideration: comments are good! Over commenting
-isn't good. Here is an over commented example:
-
-
- counter++; // increment counter
-
-Gnash also uses Doxygen (http://www.doxygen.org) style comments. These
-are processed by Doxygen when building a cross reference of all the
-classes, and is a good way to help push internals documentation from
-the depths of the code into documentation where it can be seen by
-others.
-
- _Doxygen_ style comments for _C++_ code involves simply using three
-slashes _///_ instead of the standard two slashes _//_ used for C++
-comments. Here's a short comment block for the _XML::cloneNode()_
-method:
-
-
- /// \brief copy a node
- ///
- /// Method; constructs and returns a new XML node of the same type,
- /// name, value, and attributes as the specified XML object. If deep
- /// is set to true, all child nodes are recursively cloned, resulting
- /// in an exact copy of the original object's document tree.
- XMLNode &
- XML::cloneNode(XMLNode &newnode, bool deep) {
- ...
- }
-
- The _\brief_ keyword means that the text becomes associated when
-listing all the classes on the generated web pages. The text after the
-blank link becomes the detailed description which appears on the
-generated web page for that class and method.
-
-
-File: gnash_ref.info, Node: Authors, Next: GNU Free Documentation License,
Prev: Appendix, Up: Top
-
-8 Authors
-*********
-
-Gnash is maintained by Rob Savoye. Other active developers are: Sandro
-Santilli, Bastiaan Jacques, Udo Giacomozzi, Chad Musick, Benjamin
-Wolsey, and Zou Lunkai. Please send all comments and suggestions to
-<address@hidden>. Past and sometimes current developers are Tomas
-Groth and Markus Gothe.
-
- Gnash was initially derived from GameSWF. GameSWF is maintained by
-Thatcher Ulrich <address@hidden>. The following people contributed to
-GameSWF: Mike Shaver, Thierry Berger-Perrin, Ignacio Castan~o, Willem
-Kokke, Vitaly Alexeev, Alexander Streit, and Rob Savoye.
-
-
-File: gnash_ref.info, Node: GNU Free Documentation License, Prev: Authors,
Up: Top
-
-Appendix A GNU Free Documentation License
-*****************************************
-
-* Menu:
-
-* 0. PREAMBLE: 0_ PREAMBLE.
-* 1. APPLICABILITY AND DEFINITIONS: 1_ APPLICABILITY AND DEFINITIONS.
-* 2. VERBATIM COPYING: 2_ VERBATIM COPYING.
-* 3. COPYING IN QUANTITY: 3_ COPYING IN QUANTITY.
-* 4. MODIFICATIONS: 4_ MODIFICATIONS.
-* 5. COMBINING DOCUMENTS: 5_ COMBINING DOCUMENTS.
-* 6. COLLECTIONS OF DOCUMENTS: 6_ COLLECTIONS OF DOCUMENTS.
-* 7. AGGREGATION WITH INDEPENDENT WORKS: 7_ AGGREGATION WITH INDEPENDENT WORKS.
-* 8. TRANSLATION: 8_ TRANSLATION.
-* 9. TERMINATION: 9_ TERMINATION.
-* 10. FUTURE REVISIONS OF THIS LICENSE: 10_ FUTURE REVISIONS OF THIS LICENSE.
-* Addendum::
-
-
-File: gnash_ref.info, Node: 0_ PREAMBLE, Next: 1_ APPLICABILITY AND
DEFINITIONS, Up: GNU Free Documentation License
-
-A.1 0. PREAMBLE
-===============
-
-The purpose of this License is to make a manual, textbook, or other
-written document "free" in the sense of freedom: to assure everyone the
-effective freedom to copy and redistribute it, with or without
-modifying it, either commercially or non-commercially. Secondarily,
-this License preserves for the author and publisher a way to get credit
-for their work, while not being considered responsible for
-modifications made by others.
-
- This License is a kind of "copyleft", which means that derivative
-works of the document must themselves be free in the same sense. It
-complements the GNU General Public License, which is a copyleft license
-designed for free software.
-
- We have designed this License in order to use it for manuals for
-free software, because free software needs free documentation: a free
-program should come with manuals providing the same freedoms that the
-software does. But this License is not limited to software manuals; it
-can be used for any textual work, regardless of subject matter or
-whether it is published as a printed book. We recommend this License
-principally for works whose purpose is instruction or reference.
-
-
-File: gnash_ref.info, Node: 1_ APPLICABILITY AND DEFINITIONS, Next: 2_
VERBATIM COPYING, Prev: 0_ PREAMBLE, Up: GNU Free Documentation License
-
-A.2 1. APPLICABILITY AND DEFINITIONS
-====================================
-
-This License applies to any manual or other work that contains a notice
-placed by the copyright holder saying it can be distributed under the
-terms of this License. The "Document", below, refers to any such manual
-or work. Any member of the public is a licensee, and is addressed as
-"you".
-
- A "Modified Version" of the Document means any work containing the
-Document or a portion of it, either copied verbatim, or with
-modifications and/or translated into another language.
-
- A "Secondary Section" is a named appendix or a front-matter section
-of the Document (*note fdl-document::) that deals exclusively with the
-relationship of the publishers or authors of the Document to the
-Document's overall subject (or to related matters) and contains nothing
-that could fall directly within that overall subject. (For example, if
-the Document is in part a textbook of mathematics, a Secondary Section
-may not explain any mathematics.) The relationship could be a matter
-of historical connection with the subject or with related matters, or of
-legal, commercial, philosophical, ethical or political position
-regarding them.
-
- The "Invariant Sections" are certain Secondary Sections (*note
-fdl-secondary::) whose titles are designated, as being those of
-Invariant Sections, in the notice that says that the Document (*note
-fdl-document::) is released under this License.
-
- The "Cover Texts" are certain short passages of text that are
-listed, as Front-Cover Texts or Back-Cover Texts, in the notice that
-says that the Document (*note fdl-document::) is released under this
-License.
-
- A "Transparent" copy of the Document (*note fdl-document::) means a
-machine-readable copy, represented in a format whose specification is
-available to the general public, whose contents can be viewed and edited
-directly and straightforwardly with generic text editors or (for images
-composed of pixels) generic paint programs or (for drawings) some
-widely available drawing editor, and that is suitable for input to text
-formatters or for automatic translation to a variety of formats
-suitable for input to text formatters. A copy made in an otherwise
-Transparent file format whose markup has been designed to thwart or
-discourage subsequent modification by readers is not Transparent. A
-copy that is not "Transparent" is called "Opaque".
-
- Examples of suitable formats for Transparent copies include plain
-ASCII without markup, Texinfo input format, LaTeX input format, SGML or
-XML using a publicly available DTD, and standard-conforming simple HTML
-designed for human modification. Opaque formats include PostScript, PDF,
-proprietary formats that can be read and edited only by proprietary
-word processors, SGML or XML for which the DTD and/or processing tools
-are not generally available, and the machine-generated HTML produced by
-some word processors for output purposes only.
-
- The "Title Page" means, for a printed book, the title page itself,
-plus such following pages as are needed to hold, legibly, the material
-this License requires to appear in the title page. For works in formats
-which do not have any title page as such, "Title Page" means the text
-near the most prominent appearance of the work's title, preceding the
-beginning of the body of the text.
-
-
-File: gnash_ref.info, Node: 2_ VERBATIM COPYING, Next: 3_ COPYING IN
QUANTITY, Prev: 1_ APPLICABILITY AND DEFINITIONS, Up: GNU Free Documentation
License
-
-A.3 2. VERBATIM COPYING
-=======================
-
-You may copy and distribute the Document (*note fdl-document::) in any
-medium, either commercially or noncommercially, provided that this
-License, the copyright notices, and the license notice saying this
-License applies to the Document are reproduced in all copies, and that
-you add no other conditions whatsoever to those of this License. You
-may not use technical measures to obstruct or control the reading or
-further copying of the copies you make or distribute. However, you may
-accept compensation in exchange for copies. If you distribute a large
-enough number of copies you must also follow the conditions in section
-3 (*note 3_ COPYING IN QUANTITY::).
-
- You may also lend copies, under the same conditions stated above,
-and you may publicly display copies.
-
-
-File: gnash_ref.info, Node: 3_ COPYING IN QUANTITY, Next: 4_ MODIFICATIONS,
Prev: 2_ VERBATIM COPYING, Up: GNU Free Documentation License
-
-A.4 3. COPYING IN QUANTITY
-==========================
-
-If you publish printed copies of the Document (*note fdl-document::)
-numbering more than 100, and the Document's license notice requires
-Cover Texts (*note fdl-cover-texts::), you must enclose the copies in
-covers that carry, clearly and legibly, all these Cover Texts:
-Front-Cover Texts on the front cover, and Back-Cover Texts on the back
-cover. Both covers must also clearly and legibly identify you as the
-publisher of these copies. The front cover must present the full title
-with all words of the title equally prominent and visible. You may add
-other material on the covers in addition. Copying with changes limited
-to the covers, as long as they preserve the title of the Document
-(*note fdl-document::) and satisfy these conditions, can be treated as
-verbatim copying in other respects.
-
- If the required texts for either cover are too voluminous to fit
-legibly, you should put the first ones listed (as many as fit
-reasonably) on the actual cover, and continue the rest onto adjacent
-pages.
-
- If you publish or distribute Opaque (*note fdl-transparent::) copies
-of the Document (*note fdl-document::) numbering more than 100, you
-must either include a machine-readable Transparent (*note
-fdl-transparent::) copy along with each Opaque copy, or state in or
-with each Opaque copy a publicly-accessible computer-network location
-containing a complete Transparent copy of the Document, free of added
-material, which the general network-using public has access to download
-anonymously at no charge using public-standard network protocols. If
-you use the latter option, you must take reasonably prudent steps, when
-you begin distribution of Opaque copies in quantity, to ensure that
-this Transparent copy will remain thus accessible at the stated
-location until at least one year after the last time you distribute an
-Opaque copy (directly or through your agents or retailers) of that
-edition to the public.
-
- It is requested, but not required, that you contact the authors of
-the Document (*note fdl-document::) well before redistributing any
-large number of copies, to give them a chance to provide you with an
-updated version of the Document.
-
-
-File: gnash_ref.info, Node: 4_ MODIFICATIONS, Next: 5_ COMBINING DOCUMENTS,
Prev: 3_ COPYING IN QUANTITY, Up: GNU Free Documentation License
-
-A.5 4. MODIFICATIONS
-====================
-
-You may copy and distribute a Modified Version (*note fdl-modified::)
-of the Document (*note fdl-document::) under the conditions of sections
-2 (*note 2_ VERBATIM COPYING::) and 3 (*note 3_ COPYING IN QUANTITY::)
-above, provided that you release the Modified Version under precisely
-this License, with the Modified Version filling the role of the
-Document, thus licensing distribution and modification of the Modified
-Version to whoever possesses a copy of it. In addition, you must do
-these things in the Modified Version:
-
- * *A. * Use in the Title Page (*note fdl-title-page::) (and on the
- covers, if any) a title distinct from that of the Document (*note
- fdl-document::), and from those of previous versions (which
- should, if there were any, be listed in the History section of the
- Document). You may use the same title as a previous version if the
- original publisher of that version gives permission.
-
- * *B. * List on the Title Page (*note fdl-title-page::), as authors,
- one or more persons or entities responsible for authorship of the
- modifications in the Modified Version (*note fdl-modified::),
- together with at least five of the principal authors of the
- Document (*note fdl-document::) (all of its principal authors, if
- it has less than five).
-
- * *C. * State on the Title Page (*note fdl-title-page::) the name of
- the publisher of the Modified Version (*note fdl-modified::), as
- the publisher.
-
- * *D. * Preserve all the copyright notices of the Document (*note
- fdl-document::).
-
- * *E. * Add an appropriate copyright notice for your modifications
- adjacent to the other copyright notices.
-
- * *F. * Include, immediately after the copyright notices, a license
- notice giving the public permission to use the Modified Version
- (*note fdl-modified::) under the terms of this License, in the
- form shown in the Addendum below.
-
- * *G. * Preserve in that license notice the full lists of Invariant
- Sections (*note fdl-invariant::) and required Cover Texts (*note
- fdl-cover-texts::) given in the Document's (*note fdl-document::)
- license notice.
-
- * *H. * Include an unaltered copy of this License.
-
- * *I. * Preserve the section entitled "History", and its title, and
- add to it an item stating at least the title, year, new authors,
- and publisher of the Modified Version (*note fdl-modified::)as
- given on the Title Page (*note fdl-title-page::). If there is no
- section entitled "History" in the Document (*note fdl-document::),
- create one stating the title, year, authors, and publisher of the
- Document as given on its Title Page, then add an item describing
- the Modified Version as stated in the previous sentence.
-
- * *J. * Preserve the network location, if any, given in the Document
- (*note fdl-document::) for public access to a Transparent (*note
- fdl-transparent::) copy of the Document, and likewise the network
- locations given in the Document for previous versions it was based
- on. These may be placed in the "History" section. You may omit a
- network location for a work that was published at least four years
- before the Document itself, or if the original publisher of the
- version it refers to gives permission.
-
- * *K. * In any section entitled "Acknowledgements" or "Dedications",
- preserve the section's title, and preserve in the section all the
- substance and tone of each of the contributor acknowledgements
- and/or dedications given therein.
-
- * *L. * Preserve all the Invariant Sections (*note fdl-invariant::)
- of the Document (*note fdl-document::), unaltered in their text
- and in their titles. Section numbers or the equivalent are not
- considered part of the section titles.
-
- * *M. * Delete any section entitled "Endorsements". Such a section
- may not be included in the Modified Version (*note fdl-modified::).
-
- * *N. * Do not retitle any existing section as "Endorsements" or to
- conflict in title with any Invariant Section (*note
- fdl-invariant::).
-
- If the Modified Version (*note fdl-modified::) includes new
-front-matter sections or appendices that qualify as Secondary Sections
-(*note fdl-secondary::) and contain no material copied from the
-Document, you may at your option designate some or all of these
-sections as invariant. To do this, add their titles to the list of
-Invariant Sections (*note fdl-invariant::) in the Modified Version's
-license notice. These titles must be distinct from any other section
-titles.
-
- You may add a section entitled "Endorsements", provided it contains
-nothing but endorsements of your Modified Version (*note
-fdl-modified::) by various parties-for example, statements of peer
-review or that the text has been approved by an organization as the
-authoritative definition of a standard.
-
- You may add a passage of up to five words as a Front-Cover Text
-(*note fdl-cover-texts::), and a passage of up to 25 words as a
-Back-Cover Text (*note fdl-cover-texts::), to the end of the list of
-Cover Texts (*note fdl-cover-texts::) in the Modified Version (*note
-fdl-modified::). Only one passage of Front-Cover Text and one of
-Back-Cover Text may be added by (or through arrangements made by) any
-one entity. If the Document (*note fdl-document::) already includes a
-cover text for the same cover, previously added by you or by
-arrangement made by the same entity you are acting on behalf of, you
-may not add another; but you may replace the old one, on explicit
-permission from the previous publisher that added the old one.
-
- The author(s) and publisher(s) of the Document (*note
-fdl-document::) do not by this License give permission to use their
-names for publicity for or to assert or imply endorsement of any
-Modified Version (*note fdl-modified::).
-
-
-File: gnash_ref.info, Node: 5_ COMBINING DOCUMENTS, Next: 6_ COLLECTIONS OF
DOCUMENTS, Prev: 4_ MODIFICATIONS, Up: GNU Free Documentation License
-
-A.6 5. COMBINING DOCUMENTS
-==========================
-
-You may combine the Document (*note fdl-document::) with other
-documents released under this License, under the terms defined in
-section 4 (*note 4_ MODIFICATIONS::) above for modified versions,
-provided that you include in the combination all of the Invariant
-Sections (*note fdl-invariant::) of all of the original documents,
-unmodified, and list them all as Invariant Sections of your combined
-work in its license notice.
-
- The combined work need only contain one copy of this License, and
-multiple identical Invariant Sections (*note fdl-invariant::) may be
-replaced with a single copy. If there are multiple Invariant Sections
-with the same name but different contents, make the title of each such
-section unique by adding at the end of it, in parentheses, the name of
-the original author or publisher of that section if known, or else a
-unique number. Make the same adjustment to the section titles in the
-list of Invariant Sections in the license notice of the combined work.
-
- In the combination, you must combine any sections entitled "History"
-in the various original documents, forming one section entitled
-"History"; likewise combine any sections entitled "Acknowledgements",
-and any sections entitled "Dedications". You must delete all sections
-entitled "Endorsements."
-
-
-File: gnash_ref.info, Node: 6_ COLLECTIONS OF DOCUMENTS, Next: 7_
AGGREGATION WITH INDEPENDENT WORKS, Prev: 5_ COMBINING DOCUMENTS, Up: GNU
Free Documentation License
-
-A.7 6. COLLECTIONS OF DOCUMENTS
-===============================
-
-You may make a collection consisting of the Document (*note
-fdl-document::) and other documents released under this License, and
-replace the individual copies of this License in the various documents
-with a single copy that is included in the collection, provided that
-you follow the rules of this License for verbatim copying of each of the
-documents in all other respects.
-
- You may extract a single document from such a collection, and
-distribute it individually under this License, provided you insert a
-copy of this License into the extracted document, and follow this
-License in all other respects regarding verbatim copying of that
-document.
-
-
-File: gnash_ref.info, Node: 7_ AGGREGATION WITH INDEPENDENT WORKS, Next: 8_
TRANSLATION, Prev: 6_ COLLECTIONS OF DOCUMENTS, Up: GNU Free Documentation
License
-
-A.8 7. AGGREGATION WITH INDEPENDENT WORKS
-=========================================
-
-A compilation of the Document (*note fdl-document::) or its derivatives
-with other separate and independent documents or works, in or on a
-volume of a storage or distribution medium, does not as a whole count
-as a Modified Version (*note fdl-modified::) of the Document, provided
-no compilation copyright is claimed for the compilation. Such a
-compilation is called an "aggregate", and this License does not apply
-to the other self-contained works thus compiled with the Document , on
-account of their being thus compiled, if they are not themselves
-derivative works of the Document. If the Cover Text (*note
-fdl-cover-texts::) requirement of section 3 (*note 3_ COPYING IN
-QUANTITY::) is applicable to these copies of the Document, then if the
-Document is less than one quarter of the entire aggregate, the
-Document's Cover Texts may be placed on covers that surround only the
-Document within the aggregate. Otherwise they must appear on covers
-around the whole aggregate.
-
-
-File: gnash_ref.info, Node: 8_ TRANSLATION, Next: 9_ TERMINATION, Prev: 7_
AGGREGATION WITH INDEPENDENT WORKS, Up: GNU Free Documentation License
-
-A.9 8. TRANSLATION
-==================
-
-Translation is considered a kind of modification, so you may distribute
-translations of the Document (*note fdl-document::) under the terms of
-section 4 (*note 4_ MODIFICATIONS::). Replacing Invariant Sections
-(*note fdl-invariant::) with translations requires special permission
-from their copyright holders, but you may include translations of some
-or all Invariant Sections in addition to the original versions of these
-Invariant Sections. You may include a translation of this License
-provided that you also include the original English version of this
-License. In case of a disagreement between the translation and the
-original English version of this License, the original English version
-will prevail.
-
-
-File: gnash_ref.info, Node: 9_ TERMINATION, Next: 10_ FUTURE REVISIONS OF
THIS LICENSE, Prev: 8_ TRANSLATION, Up: GNU Free Documentation License
-
-A.10 9. TERMINATION
-===================
-
-You may not copy, modify, sublicense, or distribute the Document (*note
-fdl-document::) except as expressly provided for under this License.
-Any other attempt to copy, modify, sublicense or distribute the
-Document 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.
-
-
-File: gnash_ref.info, Node: 10_ FUTURE REVISIONS OF THIS LICENSE, Next:
Addendum, Prev: 9_ TERMINATION, Up: GNU Free Documentation License
-
-A.11 10. FUTURE REVISIONS OF THIS LICENSE
-=========================================
-
-The Free Software Foundation (http://www.gnu.org/fsf/fsf.html) may
-publish new, revised versions of the GNU Free Documentation 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. See http://www.gnu.org/copyleft/
-(http://www.gnu.org/copyleft).
-
- Each version of the License is given a distinguishing version
-number. If the Document (*note fdl-document::) specifies that a
-particular numbered version of this License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that specified version or of any later version
-that has been published (not as a draft) by the Free Software
-Foundation. If the Document does not specify a version number of this
-License, you may choose any version ever published (not as a draft) by
-the Free Software Foundation.
-
-
-File: gnash_ref.info, Node: Addendum, Prev: 10_ FUTURE REVISIONS OF THIS
LICENSE, Up: GNU Free Documentation License
-
-A.12 Addendum
-=============
-
-To use this License in a document you have written, include a copy of
-the License in the document and put the following copyright and license
-notices just after the title page:
-
- Copyright 2008, Free Software Foundation.
-
- Permission is granted to copy, distribute and/or modify this
- document under the terms of the GNU Free Documentation License,
- Version 1.1 or any later version published by the Free Software
- Foundation; with noInvariant Sections (*note fdl-invariant::),
- with no Front-Cover Texts (*note fdl-cover-texts::), and with no
- Back-Cover Texts (*note fdl-cover-texts::). A copy of the license
- is included in the section entitled "GNU Free Documentation
- License".
-
- If your document contains nontrivial examples of program code, we
-recommend releasing these examples in parallel under your choice of
-free software license, such as the GNU General Public License
-(http://www.gnu.org/copyleft/gpl.html), to permit their use in free
-software.
-
-
-
-Tag Table:
-Node: Top168
-Node: Introduction1821
-Node: Audience2622
-Node: What Is Supported ?2950
-Node: Building from Source5482
-Node: Overview5862
-Node: Getting The Source6907
-Node: Releases7113
-Node: CVS Access7481
-Node: Code Dependencies8193
-Ref: Code Dependency Table8890
-Node: Testing Dependencies34405
-Ref: Testing Dependency Table34713
-Node: Documentation Dependencies38637
-Ref: Documentation Dependency Table38906
-Node: Configuring Gnash47974
-Node: Features50296
-Ref: Configuration Options - Features50896
-Node: Specifying Custom Paths57226
-Ref: Custom Path Options57701
-Node: Compiling the Code67371
-Node: Creating the Documentation68312
-Node: Running the Tests69648
-Node: Using DejaGnu70093
-Node: Increasing Verbosity70456
-Node: Running Some Tests70992
-Node: Running The Tests Manually71812
-Node: Movie tests72474
-Node: ActionScript Unit Tests72828
-Node: Installation73145
-Node: Libraries74421
-Node: Executables75308
-Node: Documentation76178
-Node: Cross Configuring76933
-Node: Software Internals80008
-Node: A Tour of Gnash80279
-Node: The Libraries80846
-Node: libgnashbase81149
-Node: libgnashgeo81573
-Node: libgnashgui81788
-Node: libgnashserver82057
-Node: libgnashasobjs82428
-Node: libgnashamf82664
-Node: libgnashbackend83087
-Node: libgnashplugin83402
-Node: libklashpart83608
-Node: The Applications83778
-Node: The Standalone Player84145
-Node: Gprocesser84443
-Node: SOLdumper84837
-Node: Dumpshm85104
-Node: The Plugin85323
-Node: Current Status85801
-Node: GUI Support86359
-Node: Mozplugger88040
-Node: Klash89931
-Node: The Debug Logging System90481
-Node: Logging System C API92042
-Node: Logging System C++ API94246
-Node: Sound handling in Gnash96087
-Node: Sound types96918
-Node: Sound parsing97455
-Node: Sound playback98023
-Node: The SDL sound backend98553
-Node: The Gstreamer backend99872
-Node: Future audio backends100888
-Node: Detailed description of the Gstreamer backend101378
-Node: Testing103629
-Node: Testing Tools104100
-Node: Test Cases104932
-Node: Writing ActionScript Tests105511
-Node: Writing Ming-based self-contained SWF tests108014
-Node: Using Ming-based test generators facilities109171
-Node: Writing self-contained SWF tests with other compilers111531
-Node: Writing Test Runners114624
-Node: Using the generic test runner for self-contained SWF tests116373
-Node: Writing Movie testers118462
-Node: Adding New ActionScript Class120202
-Node: Prototype121382
-Node: Declaration122799
-Node: Instantiation123064
-Node: Methods123691
-Node: Accessing Arguments124082
-Node: Returning a Value to ActionScript124478
-Node: Additional fn_call Members124857
-Node: Dynamic Properties125711
-Node: The as_value Object Type127216
-Node: Data Types127654
-Node: Determining the Type127975
-Node: Fetching the Value128507
-Node: Setting the Value and Type128997
-Node: Further Reading129591
-Node: Object ActionScript Class130006
-Node: The Methods of the Class130346
-Node: The Properties of the Object Class130685
-Node: Object Class Conformance131000
-Node: Gnash Extensions132539
-Node: Creating A New Extension134813
-Node: Crafting an Extension136229
-Node: Debugging An Extension140533
-Node: Included Extensions142225
-Node: Gtk Extension142669
-Node: File I/O Extension143656
-Node: MySQL Extension144842
-Node: RTMP Protocol145693
-Node: AMF Format155489
-Node: Mozilla/Firefox NSAPI Plugin156465
-Node: Plugin C API157483
-Node: Plugin C++ API159342
-Node: OpenGL and Threads162606
-Node: Plugin Event Handling163934
-Node: Appendix164903
-Node: Code Style165055
-Node: Authors168885
-Node: GNU Free Documentation License169581
-Node: 0_ PREAMBLE170344
-Node: 1_ APPLICABILITY AND DEFINITIONS171650
-Ref: fdl-document171875
-Ref: fdl-modified172166
-Ref: fdl-secondary172353
-Ref: fdl-invariant172998
-Ref: fdl-cover-texts173247
-Ref: fdl-transparent173460
-Ref: fdl-title-page174750
-Node: 2_ VERBATIM COPYING175139
-Node: 3_ COPYING IN QUANTITY176119
-Node: 4_ MODIFICATIONS178476
-Node: 5_ COMBINING DOCUMENTS184536
-Node: 6_ COLLECTIONS OF DOCUMENTS186033
-Node: 7_ AGGREGATION WITH INDEPENDENT WORKS186924
-Node: 8_ TRANSLATION188152
-Node: 9_ TERMINATION189055
-Node: 10_ FUTURE REVISIONS OF THIS LICENSE189710
-Node: Addendum190850
-
-End Tag Table
-
-
-Local Variables:
-coding: US-ASCII
-End:
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] gnash/doc/C/preformatted gnashuser.ref.in [release_0_8_2_rc1],
Sandro Santilli <=