gnash-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gnash-commit] /srv/bzr/gnash/trunk r11854: Update documentation, --help


From: Benjamin Wolsey
Subject: [Gnash-commit] /srv/bzr/gnash/trunk r11854: Update documentation, --help text, removing some seriously out-of-date and
Date: Mon, 01 Feb 2010 08:47:22 +0100
User-agent: Bazaar (2.0.2)

------------------------------------------------------------
revno: 11854 [merge]
committer: Benjamin Wolsey <address@hidden>
branch nick: trunk
timestamp: Mon 2010-02-01 08:47:22 +0100
message:
  Update documentation, --help text, removing some seriously out-of-date and
  inaccurate items and adding correct text.
  
  Add commandline screenshot functions for real GUIs (not yet for dump). Make
  GUIs go through Gui::quit() before calling GUI-specific exit routines where
  possible. This applies to gtk-gnash (always) and kde4-gnash (except where the
  window is destroyed). Document requirement for those places it isn't
  implemented.
  
  This is required for the final screenshot, and may be useful for other
  common exit functions.
  
  Document new commandline functions.
modified:
  doc/C/gnash.man-xml
  gui/Kde4Gui.cpp
  gui/Kde4Gui.h
  gui/NullGui.h
  gui/Player.cpp
  gui/Player.h
  gui/dump.cpp
  gui/dump.h
  gui/gnash.cpp
  gui/gtk.cpp
  gui/gtksup.h
  gui/gui.cpp
  gui/gui.h
  gui/kde.cpp
  gui/kdesup.h
  gui/sdlsup.h
=== modified file 'doc/C/gnash.man-xml'
--- a/doc/C/gnash.man-xml       2008-03-05 21:05:55 +0000
+++ b/doc/C/gnash.man-xml       2010-02-01 07:18:21 +0000
@@ -26,7 +26,7 @@
 
 <refsynopsisdiv><title>Synopsis</title>
 <synopsis>
-gnash (options)... (file)...
+gnash [option]... [URL]
 </synopsis>
 </refsynopsisdiv>
 
@@ -49,16 +49,7 @@
     <term>-s factor</term>
     <listitem>
       <para>
-       Scale the movie up/down by the specified factor.
-      </para>
-    </listitem>
-  </varlistentry>
-
-  <varlistentry>
-    <term>-c</term>
-    <listitem>
-      <para>
-       Severe errors produce a core file instead of letting SDL trap them.
+           Scale the movie up/down by the specified factor.
       </para>
     </listitem>
   </varlistentry>
@@ -67,7 +58,7 @@
     <term>-d num</term>
     <listitem>
       <para>
-      Number of milliseconds to delay in main loop.
+        Number of milliseconds to delay in main loop.
       </para>
     </listitem>
   </varlistentry>
@@ -76,34 +67,47 @@
     <term>-a</term>
     <listitem>
       <para>
-          Enable ActionScript debugging.
-      </para>
-    </listitem>
-  </varlistentry>
-
-  <varlistentry>
-    <term>-x</term>
-    <listitem>
-      <para>
-       The XID of the parent window Gnash should use instead of
-       creating a new one.  This is only used when embedding the player
-       into another window.
-      </para>
-    </listitem>
-  </varlistentry>
-
-  <varlistentry>
-    <term>-j</term>
-    <listitem>
-      <para>
-       Set the width of the window. This is only used when embedding
-       the player into another window.
-      </para>
-    </listitem>
-  </varlistentry>
-
-  <varlistentry>
-    <term>-k</term>
+        Be very verbose about movie action execution. Must be used in
+        conjunction with -v.
+      </para>
+    </listitem>
+  </varlistentry>
+  
+  <varlistentry>
+    <term>-p</term>
+    <listitem>
+      <para>
+        Be very verbose about parsing. Must be used in conjunction with -v.
+      </para>
+    </listitem>
+  </varlistentry>
+
+  <varlistentry>
+    <term>-x xid</term>
+    <term>--xid xid</term>
+    <listitem>
+      <para>
+           The XID of the parent window Gnash should use instead of
+           creating a new one.  This is only used when embedding the player
+           into another window.
+      </para>
+    </listitem>
+  </varlistentry>
+
+  <varlistentry>
+    <term>-j width</term>
+    <term>--width width</term>
+    <listitem>
+      <para>
+           Set the width of the window. This is only used when embedding
+           the player into another window.
+      </para>
+    </listitem>
+  </varlistentry>
+
+  <varlistentry>
+    <term>-k height</term>
+    <term>--height height</term>
     <listitem>
       <para>
        Set the height of the window. This is only used when embedding
@@ -122,42 +126,6 @@
   </varlistentry>
 
   <varlistentry>
-    <term>-va</term>
-    <listitem>
-      <para>
-         Be verbose about movie Actions.
-      </para>
-    </listitem>
-  </varlistentry>
-
-  <varlistentry>
-    <term>-vp</term>
-    <listitem>
-      <para>
-         Be verbose about parsing the movie.
-      </para>
-    </listitem>
-  </varlistentry>
-
-  <varlistentry>
-    <term>-ml bias</term>
-    <listitem>
-      <para>
-  Specify the texture LOD bias (float, default is -1).
-      </para>
-    </listitem>
-  </varlistentry>
-
-  <varlistentry>
-    <term>-p</term>
-    <listitem>
-      <para>
-          Run full speed (without sleeping), and log the frame rate.
-      </para>
-    </listitem>
-  </varlistentry>
-
-  <varlistentry>
     <term>-g</term>
     <listitem>
       <para>
@@ -178,21 +146,12 @@
     </listitem>
   </varlistentry>
 
-<!--
-  <varlistentry>
-    <term>-e</term>
-    <listitem>
-      <para>
-          Use SDL Event thread
-      </para>
-    </listitem>
-  </varlistentry>
--->
   <varlistentry>
     <term>-1</term>
+    <term>--once</term>
     <listitem>
       <para>
-       Play once; exit when/if movie reaches the last frame.
+        Play once; exit when/if movie reaches the last frame.
       </para>
     </listitem>
   </varlistentry>
@@ -214,15 +173,17 @@
 
   <varlistentry>
     <term>-t sec</term>
+    <term>--timeout sec</term>
     <listitem>
       <para>
-       Timeout and exit after the specified number of seconds.
+        Timeout and exit after the specified number of seconds.
       </para>
     </listitem>
   </varlistentry>
 
   <varlistentry>
     <term>-u</term>
+    <term>--real-url</term>
     <listitem>
       <para>
        Set "real" url of the movie (useful for downloaded movies).
@@ -232,6 +193,7 @@
 
   <varlistentry>
     <term>-U</term>
+    <term>--base-url</term>
     <listitem>
       <para>
        Set "base" url for this run (used to resolve relative urls,
@@ -242,16 +204,18 @@
   </varlistentry>
 
   <varlistentry>
-    <term>-P</term>
+    <term>-P param</term>
+    <term>--param param</term>
     <listitem>
       <para>
-       Set parameter (ie. "FlashVars=A=1&amp;b=2")
+        Set parameter (ie. "FlashVars=A=1&amp;b=2")
       </para>
     </listitem>
   </varlistentry>
 
   <varlistentry>
     <term>-F</term>
+    <term>--fd</term>
     <listitem>
       <para>
        Set filedescriptor to use for external communications.
@@ -270,6 +234,34 @@
     </listitem>
   </varlistentry>
 
+  <varlistentry>
+    <term>--screenshot list</term>
+    <listitem>
+      <para>
+        Set a list of frame advances to be saved as screenshots. The list
+        must be comma-separated. Valid values are integers and the phrase
+        &quot;last&quot;. If &quot;last&quot; is specified, the final
+        frame before exit is saved. Invalid values are ignored. Frame numbers
+        apply to the sequence of frames as the SWF is executed, not the
+        frame sequence defined in the SWF. Use in combination with
+        --screenshot-file to specify output filename.
+      </para>
+    </listitem>
+  </varlistentry>
+
+  <varlistentry>
+    <term>--screenshot-file file</term>
+    <listitem>
+      <para>
+        Specify the output pattern for screenshot filenames. The token %f
+        in a pattern will be replaced with a frame identifier. If you specify
+        multiple frames and do not use %f, the file will be overwritten for
+        each screenshot. If this option is not specified but screenshots
+        are requested, a default filename will be used.
+      </para>
+    </listitem>
+  </varlistentry>
+
 </variablelist>
 
 <refsect2><title>Keys</title>
@@ -294,19 +286,10 @@
   </varlistentry>
 
   <varlistentry>
-    <term>ESC</term>
-    <listitem>
-      <para>
-             Quit/Exit.
-      </para>
-    </listitem>
-  </varlistentry>
-
-  <varlistentry>
     <term>CTRL-P</term>
     <listitem>
       <para>
-          Toggle Pause.
+          Toggle pause.
       </para>
     </listitem>
   </varlistentry>
@@ -321,71 +304,26 @@
   </varlistentry>
 
   <varlistentry>
-    <term>CTRL-[ or kp-</term>
-    <listitem>
-      <para>
-       Step back one frame.
-      </para>
-    </listitem>
-  </varlistentry>
-
-  <varlistentry>
-    <term>CTRL-] or kp+</term>
-    <listitem>
-      <para>
-       Step forward one frame.
-      </para>
-    </listitem>
-  </varlistentry>
-
-<!--
-  <varlistentry>
-    <term>CTRL-A</term>
-    <listitem>
-      <para>
-          Toggle anti-aliasing (doesn't work).
-      </para>
-    </listitem>
-  </varlistentry>
--->
-
-  <varlistentry>
-    <term>CTRL-T</term>
-    <listitem>
-      <para>
-          Debug.  Test the set_variable() function.
-      </para>
-    </listitem>
-  </varlistentry>
-
-  <varlistentry>
-    <term>CTRL-G</term>
-    <listitem>
-      <para>
-          Debug.  Test the get_variable() function.
-      </para>
-    </listitem>
-  </varlistentry>
-
-  <varlistentry>
-    <term>CTRL-M</term>
-    <listitem>
-      <para>
-          Debug.  Test the call_method() function.
-      </para>
-    </listitem>
-  </varlistentry>
-
-  <varlistentry>
-    <term>CTRL-B</term>
-    <listitem>
-      <para>
-          Toggle background color.
-      </para>
-    </listitem>
-  </varlistentry>
-  </variablelist>
-
+    <term>CTRL-F   </term>
+    <listitem>
+      <para>
+        Toggle fullscreen. ESC also exits fullscreen.
+      </para>
+    </listitem>
+  </varlistentry>
+
+
+  <varlistentry>
+    <term>CTRL-O </term>
+    <listitem>
+      <para>
+        Save a spontaneous screenshot. If no screenshots were requested
+        from the command line, a default filename is used. Otherwise, the
+        same filename pattern is used for requested and spontaneous
+        screenshots.
+      </para>
+    </listitem>
+  </varlistentry>
 <para>
 Flash is a registered trademark of Adobe Corporation.
 </para>

=== modified file 'gui/Kde4Gui.cpp'
--- a/gui/Kde4Gui.cpp   2010-01-11 06:41:38 +0000
+++ b/gui/Kde4Gui.cpp   2010-02-01 07:29:29 +0000
@@ -253,7 +253,9 @@
 void
 Kde4Gui::setTimeout(unsigned int timeout)
 {
-    QTimer::singleShot(timeout, _application.get(), SLOT(quit()));
+    // This must go through Gui::quit() to make sure screenshots are
+    // handled if necessary.
+    QTimer::singleShot(timeout, _drawingWidget, SLOT(quit()));
 }
 
 
@@ -504,7 +506,7 @@
 
 
 void
-Kde4Gui::quit()
+Kde4Gui::quitUI()
 {
     _application->quit();
 }
@@ -520,9 +522,10 @@
                      _drawingWidget, SLOT(properties()));
 
     quitAction = new QAction(_q("Quit Gnash"), _window.get());
-    // This is connected directly to the QApplication's quit() slot
+    // This must go through Gui::quit() to make sure we don't exit
+    // before doing whatever the Gui wants to do on exit.
     _drawingWidget->connect(quitAction, SIGNAL(triggered()),
-                     _application.get(), SLOT(quit()));
+                     _drawingWidget, SLOT(quit()));
 
     // Edit Menu actions
     preferencesAction = new QAction(_q("Preferences"), _window.get());
@@ -808,6 +811,12 @@
 }
 
 void
+DrawingWidget::quit()
+{
+    _gui.quit();
+}
+
+void
 DrawingWidget::fullscreen(bool isFull)
 {
     if (isFull) {

=== modified file 'gui/Kde4Gui.h'
--- a/gui/Kde4Gui.h     2010-01-11 06:41:38 +0000
+++ b/gui/Kde4Gui.h     2010-02-01 07:29:29 +0000
@@ -80,6 +80,7 @@
     void restart();
     void refresh();
     void fullscreen(bool isFull);
+    void quit();
 
 protected:
     void paintEvent(QPaintEvent*);
@@ -142,7 +143,7 @@
     void resize(int width, int height);
     void showProperties();
     void showPreferences();
-    void quit();
+    void quitUI();
 
     bool want_multiple_regions() { return true; }
 

=== modified file 'gui/NullGui.h'
--- a/gui/NullGui.h     2010-01-11 06:41:38 +0000
+++ b/gui/NullGui.h     2010-01-30 17:55:27 +0000
@@ -61,7 +61,7 @@
        bool setupEvents()  { return true; }
        void renderBuffer()  { }
 
-       void quit() { _quit = true; }
+       void quitUI() { _quit = true; }
 
 private:
 

=== modified file 'gui/Player.cpp'
--- a/gui/Player.cpp    2010-01-11 06:41:38 +0000
+++ b/gui/Player.cpp    2010-02-01 06:56:31 +0000
@@ -233,24 +233,18 @@
 void
 Player::init_gui()
 {
-    if ( _doRender )
-    {
-        _gui = getGui(); 
-    }
-    else
-    {
-        _gui.reset(new NullGui(_doLoop, *_runResources));
-    }
+    if (_doRender) _gui = getGui(); 
+    else _gui.reset(new NullGui(_doLoop, *_runResources));
 
     _gui->setMaxAdvances(_maxAdvances);
 
 #ifdef GNASH_FPS_DEBUG
-    if ( _fpsDebugTime )
-    {
-        log_debug(_("Activating FPS debugging every %g seconds"), 
_fpsDebugTime);
+    if (_fpsDebugTime) {
+        log_debug(_("Activating FPS debugging every %g seconds"),
+                _fpsDebugTime);
         _gui->setFpsTimerInterval(_fpsDebugTime);
     }
-#endif // def GNASH_FPS_DEBUG
+#endif
 }
 
 boost::intrusive_ptr<movie_definition>
@@ -265,8 +259,7 @@
     RcInitFile& rcfile = RcInitFile::getDefaultInstance();
     URL vurl(_url);
 
-    if ( vurl.protocol() == "file" )
-    {
+    if (vurl.protocol() == "file") {
         const std::string& path = vurl.path();
         size_t lastSlash = path.find_last_of('/');
         std::string dir = path.substr(0, lastSlash+1);
@@ -335,20 +328,15 @@
     _infile = infile;
 
     // Work out base url
-    if ( _baseurl.empty() )
-    {
-        if (! url.empty() ) _baseurl = url;
-        else if ( infile == "-" ) _baseurl = URL("./").str();
+    if (_baseurl.empty()) {
+        if (!url.empty()) _baseurl = url;
+        else if (infile == "-") _baseurl = URL("./").str();
         else _baseurl = infile;
     }
 
     // Set _root._url (either explicit of from infile)
-    if (! url.empty() ) {
-        _url = url;
-    }  else {
-        _url = infile;
-    }
-
+    if (!url.empty()) _url = url;
+    else _url = infile;
 
     // Parse player parameters. These are not passed to the SWF, but rather
     // control stage properties etc.
@@ -374,12 +362,10 @@
     // Initialize gui (we need argc/argv for this)
     // note that this will also initialize the renderer
     // which is *required* during movie loading
-    if (!_gui->init(argc, &argv))
-    {
+    if (!_gui->init(argc, &argv)) {
         std::cerr << "Could not initialize gui." << std::endl;
         return EXIT_FAILURE;
     }
-    
 
     // Parse querystring (before FlashVars, see
     // testsuite/misc-ming.all/FlashVarsTest*)
@@ -391,30 +377,27 @@
 
     // Load the actual movie.
     _movieDef = load_movie();
-    if ( ! _movieDef )
-    {
+    if (!_movieDef) {
         return EXIT_FAILURE;
     }
 
-
     // Get info about the width & height of the movie.
     int movie_width = static_cast<int>(_movieDef->get_width_pixels());
     int movie_height = static_cast<int>(_movieDef->get_height_pixels());
 
     if (! _width) {
-      _width = static_cast<size_t>(movie_width * _scale);
+        _width = static_cast<size_t>(movie_width * _scale);
     }
     if (! _height) {
-      _height = static_cast<size_t>(movie_height * _scale);
+        _height = static_cast<size_t>(movie_height * _scale);
     }
 
-    if ( ! _width || ! _height )
-    {
+    if (! _width || ! _height) {
         log_debug(_("Input movie has collapsed dimensions "
                     "%d/%d. Setting to 1/1 and going on."),
                      _width, _height);
-        if ( ! _width ) _width = 1;
-        if ( ! _height ) _height = 1;
+        if (!_width) _width = 1;
+        if (!_height) _height = 1;
     }
 
     // Register movie definition before creating the window
@@ -439,7 +422,6 @@
 
     _gui->setStage(&root);
     
-
     // When startStopped is true, stop here after the stage has been 
     // registered, but before the movie has started. Initial loading
     // and VM initialization have been done by this stage, but not
@@ -447,10 +429,8 @@
     // the Gui accesses movie_root to get the sound_handler, but also
     // because the gui window should be properly set up by this point.
     RcInitFile& rcfile = RcInitFile::getDefaultInstance();
-    if ( rcfile.startStopped() )
-    {
-        _gui->stop();
-    }
+
+    if (rcfile.startStopped()) _gui->stop();
 
     // Start loader thread
     // NOTE: the loader thread might (in IMPORT tag parsing)
@@ -463,9 +443,8 @@
     _movieDef->completeLoad();
 
     if (! _delay) {
-      //float movie_fps = _movieDef->get_frame_rate();
-      //_delay = static_cast<unsigned int>(1000 / movie_fps) ; // milliseconds 
per frame
-      _delay = 10; // 10ms per heart beat
+        // 10ms per heart beat
+        _delay = 10; 
     }
     _gui->setInterval(_delay);
 
@@ -507,6 +486,35 @@
            root.setStageScaleMode(mode);
     }
 
+    // Set up screenshots. 
+    if (!_screenshots.empty()) {
+
+        std::istringstream is(_screenshots);
+        std::string arg;
+
+        bool last = false;
+        ScreenShotter::FrameList v;
+
+        while (std::getline(is, arg, ',')) {
+            if (arg == "last") last = true;
+            else try {
+                const size_t frame = boost::lexical_cast<size_t>(arg);
+                v.push_back(frame);
+            }
+            catch (boost::bad_lexical_cast&) {}
+        }
+
+        // Use default if filename is empty.
+        if (_screenshotFile.empty()) {
+            URL url(_runResources->baseURL());
+            std::string::size_type p = url.path().rfind('/');
+            const std::string& name = (p == std::string::npos) ? url.path() :
+                url.path().substr(p + 1);
+            _screenshotFile = "screenshot-" + name + "-%f";
+        }
+
+        _gui->requestScreenShots(v, last, _screenshotFile);
+    }
     
     _gui->run();
 

=== modified file 'gui/Player.h'
--- a/gui/Player.h      2010-01-11 06:41:38 +0000
+++ b/gui/Player.h      2010-02-01 06:52:16 +0000
@@ -158,6 +158,23 @@
         _audioDump = filespec;
     }
        
+    /// This should be a comma-separated list of frames.
+    //
+    /// Only numbers and the word "last" are valid.
+    //
+    /// We parse the string here rather than in gnash.cpp to avoid making
+    /// the interface to Player more complicated than it is already.
+    void setScreenShots(const std::string& screenshots) {
+        _screenshots = screenshots;
+    }
+
+    /// Set the filename for screenshot output.
+    //
+    /// A %f in the filename will be replaced with the frame number.
+    void setScreenShotFile(const std::string& file) {
+        _screenshotFile = file;
+    }
+
 private:
 
        class CallbacksHandler : public movie_root::AbstractIfaceCallback,
@@ -259,7 +276,6 @@
 
        std::string _baseurl;
 
-
     /// Initialization / destruction order is important here.
     //
     /// some sound_samples are destroyed in the dtor of SWFMovieDefinition,
@@ -316,9 +332,19 @@
        bool _startFullscreen;
        bool _hideMenu;
 
-    // The filename to use for dumping audio.
+    /// The filename to use for dumping audio.
     std::string _audioDump;
 
+    /// A comma-separated list of frames to output as screenshots.
+    //
+    /// If empty, no screenshots are required.
+    std::string _screenshots;
+
+    /// The filename to save screenshots to.
+    //
+    /// If empty, a default is used.
+    std::string _screenshotFile;
+
 };
 
  

=== modified file 'gui/dump.cpp'
--- a/gui/dump.cpp      2010-01-11 06:41:38 +0000
+++ b/gui/dump.cpp      2010-01-30 18:16:47 +0000
@@ -339,7 +339,7 @@
 }
 
 void
-DumpGui::quit()
+DumpGui::quitUI()
 {
     _terminate_request = true;
 }

=== modified file 'gui/dump.h'
--- a/gui/dump.h        2010-01-11 06:41:38 +0000
+++ b/gui/dump.h        2010-01-30 18:16:47 +0000
@@ -46,7 +46,7 @@
             int /*x*/, int /*y*/)
         { return createWindow(width, height); }
     bool init(int argc, char **argv[]);
-    void quit();
+    virtual void quitUI();
     void renderBuffer() {return; }
     void render() { return; }
     void render(int /*minx*/, int /*miny*/, int /*maxx*/, int /*maxy*/)

=== modified file 'gui/gnash.cpp'
--- a/gui/gnash.cpp     2010-01-20 16:47:31 +0000
+++ b/gui/gnash.cpp     2010-02-01 06:51:11 +0000
@@ -86,69 +86,68 @@
 usage()
 {
 
-cout << _("Usage: gnash [options] movie_file.swf") << endl
-    << endl
-    << _("Plays a SWF (Shockwave Flash) movie") << endl
-    << _("Options:") << endl
-    << endl
-    << _("  -h,  --help              Print this help and exit") << endl
-    << _("  -V,  --version           Print version information and exit") << 
endl
-    << _("  -s,  --scale <factor>    Scale the movie by the specified factor") 
<< endl
-    << _("  -c                       Produce a core file instead of letting 
SDL trap it") << endl
-    << _("  -d,  --delay num         Number of milliseconds to delay in main 
loop") << endl
-    << _("  -v,  --verbose           Produce verbose output") << endl
+cout << _("Usage: gnash [options] movie_file.swf\n")
+    << "\n"
+    << _("Plays a SWF (Shockwave Flash) movie\n")
+    << _("Options:\n")
+    << "\n"
+    << _("  -h,  --help              Print this help and exit\n")
+    << _("  -V,  --version           Print version information and exit\n") 
+    << _("  -s,  --scale <factor>    Scale the movie by the specified 
factor\n") 
+    << _("  -c                       Produce a core file instead of letting 
SDL trap it\n") 
+    << _("  -d,  --delay num         Number of milliseconds to delay in main 
loop\n") 
+    << _("  -v,  --verbose           Produce verbose output\n") 
 #if VERBOSE_ACTION
-    << _("  -va                      Be (very) verbose about action 
execution") << endl
+    << _("  -va                      Be (very) verbose about action 
execution\n") 
 #endif
 #if VERBOSE_PARSE
-    << _("  -vp                      Be (very) verbose about parsing") << endl
+    << _("  -vp                      Be (very) verbose about parsing\n") 
 #endif
-    << _("  -A <file>                Audio dump file (wave format)") << endl
-    << _("  -D <file>                Video dump file (only valid with 
dump-gnash)") << endl
-    << _("  -x,  --xid <ID>          X11 Window ID for display") << endl
-    << _("  -w,  --writelog          Produce the disk based debug log") << endl
-    << _("  -j,  --width <width>     Set window width") << endl
-    << _("  -k,  --height <height>   Set window height") << endl
-    << _("  -X,  --x-pos <x-pos>     Set window x position") << endl
-    << _("  -Y,  --y-pos <y-pos>     Set window y position") << endl
-    << _("  -1,  --once              Exit when/if movie reaches the last 
frame") << endl
-    << _("  -g,  --debugger          Turn on the SWF debugger") << endl
-    << _("  -r,  --render-mode <0|1|2|3>") << endl
-    << _("                           0 disable rendering and sound") << endl
-    << _("                           1 enable rendering, disable sound") << 
endl
-    << _("                           2 enable sound, disable rendering") << 
endl
-    << _("                           3 enable rendering and sound (default)") 
<< endl
-    << _("  -t,  --timeout <sec>     Exit after the specified number of 
seconds") << endl
-    << _("  -u,  --real-url <url>    Set \"real\" URL of the movie") << endl
-    << _("  -U,  --base-url <url>    Set \"base\" URL for resolving relative 
URLs") << endl
-    << _("  -P,  --param <param>     Set parameter (e.g. 
\"FlashVars=A=1&b=2\")") << endl
-    << _("  -F,  --fd <fd>           Filedescriptor to use for external 
communications") << endl
+    << _("  -A <file>                Audio dump file (wave format)\n") 
+    << _("  -D <file>                Video dump file (only valid with "
+            "dump-gnash)\n") 
+    << _("  -x,  --xid <ID>          X11 Window ID for display\n") 
+    << _("  -w,  --writelog          Produce the disk based debug log\n") 
+    << _("  -j,  --width <width>     Set window width\n") 
+    << _("  -k,  --height <height>   Set window height\n") 
+    << _("  -X,  --x-pos <x-pos>     Set window x position\n") 
+    << _("  -Y,  --y-pos <y-pos>     Set window y position\n") 
+    << _("  -1,  --once              Exit when/if movie reaches the last "
+            "frame\n") 
+    << _("  -g,  --debugger          Turn on the SWF debugger\n") 
+    << _("  -r,  --render-mode <0|1|2|3>\n") 
+    << _("                           0 disable rendering and sound\n") 
+    << _("                           1 enable rendering, disable sound\n") 
+    << _("                           2 enable sound, disable rendering\n") 
+    << _("                           3 enable rendering and sound 
(default)\n") 
+    << _("  -t,  --timeout <sec>     Exit after the specified number of "
+            "seconds\n") 
+    << _("  -u,  --real-url <url>    Set \"real\" URL of the movie\n") 
+    << _("  -U,  --base-url <url>    Set \"base\" URL for resolving relative "
+            "URLs\n") 
+    << _("  -P,  --param <param>     Set parameter (e.g. "
+            "\"FlashVars=A=1&b=2\")\n") 
+    << _("  -F,  --fd <fd>           Filedescriptor to use for external "
+            "communications\n") 
 #ifdef GNASH_FPS_DEBUG
-    << _("  -f,  --debug-fps num     Print FPS every num seconds (float).") << 
endl
+    << _("  -f,  --debug-fps num     Print FPS every num seconds (float)\n") 
 #endif // def GNASH_FPS_DEBUG
-    << endl
-    << _("  --max-advances num       Exit after specified number of advances") 
<< endl
-    << _("  --fullscreen             Start in fullscreen mode") << endl
-    << _("  --hide-menubar           Start without displaying the menu bar ") 
<< endl
-    << endl
-    << _("Keys:") << endl
-    << endl
-    << _("  CTRL-Q, CTRL-W           Quit/Exit") << endl
-    << _("  CTRL-P                   Toggle Pause") << endl
-    << _("  CTRL-R                   Restart the movie") << endl
-
-#if 0 // Currently disabled
-    << _("  CTRL-[ or kp-   Step back one frame") << endl
-    << _("  CTRL-] or kp+   Step forward one frame") << endl
-#endif
-
-    << _("  CTRL-L                   Force immediate redraw") << endl
-
-//    << _("  CTRL-A          Toggle antialiasing (doesn't work)") << endl
-//    << _("  CTRL-T          Debug.  Test the set_variable() function") << 
endl
-//    << _("  CTRL-G          Debug.  Test the get_variable() function") << 
endl
-//    << _("  CTRL-M          Debug.  Test the invoke() function") << endl
-
+    
+    << _("  --max-advances num       Exit after specified number of frame "
+            "advances\n") 
+    << _("  --fullscreen             Start in fullscreen mode\n") 
+    << _("  --hide-menubar           Start without displaying the menu bar\n") 
+    << _("  --screenshot <list>      List of frames to save as screenshots\n") 
+    << _("  --screenshot-file <file> Filename pattern for screenshot 
images.\n")
+    << "\n"
+    << _("Keys:\n") 
+    << "\n"
+    << _("  CTRL-Q, CTRL-W           Quit\n") 
+    << _("  CTRL-F                   Toggle fullscreen\n") 
+    << _("  CTRL-P                   Toggle pause\n") 
+    << _("  CTRL-R                   Restart the movie\n") 
+    << _("  CTRL-O                   Take a screenshot\n") 
+    << _("  CTRL-L                   Force immediate redraw\n") 
     << endl;
 }
 
@@ -198,40 +197,41 @@
 
     const Arg_parser::Option opts[] =
         {
-        { 'h', "help",          Arg_parser::no  },
-        { 'v', "verbose",       Arg_parser::no  },
-        { 'a', 0,               Arg_parser::no  },
-        { 'p', 0,               Arg_parser::no  },
-        { 's', "scale",         Arg_parser::yes },
-        { 256, "max-advances",  Arg_parser::yes },
-        { 257, "fullscreen",    Arg_parser::no  },
-        { 258, "hide-menubar",  Arg_parser::no  },                
-        { 'c', 0,               Arg_parser::no  },
-        { 'd', "delay",         Arg_parser::yes },
-        { 'x', "xid",           Arg_parser::yes },
-        { 'r', "render-mode",   Arg_parser::yes },
-        { 't', "timeout",       Arg_parser::yes },        
-        { '1', "once",          Arg_parser::no  },        
-        { 'w', "writelog",      Arg_parser::no  },
-        { 'j', "width",         Arg_parser::yes },
-        { 'k', "height",        Arg_parser::yes },
-        { 'X', "x-position",    Arg_parser::yes },
-        { 'Y', "y-position",    Arg_parser::yes },
-        { 'u', "real-url",      Arg_parser::yes },
-        { 'P', "param",         Arg_parser::yes },
-        { 'U', "base-url",      Arg_parser::yes },  
-        { 'g', "debugger",      Arg_parser::no  },
-        { 'V', "version",       Arg_parser::no  },        
-        { 'f', "debug-fps",     Arg_parser::yes },        
-        { 'F', "fd",            Arg_parser::yes },
-        { 'A', "dump",          Arg_parser::yes },
-        { 'D', 0,               Arg_parser::yes }, // Handled in dump gui
-        {   0, 0,               Arg_parser::no  }
+        { 'h', "help",              Arg_parser::no  },
+        { 'v', "verbose",           Arg_parser::no  },
+        { 'a', 0,                   Arg_parser::no  },
+        { 'p', 0,                   Arg_parser::no  },
+        { 's', "scale",             Arg_parser::yes },
+        { 256, "max-advances",      Arg_parser::yes },
+        { 257, "fullscreen",        Arg_parser::no  },
+        { 258, "hide-menubar",      Arg_parser::no  },                
+        { 'c', 0,                   Arg_parser::no  },
+        { 'd', "delay",             Arg_parser::yes },
+        { 'x', "xid",               Arg_parser::yes },
+        { 'r', "render-mode",       Arg_parser::yes },
+        { 't', "timeout",           Arg_parser::yes },        
+        { '1', "once",              Arg_parser::no  },        
+        { 'w', "writelog",          Arg_parser::no  },
+        { 'j', "width",             Arg_parser::yes },
+        { 'k', "height",            Arg_parser::yes },
+        { 'X', "x-position",        Arg_parser::yes },
+        { 'Y', "y-position",        Arg_parser::yes },
+        { 'u', "real-url",          Arg_parser::yes },
+        { 'P', "param",             Arg_parser::yes },
+        { 'U', "base-url",          Arg_parser::yes },  
+        { 'g', "debugger",          Arg_parser::no  },
+        { 'V', "version",           Arg_parser::no  },        
+        { 'f', "debug-fps",         Arg_parser::yes },        
+        { 'F', "fd",                Arg_parser::yes },
+        { 'A', "dump",              Arg_parser::yes },
+        { 259, "screenshot",        Arg_parser::yes },
+        { 260, "screenshot-file",   Arg_parser::yes },
+        { 'D', 0,                   Arg_parser::yes }, // Handled in dump gui
+        {   0, 0,                   Arg_parser::no  }
     };
 
     Arg_parser parser(argc, argv, opts);
-    if( ! parser.error().empty() )    
-    {
+    if (!parser.error().empty()) {
         cout << parser.error() << endl;
         exit(EXIT_FAILURE);
     }
@@ -242,14 +242,11 @@
     bool widthGiven = false, heightGiven = false;
     bool xPosGiven = false, yPosGiven = false;
 
+    for (int i = 0; i < parser.arguments(); ++i) {
 
-    for( int i = 0; i < parser.arguments(); ++i )
-    {
         const int code = parser.code(i);
-        try
-        {
-            switch( code )
-            {
+        try {
+            switch (code) {
                 case 'h':
                     version_and_copyright();
                     usage ();
@@ -296,7 +293,7 @@
                                     0.01f, 100.f));
                     break;
                 case 'd':
-                    player.setDelay( parser.argument<long>(i) );
+                    player.setDelay(parser.argument<long>(i));
                     break;
                 case 'u':
                     url = parser.argument(i);
@@ -310,9 +307,8 @@
                     break;
                 case 'F':
                 {
-                    int fd = parser.argument<long>(i);
-                    if ( fd < 1 )
-                    {
+                    const int fd = parser.argument<long>(i);
+                    if (fd < 1) {
                         cerr << boost::format(_("Invalid host communication "
                                     "filedescriptor %d\n")) % fd << endl;
                         exit(EXIT_FAILURE);
@@ -361,8 +357,8 @@
                     player.setWindowId(parser.argument<long>(i));
                     break;
                 case '1':
-                      player.setDoLoop(false);
-                      break;
+                    player.setDoLoop(false);
+                    break;
                 case 'r':
                     renderflag = true;
                     switch (parser.argument<char>(i))
@@ -403,56 +399,60 @@
                     cout << _("FPS debugging disabled at compile time, -f "
                             "is invalid") << endl;
                     exit(EXIT_FAILURE);
-#endif // ndef GNASH_FPS_DEBUG
+#endif 
                     break;
                 case 'P':
                 {
-                    std::string param = parser.argument(i);
-                    size_t eq = param.find("=");
+                    const std::string& param = parser.argument(i);
+                    const size_t eq = param.find("=");
                     std::string name, value;
-                    if ( eq == std::string::npos )
-                    {
+                    if (eq == std::string::npos) {
                         name = param;
                         value = "true";
                     }
-                    else
-                    {
+                    else {
                         name = param.substr(0, eq);
                         value = param.substr(eq + 1);
                     }
-                      player.setParam(name, value);
+                    player.setParam(name, value);
                     break;
                 }
                 case 'A':
                 {
-                    std::string fn = parser.argument(i);
-                    player.setAudioDumpfile(fn);
+                    player.setAudioDumpfile(parser.argument(i));
                     break;
                 }
+                case 259:
+                    // The player takes care of parsing the list.
+                    player.setScreenShots(parser.argument(i));
+                    break;
+                case 260:
+                    player.setScreenShotFile(parser.argument(i));
+                    break;
                 case 0:
                     infiles.push_back(parser.argument(i));
                     break;
             }
         }
-        catch (Arg_parser::ArgParserException &e)
-        {
+        catch (Arg_parser::ArgParserException &e) {
             cerr << _("Error parsing command line options: ") << e.what() 
                 << endl;
             cerr << _("This is a Gnash bug.") << endl;
         }
     }
 
-    if ( ! renderflag ) {
+    if (!renderflag) {
         gnash::log_debug (_("No rendering flags specified, using rcfile"));
-        if ( plugin ) {
-            player.setDoSound( rcfile.usePluginSound() );
-        } else {
-            player.setDoSound( rcfile.useSound() );
+        if (plugin) {
+            player.setDoSound(rcfile.usePluginSound());
+        }
+        else {
+            player.setDoSound(rcfile.useSound());
         }
     }
 
-    if (plugin && heightGiven && widthGiven
-    && !player.getHeight() && !player.getWidth()) {
+    if (plugin && heightGiven && widthGiven && !player.getHeight() &&
+            !player.getWidth()) {
             // We were given dimensions of 0x0 to render to (probably the 
plugin
             // is playing an "invisible" movie. Disable video rendering.
             player.setDoRender(false);

=== modified file 'gui/gtk.cpp'
--- a/gui/gtk.cpp       2010-01-25 18:52:20 +0000
+++ b/gui/gtk.cpp       2010-01-30 18:33:03 +0000
@@ -95,6 +95,8 @@
     void menuQualityHigh(GtkMenuItem *menuitem, gpointer instance); 
     void menuQualityBest(GtkMenuItem *menuitem, gpointer instance); 
 
+    void timeoutQuit(gpointer data);
+
     // Event handlers
     gboolean realizeEvent(GtkWidget *widget, GdkEvent *event, gpointer data);
     gboolean deleteEvent(GtkWidget *widget, GdkEvent *event, gpointer data);
@@ -285,7 +287,7 @@
 void
 GtkGui::setTimeout(unsigned int timeout)
 {
-    g_timeout_add(timeout, (GSourceFunc)gtk_main_quit, NULL);
+    g_timeout_add(timeout, (GSourceFunc)timeoutQuit, this);
 }
 
 bool
@@ -605,7 +607,7 @@
 }
 
 void
-GtkGui::quit()
+GtkGui::quitUI() 
 {
     gtk_main_quit();
 }
@@ -2398,23 +2400,22 @@
     GtkGui* obj = static_cast<GtkGui*>(data);
     obj->resize_view(event->width, event->height);
 
-    return FALSE;
+    return false;
 }
 
 gboolean
 realizeEvent(GtkWidget* /*widget*/, GdkEvent* /*event*/, gpointer /*data*/)
 {
-    return TRUE;
+    return true;
 }
 
 // Shut everything down and exit when we're destroyed as a window
 gboolean
-deleteEvent(GtkWidget* /*widget*/, GdkEvent* /*event*/, gpointer /*data*/)
+deleteEvent(GtkWidget* /*widget*/, GdkEvent* /*event*/, gpointer data)
 {
-    GNASH_REPORT_FUNCTION;
-
-    gtk_main_quit();
-    return TRUE;
+    Gui* gui = static_cast<Gui*>(data);
+    gui->quit();
+    return true;
 }
 
 
@@ -2655,6 +2656,13 @@
     gui->toggleFullscreen();
 }
 
+void
+timeoutQuit(gpointer data)
+{
+    Gui* gui = static_cast<Gui*>(data);
+    gui->quit();
+}
+
 
 /// \brief restart the movie from the beginning
 void
@@ -2664,11 +2672,11 @@
     gui->restart();
 }
 
-/// \brief quit complete, and close the application
 void
-menuQuit(GtkMenuItem* /*menuitem*/, gpointer /*data*/)
+menuQuit(GtkMenuItem* /*menuitem*/, gpointer data)
 {
-    gtk_main_quit();
+    Gui* gui = static_cast<Gui*>(data);
+    gui->quit();
 }
 
 /// \brief Start the movie playing from the current frame.

=== modified file 'gui/gtksup.h'
--- a/gui/gtksup.h      2010-01-11 06:41:38 +0000
+++ b/gui/gtksup.h      2010-01-30 17:55:27 +0000
@@ -68,7 +68,7 @@
 
     virtual bool run();
 
-    virtual void quit();
+    virtual void quitUI();
 
     virtual bool createMenu();
 

=== modified file 'gui/gui.cpp'
--- a/gui/gui.cpp       2010-01-29 08:58:21 +0000
+++ b/gui/gui.cpp       2010-02-01 06:56:31 +0000
@@ -37,9 +37,12 @@
 #include <boost/format.hpp>
 #endif
 
+#include <vector>
 #include <cstdio>
 #include <cstring>
-#include <algorithm> // std::max, std::min
+#include <algorithm> 
+#include <boost/algorithm/string/replace.hpp>
+#include <boost/lexical_cast.hpp>
 
 /// Define this to make sure each frame is fully rendered from ground up
 /// even if no motion has been detected in the movie.
@@ -196,6 +199,15 @@
 }
 
 void
+Gui::quit() {
+    // Take a screenshot of the last frame if required.
+    if (_screenShotter.get()) {
+        _screenShotter->last();
+    }
+    quitUI();
+}
+
+void
 Gui::hideMenu()
 {
     log_unimpl(_("Menu hiding not yet supported in this GUI"));
@@ -1007,11 +1019,12 @@
 {
     if (!_screenShotter.get()) {
         // If no ScreenShotter exists, none was requested at startup.
+        // We use a default filename pattern.
         URL url(_runResources.baseURL());
         std::string::size_type p = url.path().rfind('/');
         const std::string& name = (p == std::string::npos) ? url.path() :
             url.path().substr(p + 1);
-        const std::string& filename = "screenshot-" + name;
+        const std::string& filename = "screenshot-" + name + "-%f";
         _screenShotter.reset(new ScreenShotter(_renderer, filename));
     }
     assert (_screenShotter.get());
@@ -1019,6 +1032,20 @@
 }
 
 void
+Gui::requestScreenShots(const ScreenShotter::FrameList& l, bool last,
+        const std::string& filename)
+{
+    // Nothing to do if there is no renderer or if no frames should be
+    // saved.
+    if (!_renderer.get() || (l.empty() && !last)) return;
+
+    _screenShotter.reset(new ScreenShotter(_renderer, filename));
+    if (last) _screenShotter->lastFrame();
+    _screenShotter->setFrames(l);
+
+}
+
+void
 Gui::setCursor(gnash_cursor_type /*newcursor*/)
 {
 }
@@ -1286,23 +1313,46 @@
 }
 
 void
+ScreenShotter::saveImage(const std::string& id) const
+{
+    // Replace all "%f" in the filename with the frameAdvance.
+    std::string outfile(_fileName);
+    boost::replace_all(outfile, "%f", id);
+
+    FILE* f = std::fopen(outfile.c_str(), "wb");
+    if (f) {
+        boost::shared_ptr<IOChannel> t(new tu_file(f, true));
+        _renderer->renderToImage(t, GNASH_FILETYPE_PNG);
+    }
+    else {
+        log_error("Failed to open screenshot file \"%s\"!", outfile);
+    }
+}
+
+void
 ScreenShotter::screenShot(size_t frameAdvance)
 {
-    if (_immediate) {
-        // Spontaneous screenshots always have the frame number appended.
-        std::ostringstream ss;
-        ss << _fileName << "-" << frameAdvance;
-        FILE* f = std::fopen(ss.str().c_str(), "wb");
-        if (f) {
-            boost::shared_ptr<IOChannel> t(new tu_file(f, true));
-            _renderer->renderToImage(t, GNASH_FILETYPE_PNG);
-        }
-        else {
-            log_error("Failed to open screenshot file \"%s\"!", _fileName);
-        }
+    // Save an image if an spontaneous screenshot was requested or the
+    // frame is in the list of requested frames.
+    if (_immediate || std::binary_search(_frames.begin(), _frames.end(),
+                frameAdvance)) {
+        saveImage(boost::lexical_cast<std::string>(frameAdvance));
         _immediate = false;
     }
 }
 
+void
+ScreenShotter::last() const
+{
+    if (_last) saveImage("last");
+}
+
+void
+ScreenShotter::setFrames(const FrameList& frames)
+{
+    _frames = frames;
+    std::sort(_frames.begin(), _frames.end());
+}
+
 // end of namespace
 }

=== modified file 'gui/gui.h'
--- a/gui/gui.h 2010-01-29 08:58:21 +0000
+++ b/gui/gui.h 2010-02-01 06:56:31 +0000
@@ -36,7 +36,8 @@
 #include "tree.hh" // for tree
 #endif
 
-#include <cstdlib> // exit
+#include <vector>
+#include <cstdlib> 
 #include <string>
 #include <map>
 
@@ -82,12 +83,15 @@
 {
 public:
 
+    typedef std::vector<size_t> FrameList;
+
     /// Create a ScreenShotter with renderer and output name.
     ScreenShotter(boost::shared_ptr<Renderer> r, const std::string& fileName)
         :
         _renderer(r),
         _immediate(false),
-        _fileName(fileName)
+        _fileName(fileName),
+        _last(false)
     {}
 
     /// Take a screenshot at the next possible moment.
@@ -95,6 +99,19 @@
         _immediate = true;
     }
 
+    /// Take a screenshot when the last frame is reached.
+    void lastFrame() {
+        _last = true;
+    }
+
+    /// Called on the last frame before exit.
+    //
+    /// Which frame is last depends on the execution path of the SWF, whether
+    /// the SWF loops, whether a timeout was requested or a maximum number of
+    /// advances set. Those conditions are not knowable in advance, so
+    /// the last frame is a special case.
+    void last() const;
+
     /// Takes a screenshot if required.
     //
     /// Called on each advance.
@@ -103,8 +120,14 @@
     ///                         as well as to construct the filename.
     void screenShot(size_t frameAdvance);
 
+    /// Request a list of frames to be rendered to image files.
+    void setFrames(const FrameList& frames);
+
 private:
 
+    /// Take the screenshot.
+    void saveImage(const std::string& filename) const;
+
     boost::shared_ptr<Renderer> _renderer;
 
     /// If true, the next call to screenshot will take a screenshot
@@ -113,6 +136,11 @@
     /// Name used to generate output file.
     const std::string _fileName;
 
+    /// Whether to take a screenshot on the last frame.
+    bool _last;
+
+    FrameList _frames;
+
 };
 
 /// Parent class from which all GUI implementations will depend.
@@ -146,6 +174,14 @@
     /// Set the time in milliseconds after which the programme should exit.
     virtual void setTimeout(unsigned int timeout) = 0;
 
+    /// Request a list of screenshots
+    //
+    /// @param l        A list of frames to render to an image file
+    /// @param last     Whether to render the last frame before exist
+    /// @param filename The filename pattern to save images as.
+    void requestScreenShots(const ScreenShotter::FrameList& l, bool last,
+            const std::string& filename);
+
     /** \brief
      * Create and display our window.
      *
@@ -163,12 +199,10 @@
     /// Start main rendering loop.
     virtual bool run() = 0;
 
-    /// End main rendering loop, making the call to run() return.
+    /// Always called on exit.
     //
-    /// The default implementation calls exit(EXIT_SUCCESS), which isn't nice.
-    /// Please implement the proper main loop quitter in the subclasses.
-    ///
-    virtual void quit()  { std::exit(EXIT_SUCCESS); }
+    /// Handles any common functions, then calls virtual quitUI().
+    void quit();
 
     /// Render the current buffer.
     /// For OpenGL, this means that the front and back buffers are swapped.
@@ -452,6 +486,17 @@
      * @param depth Colour depth to be used in the client area of our window.
      */
     Gui(unsigned long xid, float scale, bool loop, RunResources& r);
+    
+    /// End main rendering loop calling GUI-specific exit functions.
+    //
+    /// Do not call this directly. Call quit() instead.
+    //
+    /// The default implementation calls exit(EXIT_SUCCESS), which isn't nice.
+    /// Please implement the proper main loop quitter in the subclasses.
+    virtual void quitUI() {
+        std::exit(EXIT_SUCCESS);
+    }
+
 
     /// Determines if playback should restart after the movie ends.
     bool            _loop;
@@ -466,23 +511,23 @@
     geometry::Range2d<int> _validbounds;
 
     /// Desired window width.
-    int             _width;
+    int _width;
 
     /// Desired window height.
-    int             _height;
+    int _height;
 
     /// Desired colour depth in bits.
     RunResources& _runResources;
 
     /// Main loop interval: the time between successive advance_movie calls.
-    unsigned int    _interval;
+    unsigned int _interval;
 
     /// The handler which is called to update the client area of our window.
     boost::shared_ptr<Renderer> _renderer;
 
     /// Signals that the next frame must be re-rendered completely because the
     /// window size did change.
-    bool            _redraw_flag;
+    bool _redraw_flag;
 
     // True if Gnash is running in fullscreen
     bool _fullscreen;

=== modified file 'gui/kde.cpp'
--- a/gui/kde.cpp       2010-01-11 06:41:38 +0000
+++ b/gui/kde.cpp       2010-01-30 17:55:27 +0000
@@ -333,7 +333,7 @@
 }
 
 void
-KdeGui::quit()
+KdeGui::quitUI()
 {
 #if 1
     _qapp->exit();

=== modified file 'gui/kdesup.h'
--- a/gui/kdesup.h      2010-01-11 06:41:38 +0000
+++ b/gui/kdesup.h      2010-01-30 17:55:27 +0000
@@ -100,7 +100,7 @@
     virtual void setCursor(gnash_cursor_type newcursor);
     void setInvalidatedRegions(const InvalidatedRanges& ranges);
     void resize(int width, int height);
-    void quit();
+    void quitUI();
  private:
     std::auto_ptr<QApplication>  _qapp;
     std::auto_ptr<qwidget>       _qwidget;

=== modified file 'gui/sdlsup.h'
--- a/gui/sdlsup.h      2010-01-11 06:41:38 +0000
+++ b/gui/sdlsup.h      2010-01-30 17:52:52 +0000
@@ -17,8 +17,8 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
 
-#ifndef __SDLSUP_H__
-#define __SDLSUP_H__
+#ifndef SDLSUP_H
+#define SDLSUP_H
 
 #ifdef HAVE_CONFIG_H
 #include "gnashconfig.h"


reply via email to

[Prev in Thread] Current Thread [Next in Thread]