]> git.sesse.net Git - vlc/commitdiff
This commit was manufactured by cvs2svn to create tag 'v0_4_5'.
authorUnknown <videolan@videolan.org>
Fri, 5 Mar 2004 15:21:04 +0000 (15:21 +0000)
committerUnknown <videolan@videolan.org>
Fri, 5 Mar 2004 15:21:04 +0000 (15:21 +0000)
60 files changed:
AUTHORS
BUGS
ChangeLog
FAQ
INSTALL.win32
Makefile
Makefile.opts.in
README.MacOSX.rtf
TODO
configure
configure.in
extras/MacOSX/Resources/divx.icns [new file with mode: 0644]
extras/MacOSX/Resources/generic.icns [new file with mode: 0644]
extras/MacOSX/Resources/mpeg.icns [new file with mode: 0644]
extras/MacOSX/Resources/mpeg1.icns [new file with mode: 0644]
extras/MacOSX/Resources/mpeg2.icns [new file with mode: 0644]
extras/MacOSX/Resources/mpeg4.icns [new file with mode: 0644]
ipkg/control
ipkg/control.gpe [new file with mode: 0644]
ipkg/control.opie [new file with mode: 0644]
ipkg/gpe-configure.in.patch [new file with mode: 0644]
ipkg/gpe.patch [new file with mode: 0644]
ipkg/postinst.gpe [new file with mode: 0755]
ipkg/postinst.opie [new file with mode: 0755]
ipkg/postrm.gpe [new file with mode: 0755]
ipkg/postrm.opie [new file with mode: 0755]
ipkg/rules
ipkg/sdl.patch [moved from ipkg/patch with 100% similarity]
ipkg/vlc.desktop [new file with mode: 0644]
ipkg/vlc.gpe [new file with mode: 0755]
ipkg/vlc.opie [new file with mode: 0755]
plugins/LIST [moved from MODULES with 95% similarity]
plugins/access/rtp.c [new file with mode: 0644]
plugins/beos/ListViews.cpp [new file with mode: 0644]
plugins/beos/ListViews.h [new file with mode: 0644]
plugins/beos/intf_vlc_wrapper.cpp [new file with mode: 0644]
plugins/beos/intf_vlc_wrapper.h [new file with mode: 0644]
plugins/familiar/Makefile [new file with mode: 0644]
plugins/familiar/familiar.c [new file with mode: 0644]
plugins/familiar/familiar.glade [new file with mode: 0644]
plugins/familiar/familiar.h [new file with mode: 0644]
plugins/familiar/familiar_callbacks.c [new file with mode: 0644]
plugins/familiar/familiar_callbacks.h [new file with mode: 0644]
plugins/familiar/familiar_interface.c [new file with mode: 0644]
plugins/familiar/familiar_interface.h [new file with mode: 0644]
plugins/familiar/familiar_support.c [new file with mode: 0644]
plugins/familiar/familiar_support.h [new file with mode: 0644]
plugins/filter/crop.c [new file with mode: 0644]
plugins/qte/Makefile [new file with mode: 0644]
plugins/qte/qte.c [new file with mode: 0644]
plugins/qte/qte.cpp [new file with mode: 0644]
share/familiar-forwardb16x16.xpm [new file with mode: 0644]
share/familiar-openb16x16.xpm [new file with mode: 0644]
share/familiar-pauseb16x16.xpm [new file with mode: 0644]
share/familiar-playb16x16.xpm [new file with mode: 0644]
share/familiar-preferencesb16x16.xpm [new file with mode: 0644]
share/familiar-rewindb16x16.xpm [new file with mode: 0644]
share/familiar-stopb16x16.xpm [new file with mode: 0644]
share/vlc16x16.xpm [new file with mode: 0644]
vlc.spec

diff --git a/AUTHORS b/AUTHORS
index 04cfadccc0993f9c9d286f2f8c9d8a86a45983a0..f2a24b87fa3f0296c321939aeae3e74e9c3c2200 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -87,6 +87,12 @@ C: tcastley
 D: BeOS interface, BeOS Video
 S: Australia
 
+N: Stephan Assmus
+E:
+C: stippi
+D: BeOS interface, BeOS video
+S: 
+
 N: Rudolf Cornelissen
 E: rag.cornelissen@inter.nl.net
 D: BeOS fixes
@@ -176,6 +182,15 @@ E: alexis.guillard@bt.com
 D: IPv6
 S: United Kingdom
 
+N: Roine Gustafsson
+E: roine@popstar.com
+D: spudec bug fixes
+
+N: Gerald Hansink
+E: gerald.hansink@ordina.nl
+D: Qt Embedded Video Output
+S: Netherlands
+
 N: Shane Harper
 E: shanegh@optusnet.com.au
 D: SDL plugin fixes and enhancements
@@ -299,6 +314,10 @@ D: Many ports (Mac OS X, iPAQ, *BSD, Solaris...)
 D: documentation
 S: France
 
+N: Benjamin Mironer
+E: bmironer@noos.fr
+D: Mac OS X fixes
+
 N: Arkadiusz Miskiewicz
 E: misiek@pld.ORG.PL
 D: autoconf and Makefile patches
@@ -320,10 +339,16 @@ E: pomel@via.ecp.fr
 C: pomel
 S: France
 
+N: Remco Poortinga
+E: poortinga@telin.nl
+D: IPv6 multicast patch
+S: Netherlands
+
 N: Jean-Paul Saman
 E: jpsaman@wxs.nl
 D: libmad plug-in
 D: iPAQ port
+D: Familiar Linux interface
 S: Netherlands
 
 N: Steven M. Schultz
diff --git a/BUGS b/BUGS
index e0539322fcbba8448c96f8a72fb1e89dd7843a14..c754a71978f3e0a64da578263480c723fe0701b0 100644 (file)
--- a/BUGS
+++ b/BUGS
@@ -1,4 +1,4 @@
-List of known vlc bugs $Id: BUGS,v 1.13 2002/05/20 22:30:19 sam Exp $
+List of known vlc bugs $Id: BUGS,v 1.13.2.1 2002/07/11 07:58:53 tcastley Exp $
 
    Please try to keep this file up to date. Also, grep for FIXME in the
 source files for more and more bugs to fix.
@@ -36,6 +36,9 @@ Video output:
   * On-the-fly resizing when using a chroma transformation doesn't work for
   all plugins. Currently it is only implemented for x11 and SDL.
 
+  * The SPU decoder does not respect the pitch of the output buffer.  This 
+  causes distortion of subtitles on GeForce cards in BeOS (and Windows I think).
+
 Chroma transformations:
 
   * Most chroma transformation modules completely ignore margins.
index 39cce0572259bf30ec2e5cca245712736702513d..996a467c595b93c738d5aeb71c3a1c0737049965 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,9 +2,218 @@
 # ChangeLog for vlc #
 #===================#
 
-HEAD
+0.4.5
+Fri, 11 Oct 2002 15:37:41 +0200
 
-  * Nothing yet.
+  * src/interface/main.c, src/misc/modules.c: added a quick hack for a
+    --plugin-path command line option.
+  * INSTALL.win32: removed note about running in administrator mode to play
+    a DVD.
+  * ./plugins/beos/InterfaceWindow.cpp: user can now drop a DVD disk icon
+    onto the interface or playlist window to open a DVD.
+  * ./plugins/x11/xcommon.c: we include Xmd.h before dpms.h (compilation fix
+    for Solaris).
+  * ALL: many BeOS fixes and enhancements.
+  * ALL: VLC is now compliant with MPEG-2 TS standards embedding A/52
+    audio. It can still read from the old VLS with --vls-backwards-compat.
+  * ./plugins/familiar: interface for familiar Linux.
+  * ./plugins/qte: Qt/embedded video output.
+  * ./plugins/network/ipv4.c: added a --iface-addr option to select which
+    interface to use for multicast sockets.
+  * configure.in, configure: use -mms-bitfields instead of -fnative-struct
+    for mingw32 gcc-3.x.
+  * include/interface.h, plugins/dummy/intf_dummy.c, plugins/text/logger.c,
+    plugins/text/rc.c: display message on Win32 explaining how to get back
+    to the GUI mode.
+  * include/threads_funcs.h, src/misc/win32_specific.c: ignore the
+    win9x-cv-method config option on WinNT when fast-mutex is not enabled.
+  * plugins/access/rtp.c: backported RTP access module from HEAD.
+  * plugins/access/http.c: fixed a compile issue in the HTTP plug-in.
+  * configure.in: fixed bug with $(QTDIR).
+  * plugins/filter/deinterlace.c: fixed an issue with the linear method.
+
+0.4.4
+Sun, 11 Aug 2002 01:18:13 +0200
+
+  * ./src/misc/messages.c: fixed an extremely old buffer overflow.
+  * ./plugins/spudec/spu_decoder.c: fixed a moronic endianness bug.
+  * ./plugins/dvd/dvd.c: added a --dvd-css-method config option to the dvd
+    plugin.
+  * ./include/threads_funcs.h: fixed the --fast-mutex option.
+  * ./plugins/directx/vout_directx.*: the directx vout plugin now uses the
+    IID_IDirectDrawSurface2 interface, this shouldn't break anything and we
+    should now support WinNT4+DirectX3. Added support for YUY2 overlays because
+    a few graphics cards only support this. Some code cleanup too.
+  * ./plugins/directx/vout_events.c: small bugfix.
+  * ./plugins/network/ipv6.c: attempt to fix the win32 IPv6 implementation.
+    Multicast should even work (untested) although we'll need to find a way to
+    replace if_nametoindex() tohave a fully functionnal win32 port.
+  * ./include/threads.h, ./include/threads_funcs.h: reverted Win32 pthread
+    implementation to the old code. Fixed vlc_cond_broadcast() for WinNT/2K/XP.
+    Additional vlc_cond_* implementations for Win9x.
+  * ./src/interface/main.c: renamed --fast_pthread option into --fast-mutex.
+    Added a--win9x-cv-method option to choose which vlc_cond_* implementation
+    we want on Win9x.
+  * ./plugins/avi/avi.c: kludge to play AVI files created by ffmpeg.
+
+0.4.3
+Fri, 26 Jul 2002 00:03:13 +0200
+
+  * ./README.MacOSX.rtf : updated README.
+  * ./plugins/macosx/vout_macosx.c : additional QuickTime fix, thanks to
+    David Eldred from Apple.
+  * ./include/threads_funcs.h: Win32 compilation fix.
+  * ./plugins/macosx/vout_macosx.m : fixed _the_ bug with QuickTime 6.
+  * ./plugins/access/http.c: we are now parsing the http return code and
+    failing cleanly if it is >= 400.
+  * ./plugins/mpeg_system/mpeg_es.c, ./src/input/input_ext-dec.c: fixed
+    a deadlock issue with demuxers waiting on p_fifo->data_lock.
+  * ./src/input/input_ext-plugins.c: fixed a memory leak.
+  * ./plugins/access/http.c: fixed a bug with HTTP/1.0 servers.
+  * ./src/interface/main.c: new --mtu option.
+  * ./configure.in: fixed nanosleep detection on some platforms.
+  * ./plugins/beos/*: created a wrapper class for VLC functions and
+    interaction, improved file and disk opening, fixed drag and drop, added
+    right click menu and always on top mode.
+  * ./plugins/beos/VideoWindow.h: fixed pop-up menu's radio mode.
+  * ./plugins/beos/VideoWindow.h: fixed changing workspaces problem.
+  * ./plugins/beos/VideoWindow.h: added a popup menu to enable changing.
+
+0.4.2
+Sun,  7 Jul 2002 22:15:33 +0200
+
+  * ./plugins/beos/VideoWindow.h: changed default bitmap to 16bit to fix
+    green distortion problem.
+  * ./plugins/network/ipv6.c: enabled IPv6 multicast support.
+  * ./plugins/dvd/dvd_es.c: error in selecting SPU stream.
+  * ./plugins/spudec/spu_decoder.c: endianness fix for subtitles colour.
+  * ./plugins/spudec/spu_decoder.c: little hack for preventing blank alpha
+    palette.
+  * ./plugins/spudec/spu_decoder.c: subtitle transparency support.
+  * ./plugins/macosx: new controls for audio output, and deinterlacing
+    support.
+  * ./plugins/macosx: fixed a bug with language and subtitle menus.
+  * ./plugins/access/http.c: should be more tolerant with old servers and
+    non-seekable streams.
+  * ./plugins/filter/deinterlace.c: backported new deinterlacing routines.
+  * ./include/threads.h, ./include/threads_funcs.h: backported the new Win32
+    cond_wait implementation from MAIN.
+  * ./plugins/gtk/gnome_callbacks.c: fixed a crash when activating preferences 
+    from the popup menu.
+
+0.4.1
+Mon,  3 Jun 2002 23:43:35 +0200
+
+  * ./plugins/gtk/gnome.glade: added lines this #@%$! Glade had munched, fixes
+    a segfault in the Gnome popup menu when toggling the interface.
+  * ./configure.in, ./plugins/mpeg_system/mpeg_ts.c: fixed libdvbpsi handling.
+  * ./src/misc/configuration.c: fixed the --nofoo option handling.
+  * ./src/interface/main.c: fixed two compilation warnings under Solaris.
+  * ./plugins/avi/avi.c, ./plugins/mpeg_system/mpeg_audio.c: ES will be
+    selected only once.
+  * ./plugins/win32/waveout.c: waveOutUnprepareHeader() was never being
+    called. This should fix the memory leak some people reported when using
+    the waveout plugin.
+  * ./src/misc/netutils.c: factored code common to the interfaces into the
+    network_ChannelJoin function.
+  * ./plugins/mga/xmga.c, ./plugins/x11/xcommon.c, ./plugins/sdl/vout_sdl.c,
+    ./plugins/directx/vout_events.c: we can now use keys F1 to F12 to switch
+    channels from the video output window.
+  * ./plugins/motion/motionmmx.c: MMX motion optimizations courtesy of
+    Vladimir Chernyshov <greengrass@writeme.com>.
+  * ./plugins/dvdread/dvdread.c: disabled the dvdread plugin because it
+    currently sucks.
+  * ./src/misc/configuration.c, ./src/interface/main.c: we now accept --nofoo
+    and --no-foo as negations for --foo. Also, the --help output is nicer.
+  * ./plugins/macosx/*: rewrote the net panel for OS X
+  * ./plugins/qnx/vout_qnx.c: QNX compilation fix.
+  * ./plugins/spudec/spu_decoder.c: fixed a margin bug in the SPU renderer
+    which caused subtitles to appear slanted in odd width windows.
+  * ./plugins/gtk/gtk_display.c, ./plugins/win32/mainframe.cpp: we deactivate
+    popup menus when no stream is being played, even in network mode.
+  * ./src/input/mpeg_system.c: removed unnecessarily verbose message.
+  * ./src/video_output/video_output.c: fixed the "picture has invalid status"
+    bug which might have been the cause of crashes.
+  * ./plugins/filter/crop.c: attempt at an automatic border cropping filter,
+    using "--filter crop --autocrop".
+  * ./vlc.spec: added missing filters to the RPM generation.
+  * ./plugins/macosx/*: channel change support on Mac OS X.
+  * ./extras/MacOSX/Resources/vlc.icns: new OS X icon, courtesy of Benjamin
+    Mironer <bmironer@noos.fr>.
+  * ./plugins/filter/crop.c: crop filter. Usage examples:
+      --filter crop --crop-geometry 640x480
+      --filter crop --crop-geometry 320x200+10+10
+  * ./plugins/macosx/intf_vlc_wrapper.m: fixed a bug in the chapter handling.
+  * ./plugins/macosx/vout_vlc_wrapper.m: more keystrokes.
+  * ./plugins/chroma/i420_yuy2.h: simplified the chroma code. Please test
+    under BeOS and QNX.
+  * ./plugins/macosx/intf_vlc_wrapper.m: fix for non-ASCII filenames in the
+    MacOS X interface, courtesy of Watanabe Go <go@dsl.gr.jp>.
+  * ./plugins/chroma/i420_yuy2.h: fixed an old overflow bug spotted by
+    Rudolf Cornelissen.
+  * ./plugins/chroma/i420_rgb16.c: fix for skewed display in software RV32
+    mode, courtesy of Pascal Levesque.
+  * ./plugins/beos/InterfaceWindow.h: stopped more than one playlist being
+    opened.
+  * ./plugins/beos/InterfaceWindow.cpp: fixed segfault on exit with playlist
+    open.
+  * ./plugins/beos/vout_beos.cpp: corrected size of output window.
+  * ./plugins/a52/a52.c, ./plugins/satellite/satellite_tools.c: compilation
+    fixes for Solaris.
+  * ./plugins/sdl/aout_sdl.c: fixed an endianness issue created by a
+    brain-dead developer :p
+  * ./plugins/win32/mainframe.cpp: the "Eject" button is enabled only after we
+    played a dvd or vcd.
+  * ./plugins/win32/mainframe.cpp: the toolbar is now flat and less cubist.
+  * ./plugins/win32/mainframe.cpp: got rid of the ugly slider with some winXP
+    skins. 
+  * ./plugins/win32/messages.cpp: added a config option to limit the number of
+    messages in the log window (default is set to 500).
+  * ./plugins/mpeg_vdec/vpar_headers.c: don't try to deference a null
+    pointer.
+  * ./plugins/gtk/gnome.c: compilation fix.
+  * ./src/misc/netutils.c: removed the obsolete artificial delay when switching
+    channels.
+  * ./src/interface/intf_eject.c: added ejection code for Win32.
+  * ./plugins/win32/*: enabled the "Eject" button (thanks Ipkiss).
+  * ./include/configuration.h: changed ADD_BOOL and ADD_BOOL_WITH_SHORT config
+    macros to accept a default value as an argument.
+  * ./src/misc/configuration.c: modified the command line parsing to accept
+    --foo and --no-foo when a "foo" boolean config option is defined.
+  * ./src/interface/main.c: modified the help menu to indicate whether the
+    option is enabled or disabled by default.
+  * ./src/video_output/video_output.c: when the video output hasn't received
+    a new picture for a while, it redisplays the last displayed one. This will
+    be useful for DVD menus, but also solves the "picture becomes black when
+    vlc is paused" issue.
+  * ./plugins/dummy/dummy.c: added a CATEGORY_HINT to the config.
+  * ./plugins/x11/xcommon.c: small change to the ToggleFullscreen routine
+    to avoid a flickering during the switch.
+  * ./plugins/filters/*: fixed inconsistencies.
+  * ./plugins/win32/mainframe.dfm: new icons for the toolbar buttons.
+  * ./plugins/win32/network.cpp: URL can now start with "http://" in the
+    Network dialog box.
+  * ./plugins/win32/about.dfm: updated the About dialog box.
+  * ./include/video.h: added a b_force flag to picture_t so that we can force
+    the display of an image even if it is late.
+  * ./plugins/filter/*: filters are now configurable through the configuration
+    system. Patch from Sigmund Augdal <sigmunau@stud.ntnu.no>.
+  * ./po/vlc.pot: updated potfile.
+  * ./po/pl.po: polish translation, courtesy of Arkadiusz Lipiec
+    <A.Lipiec@elka.pw.edu.pl>.
+  * ./debian/control: updated Debian package descriptions.      
+  * ./plugins/aa/aa.c: removed all palette code as it was unused.
+  * ./plugins/aa/aa.c: moved the aa_fastrender call from vout_Display to
+    vout_Render.
+  * ./plugins/aa/aa.c: added support for resizing and right-click menu.
+  * ./src/input/mpeg_system.c: in order to make ac3 working in avi file, moved
+    some code from ac3 decoder to mpeg_system.c. (skip 3 bytes is now done in
+    mpeg_system.c and no longer in ac3 audio decoder).
+  * src/misc/netutils.c: tests if message from vlcs begins with 'E:' or 'I:'
+    instead of testing 'E: ' and 'I: ' (to simplify miniVLCS).
+  * ./plugins/avi/avi.c, ./plugins/avi/libioRIFF.c: added more safety tests.
+  * ./include/inpu_ext-dec.h: added a check to fifo->b_die after the call
+    to BitstreamNextDataPacket() in GetChunk().
 
 0.4.0
 Thu, 23 May 2002 01:27:05 +0200
diff --git a/FAQ b/FAQ
index d4f335baa16b85ad806d90daf96ed3bc0976516d..5e8ad9390e3a059e8a60ebcafe63ace8f82143c6 100644 (file)
--- a/FAQ
+++ b/FAQ
@@ -1,5 +1,5 @@
 Frequentely Asked Questions for VideoLAN Client
-$Id: FAQ,v 1.6 2002/05/02 23:06:27 massiot Exp $
+$Id: FAQ,v 1.6.2.2 2002/10/11 23:44:01 massiot Exp $
 
 1. Using VLC
 
@@ -41,7 +41,7 @@ more information.
 -----------------------------------------------------
 If you don't know what is a raw device, don't even read this answer :-).
 There is an experimental support for raw devices in libdvdcss. It needs
-that you set up a raw device pointing to your DVD device (under Linux, 
+that you set up a raw device pointing to your DVD device (under Linux,
 use the "raw" utility). Then pass the raw device as second argument, for
 instance :
     vlc dvd:/dev/dvd@/dev/raw0
@@ -55,6 +55,41 @@ You shouldn't need any option. If you're paranoid and want to control
 everything, here is the exact syntax :
     vlc udp:[<server>[:<server port>]][@[<bind address>][:<bind port>]]
 
+1.8 How do I uninstall / reinstall VLC ?
+--------------------------------------
+Why would you want to ?  ;)
+
+If you're using a source distribution of VLC, for example a tarball or
+the CVS, then you have probably used "make install" to install the
+compiled VLC.  To remove it just "make uninstall".  If you want to
+install a newer version than the currently installed one, you should
+first uninstall the first one.  If you deleted the original source tree,
+a "make uninstall" in the newer tree should still work.
+
+For binary packages, remove old packages first and install the new ones
+(normally this should be handled automagically by your sytem).
+
+1.9 Debian: what should I put in my sources.list for videolan ?
+-------------------------------------------------------------
+deb     ftp://ftp.videolan.org/pub/videolan/debian $(ARCH)/
+deb-src ftp://ftp.videolan.org/pub/videolan/debian sources/
+
+1.10 How can I save my VLC configuration ?
+----------------------------------------
+Currently, the only way to save the configuration options in VLC is through
+the preferences menu in one of the graphical user interface plugins.
+
+1.11 Where does VLC store it's config file ?
+------------------------------------------
+Currently, a config file is created on a per user basis (there is no global
+configuration file). If you modify the available options in VLC and save the
+new configuration, then a configuration file will be created in your user
+directory. The precise location of this file depends on the Operating System
+you are running:
+
+- Unices (linux, etc...): "~/.videolan/vlcrc"
+- Windows: "Application Data\videolan\vlcrc"
+
 
 2. Troubleshooting
 
@@ -118,7 +153,48 @@ is being investigated.
 
 2.9 Sound volume is too low
 ----------------------------
-You can raise it with --volume commandline switch.
+You can raise it with --volume commandline switch or in the preferences
+window of your graphical interface.
+
+2.10 I have no image under DirectX
+----------------------------------
+Check that your video card drivers are in their latest version and that
+your DirectX is up-to-date.
+
+2.11 VLC crashes
+----------------
+Increase the verbosity level (either in the preferences or with a
+"-vvvv" command-line option) and look at the debug messages (on the
+terminal or in the Messages window).
+
+2.12 I can only play a DVD as root
+----------------------------------
+Check that as user you have write access to your DVD drive / device.
+
+2.13 I'm stuck with option xxx, how do I reset options ?
+------------------------------------------------------
+Under unices, remove your ~/.videolan/vlcrc; for Windows, remove vlcrc
+in the videolan subfolder of your "Application Data" directory.
+
+2.14 I don't have access to the GUI anymore
+-------------------------------------------
+If you change the default interface module in the preferences menu to a non
+GUI module (ie. to a command line interface) and then save the configuration,
+the only way to get VLC to show a GUI again is to run it directly from the
+command line.
+For instance on Windows, you need to open a dos command box, go to the
+directory where you installed VLC (usually
+c:\Program Files\VideoLAN\VideoLAN Client) and then type "vlc --intf win32"
+You will then be able to modify the configuration again and save it.
+
+2.15 I have just upgraded to VLC 0.4.5, and now I don't have any sound
+with the streams coming from the VLS !
+---------------------------------------------------------------------------
+This is a known problem. VLC 0.4.5 and later are now compliant to general
+usage regarding A/52 sound, and the new behavior is incompatible with the
+previous one. VLS version 0.4.0 and later now fixes this problem. If, for
+a reason or another, you wish to keep VLS 0.3.3, you can still read those
+streams if you launch VLC (0.4.5 or later) with --vls-backwards-compat.
 
 
 3. Ports and features
@@ -130,6 +206,9 @@ You can raise it with --volume commandline switch.
 Currently it doesn't. We'd be glad to support them, but we lack technical
 information on them.
 
+3.1.2 [REMOVED]
+---------------
+
 3.2 Win32 port
 
 3.2.2 When moving the focus to another window, VLC network input stops
@@ -137,3 +216,20 @@ working properly !
 ---------------------------------------------------------------------------
 This is a known problem with Win 95-class systems. Upgrade to an NT-class
 system.
+
+3.3 Planned ports
+
+3.3.1 Do you have plans for a MacOS 9 / OS/2 / &{#!@}~ port ?
+--------------------------------------------------------
+No, nobody reported to be actually working on a MacOS 9 port.  If you
+feel like you could write it, we would of course welcome it.  Currently,
+the developers are more interested in supporting the latest Operating
+Systems and completing the functionalities.
+
+3.3.2 Does VLC have dxr2 / dxr3 cards support ?
+---------------------------------------------
+This support is currently being developed.
+
+3.3.3 Does VLC support RTP ?
+--------------------------
+Yes. Just use vlc rtp:@<mcast addr>:<local port>.
index bc0bd9f04e4ceca5a8a2f6b0f17c2042590a4ce4..e26c03f1cf1a39a16b7d4a267a4d513ae95845b0 100644 (file)
@@ -16,8 +16,6 @@ disable the GUI. You will end-up with a vlc.log file in your current directory.
 If you want to play a DVD, run vlc and click on the Disc option in the
 interface. You then have to type your drive letter in the 'Device name'
 box (eg. 'D' if this is the letter for your dvdrom drive).
-( !WARNING: you have to be in administrator mode (for now) on Win2k/XP or the
-  DVD won't play. )
 
 Building VideoLAN Client from the source code
 =============================================
index 469a6659faec86c5bf4c5434241d06b8c2de7251..b0b3979b1299e2954eba77c8b8742dbd04708f2c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -33,6 +33,7 @@ PLUGINS_DIR :=        a52 \
                dvd \
                dvdread \
                esd \
+               familiar \
                fb \
                ffmpeg \
                filter \
@@ -55,8 +56,10 @@ PLUGINS_DIR :=       a52 \
                mpeg_vdec \
                network \
                ogg \
+               opie \
                qnx \
                qt \
+               qte \
                satellite \
                sdl \
                spudec \
@@ -71,6 +74,7 @@ PLUGINS_TARGETS := a52/a52 \
                ac3_spdif/ac3_spdif \
                access/file \
                access/udp \
+               access/rtp \
                access/http \
                alsa/alsa \
                arts/arts \
@@ -94,6 +98,7 @@ PLUGINS_TARGETS := a52/a52 \
                dvd/dvd \
                dvdread/dvdread \
                esd/esd \
+               familiar/familiar \
                fb/fb \
                ffmpeg/ffmpeg \
                filter/filter_deinterlace \
@@ -102,6 +107,7 @@ PLUGINS_TARGETS := a52/a52 \
                filter/filter_distort \
                filter/filter_wall \
                filter/filter_clone \
+               filter/filter_crop \
                fx/fx_scope \
                ggi/ggi \
                glide/glide \
@@ -142,8 +148,10 @@ PLUGINS_TARGETS := a52/a52 \
                network/ipv4 \
                network/ipv6 \
                ogg/vorbis \
+               opie/opie \
                qnx/qnx \
                qt/qt \
+               qte/qte \
                satellite/satellite \
                sdl/sdl \
                spudec/spudec \
@@ -368,7 +376,7 @@ dist:
        for i in Makefile.in.in POTFILES.in ; do cp po/$$i tmp/vlc/po ; done
        # Copy misc files
        cp FAQ AUTHORS COPYING TODO todo.pl ChangeLog* README* INSTALL* \
-               ABOUT-NLS BUGS MODULES vlc.spec \
+               ABOUT-NLS BUGS plugins/LIST vlc.spec \
                Makefile Makefile.*.in Makefile.dep Makefile.modules \
                configure configure.in install-sh install-win32 macosx-dmg \
                config.sub config.guess aclocal.m4 mkinstalldirs \
@@ -379,8 +387,8 @@ dist:
        for file in control changelog rules ; do \
                cp debian/$$file tmp/vlc/debian/ ; done
        # Copy ipkg control files
-       for file in control rules patch ; do \
-               cp ipkg/$$file tmp/vlc/ipkg/ ; done
+       for file in ipkg/* ; do \
+               cp $$file tmp/vlc/ipkg/ ; done
        # Copy fonts and icons
        for file in share/*vlc* share/*psf; do \
                cp $$file tmp/vlc/share ; done
@@ -437,6 +445,7 @@ package-beos:
        # Copy relevant files
        cp vlc tmp/vlc/
        strip tmp/vlc/vlc
+       xres -o tmp/vlc/vlc ./share/vlc_beos.rsrc
        cp AUTHORS COPYING ChangeLog README FAQ TODO tmp/vlc/
        for file in default8x16.psf default8x9.psf ; \
                do cp share/$$file tmp/vlc/share/ ; done
index 908fa1ce79a6c38d6266e71bd8d0c9a025d3b24e..8500d1a60014bc3d650ccae488da6b8ff8289f20 100644 (file)
@@ -63,6 +63,7 @@ dvdread_CFLAGS = @dvdread_CFLAGS@
 mpeg_ts_dvbpsi_CFLAGS = @mpeg_ts_dvbpsi_CFLAGS@
 directx_CFLAGS = @directx_CFLAGS@
 esd_CFLAGS = @esd_CFLAGS@
+familiar_CFLAGS = @familiar_CFLAGS@
 ffmpeg_CFLAGS = @ffmpeg_CFLAGS@
 glide_CFLAGS = @glide_CFLAGS@
 gnome_CFLAGS = @gnome_CFLAGS@
@@ -72,7 +73,9 @@ idctaltivec_CFLAGS = @idctaltivec_CFLAGS@
 mad_CFLAGS = @mad_CFLAGS@
 memcpyaltivec_CFLAGS = @memcpyaltivec_CFLAGS@
 motionaltivec_CFLAGS = @motionaltivec_CFLAGS@
+opie_CFLAGS = @opie_CFLAGS@
 qt_CFLAGS = @qt_CFLAGS@
+qte_CFLAGS = @qte_CFLAGS@
 sdl_CFLAGS = @sdl_CFLAGS@
 x11_CFLAGS = @x11_CFLAGS@
 xvideo_CFLAGS = @xvideo_CFLAGS@
@@ -96,6 +99,7 @@ dvd_LDFLAGS = @dvd_LDFLAGS@
 dvdread_LDFLAGS = @dvdread_LDFLAGS@
 mpeg_ts_dvbpsi_LDFLAGS = @mpeg_ts_dvbpsi_LDFLAGS@
 esd_LDFLAGS = @esd_LDFLAGS@
+familiar_LDFLAGS = @familiar_LDFLAGS@
 filter_distort_LDFLAGS = @filter_distort_LDFLAGS@
 ffmpeg_LDFLAGS = @ffmpeg_LDFLAGS@
 ggi_LDFLAGS = @ggi_LDFLAGS@
@@ -116,8 +120,10 @@ mad_LDFLAGS = @mad_LDFLAGS@
 memcpyaltivec_LDFLAGS = @memcpyaltivec_LDFLAGS@
 motionaltivec_LDFLAGS = @motionaltivec_LDFLAGS@
 ncurses_LDFLAGS = @ncurses_LDFLAGS@
+opie_LDFLAGS = @opie_LDFLAGS@
 qnx_LDFLAGS = @qnx_LDFLAGS@
 qt_LDFLAGS = @qt_LDFLAGS@
+qte_LDFLAGS = @qte_LDFLAGS@
 rc_LDFLAGS = @rc_LDFLAGS@
 sdl_LDFLAGS = @sdl_LDFLAGS@
 vcd_LDFLAGS = @vcd_LDFLAGS@
index f0efcc283a8d6debeba92cb0376a72e33e2896a9..13a08498c55481db3af6069c93a8e08d6b3863c3 100644 (file)
@@ -1 +1,77 @@
-{\rtf1\mac\ansicpg10000\cocoartf100\r{\fonttbl\f0\fswiss\fcharset77 Helvetica;\f1\fswiss\fcharset77 Helvetica-Bold;\f2\fmodern\fcharset77 Courier;\r}\r{\colortbl;\red255\green255\blue255;}\r\margl1440\margr1440\vieww11240\viewh10380\viewkind0\r\hyphauto1\hyphfactor90\r\pard\tx1440\tx2880\tx4320\tx5760\tx7200\qc\r\r\f0\fs48 \cf0 VideoLAN Client (VLC) version 0.4\\rMac OS X-specific information\r\fs24 \\r\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural\r\cf0 \\r\\r\pard\tx1440\tx2880\tx4320\tx5760\tx7200\qj\r\cf0 Welcome to the VideoLAN Client ! VLC is a multi-purpose mutimedia tool : it can play DVDs and VCDs, or read a stream from the network. It also supports DivX/MPEG-4 files and is unaffected by the dreaded .avi bug which can cause choppy sound when playing DivX in Quicktime. VLC has originally been developed for GNU/Linux systems, but has been ported to numerous operating systems, including Mac OS X and Win32. The Mac OS X port is a bit young and immature, as you will notice, and there are many caveats. We are working hard to improve it, and if you think you can help us in any way, please drop us a line.\\r\\rYou may find the following frequentely asked questions useful :\\r\\r\r\f1\b \ul 1. How do I install ?\r\f0\b0 \ulnone \\rWhen you download VLC, you will end up with a vlc-0.4.0.dmg file. Doubleclick, or drop it on the application Disk Copy, to open this file. An icon will now appear on your Desktop, right beside your drive(s). Open it and drag the vlc application from the resulting window to the place where you want to install it. Most often this is /Applications.\\r\\r\\r\r\f1\b \ul 2. How do use VLC?\r\f0\b0 \ulnone \\rTo use VLC, you will need to open the application first and then from the "File" menu open the file or disk, you would like to view. Doubleclicking a file will result in Quicktime trying to open it and Quicktime can not benefit from the advantages VLC brings.\\r\r\f1\b \ul \\r\\r3. How do I read an SVCD ?\r\f0\b0 \ulnone \\rVLC is currently unable to read SVCD directly from the drive. SVCDs contain plain MPEG-2 files which can be directly read. Just copy the .dat files in the SVCD onto your hard drive, and use the "Open File" menu item in VLC (drag and drop doesn't work yet).\\r\\r\\r\r\f1\b \ul 4. The video is choppy ! It's like we're dropping frames\\r\r\f0\b0 \ulnone That's the normal behavior when the CPU isn't fast enough to decode all frames. Though there is some room for improvement, do never expect VLC to be able to decode MPEG-2 streams on a low-end G3 machine. Apple DVD player uses specific hardware accelerations from the video board of those systems, and we currently lack documentation to do the same. If you think you have information which might help us, please contact us, otherwise please don't complain about this.\\r\\rIf VLC is slow on your G4 system, try and quit or hide all running applications. See with \r\f2 top -u\r\f0  in a terminal window which applications take the CPU. Minimizing the VLC controller window might help, too. Be aware of bouncing icons in the dock. Bounces seriously effect the performance of VLC. The same goes for any time interval process (Checking mail every 2 minutes).\\r\\r\\r\r\f1\b \ul 5. I only get a black picture !\\r\r\f0\b0 \ulnone We haven't found the reason why some people get this problem. However, users have indicated a workaround : switch your screen depth to thousands of colors instead of millions. If you think you have information to help us find the bug, please drop us a mail.\\r\\r\\r\r\f1\b \ul 6. How do I hide the mouse cursor ?\r\f0\b0 \ulnone \\rJust double-click on the movie.\\r\\r\\r\r\f1\b \ul 7. How do remove VLC ?\r\f0\b0 \ulnone \\rSimply drag VLC from the place where you have installed it, to the Trash.\\r\\r\\rThanks for reading this file. For additional information, subscribe to the vlc mailing list on \ul http://www.videolan.org/.\ulnone \\r-- \\rChristophe Massiot <massiot@via.ecp.fr>, for the VideoLAN team.\\r$Id: README.MacOSX.rtf,v 1.3 2002/05/23 21:42:43 massiot Exp $}
\ No newline at end of file
+{\rtf1\mac\ansicpg10000\cocoartf102
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;\f1\fswiss\fcharset77 Helvetica-Bold;\f2\fmodern\fcharset77 Courier;
+}
+{\colortbl;\red255\green255\blue255;}
+\margl1440\margr1440\vieww11240\viewh10380\viewkind0
+\hyphauto1\hyphfactor90
+\pard\tx1440\tx2880\tx4320\tx5760\tx7200\qc
+
+\f0\fs48 \cf0 VideoLAN Client (VLC) version 0.4\
+Mac OS X-specific information
+\fs24 \
+\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural
+\cf0 \
+\
+\pard\tx1440\tx2880\tx4320\tx5760\tx7200\qj
+\cf0 Welcome to the VideoLAN Client ! VLC is a multi-purpose mutimedia tool : it can play DVDs and VCDs, or read a stream from the network. It also supports DivX/MPEG-4 files and is unaffected by the dreaded .avi bug which can cause choppy sound when playing DivX in Quicktime. VLC has originally been developed for GNU/Linux systems, but has been ported to numerous operating systems, including Mac OS X and Win32. The Mac OS X port is a bit young and immature, as you will notice, and there are many caveats. We are working hard to improve it, and if you think you can help us in any way, please drop us a line.\
+\
+You may find the following frequentely asked questions useful :\
+\
+
+\f1\b \ul 1. How do I install ?
+\f0\b0 \ulnone \
+When you download VLC, you will end up with a vlc-0.4.5.dmg file. Double-click, or drop it on the application Disk Copy, to open this file. An icon will now appear on your Desktop, right beside your drive(s). Open it and drag the vlc application from the resulting window to the place where you want to install it. Most often this is /Applications.\
+\
+\
+
+\f1\b \ul 2. How do use VLC?
+\f0\b0 \ulnone \
+To use VLC, you will need to open the application first and then from the "File" menu open the file or disk, you would like to view. Doubleclicking a file will result in QuickTime Player trying to open it and QuickTime Player can not benefit from the advantages VLC brings.\
+
+\f1\b \ul \
+\
+3. How do I read an SVCD ?
+\f0\b0 \ulnone \
+VLC is currently unable to read SVCD directly from the drive. SVCDs contain plain MPEG-2 files which can be directly read. Just copy the .dat files in the SVCD onto your hard drive, and use the "Open File" menu item in VLC (drag and drop doesn't work yet). Some SVCDs can be read if you tell VLC they're VCDs, in the "Open Disc" dialog.\
+\
+\
+
+\f1\b \ul 4. The video is choppy ! It's like we're dropping frames\
+
+\f0\b0 \ulnone That's the normal behavior when the CPU isn't fast enough to decode all frames. Though there is some room for improvement, do never expect VLC to be able to decode MPEG-2 streams on a low-end G3 machine. Apple DVD player uses specific hardware accelerations from the video board of those systems, and we currently lack documentation to do the same. If you think you have information which might help us, please contact us, otherwise please don't complain about this.\
+\
+If VLC is slow on your G4 system, try and quit or hide all running applications. See with 
+\f2 top -u
+\f0  in a terminal window which applications take the CPU. Minimizing the VLC controller window might help, too. Be aware of bouncing icons in the dock. Bounces seriously effect the performance of VLC. The same goes for any time interval process (Checking mail every 2 minutes).\
+\
+\
+
+\f1\b \ul 5. How do I hide the mouse cursor ?
+\f0\b0 \ulnone \
+Just double-click on the movie.\
+\
+\
+
+\f1\b \ul 6. How do I remove VLC ?
+\f0\b0 \ulnone \
+Simply drag VLC from the place where you have installed it, to the Trash.\
+\
+\
+
+\f1\b \ul 7. Where can I find an older version for Mac OS 9 ?\
+
+\f0\b0 \ulnone There is no version for Mac OS 9. VLC is originally a UNIX application and has never been ported to Mac OS 9. Considering the amount of differences between Mac OS 9 and modern systems, it would require a tremendous work to port VLC. We do not plan to do it. So please don't ask.\
+\
+\
+
+\f1\b \ul 8. How do I enable deinterlacing ?\
+
+\f0\b0 \ulnone You must select the "Deinterlace" menu item 
+\f1\b before
+\f0\b0  opening any file. If the item is selected while reading a file, nothing will happen. This is a known issue, please do not report it.\
+\
+\
+Thanks for reading this file. For additional information, subscribe to the vlc mailing list on \ul http://www.videolan.org/.\ulnone \
+-- \
+Christophe Massiot <massiot@via.ecp.fr>, for the VideoLAN team.\
+$Id: README.MacOSX.rtf,v 1.3.2.5 2002/10/13 22:34:21 massiot Exp $}
\ No newline at end of file
diff --git a/TODO b/TODO
index 3545c770d1a6f5253c3fe976e6423e711039edbb..2b424a5aeec33215b1b2e580e47a98e008eca201 100644 (file)
--- a/TODO
+++ b/TODO
@@ -47,7 +47,7 @@ Urgency: Wishlist
 Description: Share stream information between vlc and vls
  vls should send misc TS packets to let us know what the stream PID
  contain, such as the language, or the subtitle palette.
-Status: Todo
+Status: Done (collective work)
 
 Task: 0x59
 Difficulty: Hard
@@ -137,7 +137,7 @@ Description: Fix all known DVD playback issues
  A few DVDs are still reported not to work at all. Try to find what is
  causing this, have a more robust DVD input, and list all discs reported
  to work flawlessly to prevent bug regression.
-Status: Todo
+Status: Done (collective work)
 
 Task: 0x4e
 Difficulty: Hard
@@ -169,7 +169,7 @@ Urgency: Normal
 Description: Write AVI input plugin
  .avi files can use MPEG codec, if this is the case it shouldn't be
  hard to read those files -> Meuuh
-Status: Todo
+Status: Done 23 Apr 2002 (fenrir)
 
 Task: 0x4a
 Difficulty: Medium
@@ -459,7 +459,7 @@ Difficulty: Hard
 Urgency: Wishlist
 Description: MP3 support
  The vlc cannot play MPEG1/2 layer 3 yet. It might be nice to fix that.
-Status: Todo
+Status: Done 10 May 2002 (fenrir)
 
 Task: 0x25
 Difficulty: Hard
index 4177fe5564466b330d06a0634bff6aa6b11de7ff..23a893d0d59362a0b6645d77a9708c90865881be 100755 (executable)
--- a/configure
+++ b/configure
@@ -48,6 +48,8 @@ ac_help="$ac_help
   --enable-dvbpsi        dvbpsi ts demux module (default disabled)"
 ac_help="$ac_help
     --with-dvbpsi=PATH    libdvbpsi headers and libraries"
+ac_help="$ac_help
+    --with-dvbpsi-tree=PATH libdvbpsi tree for static linking"
 ac_help="$ac_help
   --enable-vcd            VCD support for Linux, FreeBSD and MacOS X (default enabled)"
 ac_help="$ac_help
@@ -84,6 +86,10 @@ ac_help="$ac_help
   --enable-sdl            SDL support (default enabled)"
 ac_help="$ac_help
     --with-sdl-config-path=PATH sdl-config path (default search in \$PATH)"
+ac_help="$ac_help
+  --enable-qte            QT Embedded support (default disabled)"
+ac_help="$ac_help
+    --with-qte=PATH    Qt Embedded headers and libraries"
 ac_help="$ac_help
   --enable-directx        Win32 DirectX support (default enabled on Win32)"
 ac_help="$ac_help
@@ -120,12 +126,20 @@ ac_help="$ac_help
   --enable-gtk            Gtk+ support (default enabled)"
 ac_help="$ac_help
     --with-gtk-config-path=PATH gtk-config path (default search in \$PATH)"
+ac_help="$ac_help
+  --enable-familiar       Familiar Gtk+ support (default disabled)"
+ac_help="$ac_help
+    --with-gtk-config-path=PATH gtk-config path (default search in \$PATH)"
 ac_help="$ac_help
   --enable-gnome          Gnome interface support (default disabled)"
 ac_help="$ac_help
   --enable-qt             Qt interface support (default disabled)"
 ac_help="$ac_help
   --enable-kde            KDE interface support (default disabled)"
+ac_help="$ac_help
+  --enable-opie           Qt embedded interface support (default disabled)"
+ac_help="$ac_help
+    --with-qte=PATH    Qt Embedded headers and libraries"
 ac_help="$ac_help
   --enable-macosx         MacOS X support (default enabled on MacOS X)"
 ac_help="$ac_help
@@ -710,7 +724,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
 fi
 
 echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:714: checking host system type" >&5
+echo "configure:728: checking host system type" >&5
 
 host_alias=$host
 case "$host_alias" in
@@ -731,7 +745,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
 echo "$ac_t""$host" 1>&6
 
 echo $ac_n "checking target system type""... $ac_c" 1>&6
-echo "configure:735: checking target system type" >&5
+echo "configure:749: checking target system type" >&5
 
 target_alias=$target
 case "$target_alias" in
@@ -749,7 +763,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
 echo "$ac_t""$target" 1>&6
 
 echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:753: checking build system type" >&5
+echo "configure:767: checking build system type" >&5
 
 build_alias=$build
 case "$build_alias" in
@@ -773,7 +787,7 @@ test "$host_alias" != "$target_alias" &&
 
 
 PACKAGE="vlc"
-VERSION="0.4.0"
+VERSION="0.4.5"
 CODENAME=Ourumov
 
 save_CFLAGS="${CFLAGS}"
@@ -781,7 +795,7 @@ save_CPPFLAGS="${CPPFLAGS}"
 save_LDFLAGS="${LDFLAGS}"
 
 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:785: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:799: checking whether ${MAKE-make} sets \${MAKE}" >&5
 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -810,7 +824,7 @@ fi
 # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:814: checking for $ac_word" >&5
+echo "configure:828: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -840,7 +854,7 @@ if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:844: checking for $ac_word" >&5
+echo "configure:858: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -891,7 +905,7 @@ fi
       # Extract the first word of "cl", so it can be a program name with args.
 set dummy cl; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:895: checking for $ac_word" >&5
+echo "configure:909: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -923,7 +937,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:927: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:941: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
 
 ac_ext=c
 # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -934,12 +948,12 @@ cross_compiling=$ac_cv_prog_cc_cross
 
 cat > conftest.$ac_ext << EOF
 
-#line 938 "configure"
+#line 952 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:943: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:957: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cc_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -965,12 +979,12 @@ if test $ac_cv_prog_cc_works = no; then
   { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:969: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:983: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
 cross_compiling=$ac_cv_prog_cc_cross
 
 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:974: checking whether we are using GNU C" >&5
+echo "configure:988: checking whether we are using GNU C" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -979,7 +993,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:983: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:997: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gcc=yes
 else
   ac_cv_prog_gcc=no
@@ -998,7 +1012,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
 ac_save_CFLAGS="$CFLAGS"
 CFLAGS=
 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1002: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1016: checking whether ${CC-cc} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1030,7 +1044,7 @@ else
 fi
 
 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:1034: checking how to run the C preprocessor" >&5
+echo "configure:1048: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
@@ -1045,13 +1059,13 @@ else
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
-#line 1049 "configure"
+#line 1063 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1055: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1069: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -1062,13 +1076,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 1066 "configure"
+#line 1080 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1072: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1086: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -1079,13 +1093,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -nologo -E"
   cat > conftest.$ac_ext <<EOF
-#line 1083 "configure"
+#line 1097 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1089: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1103: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -1119,7 +1133,7 @@ fi
 # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
 set dummy ${ac_tool_prefix}ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1123: checking for $ac_word" >&5
+echo "configure:1137: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1151,7 +1165,7 @@ if test -n "$ac_tool_prefix"; then
   # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1155: checking for $ac_word" >&5
+echo "configure:1169: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1186,7 +1200,7 @@ fi
 # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
 set dummy ${ac_tool_prefix}strip; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1190: checking for $ac_word" >&5
+echo "configure:1204: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1218,7 +1232,7 @@ if test -n "$ac_tool_prefix"; then
   # Extract the first word of "strip", so it can be a program name with args.
 set dummy strip; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1222: checking for $ac_word" >&5
+echo "configure:1236: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1254,7 +1268,7 @@ fi
 # Extract the first word of "gmake", so it can be a program name with args.
 set dummy gmake; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1258: checking for $ac_word" >&5
+echo "configure:1272: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_GMAKE'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1289,7 +1303,7 @@ fi
 
 if test "x$GMAKE" = "xno"; then
   echo $ac_n "checking whether GNU make is installed""... $ac_c" 1>&6
-echo "configure:1293: checking whether GNU make is installed" >&5
+echo "configure:1307: checking whether GNU make is installed" >&5
 if eval "test \"`echo '$''{'ac_cv_gmake'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1321,7 +1335,7 @@ EOF
 # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1325: checking for $ac_word" >&5
+echo "configure:1339: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1350,7 +1364,7 @@ fi
 
 
         echo $ac_n "checking for strerror in -lcposix""... $ac_c" 1>&6
-echo "configure:1354: checking for strerror in -lcposix" >&5
+echo "configure:1368: checking for strerror in -lcposix" >&5
 ac_lib_var=`echo cposix'_'strerror | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -1358,7 +1372,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lcposix  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 1362 "configure"
+#line 1376 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -1369,7 +1383,7 @@ int main() {
 strerror()
 ; return 0; }
 EOF
-if { (eval echo configure:1373: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1387: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -1392,12 +1406,12 @@ fi
   
 
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:1396: checking for ANSI C header files" >&5
+echo "configure:1410: checking for ANSI C header files" >&5
 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1401 "configure"
+#line 1415 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -1405,7 +1419,7 @@ else
 #include <float.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1409: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1423: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -1422,7 +1436,7 @@ rm -f conftest*
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 1426 "configure"
+#line 1440 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -1440,7 +1454,7 @@ fi
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 1444 "configure"
+#line 1458 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -1461,7 +1475,7 @@ if test "$cross_compiling" = yes; then
   :
 else
   cat > conftest.$ac_ext <<EOF
-#line 1465 "configure"
+#line 1479 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -1472,7 +1486,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
 exit (0); }
 
 EOF
-if { (eval echo configure:1476: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1490: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -1496,12 +1510,12 @@ EOF
 fi
 
 echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:1500: checking for working const" >&5
+echo "configure:1514: checking for working const" >&5
 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1505 "configure"
+#line 1519 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -1550,7 +1564,7 @@ ccp = (char const *const *) p;
 
 ; return 0; }
 EOF
-if { (eval echo configure:1554: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1568: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_const=yes
 else
@@ -1571,21 +1585,21 @@ EOF
 fi
 
 echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:1575: checking for inline" >&5
+echo "configure:1589: checking for inline" >&5
 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
   cat > conftest.$ac_ext <<EOF
-#line 1582 "configure"
+#line 1596 "configure"
 #include "confdefs.h"
 
 int main() {
 } $ac_kw foo() {
 ; return 0; }
 EOF
-if { (eval echo configure:1589: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1603: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_inline=$ac_kw; break
 else
@@ -1611,12 +1625,12 @@ EOF
 esac
 
 echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:1615: checking for off_t" >&5
+echo "configure:1629: checking for off_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1620 "configure"
+#line 1634 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -1644,12 +1658,12 @@ EOF
 fi
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:1648: checking for size_t" >&5
+echo "configure:1662: checking for size_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1653 "configure"
+#line 1667 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -1679,19 +1693,19 @@ fi
 # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
 # for constant arguments.  Useless!
 echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
-echo "configure:1683: checking for working alloca.h" >&5
+echo "configure:1697: checking for working alloca.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1688 "configure"
+#line 1702 "configure"
 #include "confdefs.h"
 #include <alloca.h>
 int main() {
 char *p = alloca(2 * sizeof(int));
 ; return 0; }
 EOF
-if { (eval echo configure:1695: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1709: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_header_alloca_h=yes
 else
@@ -1712,12 +1726,12 @@ EOF
 fi
 
 echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:1716: checking for alloca" >&5
+echo "configure:1730: checking for alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1721 "configure"
+#line 1735 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -1745,7 +1759,7 @@ int main() {
 char *p = (char *) alloca(1);
 ; return 0; }
 EOF
-if { (eval echo configure:1749: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1763: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_func_alloca_works=yes
 else
@@ -1777,12 +1791,12 @@ EOF
 
 
 echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:1781: checking whether alloca needs Cray hooks" >&5
+echo "configure:1795: checking whether alloca needs Cray hooks" >&5
 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1786 "configure"
+#line 1800 "configure"
 #include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
@@ -1807,12 +1821,12 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6
 if test $ac_cv_os_cray = yes; then
 for ac_func in _getb67 GETB67 getb67; do
   echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:1811: checking for $ac_func" >&5
+echo "configure:1825: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1816 "configure"
+#line 1830 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -1835,7 +1849,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:1839: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1853: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -1862,7 +1876,7 @@ done
 fi
 
 echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:1866: checking stack direction for C alloca" >&5
+echo "configure:1880: checking stack direction for C alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1870,7 +1884,7 @@ else
   ac_cv_c_stack_direction=0
 else
   cat > conftest.$ac_ext <<EOF
-#line 1874 "configure"
+#line 1888 "configure"
 #include "confdefs.h"
 find_stack_direction ()
 {
@@ -1889,7 +1903,7 @@ main ()
   exit (find_stack_direction() < 0);
 }
 EOF
-if { (eval echo configure:1893: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1907: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_c_stack_direction=1
 else
@@ -1914,17 +1928,17 @@ for ac_hdr in unistd.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:1918: checking for $ac_hdr" >&5
+echo "configure:1932: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1923 "configure"
+#line 1937 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1928: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1942: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -1953,12 +1967,12 @@ done
 for ac_func in getpagesize
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:1957: checking for $ac_func" >&5
+echo "configure:1971: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1962 "configure"
+#line 1976 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -1981,7 +1995,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:1985: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1999: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -2006,7 +2020,7 @@ fi
 done
 
 echo $ac_n "checking for working mmap""... $ac_c" 1>&6
-echo "configure:2010: checking for working mmap" >&5
+echo "configure:2024: checking for working mmap" >&5
 if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2014,7 +2028,7 @@ else
   ac_cv_func_mmap_fixed_mapped=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 2018 "configure"
+#line 2032 "configure"
 #include "confdefs.h"
 
 /* Thanks to Mike Haertel and Jim Avera for this test.
@@ -2154,7 +2168,7 @@ main()
 }
 
 EOF
-if { (eval echo configure:2158: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:2172: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func_mmap_fixed_mapped=yes
 else
@@ -2178,12 +2192,12 @@ fi
 
 
     echo $ac_n "checking whether we are using the GNU C Library 2.1 or newer""... $ac_c" 1>&6
-echo "configure:2182: checking whether we are using the GNU C Library 2.1 or newer" >&5
+echo "configure:2196: checking whether we are using the GNU C Library 2.1 or newer" >&5
 if eval "test \"`echo '$''{'ac_cv_gnu_library_2_1'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2187 "configure"
+#line 2201 "configure"
 #include "confdefs.h"
 
 #include <features.h>
@@ -2219,17 +2233,17 @@ stdlib.h string.h unistd.h sys/param.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2223: checking for $ac_hdr" >&5
+echo "configure:2237: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2228 "configure"
+#line 2242 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2233: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2247: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -2260,12 +2274,12 @@ getgid getuid mempcpy munmap putenv setenv setlocale stpcpy strchr strcasecmp \
 strdup strtoul tsearch __argz_count __argz_stringify __argz_next
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2264: checking for $ac_func" >&5
+echo "configure:2278: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2269 "configure"
+#line 2283 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -2288,7 +2302,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2292: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2306: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -2328,7 +2342,7 @@ fi
 
 
   echo $ac_n "checking for iconv""... $ac_c" 1>&6
-echo "configure:2332: checking for iconv" >&5
+echo "configure:2346: checking for iconv" >&5
 if eval "test \"`echo '$''{'am_cv_func_iconv'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2336,7 +2350,7 @@ else
     am_cv_func_iconv="no, consider installing GNU libiconv"
     am_cv_lib_iconv=no
     cat > conftest.$ac_ext <<EOF
-#line 2340 "configure"
+#line 2354 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <iconv.h>
@@ -2346,7 +2360,7 @@ iconv_t cd = iconv_open("","");
        iconv_close(cd);
 ; return 0; }
 EOF
-if { (eval echo configure:2350: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2364: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   am_cv_func_iconv=yes
 else
@@ -2358,7 +2372,7 @@ rm -f conftest*
       am_save_LIBS="$LIBS"
       LIBS="$LIBS -liconv"
       cat > conftest.$ac_ext <<EOF
-#line 2362 "configure"
+#line 2376 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <iconv.h>
@@ -2368,7 +2382,7 @@ iconv_t cd = iconv_open("","");
          iconv_close(cd);
 ; return 0; }
 EOF
-if { (eval echo configure:2372: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2386: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   am_cv_lib_iconv=yes
         am_cv_func_iconv=yes
@@ -2389,13 +2403,13 @@ echo "$ac_t""$am_cv_func_iconv" 1>&6
 EOF
 
     echo $ac_n "checking for iconv declaration""... $ac_c" 1>&6
-echo "configure:2393: checking for iconv declaration" >&5
+echo "configure:2407: checking for iconv declaration" >&5
     if eval "test \"`echo '$''{'am_cv_proto_iconv'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
       cat > conftest.$ac_ext <<EOF
-#line 2399 "configure"
+#line 2413 "configure"
 #include "confdefs.h"
 
 #include <stdlib.h>
@@ -2414,7 +2428,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:2418: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2432: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   am_cv_proto_iconv_arg1=""
 else
@@ -2443,19 +2457,19 @@ EOF
 
    
   echo $ac_n "checking for nl_langinfo and CODESET""... $ac_c" 1>&6
-echo "configure:2447: checking for nl_langinfo and CODESET" >&5
+echo "configure:2461: checking for nl_langinfo and CODESET" >&5
 if eval "test \"`echo '$''{'am_cv_langinfo_codeset'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2452 "configure"
+#line 2466 "configure"
 #include "confdefs.h"
 #include <langinfo.h>
 int main() {
 char* cs = nl_langinfo(CODESET);
 ; return 0; }
 EOF
-if { (eval echo configure:2459: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   am_cv_langinfo_codeset=yes
 else
@@ -2478,19 +2492,19 @@ EOF
 
    if test $ac_cv_header_locale_h = yes; then
     echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
-echo "configure:2482: checking for LC_MESSAGES" >&5
+echo "configure:2496: checking for LC_MESSAGES" >&5
 if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2487 "configure"
+#line 2501 "configure"
 #include "confdefs.h"
 #include <locale.h>
 int main() {
 return LC_MESSAGES
 ; return 0; }
 EOF
-if { (eval echo configure:2494: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2508: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   am_cv_val_LC_MESSAGES=yes
 else
@@ -2511,7 +2525,7 @@ EOF
     fi
   fi
    echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6
-echo "configure:2515: checking whether NLS is requested" >&5
+echo "configure:2529: checking whether NLS is requested" >&5
         # Check whether --enable-nls or --disable-nls was given.
 if test "${enable_nls+set}" = set; then
   enableval="$enable_nls"
@@ -2533,7 +2547,7 @@ fi
 EOF
 
       echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6
-echo "configure:2537: checking whether included gettext is requested" >&5
+echo "configure:2551: checking whether included gettext is requested" >&5
       # Check whether --with-included-gettext or --without-included-gettext was given.
 if test "${with_included_gettext+set}" = set; then
   withval="$with_included_gettext"
@@ -2553,17 +2567,17 @@ fi
 
        ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for libintl.h""... $ac_c" 1>&6
-echo "configure:2557: checking for libintl.h" >&5
+echo "configure:2571: checking for libintl.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2562 "configure"
+#line 2576 "configure"
 #include "confdefs.h"
 #include <libintl.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2567: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2581: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -2580,12 +2594,12 @@ fi
 if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   echo $ac_n "checking for GNU gettext in libc""... $ac_c" 1>&6
-echo "configure:2584: checking for GNU gettext in libc" >&5
+echo "configure:2598: checking for GNU gettext in libc" >&5
 if eval "test \"`echo '$''{'gt_cv_func_gnugettext1_libc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2589 "configure"
+#line 2603 "configure"
 #include "confdefs.h"
 #include <libintl.h>
 extern int _nl_msg_cat_cntr;
@@ -2594,7 +2608,7 @@ bindtextdomain ("", "");
 return (int) gettext ("") + _nl_msg_cat_cntr
 ; return 0; }
 EOF
-if { (eval echo configure:2598: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2612: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   gt_cv_func_gnugettext1_libc=yes
 else
@@ -2610,14 +2624,14 @@ echo "$ac_t""$gt_cv_func_gnugettext1_libc" 1>&6
 
           if test "$gt_cv_func_gnugettext1_libc" != "yes"; then
             echo $ac_n "checking for GNU gettext in libintl""... $ac_c" 1>&6
-echo "configure:2614: checking for GNU gettext in libintl" >&5
+echo "configure:2628: checking for GNU gettext in libintl" >&5
 if eval "test \"`echo '$''{'gt_cv_func_gnugettext1_libintl'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   gt_save_LIBS="$LIBS"
                LIBS="$LIBS -lintl $LIBICONV"
                cat > conftest.$ac_ext <<EOF
-#line 2621 "configure"
+#line 2635 "configure"
 #include "confdefs.h"
 #include <libintl.h>
 extern int _nl_msg_cat_cntr;
@@ -2626,7 +2640,7 @@ bindtextdomain ("", "");
 return (int) gettext ("") + _nl_msg_cat_cntr
 ; return 0; }
 EOF
-if { (eval echo configure:2630: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2644: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   gt_cv_func_gnugettext1_libintl=yes
 else
@@ -2659,12 +2673,12 @@ EOF
             for ac_func in dcgettext
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2663: checking for $ac_func" >&5
+echo "configure:2677: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2668 "configure"
+#line 2682 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -2687,7 +2701,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2691: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2705: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -2716,7 +2730,7 @@ done
                     # Extract the first word of "msgfmt", so it can be a program name with args.
 set dummy msgfmt; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2720: checking for $ac_word" >&5
+echo "configure:2734: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2750,7 +2764,7 @@ fi
             # Extract the first word of "gmsgfmt", so it can be a program name with args.
 set dummy gmsgfmt; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2754: checking for $ac_word" >&5
+echo "configure:2768: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2787,7 +2801,7 @@ fi
                     # Extract the first word of "xgettext", so it can be a program name with args.
 set dummy xgettext; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2791: checking for $ac_word" >&5
+echo "configure:2805: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2837,7 +2851,7 @@ fi
         # Extract the first word of "msgfmt", so it can be a program name with args.
 set dummy msgfmt; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2841: checking for $ac_word" >&5
+echo "configure:2855: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2871,7 +2885,7 @@ fi
         # Extract the first word of "gmsgfmt", so it can be a program name with args.
 set dummy gmsgfmt; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2875: checking for $ac_word" >&5
+echo "configure:2889: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2907,7 +2921,7 @@ fi
         # Extract the first word of "xgettext", so it can be a program name with args.
 set dummy xgettext; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2911: checking for $ac_word" >&5
+echo "configure:2925: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2978,7 +2992,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2982: checking for $ac_word" >&5
+echo "configure:2996: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_INTLBISON'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3011,7 +3025,7 @@ done
       ac_verc_fail=yes
     else
             echo $ac_n "checking version of bison""... $ac_c" 1>&6
-echo "configure:3015: checking version of bison" >&5
+echo "configure:3029: checking version of bison" >&5
       ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
       case $ac_prog_version in
         '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
@@ -3058,7 +3072,7 @@ echo "configure:3015: checking version of bison" >&5
        LINGUAS=
      else
        echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6
-echo "configure:3062: checking for catalogs to be installed" >&5
+echo "configure:3076: checking for catalogs to be installed" >&5
        NEW_LINGUAS=
        for presentlang in $ALL_LINGUAS; do
          useit=no
@@ -3110,7 +3124,7 @@ echo "configure:3062: checking for catalogs to be installed" >&5
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # ./install, which can be erroneously created by make from ./install.sh.
 echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:3114: checking for a BSD compatible install" >&5
+echo "configure:3128: checking for a BSD compatible install" >&5
 if test -z "$INSTALL"; then
 if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3189,7 +3203,7 @@ case x"${target_os}" in
     # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args.
 set dummy ${ac_tool_prefix}windres; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3193: checking for $ac_word" >&5
+echo "configure:3207: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3221,7 +3235,7 @@ if test -n "$ac_tool_prefix"; then
   # Extract the first word of "windres", so it can be a program name with args.
 set dummy windres; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3225: checking for $ac_word" >&5
+echo "configure:3239: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3253,7 +3267,7 @@ else
 fi
 fi
 
-    save_CFLAGS="${save_CFLAGS} -fnative-struct -D_OFF_T_ -D_off_t=long"
+    save_CFLAGS="${save_CFLAGS} -D_OFF_T_ -D_off_t=long"
     vlc_LDFLAGS="${vlc_LDFLAGS} -mwindows -Xlinker --force-exe-suffix"
     vlc_LDFLAGS="${vlc_LDFLAGS} -lws2_32 -lnetapi32"
     ipv4_LDFLAGS="${ipv4_LDFLAGS} -lws2_32"
@@ -3271,7 +3285,7 @@ fi
     save_CFLAGS="${save_CFLAGS} -Wno-multichar -Wno-ctor-dtor-privacy -Woverloaded-virtual"
     vlc_LDFLAGS="${vlc_LDFLAGS} -lbe"
     plugins_LDFLAGS="${plugins_LDFLAGS} -nostart"
-    beos_LDFLAGS="${beos_LDFLAGS} -lbe -lgame -lroot -ltracker"
+    beos_LDFLAGS="${beos_LDFLAGS} -lbe -lgame -lroot -ltracker -ltranslation -lstdc++.r4"
     ipv4_LDFLAGS="${ipv4_LDFLAGS} -lbind"
     ;;
   x*)
     ;;
 esac
 
-if test x"${SYS}" = xmingw32
+if test x"${SYS}" != xmingw32; then
+  plugins_CFLAGS="${plugins_CFLAGS} -fPIC"
+fi
+
+if test x$SYS = xmingw32
 then
-  plugins_CFLAGS="${plugins_CFLAGS} -fnative-struct"
+    echo $ac_n "checking for opendir in -lmingwex""... $ac_c" 1>&6
+echo "configure:3304: checking for opendir in -lmingwex" >&5
+ac_lib_var=`echo mingwex'_'opendir | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
 else
-  plugins_CFLAGS="${plugins_CFLAGS} -fPIC"
+  ac_save_LIBS="$LIBS"
+LIBS="-lmingwex  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 3312 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char opendir();
+
+int main() {
+opendir()
+; return 0; }
+EOF
+if { (eval echo configure:3323: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  echo $ac_n "checking for opendir in -lmingw32""... $ac_c" 1>&6
+echo "configure:3339: checking for opendir in -lmingw32" >&5
+ac_lib_var=`echo mingw32'_'opendir | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lmingw32  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 3347 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char opendir();
+
+int main() {
+opendir()
+; return 0; }
+EOF
+if { (eval echo configure:3358: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  vlc_LDFLAGS="${vlc_LDFLAGS}"
+else
+  echo "$ac_t""no" 1>&6
+vlc_LDFLAGS="${vlc_LDFLAGS} -lmingwex"
+             gtk_LDFLAGS="${gtk_LDFLAGS} -lmingwex"
+fi
+
+    
+else
+  echo "$ac_t""no" 1>&6
+fi
+
 fi
 
 save_CFLAGS="${save_CFLAGS} -DSYS_`echo ${SYS} | sed -e 's/-.*//' | tr 'abcdefghijklmnopqrstuvwxyz.' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`"
 
-for ac_func in gettimeofday select strerror strtod strtol isatty vasprintf swab sigrelse getpwuid memalign posix_memalign gethostbyname2
+for ac_func in gettimeofday select strerror strtod strtol isatty vasprintf swab sigrelse getpwuid memalign posix_memalign gethostbyname2 atoll
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3295: checking for $ac_func" >&5
+echo "configure:3392: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3300 "configure"
+#line 3397 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3319,7 +3416,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3323: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3420: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -3345,12 +3442,12 @@ done
 
 
 echo $ac_n "checking for connect""... $ac_c" 1>&6
-echo "configure:3349: checking for connect" >&5
+echo "configure:3446: checking for connect" >&5
 if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3354 "configure"
+#line 3451 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char connect(); below.  */
@@ -3373,7 +3470,7 @@ connect();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3377: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3474: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_connect=yes"
 else
@@ -3392,7 +3489,7 @@ else
   echo "$ac_t""no" 1>&6
 
   echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6
-echo "configure:3396: checking for connect in -lsocket" >&5
+echo "configure:3493: checking for connect in -lsocket" >&5
 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3400,7 +3497,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3404 "configure"
+#line 3501 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -3411,7 +3508,7 @@ int main() {
 connect()
 ; return 0; }
 EOF
-if { (eval echo configure:3415: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3512: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3436,12 +3533,12 @@ fi
 fi
 
 echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6
-echo "configure:3440: checking for gethostbyname" >&5
+echo "configure:3537: checking for gethostbyname" >&5
 if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3445 "configure"
+#line 3542 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char gethostbyname(); below.  */
@@ -3464,7 +3561,7 @@ gethostbyname();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3468: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3565: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_gethostbyname=yes"
 else
@@ -3483,7 +3580,7 @@ else
   echo "$ac_t""no" 1>&6
 
   echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
-echo "configure:3487: checking for gethostbyname in -lnsl" >&5
+echo "configure:3584: checking for gethostbyname in -lnsl" >&5
 ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3491,7 +3588,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lnsl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3495 "configure"
+#line 3592 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -3502,7 +3599,7 @@ int main() {
 gethostbyname()
 ; return 0; }
 EOF
-if { (eval echo configure:3506: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3603: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3526,12 +3623,12 @@ fi
 fi
 
 echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6
-echo "configure:3530: checking for gethostbyname" >&5
+echo "configure:3627: checking for gethostbyname" >&5
 if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3535 "configure"
+#line 3632 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char gethostbyname(); below.  */
@@ -3554,7 +3651,7 @@ gethostbyname();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3558: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3655: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_gethostbyname=yes"
 else
@@ -3573,7 +3670,7 @@ else
   echo "$ac_t""no" 1>&6
 
   echo $ac_n "checking for gethostbyname in -lbind""... $ac_c" 1>&6
-echo "configure:3577: checking for gethostbyname in -lbind" >&5
+echo "configure:3674: checking for gethostbyname in -lbind" >&5
 ac_lib_var=`echo bind'_'gethostbyname | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3581,7 +3678,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lbind  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3585 "configure"
+#line 3682 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -3592,7 +3689,7 @@ int main() {
 gethostbyname()
 ; return 0; }
 EOF
-if { (eval echo configure:3596: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3693: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3615,60 +3712,56 @@ fi
 
 fi
 
-for ac_func in nanosleep
-do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3622: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+have_nanosleep=0
+echo $ac_n "checking for nanosleep""... $ac_c" 1>&6
+echo "configure:3718: checking for nanosleep" >&5
+if eval "test \"`echo '$''{'ac_cv_func_nanosleep'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3627 "configure"
+#line 3723 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func(); below.  */
+    which can conflict with char nanosleep(); below.  */
 #include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
     builtin and then its argument prototype would still apply.  */
-char $ac_func();
+char nanosleep();
 
 int main() {
 
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+#if defined (__stub_nanosleep) || defined (__stub___nanosleep)
 choke me
 #else
-$ac_func();
+nanosleep();
 #endif
 
 ; return 0; }
 EOF
-if { (eval echo configure:3650: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3746: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
-  eval "ac_cv_func_$ac_func=yes"
+  eval "ac_cv_func_nanosleep=yes"
 else
   echo "configure: failed program was:" >&5
   cat conftest.$ac_ext >&5
   rm -rf conftest*
-  eval "ac_cv_func_$ac_func=no"
+  eval "ac_cv_func_nanosleep=no"
 fi
 rm -f conftest*
 fi
 
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+if eval "test \"`echo '$ac_cv_func_'nanosleep`\" = yes"; then
   echo "$ac_t""yes" 1>&6
-    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-  cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
+  have_nanosleep=1
 else
   echo "$ac_t""no" 1>&6
-echo $ac_n "checking for nanosleep in -lrt""... $ac_c" 1>&6
-echo "configure:3672: checking for nanosleep in -lrt" >&5
+
+  echo $ac_n "checking for nanosleep in -lrt""... $ac_c" 1>&6
+echo "configure:3765: checking for nanosleep in -lrt" >&5
 ac_lib_var=`echo rt'_'nanosleep | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3676,7 +3769,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lrt  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3680 "configure"
+#line 3773 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -3687,7 +3780,7 @@ int main() {
 nanosleep()
 ; return 0; }
 EOF
-if { (eval echo configure:3691: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3784: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3702,11 +3795,11 @@ LIBS="$ac_save_LIBS"
 fi
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
-  vlc_LDFLAGS="${vlc_LDFLAGS} -lrt"
+  vlc_LDFLAGS="${vlc_LDFLAGS} -lrt"; have_nanosleep=1
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for nanosleep in -lposix4""... $ac_c" 1>&6
-echo "configure:3710: checking for nanosleep in -lposix4" >&5
+echo "configure:3803: checking for nanosleep in -lposix4" >&5
 ac_lib_var=`echo posix4'_'nanosleep | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3714,7 +3807,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lposix4  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3718 "configure"
+#line 3811 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -3725,7 +3818,7 @@ int main() {
 nanosleep()
 ; return 0; }
 EOF
-if { (eval echo configure:3729: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3822: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3740,7 +3833,7 @@ LIBS="$ac_save_LIBS"
 fi
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
-  vlc_LDFLAGS="${vlc_LDFLAGS} -lposix4"
+  vlc_LDFLAGS="${vlc_LDFLAGS} -lposix4"; have_nanosleep=1
 else
   echo "$ac_t""no" 1>&6
 fi
@@ -3750,15 +3843,20 @@ fi
 
 
 fi
-done
 
+if test x$have_nanosleep = x1; then
+  cat >> confdefs.h <<\EOF
+#define HAVE_NANOSLEEP 1
+EOF
+
+fi
 echo $ac_n "checking for inet_aton""... $ac_c" 1>&6
-echo "configure:3757: checking for inet_aton" >&5
+echo "configure:3855: checking for inet_aton" >&5
 if eval "test \"`echo '$''{'ac_cv_func_inet_aton'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3762 "configure"
+#line 3860 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char inet_aton(); below.  */
@@ -3781,7 +3879,7 @@ inet_aton();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3785: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3883: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_inet_aton=yes"
 else
@@ -3800,7 +3898,7 @@ else
   echo "$ac_t""no" 1>&6
 
   echo $ac_n "checking for inet_aton in -lresolv""... $ac_c" 1>&6
-echo "configure:3804: checking for inet_aton in -lresolv" >&5
+echo "configure:3902: checking for inet_aton in -lresolv" >&5
 ac_lib_var=`echo resolv'_'inet_aton | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3808,7 +3906,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lresolv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3812 "configure"
+#line 3910 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -3819,7 +3917,7 @@ int main() {
 inet_aton()
 ; return 0; }
 EOF
-if { (eval echo configure:3823: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3921: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3843,12 +3941,12 @@ fi
 fi
 
 echo $ac_n "checking for textdomain""... $ac_c" 1>&6
-echo "configure:3847: checking for textdomain" >&5
+echo "configure:3945: checking for textdomain" >&5
 if eval "test \"`echo '$''{'ac_cv_func_textdomain'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3852 "configure"
+#line 3950 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char textdomain(); below.  */
@@ -3871,7 +3969,7 @@ textdomain();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3875: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3973: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_textdomain=yes"
 else
@@ -3890,7 +3988,7 @@ else
   echo "$ac_t""no" 1>&6
 
   echo $ac_n "checking for textdomain in -lintl""... $ac_c" 1>&6
-echo "configure:3894: checking for textdomain in -lintl" >&5
+echo "configure:3992: checking for textdomain in -lintl" >&5
 ac_lib_var=`echo intl'_'textdomain | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3898,7 +3996,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lintl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3902 "configure"
+#line 4000 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -3909,7 +4007,7 @@ int main() {
 textdomain()
 ; return 0; }
 EOF
-if { (eval echo configure:3913: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4011: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3935,12 +4033,12 @@ fi
 
 NEED_GETOPT=0
 echo $ac_n "checking for getopt_long""... $ac_c" 1>&6
-echo "configure:3939: checking for getopt_long" >&5
+echo "configure:4037: checking for getopt_long" >&5
 if eval "test \"`echo '$''{'ac_cv_func_getopt_long'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3944 "configure"
+#line 4042 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char getopt_long(); below.  */
@@ -3963,7 +4061,7 @@ getopt_long();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3967: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4065: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_getopt_long=yes"
 else
@@ -3985,7 +4083,7 @@ else
   echo "$ac_t""no" 1>&6
  # FreeBSD has a gnugetopt library for this:
   echo $ac_n "checking for getopt_long in -lgnugetopt""... $ac_c" 1>&6
-echo "configure:3989: checking for getopt_long in -lgnugetopt" >&5
+echo "configure:4087: checking for getopt_long in -lgnugetopt" >&5
 ac_lib_var=`echo gnugetopt'_'getopt_long | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3993,7 +4091,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgnugetopt  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3997 "configure"
+#line 4095 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4004,7 +4102,7 @@ int main() {
 getopt_long()
 ; return 0; }
 EOF
-if { (eval echo configure:4008: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4106: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4032,12 +4130,12 @@ fi
 
 
 echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
-echo "configure:4036: checking return type of signal handlers" >&5
+echo "configure:4134: checking return type of signal handlers" >&5
 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4041 "configure"
+#line 4139 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
@@ -4054,7 +4152,7 @@ int main() {
 int i;
 ; return 0; }
 EOF
-if { (eval echo configure:4058: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4156: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_type_signal=void
 else
@@ -4073,7 +4171,7 @@ EOF
 
 
 echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "configure:4077: checking for dlopen in -ldl" >&5
+echo "configure:4175: checking for dlopen in -ldl" >&5
 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4081,7 +4179,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4085 "configure"
+#line 4183 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4092,7 +4190,7 @@ int main() {
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:4096: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4194: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4113,7 +4211,7 @@ else
 fi
 
 echo $ac_n "checking for cos in -lm""... $ac_c" 1>&6
-echo "configure:4117: checking for cos in -lm" >&5
+echo "configure:4215: checking for cos in -lm" >&5
 ac_lib_var=`echo m'_'cos | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4121,7 +4219,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lm  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4125 "configure"
+#line 4223 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4132,7 +4230,7 @@ int main() {
 cos()
 ; return 0; }
 EOF
-if { (eval echo configure:4136: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4234: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4154,7 +4252,7 @@ else
 fi
 
 echo $ac_n "checking for pow in -lm""... $ac_c" 1>&6
-echo "configure:4158: checking for pow in -lm" >&5
+echo "configure:4256: checking for pow in -lm" >&5
 ac_lib_var=`echo m'_'pow | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4162,7 +4260,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lm  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4166 "configure"
+#line 4264 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4173,7 +4271,7 @@ int main() {
 pow()
 ; return 0; }
 EOF
-if { (eval echo configure:4177: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4275: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4201,7 +4299,7 @@ fi
 THREAD_LIB=error
 if test "x${THREAD_LIB}" = xerror; then
   echo $ac_n "checking for pthread_attr_init in -lpthread""... $ac_c" 1>&6
-echo "configure:4205: checking for pthread_attr_init in -lpthread" >&5
+echo "configure:4303: checking for pthread_attr_init in -lpthread" >&5
 ac_lib_var=`echo pthread'_'pthread_attr_init | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4209,7 +4307,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpthread  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4213 "configure"
+#line 4311 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4220,7 +4318,7 @@ int main() {
 pthread_attr_init()
 ; return 0; }
 EOF
-if { (eval echo configure:4224: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4322: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4243,7 +4341,7 @@ fi
 fi
 if test "x${THREAD_LIB}" = xerror; then
   echo $ac_n "checking for pthread_attr_init in -lpthreads""... $ac_c" 1>&6
-echo "configure:4247: checking for pthread_attr_init in -lpthreads" >&5
+echo "configure:4345: checking for pthread_attr_init in -lpthreads" >&5
 ac_lib_var=`echo pthreads'_'pthread_attr_init | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4251,7 +4349,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpthreads  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4255 "configure"
+#line 4353 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4262,7 +4360,7 @@ int main() {
 pthread_attr_init()
 ; return 0; }
 EOF
-if { (eval echo configure:4266: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4364: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4285,7 +4383,7 @@ fi
 fi
 if test "x${THREAD_LIB}" = xerror; then
   echo $ac_n "checking for pthread_attr_init in -lc_r""... $ac_c" 1>&6
-echo "configure:4289: checking for pthread_attr_init in -lc_r" >&5
+echo "configure:4387: checking for pthread_attr_init in -lc_r" >&5
 ac_lib_var=`echo c_r'_'pthread_attr_init | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4293,7 +4391,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lc_r  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4297 "configure"
+#line 4395 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4304,7 +4402,7 @@ int main() {
 pthread_attr_init()
 ; return 0; }
 EOF
-if { (eval echo configure:4308: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4406: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4327,12 +4425,12 @@ fi
 fi
 if test "x${THREAD_LIB}" = xerror; then
   echo $ac_n "checking for pthread_attr_init""... $ac_c" 1>&6
-echo "configure:4331: checking for pthread_attr_init" >&5
+echo "configure:4429: checking for pthread_attr_init" >&5
 if eval "test \"`echo '$''{'ac_cv_func_pthread_attr_init'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4336 "configure"
+#line 4434 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char pthread_attr_init(); below.  */
@@ -4355,7 +4453,7 @@ pthread_attr_init();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4359: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4457: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_pthread_attr_init=yes"
 else
@@ -4378,7 +4476,7 @@ fi
 fi
 
 echo $ac_n "checking for cthread_fork in -lthreads""... $ac_c" 1>&6
-echo "configure:4382: checking for cthread_fork in -lthreads" >&5
+echo "configure:4480: checking for cthread_fork in -lthreads" >&5
 ac_lib_var=`echo threads'_'cthread_fork | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4386,7 +4484,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lthreads  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4390 "configure"
+#line 4488 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4397,7 +4495,7 @@ int main() {
 cthread_fork()
 ; return 0; }
 EOF
-if { (eval echo configure:4401: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4499: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4419,7 +4517,7 @@ fi
 
 
 cat > conftest.$ac_ext <<EOF
-#line 4423 "configure"
+#line 4521 "configure"
 #include "confdefs.h"
 #include <pthread.h>
 EOF
@@ -4435,7 +4533,7 @@ fi
 rm -f conftest*
 
 cat > conftest.$ac_ext <<EOF
-#line 4439 "configure"
+#line 4537 "configure"
 #include "confdefs.h"
 #include <strings.h>
 EOF
@@ -4451,21 +4549,21 @@ fi
 rm -f conftest*
 
 
-for ac_hdr in getopt.h strings.h
+for ac_hdr in stdint.h getopt.h strings.h inttypes.h sys/int_types.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4459: checking for $ac_hdr" >&5
+echo "configure:4557: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4464 "configure"
+#line 4562 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4469: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4567: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4495,17 +4593,17 @@ for ac_hdr in sys/sockio.h fcntl.h sys/types.h sys/time.h sys/times.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4499: checking for $ac_hdr" >&5
+echo "configure:4597: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4504 "configure"
+#line 4602 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4509: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4607: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4535,17 +4633,17 @@ for ac_hdr in dlfcn.h image.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4539: checking for $ac_hdr" >&5
+echo "configure:4637: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4544 "configure"
+#line 4642 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4549: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4647: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4575,17 +4673,17 @@ for ac_hdr in arpa/inet.h net/if.h netinet/in.h sys/socket.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4579: checking for $ac_hdr" >&5
+echo "configure:4677: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4584 "configure"
+#line 4682 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4589: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4687: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4615,17 +4713,17 @@ for ac_hdr in machine/param.h sys/shm.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4619: checking for $ac_hdr" >&5
+echo "configure:4717: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4624 "configure"
+#line 4722 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4629: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4727: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4655,17 +4753,17 @@ for ac_hdr in linux/version.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4659: checking for $ac_hdr" >&5
+echo "configure:4757: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4664 "configure"
+#line 4762 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4669: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4767: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4693,12 +4791,12 @@ done
 
 
 echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-echo "configure:4697: checking whether time.h and sys/time.h may both be included" >&5
+echo "configure:4795: checking whether time.h and sys/time.h may both be included" >&5
 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4702 "configure"
+#line 4800 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/time.h>
@@ -4707,7 +4805,7 @@ int main() {
 struct tm *tp;
 ; return 0; }
 EOF
-if { (eval echo configure:4711: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4809: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_time=yes
 else
@@ -4729,7 +4827,7 @@ fi
 
 
 cat > conftest.$ac_ext <<EOF
-#line 4733 "configure"
+#line 4831 "configure"
 #include "confdefs.h"
 #include <time.h>
 EOF
@@ -4747,7 +4845,7 @@ rm -f conftest*
 
 
 cat > conftest.$ac_ext <<EOF
-#line 4751 "configure"
+#line 4849 "configure"
 #include "confdefs.h"
 #include <sys/time.h>
 EOF
@@ -4768,17 +4866,17 @@ for ac_hdr in cthreads.h pthread.h kernel/scheduler.h kernel/OS.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4772: checking for $ac_hdr" >&5
+echo "configure:4870: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4777 "configure"
+#line 4875 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4782: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4880: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4818,17 +4916,17 @@ then
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4822: checking for $ac_hdr" >&5
+echo "configure:4920: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4827 "configure"
+#line 4925 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4832: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4930: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4850,7 +4948,7 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
 EOF
  
     cat > conftest.$ac_ext <<EOF
-#line 4854 "configure"
+#line 4952 "configure"
 #include "confdefs.h"
 #include <X11/extensions/dpms.h>
 EOF
@@ -4876,20 +4974,20 @@ done
 fi
 
 echo $ac_n "checking for ntohl in sys/param.h""... $ac_c" 1>&6
-echo "configure:4880: checking for ntohl in sys/param.h" >&5
+echo "configure:4978: checking for ntohl in sys/param.h" >&5
 if eval "test \"`echo '$''{'ac_cv_c_ntohl_sys_param_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   CFLAGS="${save_CFLAGS} -Wall -Werror"
      cat > conftest.$ac_ext <<EOF
-#line 4886 "configure"
+#line 4984 "configure"
 #include "confdefs.h"
 #include <sys/param.h>
 int main() {
 void foo() { int meuh; ntohl(meuh); }
 ; return 0; }
 EOF
-if { (eval echo configure:4893: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4991: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_ntohl_sys_param_h=yes
 else
@@ -4910,20 +5008,20 @@ EOF
 fi
 
 echo $ac_n "checking if \$CC accepts -finline-limit""... $ac_c" 1>&6
-echo "configure:4914: checking if \$CC accepts -finline-limit" >&5
+echo "configure:5012: checking if \$CC accepts -finline-limit" >&5
 if eval "test \"`echo '$''{'ac_cv_c_inline_limit'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   CFLAGS="${save_CFLAGS} -finline-limit-30000"
      cat > conftest.$ac_ext <<EOF
-#line 4920 "configure"
+#line 5018 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:4927: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5025: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_inline_limit=yes
 else
@@ -4941,20 +5039,20 @@ if test x"$ac_cv_c_inline_limit" != x"no"; then
 fi
 
 echo $ac_n "checking if \$CC accepts -Wall -Winline""... $ac_c" 1>&6
-echo "configure:4945: checking if \$CC accepts -Wall -Winline" >&5
+echo "configure:5043: checking if \$CC accepts -Wall -Winline" >&5
 if eval "test \"`echo '$''{'ac_cv_c_Wall_Winline'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   CFLAGS="${save_CFLAGS} -Wall -Winline"
      cat > conftest.$ac_ext <<EOF
-#line 4951 "configure"
+#line 5049 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:4958: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5056: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_Wall_Winline=yes
 else
@@ -4971,20 +5069,20 @@ if test x"$ac_cv_c_Wall_Winline" != x"no"; then
     save_CFLAGS="${save_CFLAGS} -Wall -Winline"
 else
     echo $ac_n "checking if \$CC accepts -wall -winline""... $ac_c" 1>&6
-echo "configure:4975: checking if \$CC accepts -wall -winline" >&5
+echo "configure:5073: checking if \$CC accepts -wall -winline" >&5
 if eval "test \"`echo '$''{'ac_cv_c_wall_winline'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   CFLAGS="${save_CFLAGS} -wall -winline"
          cat > conftest.$ac_ext <<EOF
-#line 4981 "configure"
+#line 5079 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:4988: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5086: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_wall_winline=yes
 else
@@ -5003,20 +5101,20 @@ echo "$ac_t""$ac_cv_c_wall_winline" 1>&6
 fi
 
 echo $ac_n "checking if \$CC accepts -pipe""... $ac_c" 1>&6
-echo "configure:5007: checking if \$CC accepts -pipe" >&5
+echo "configure:5105: checking if \$CC accepts -pipe" >&5
 if eval "test \"`echo '$''{'ac_cv_c_pipe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   CFLAGS="${save_CFLAGS} -pipe"
      cat > conftest.$ac_ext <<EOF
-#line 5013 "configure"
+#line 5111 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:5020: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5118: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_pipe=yes
 else
@@ -5034,20 +5132,20 @@ if test x"$ac_cv_c_pipe" != x"no"; then
 fi
 
 echo $ac_n "checking if \$CC accepts -O3""... $ac_c" 1>&6
-echo "configure:5038: checking if \$CC accepts -O3" >&5
+echo "configure:5136: checking if \$CC accepts -O3" >&5
 if eval "test \"`echo '$''{'ac_cv_c_o3'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   CFLAGS="${save_CFLAGS} -O3"
      cat > conftest.$ac_ext <<EOF
-#line 5044 "configure"
+#line 5142 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:5051: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5149: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_o3=yes
 else
@@ -5064,20 +5162,20 @@ if test x"$ac_cv_c_o3" != x"no"; then
     CFLAGS_OPTIM="${CFLAGS_OPTIM} -O3"
 else
     echo $ac_n "checking if \$CC accepts -O2""... $ac_c" 1>&6
-echo "configure:5068: checking if \$CC accepts -O2" >&5
+echo "configure:5166: checking if \$CC accepts -O2" >&5
 if eval "test \"`echo '$''{'ac_cv_c_o2'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   CFLAGS="${save_CFLAGS} -O2"
          cat > conftest.$ac_ext <<EOF
-#line 5074 "configure"
+#line 5172 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:5081: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5179: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_o2=yes
 else
@@ -5094,20 +5192,20 @@ echo "$ac_t""$ac_cv_c_o2" 1>&6
         CFLAGS_OPTIM="${CFLAGS_OPTIM} -O2"
     else
         echo $ac_n "checking if \$CC accepts -O""... $ac_c" 1>&6
-echo "configure:5098: checking if \$CC accepts -O" >&5
+echo "configure:5196: checking if \$CC accepts -O" >&5
 if eval "test \"`echo '$''{'ac_cv_c_o'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   CFLAGS="${save_CFLAGS} -O"
              cat > conftest.$ac_ext <<EOF
-#line 5104 "configure"
+#line 5202 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:5111: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5209: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_o=yes
 else
@@ -5127,20 +5225,20 @@ echo "$ac_t""$ac_cv_c_o" 1>&6
 fi
 
 echo $ac_n "checking if \$CC accepts -ffast-math""... $ac_c" 1>&6
-echo "configure:5131: checking if \$CC accepts -ffast-math" >&5
+echo "configure:5229: checking if \$CC accepts -ffast-math" >&5
 if eval "test \"`echo '$''{'ac_cv_c_fast_math'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   CFLAGS="${save_CFLAGS} -ffast-math"
      cat > conftest.$ac_ext <<EOF
-#line 5137 "configure"
+#line 5235 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:5144: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5242: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_fast_math=yes
 else
@@ -5158,20 +5256,20 @@ if test x"$ac_cv_c_fast_math" != x"no"; then
 fi
 
 echo $ac_n "checking if \$CC accepts -funroll-loops""... $ac_c" 1>&6
-echo "configure:5162: checking if \$CC accepts -funroll-loops" >&5
+echo "configure:5260: checking if \$CC accepts -funroll-loops" >&5
 if eval "test \"`echo '$''{'ac_cv_c_unroll_loops'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   CFLAGS="${save_CFLAGS} -funroll-loops"
      cat > conftest.$ac_ext <<EOF
-#line 5168 "configure"
+#line 5266 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:5175: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5273: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_unroll_loops=yes
 else
@@ -5189,20 +5287,20 @@ if test x"$ac_cv_c_unroll_loops" != x"no"; then
 fi
 
 echo $ac_n "checking if \$CC accepts -fomit-frame-pointer""... $ac_c" 1>&6
-echo "configure:5193: checking if \$CC accepts -fomit-frame-pointer" >&5
+echo "configure:5291: checking if \$CC accepts -fomit-frame-pointer" >&5
 if eval "test \"`echo '$''{'ac_cv_c_omit_frame_pointer'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   CFLAGS="${save_CFLAGS} -fomit-frame-pointer"
      cat > conftest.$ac_ext <<EOF
-#line 5199 "configure"
+#line 5297 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:5206: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5304: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_omit_frame_pointer=yes
 else
@@ -5219,21 +5317,59 @@ if test x"$ac_cv_c_omit_frame_pointer" != x"no"; then
     CFLAGS_OPTIM_NODEBUG="${CFLAGS_OPTIM_NODEBUG} -fomit-frame-pointer"
 fi
 
+if test x$SYS = xmingw32
+then
+    echo $ac_n "checking if \$CC accepts -mms-bitfields""... $ac_c" 1>&6
+echo "configure:5324: checking if \$CC accepts -mms-bitfields" >&5
+if eval "test \"`echo '$''{'ac_cv_c_mms_bitfields'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  CFLAGS="${save_CFLAGS} -mms-bitfields"
+         cat > conftest.$ac_ext <<EOF
+#line 5330 "configure"
+#include "confdefs.h"
+
+int main() {
+
+; return 0; }
+EOF
+if { (eval echo configure:5337: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  ac_cv_c_mms_bitfields=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_c_mms_bitfields=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_c_mms_bitfields" 1>&6
+    if test x"$ac_cv_c_mms_bitfields" != x"no"; then
+        save_CFLAGS="${save_CFLAGS} -mms-bitfields"
+        plugins_CFLAGS="${plugins_CFLAGS} -mms-bitfields"
+    else
+        save_CFLAGS="${save_CFLAGS} -fnative-struct"
+        plugins_CFLAGS="${plugins_CFLAGS} -fnative-struct"
+    fi
+fi
+
 echo $ac_n "checking if \$CC accepts -bundle -undefined error -lcc_dynamic""... $ac_c" 1>&6
-echo "configure:5224: checking if \$CC accepts -bundle -undefined error -lcc_dynamic" >&5
+echo "configure:5360: checking if \$CC accepts -bundle -undefined error -lcc_dynamic" >&5
 if eval "test \"`echo '$''{'ac_cv_ld_darwin'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   CFLAGS="${save_CFLAGS} -bundle -undefined error -lcc_dynamic"
      cat > conftest.$ac_ext <<EOF
-#line 5230 "configure"
+#line 5366 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:5237: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5373: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_ld_darwin=yes
 else
@@ -5251,20 +5387,20 @@ if test x"$ac_cv_ld_darwin" != x"no"; then
 fi
 
 echo $ac_n "checking if \$CC accepts -shared""... $ac_c" 1>&6
-echo "configure:5255: checking if \$CC accepts -shared" >&5
+echo "configure:5391: checking if \$CC accepts -shared" >&5
 if eval "test \"`echo '$''{'ac_cv_ld_plugins'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   CFLAGS="${save_CFLAGS} -shared"
      cat > conftest.$ac_ext <<EOF
-#line 5261 "configure"
+#line 5397 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:5268: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5404: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_ld_plugins=yes
 else
@@ -5282,13 +5418,13 @@ if test x"$ac_cv_ld_plugins" != x"no"; then
 fi
         
 echo $ac_n "checking for variadic cpp macros""... $ac_c" 1>&6
-echo "configure:5286: checking for variadic cpp macros" >&5
+echo "configure:5422: checking for variadic cpp macros" >&5
 if eval "test \"`echo '$''{'ac_cv_cpp_variadic_macros'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   CFLAGS="${save_CFLAGS}"
      cat > conftest.$ac_ext <<EOF
-#line 5292 "configure"
+#line 5428 "configure"
 #include "confdefs.h"
 #include <stdio.h>
           #define a(b,c...) printf(b,##c)
@@ -5296,7 +5432,7 @@ int main() {
 a("foo");a("%s","bar");a("%s%s","baz","quux");
 ; return 0; }
 EOF
-if { (eval echo configure:5300: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5436: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_cpp_variadic_macros=yes
 else
@@ -5317,7 +5453,7 @@ EOF
 fi
 
 echo $ac_n "checking __attribute__ ((aligned ())) support""... $ac_c" 1>&6
-echo "configure:5321: checking __attribute__ ((aligned ())) support" >&5
+echo "configure:5457: checking __attribute__ ((aligned ())) support" >&5
 if eval "test \"`echo '$''{'ac_cv_c_attribute_aligned'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5325,14 +5461,14 @@ else
         CFLAGS="${save_CFLAGS} -Werror"
     for ac_cv_c_attr_align_try in 2 4 8 16 32 64; do
         cat > conftest.$ac_ext <<EOF
-#line 5329 "configure"
+#line 5465 "configure"
 #include "confdefs.h"
 
 int main() {
 static char c __attribute__ ((aligned($ac_cv_c_attr_align_try))) = 0; return c;
 ; return 0; }
 EOF
-if { (eval echo configure:5336: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5472: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_attribute_aligned=$ac_cv_c_attr_align_try
 else
@@ -5356,19 +5492,19 @@ CPPFLAGS="${save_CPPFLAGS}"
 LDFLAGS="${save_LDFLAGS}"
 
 echo $ac_n "checking for boolean_t in sys/types.h""... $ac_c" 1>&6
-echo "configure:5360: checking for boolean_t in sys/types.h" >&5
+echo "configure:5496: checking for boolean_t in sys/types.h" >&5
 if eval "test \"`echo '$''{'ac_cv_c_boolean_t_sys_types_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5365 "configure"
+#line 5501 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 int main() {
 boolean_t foo;
 ; return 0; }
 EOF
-if { (eval echo configure:5372: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5508: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_boolean_t_sys_types_h=yes
 else
@@ -5389,19 +5525,19 @@ EOF
 fi
 
 echo $ac_n "checking for boolean_t in pthread.h""... $ac_c" 1>&6
-echo "configure:5393: checking for boolean_t in pthread.h" >&5
+echo "configure:5529: checking for boolean_t in pthread.h" >&5
 if eval "test \"`echo '$''{'ac_cv_c_boolean_t_pthread_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5398 "configure"
+#line 5534 "configure"
 #include "confdefs.h"
 #include <pthread.h>
 int main() {
 boolean_t foo;
 ; return 0; }
 EOF
-if { (eval echo configure:5405: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5541: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_boolean_t_pthread_h=yes
 else
@@ -5422,19 +5558,19 @@ EOF
 fi
 
 echo $ac_n "checking for boolean_t in cthreads.h""... $ac_c" 1>&6
-echo "configure:5426: checking for boolean_t in cthreads.h" >&5
+echo "configure:5562: checking for boolean_t in cthreads.h" >&5
 if eval "test \"`echo '$''{'ac_cv_c_boolean_t_cthreads_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5431 "configure"
+#line 5567 "configure"
 #include "confdefs.h"
 #include <cthreads.h>
 int main() {
 boolean_t foo;
 ; return 0; }
 EOF
-if { (eval echo configure:5438: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5574: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_boolean_t_cthreads_h=yes
 else
@@ -5464,7 +5600,9 @@ case x"${target_cpu}" in
 esac
 
 BUILTINS="${BUILTINS} idct idctclassic motion imdct downmix chroma_i420_rgb chroma_i420_yuy2 chroma_i422_yuy2 chroma_i420_ymga mpeg_adec ac3_adec mpeg_vdec"
-PLUGINS="${PLUGINS} dummy null rc logger mpeg_es mpeg_ps mpeg_ts mpeg_audio file udp http ipv4 memcpy lpcm_adec ac3_spdif spudec filter_deinterlace filter_invert filter_wall filter_transform filter_distort filter_clone fx_scope"
+PLUGINS="${PLUGINS} dummy null rc logger mpeg_es mpeg_ps mpeg_ts mpeg_audio file memcpy lpcm_adec ac3_spdif spudec filter_deinterlace filter_invert filter_wall filter_transform filter_distort filter_clone filter_crop fx_scope"
+
+NETWORK_MODULES="udp http rtp ipv4"
 
 MMX_MODULES="memcpymmx idctmmx motionmmx chroma_i420_rgb_mmx chroma_i420_yuy2_mmx chroma_i422_yuy2_mmx chroma_i420_ymga_mmx"
 MMXEXT_MODULES="memcpymmxext idctmmxext motionmmxext"
@@ -5472,20 +5610,25 @@ THREEDNOW_MODULES="memcpy3dn imdct3dn downmix3dn"
 SSE_MODULES="imdctsse downmixsse"
 ALTIVEC_MODULES="idctaltivec motionaltivec memcpyaltivec"
 
+if test x$SYS != xbeos
+then
+    PLUGINS="${PLUGINS} ${NETWORK_MODULES}"
+fi
+
 echo $ac_n "checking if \$CC groks MMX inline assembly""... $ac_c" 1>&6
-echo "configure:5477: checking if \$CC groks MMX inline assembly" >&5
+echo "configure:5620: checking if \$CC groks MMX inline assembly" >&5
 if eval "test \"`echo '$''{'ac_cv_mmx_inline'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5482 "configure"
+#line 5625 "configure"
 #include "confdefs.h"
 
 int main() {
 void *p;asm volatile("packuswb %%mm1,%%mm2"::"r"(p));
 ; return 0; }
 EOF
-if { (eval echo configure:5489: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5632: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_mmx_inline=yes
 else
@@ -5503,19 +5646,19 @@ if test x"$ac_cv_mmx_inline" != x"no"; then
 fi
 
 echo $ac_n "checking if \$CC groks MMX EXT inline assembly""... $ac_c" 1>&6
-echo "configure:5507: checking if \$CC groks MMX EXT inline assembly" >&5
+echo "configure:5650: checking if \$CC groks MMX EXT inline assembly" >&5
 if eval "test \"`echo '$''{'ac_cv_mmxext_inline'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5512 "configure"
+#line 5655 "configure"
 #include "confdefs.h"
 
 int main() {
 void *p;asm volatile("maskmovq %%mm1,%%mm2"::"r"(p));
 ; return 0; }
 EOF
-if { (eval echo configure:5519: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5662: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_mmxext_inline=yes
 else
@@ -5533,19 +5676,19 @@ if test x"$ac_cv_mmxext_inline" != x"no"; then
 fi
 
 echo $ac_n "checking if \$CC groks 3D Now! inline assembly""... $ac_c" 1>&6
-echo "configure:5537: checking if \$CC groks 3D Now! inline assembly" >&5
+echo "configure:5680: checking if \$CC groks 3D Now! inline assembly" >&5
 if eval "test \"`echo '$''{'ac_cv_3dnow_inline'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5542 "configure"
+#line 5685 "configure"
 #include "confdefs.h"
 
 int main() {
 void *p;asm volatile("pfadd %%mm1,%%mm2"::"r"(p));
 ; return 0; }
 EOF
-if { (eval echo configure:5549: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5692: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_3dnow_inline=yes
 else
@@ -5567,19 +5710,19 @@ EOF
 fi
 
 echo $ac_n "checking if \$CC groks SSE inline assembly""... $ac_c" 1>&6
-echo "configure:5571: checking if \$CC groks SSE inline assembly" >&5
+echo "configure:5714: checking if \$CC groks SSE inline assembly" >&5
 if eval "test \"`echo '$''{'ac_cv_sse_inline'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5576 "configure"
+#line 5719 "configure"
 #include "confdefs.h"
 
 int main() {
 void *p;asm volatile("xorps %%xmm1,%%xmm2"::"r"(p));
 ; return 0; }
 EOF
-if { (eval echo configure:5583: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5726: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_sse_inline=yes
 else
@@ -5604,19 +5747,19 @@ fi
 # we should be able to remove this test with future versions of mingw32
 if test x$SYS != xmingw32; then
 echo $ac_n "checking if \$CC groks Altivec inline assembly""... $ac_c" 1>&6
-echo "configure:5608: checking if \$CC groks Altivec inline assembly" >&5
+echo "configure:5751: checking if \$CC groks Altivec inline assembly" >&5
 if eval "test \"`echo '$''{'ac_cv_altivec_inline'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5613 "configure"
+#line 5756 "configure"
 #include "confdefs.h"
 
 int main() {
 asm volatile("vperm 0,1,2,3");
 ; return 0; }
 EOF
-if { (eval echo configure:5620: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5763: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_altivec_inline=yes
 else
@@ -5626,14 +5769,14 @@ else
   save_CFLAGS=$CFLAGS
           CFLAGS="$CFLAGS -Wa,-m7400"
           cat > conftest.$ac_ext <<EOF
-#line 5630 "configure"
+#line 5773 "configure"
 #include "confdefs.h"
 
 int main() {
 asm volatile("vperm 0,1,2,3");
 ; return 0; }
 EOF
-if { (eval echo configure:5637: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5780: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_altivec_inline="-Wa,-m7400"
 else
@@ -5665,7 +5808,7 @@ EOF
 fi
 
 echo $ac_n "checking if \$CC groks Altivec C extensions""... $ac_c" 1>&6
-echo "configure:5669: checking if \$CC groks Altivec C extensions" >&5
+echo "configure:5812: checking if \$CC groks Altivec C extensions" >&5
 if eval "test \"`echo '$''{'ac_cv_c_altivec'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5673,14 +5816,14 @@ else
      CFLAGS="$CFLAGS -faltivec"
      # Darwin test
      cat > conftest.$ac_ext <<EOF
-#line 5677 "configure"
+#line 5820 "configure"
 #include "confdefs.h"
 
 int main() {
 vec_mtvscr((vector unsigned int)(0));
 ; return 0; }
 EOF
-if { (eval echo configure:5684: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5827: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_altivec=-faltivec
 else
@@ -5691,14 +5834,14 @@ else
         # Linux/PPC test
         CFLAGS="$save_CFLAGS $idctaltivec_CFLAGS -fvec"
         cat > conftest.$ac_ext <<EOF
-#line 5695 "configure"
+#line 5838 "configure"
 #include "confdefs.h"
 
 int main() {
 vec_mtvscr((vector unsigned int)(0));
 ; return 0; }
 EOF
-if { (eval echo configure:5702: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5845: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_altivec="-fvec"
 else
@@ -5729,21 +5872,21 @@ EOF
 fi
 
 echo $ac_n "checking if linker needs -framework vecLib""... $ac_c" 1>&6
-echo "configure:5733: checking if linker needs -framework vecLib" >&5
+echo "configure:5876: checking if linker needs -framework vecLib" >&5
 if eval "test \"`echo '$''{'ac_cv_ld_altivec'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   save_LDFLAGS=$LDFLAGS
      LDFLAGS="$LDFLAGS -framework vecLib"
      cat > conftest.$ac_ext <<EOF
-#line 5740 "configure"
+#line 5883 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:5747: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5890: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_ld_altivec=yes
 else
@@ -5875,17 +6018,17 @@ fi
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5879: checking for $ac_hdr" >&5
+echo "configure:6022: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5884 "configure"
+#line 6027 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5889: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6032: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -5916,7 +6059,7 @@ done
 
     else
       echo $ac_n "checking for libdvdcss.a in ${with_dvdcss_tree}""... $ac_c" 1>&6
-echo "configure:5920: checking for libdvdcss.a in ${with_dvdcss_tree}" >&5
+echo "configure:6063: checking for libdvdcss.a in ${with_dvdcss_tree}" >&5
       real_dvdcss_tree="`cd ${with_dvdcss_tree} 2>/dev/null && pwd`"
       if test "x$real_dvdcss_tree" = x
       then
@@ -5942,7 +6085,7 @@ echo "configure:5920: checking for libdvdcss.a in ${with_dvdcss_tree}" >&5
   ;;
   *)
     echo $ac_n "checking for dvdcss headers in ${with_dvdcss}""... $ac_c" 1>&6
-echo "configure:5946: checking for dvdcss headers in ${with_dvdcss}" >&5
+echo "configure:6089: checking for dvdcss headers in ${with_dvdcss}" >&5
     if test -f ${with_dvdcss}/include/dvdcss/dvdcss.h
     then
             echo "$ac_t""yes" 1>&6
@@ -5984,17 +6127,17 @@ fi
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5988: checking for $ac_hdr" >&5
+echo "configure:6131: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5993 "configure"
+#line 6136 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5998: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6141: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -6016,14 +6159,14 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
 EOF
  
      cat > conftest.$ac_ext <<EOF
-#line 6020 "configure"
+#line 6163 "configure"
 #include "confdefs.h"
 #include <dvdread/dvd_reader.h>
 int main() {
 void foo() { int i=DVD_VIDEO_LB_LEN; }
 ; return 0; }
 EOF
-if { (eval echo configure:6027: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:6170: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
           PLUGINS="${PLUGINS} dvdread"
@@ -6075,28 +6218,31 @@ if test "${with_dvbpsi+set}" = set; then
   :
 fi
 
-  if test "x$with_dvbpsi" = x
-  then
-    test_LDFLAGS=""
-    test_CFLAGS=""
-  else
-    test_LDFLAGS="-L${with_dvbpsi}/lib"
-    test_CFLAGS="-I${with_dvbpsi}/include"
-  fi
-  CPPFLAGS="$save_CPPFLAGS $test_CFLAGS"
-  ac_safe=`echo "dvbpsi/dr.h" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for dvbpsi/dr.h""... $ac_c" 1>&6
-echo "configure:6090: checking for dvbpsi/dr.h" >&5
+  # Check whether --with-dvbpsi or --without-dvbpsi was given.
+if test "${with_dvbpsi+set}" = set; then
+  withval="$with_dvbpsi"
+  :
+fi
+
+  case "x$with_dvbpsi" in
+  x|xyes)
+    if test "x$with_dvbpsi_tree" = x
+    then
+      for ac_hdr in dvbpsi/dr.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:6236: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6095 "configure"
+#line 6241 "configure"
 #include "confdefs.h"
-#include <dvbpsi/dr.h>
+#include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6100: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6246: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -6112,24 +6258,100 @@ rm -f conftest*
 fi
 if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
-  
-    PLUGINS="${PLUGINS} mpeg_ts_dvbpsi"
-    mpeg_ts_dvbpsi_LDFLAGS="${mpeg_ts_dvbpsi_LDFLAGS} ${test_LDFLAGS} -ldvbpsi"
-    mpeg_ts_dvbpsi_CFLAGS="${mpeg_ts_dvbpsi_CFLAGS} ${test_CFLAGS}"
-    
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+  PLUGINS="${PLUGINS} mpeg_ts_dvbpsi"
+          mpeg_ts_dvbpsi_LDFLAGS="${mpeg_ts_dvbpsi_LDFLAGS} -ldvbpsi" 
 else
   echo "$ac_t""no" 1>&6
+fi
+done
 
-    if test "x$enable_dvbpsi" != x
+    else
+      echo $ac_n "checking for libdvbpsi.a in ${with_dvbpsi_tree}""... $ac_c" 1>&6
+echo "configure:6275: checking for libdvbpsi.a in ${with_dvbpsi_tree}" >&5
+      real_dvbpsi_tree="`cd ${with_dvbpsi_tree} 2>/dev/null && pwd`"
+      if test "x$real_dvbpsi_tree" = x
+      then
+                echo "$ac_t""no" 1>&6
+        { echo "configure: error: cannot cd to ${with_dvbpsi_tree}" 1>&2; exit 1; }
+      fi
+      if test -f "${real_dvbpsi_tree}/src/.libs/libdvbpsi.a"
+      then
+                echo "$ac_t""${real_dvbpsi_tree}/src/.libs/libdvbpsi.a" 1>&6
+        BUILTINS="${BUILTINS} mpeg_ts_dvbpsi"
+        mpeg_ts_dvbpsi_LDFLAGS="${mpeg_ts_dvbpsi_LDFLAGS} ${real_dvbpsi_tree}/src/.libs/libdvbpsi.a"
+        mpeg_ts_dvbpsi_CFLAGS="${mpeg_ts_dvbpsi_CFLAGS} -I${real_dvbpsi_tree}/src"
+      else
+                echo "$ac_t""no" 1>&6
+        { echo "configure: error: cannot find ${real_dvbpsi_tree}/src/.libs/libdvbpsi.a, make sure you compiled libdvbpsi in ${with_dvbpsi_tree}" 1>&2; exit 1; }
+      fi
+    fi
+  ;;
+  xno)
+      ;;
+  *)
+    echo $ac_n "checking for dvbpsi headers in ${with_dvbpsi}""... $ac_c" 1>&6
+echo "configure:6298: checking for dvbpsi headers in ${with_dvbpsi}" >&5
+    if test "x$with_dvbpsi" = x
     then
-      { echo "configure: error: Could not find libdvbpsi on your system: you may get it from www.videolan.org, you'll need at least version 0.1.1" 1>&2; exit 1; }
+      test_LDFLAGS=""
+      test_CFLAGS=""
+    else
+      test_LDFLAGS="-L${with_dvbpsi}/lib"
+      test_CFLAGS="-I${with_dvbpsi}/include"
     fi
+    CPPFLAGS="$save_CPPFLAGS $test_CFLAGS"
+    ac_safe=`echo "dvbpsi/dr.h" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for dvbpsi/dr.h""... $ac_c" 1>&6
+echo "configure:6310: checking for dvbpsi/dr.h" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 6315 "configure"
+#include "confdefs.h"
+#include <dvbpsi/dr.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:6320: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
   
+      PLUGINS="${PLUGINS} mpeg_ts_dvbpsi"
+      mpeg_ts_dvbpsi_LDFLAGS="${mpeg_ts_dvbpsi_LDFLAGS} ${test_LDFLAGS} -ldvbpsi"
+      mpeg_ts_dvbpsi_CFLAGS="${mpeg_ts_dvbpsi_CFLAGS} ${test_CFLAGS}"
+      
+else
+  echo "$ac_t""no" 1>&6
+
+      if test "x$enable_dvbpsi" != x
+      then
+        { echo "configure: error: Could not find libdvbpsi on your system: you may get it from www.videolan.org, you'll need at least version 0.1.1" 1>&2; exit 1; }
+      fi
+    
 fi
 
-  CPPFLAGS="$save_CPPFLAGS"
+    CPPFLAGS="$save_CPPFLAGS"
+  ;;
+  esac
 fi
+
 # Check whether --enable-vcd or --disable-vcd was given.
 if test "${enable_vcd+set}" = set; then
   enableval="$enable_vcd"
@@ -6140,7 +6362,7 @@ fi
 if test x$enable_vcd != xno
 then
   cat > conftest.$ac_ext <<EOF
-#line 6144 "configure"
+#line 6366 "configure"
 #include "confdefs.h"
 #include <linux/cdrom.h>
 EOF
@@ -6155,7 +6377,7 @@ rm -f conftest*
 
   
   cat > conftest.$ac_ext <<EOF
-#line 6159 "configure"
+#line 6381 "configure"
 #include "confdefs.h"
 #include <sys/cdio.h>
 EOF
@@ -6198,12 +6420,12 @@ fi
 if test x$SYS != xnto && test "x$SYS" != "xmingw32"
 then
   echo $ac_n "checking for inet_pton""... $ac_c" 1>&6
-echo "configure:6202: checking for inet_pton" >&5
+echo "configure:6424: checking for inet_pton" >&5
 if eval "test \"`echo '$''{'ac_cv_func_inet_pton'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6207 "configure"
+#line 6429 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char inet_pton(); below.  */
@@ -6226,7 +6448,7 @@ inet_pton();
 
 ; return 0; }
 EOF
-if { (eval echo configure:6230: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6452: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_inet_pton=yes"
 else
@@ -6249,9 +6471,9 @@ fi
 if test "x$SYS" = "xmingw32"
 then
   echo $ac_n "checking for getaddrinfo in ws2tcpip.h""... $ac_c" 1>&6
-echo "configure:6253: checking for getaddrinfo in ws2tcpip.h" >&5
+echo "configure:6475: checking for getaddrinfo in ws2tcpip.h" >&5
   cat > conftest.$ac_ext <<EOF
-#line 6255 "configure"
+#line 6477 "configure"
 #include "confdefs.h"
 #include <ws2tcpip.h>
 EOF
@@ -6322,7 +6544,7 @@ fi
       { echo "configure: error: ${with_mad_tree} directory doesn't exist" 1>&2; exit 1; }
     fi
         echo $ac_n "checking for mad.h in ${real_mad_tree}/libmad""... $ac_c" 1>&6
-echo "configure:6326: checking for mad.h in ${real_mad_tree}/libmad" >&5
+echo "configure:6548: checking for mad.h in ${real_mad_tree}/libmad" >&5
     if test -f ${real_mad_tree}/libmad/mad.h
     then
       echo "$ac_t""yes" 1>&6
@@ -6331,7 +6553,7 @@ echo "configure:6326: checking for mad.h in ${real_mad_tree}/libmad" >&5
       save_LDFLAGS=$LDFLAGS
       LDFLAGS=$mad_LDFLAGS
       echo $ac_n "checking for mad_bit_init in -lmad""... $ac_c" 1>&6
-echo "configure:6335: checking for mad_bit_init in -lmad" >&5
+echo "configure:6557: checking for mad_bit_init in -lmad" >&5
 ac_lib_var=`echo mad'_'mad_bit_init | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6339,7 +6561,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lmad  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6343 "configure"
+#line 6565 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6350,7 +6572,7 @@ int main() {
 mad_bit_init()
 ; return 0; }
 EOF
-if { (eval echo configure:6354: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6576: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6389,17 +6611,17 @@ fi
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:6393: checking for $ac_hdr" >&5
+echo "configure:6615: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6398 "configure"
+#line 6620 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6403: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6625: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -6427,7 +6649,7 @@ fi
 done
 
     echo $ac_n "checking for mad_bit_init in -lmad""... $ac_c" 1>&6
-echo "configure:6431: checking for mad_bit_init in -lmad" >&5
+echo "configure:6653: checking for mad_bit_init in -lmad" >&5
 ac_lib_var=`echo mad'_'mad_bit_init | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6435,7 +6657,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lmad  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6439 "configure"
+#line 6661 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6446,7 +6668,7 @@ int main() {
 mad_bit_init()
 ; return 0; }
 EOF
-if { (eval echo configure:6450: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6672: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6503,7 +6725,7 @@ fi
   if test "x$with_ffmpeg_tree" != "x"
   then
     echo $ac_n "checking for libavcodec.a in ${with_ffmpeg_tree}""... $ac_c" 1>&6
-echo "configure:6507: checking for libavcodec.a in ${with_ffmpeg_tree}" >&5
+echo "configure:6729: checking for libavcodec.a in ${with_ffmpeg_tree}" >&5
     real_ffmpeg_tree="`cd ${with_ffmpeg_tree} 2>/dev/null && pwd`"
     if test "x$real_ffmpeg_tree" = x
     then
@@ -6514,7 +6736,11 @@ echo "configure:6507: checking for libavcodec.a in ${with_ffmpeg_tree}" >&5
     then
             echo "$ac_t""${real_ffmpeg_tree}/libavcodec/libavcodec.a" 1>&6
       BUILTINS="${BUILTINS} ffmpeg"
-      ffmpeg_LDFLAGS="${ffmpeg_LDFLAGS} ${real_ffmpeg_tree}/libavcodec/libavcodec.a -lm"
+      ffmpeg_LDFLAGS="${ffmpeg_LDFLAGS} ${real_ffmpeg_tree}/libavcodec/libavcodec.a"
+      if test x$SYS != xbeos
+      then
+        ffmpeg_LDFLAGS="${ffmpeg_LDFLAGS} -lm"
+      fi
       ffmpeg_CFLAGS="${ffmpeg_CFLAGS} -I${real_ffmpeg_tree}/libavcodec"
     else
             echo "$ac_t""no" 1>&6
@@ -6524,9 +6750,13 @@ echo "configure:6507: checking for libavcodec.a in ${with_ffmpeg_tree}" >&5
     save_CFLAGS=$CFLAGS
     save_LDFLAGS=$LDFLAGS
     CFLAGS="$CFLAGS $ffmpeg_CFLAGS"
-    LDFLAGS="$LDFLAGS $ffmpeg_LDFLAGS -lm"
+    LDFLAGS="$LDFLAGS $ffmpeg_LDFLAGS"
+    if test x$SYS != xbeos
+    then
+      ffmpeg_LDFLAGS="${ffmpeg_LDFLAGS} -lm"
+    fi
     echo $ac_n "checking for avcodec_init in -lavcodec""... $ac_c" 1>&6
-echo "configure:6530: checking for avcodec_init in -lavcodec" >&5
+echo "configure:6760: checking for avcodec_init in -lavcodec" >&5
 ac_lib_var=`echo avcodec'_'avcodec_init | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6534,7 +6764,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lavcodec  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6538 "configure"
+#line 6768 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6545,7 +6775,7 @@ int main() {
 avcodec_init()
 ; return 0; }
 EOF
-if { (eval echo configure:6549: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6779: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6562,7 +6792,11 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   
       BUILTINS="${BUILTINS} ffmpeg"
-      ffmpeg_LDFLAGS="${ffmpeg_LDFLAGS} -lavcodec -lm" 
+      ffmpeg_LDFLAGS="${ffmpeg_LDFLAGS} -lavcodec"
+      if test x$SYS != xbeos
+      then
+        ffmpeg_LDFLAGS="${ffmpeg_LDFLAGS} -lm"
+      fi 
 else
   echo "$ac_t""no" 1>&6
  { echo "configure: error: Cannot find libavcodec library..." 1>&2; exit 1; } 
@@ -6602,7 +6836,7 @@ fi
       { echo "configure: error: ${with_a52_tree} directory doesn't exist" 1>&2; exit 1; }
     fi
         echo $ac_n "checking for a52.h in ${real_a52_tree}/include""... $ac_c" 1>&6
-echo "configure:6606: checking for a52.h in ${real_a52_tree}/include" >&5
+echo "configure:6840: checking for a52.h in ${real_a52_tree}/include" >&5
     if test -f ${real_a52_tree}/include/a52.h
     then
       echo "$ac_t""yes" 1>&6
@@ -6611,7 +6845,7 @@ echo "configure:6606: checking for a52.h in ${real_a52_tree}/include" >&5
       save_LDFLAGS=$LDFLAGS
       LDFLAGS="$a52_LDFLAGS $LDFLAGS"
       echo $ac_n "checking for a52_free in -la52""... $ac_c" 1>&6
-echo "configure:6615: checking for a52_free in -la52" >&5
+echo "configure:6849: checking for a52_free in -la52" >&5
 ac_lib_var=`echo a52'_'a52_free | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6619,7 +6853,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-la52 -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6623 "configure"
+#line 6857 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6630,7 +6864,7 @@ int main() {
 a52_free()
 ; return 0; }
 EOF
-if { (eval echo configure:6634: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6868: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6671,17 +6905,17 @@ fi
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:6675: checking for $ac_hdr" >&5
+echo "configure:6909: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6680 "configure"
+#line 6914 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6685: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6919: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -6703,7 +6937,7 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
 EOF
  
       echo $ac_n "checking for a52_free in -la52""... $ac_c" 1>&6
-echo "configure:6707: checking for a52_free in -la52" >&5
+echo "configure:6941: checking for a52_free in -la52" >&5
 ac_lib_var=`echo a52'_'a52_free | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6711,7 +6945,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-la52 -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6715 "configure"
+#line 6949 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6722,7 +6956,7 @@ int main() {
 a52_free()
 ; return 0; }
 EOF
-if { (eval echo configure:6726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6960: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6767,17 +7001,17 @@ then
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:6771: checking for $ac_hdr" >&5
+echo "configure:7005: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6776 "configure"
+#line 7010 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6781: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7015: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -6835,17 +7069,17 @@ if test x$enable_x11 != xno &&
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:6839: checking for $ac_hdr" >&5
+echo "configure:7073: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6844 "configure"
+#line 7078 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6849: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7083: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -6898,17 +7132,17 @@ if test x$enable_xvideo != xno &&
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:6902: checking for $ac_hdr" >&5
+echo "configure:7136: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6907 "configure"
+#line 7141 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6912: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7146: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -6932,7 +7166,7 @@ EOF
     save_CFLAGS=$CFLAGS
     CFLAGS="$CFLAGS -L$x_libraries -lX11 -lXext"
     echo $ac_n "checking for XvSetPortAttribute in -lXv_pic""... $ac_c" 1>&6
-echo "configure:6936: checking for XvSetPortAttribute in -lXv_pic" >&5
+echo "configure:7170: checking for XvSetPortAttribute in -lXv_pic" >&5
 ac_lib_var=`echo Xv_pic'_'XvSetPortAttribute | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6940,7 +7174,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXv_pic  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6944 "configure"
+#line 7178 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6951,7 +7185,7 @@ int main() {
 XvSetPortAttribute()
 ; return 0; }
 EOF
-if { (eval echo configure:6955: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7189: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7009,7 +7243,7 @@ fi
   # Extract the first word of "sdl12-config", so it can be a program name with args.
 set dummy sdl12-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:7013: checking for $ac_word" >&5
+echo "configure:7247: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_SDL12_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -7049,7 +7283,7 @@ fi
     # Extract the first word of "sdl11-config", so it can be a program name with args.
 set dummy sdl11-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:7053: checking for $ac_word" >&5
+echo "configure:7287: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_SDL11_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -7090,7 +7324,7 @@ fi
     # Extract the first word of "sdl-config", so it can be a program name with args.
 set dummy sdl-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:7094: checking for $ac_word" >&5
+echo "configure:7328: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_SDL_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -7135,17 +7369,17 @@ fi
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:7139: checking for $ac_hdr" >&5
+echo "configure:7373: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7144 "configure"
+#line 7378 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7149: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7383: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7193,6 +7427,82 @@ from http://www.libsdl.org/, or configure with --disable-sdl. Have a nice day.
   fi
 fi
 
+# Check whether --enable-qte or --disable-qte was given.
+if test "${enable_qte+set}" = set; then
+  enableval="$enable_qte"
+  :
+fi
+
+if test "x${enable_qte}" != "xno"
+then
+  # Check whether --with-qte or --without-qte was given.
+if test "${with_qte+set}" = set; then
+  withval="$with_qte"
+  :
+fi
+
+  if test "x${with_qte}" = "x"
+  then
+    test_LDFLAGS="-L${QTDIR}/lib"
+    test_CFLAGS="-I${QTDIR}/include"
+  else
+    test_LDFLAGS="-L${with_qte}/lib"
+    test_CFLAGS="-I${with_qte}/include"
+  fi
+
+  CPPFLAGS="${save_CPPFLAGS} ${test_CFLAGS}"
+  for ac_hdr in qt.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:7459: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 7464 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:7469: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+    qte_CFLAGS="${qte_CFLAGS} ${test_CFLAGS} -DQT_QWS_IPAQ -DQWS -fno-exceptions -fno-rtti"
+    qte_LDFLAGS="${qte_LDFLAGS} ${test_LDFLAGS} -lqpe -lqte"
+    if test "x${with_qte}" = "x"
+    then
+      PLUGINS="${PLUGINS} qte"
+    else
+      BUILTINS="${BUILTINS} qte"
+    fi
+  
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+  CPPFLAGS="${save_CPPFLAGS}"
+fi
+
 # Check whether --enable-directx or --disable-directx was given.
 if test "${enable_directx+set}" = set; then
   enableval="$enable_directx"
@@ -7215,17 +7525,17 @@ fi
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:7219: checking for $ac_hdr" >&5
+echo "configure:7529: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7224 "configure"
+#line 7534 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7229: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7539: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7254,7 +7564,7 @@ done
 
     else
       echo $ac_n "checking for directX headers in ${with_directx}""... $ac_c" 1>&6
-echo "configure:7258: checking for directX headers in ${with_directx}" >&5
+echo "configure:7568: checking for directX headers in ${with_directx}" >&5
       if test -f ${with_directx}/ddraw.h
       then
         PLUGINS="${PLUGINS} directx"
@@ -7281,17 +7591,17 @@ fi
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:7285: checking for $ac_hdr" >&5
+echo "configure:7595: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7290 "configure"
+#line 7600 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7295: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7605: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7386,17 +7696,17 @@ if test x$enable_aa = xyes
 then
   ac_safe=`echo "aalib.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for aalib.h""... $ac_c" 1>&6
-echo "configure:7390: checking for aalib.h" >&5
+echo "configure:7700: checking for aalib.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7395 "configure"
+#line 7705 "configure"
 #include "confdefs.h"
 #include <aalib.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7400: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7710: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7447,17 +7757,17 @@ then
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:7451: checking for $ac_hdr" >&5
+echo "configure:7761: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7456 "configure"
+#line 7766 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7461: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7771: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7480,7 +7790,7 @@ EOF
  
     PLUGINS="${PLUGINS} dsp"
     echo $ac_n "checking for main in -lossaudio""... $ac_c" 1>&6
-echo "configure:7484: checking for main in -lossaudio" >&5
+echo "configure:7794: checking for main in -lossaudio" >&5
 ac_lib_var=`echo ossaudio'_'main | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -7488,14 +7798,14 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lossaudio  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7492 "configure"
+#line 7802 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:7499: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7809: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7531,7 +7841,7 @@ if test "${enable_esd+set}" = set; then
      # Extract the first word of "esd-config", so it can be a program name with args.
 set dummy esd-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:7535: checking for $ac_word" >&5
+echo "configure:7845: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_ESD_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -7582,7 +7892,7 @@ if test "${enable_arts+set}" = set; then
      # Extract the first word of "artsc-config", so it can be a program name with args.
 set dummy artsc-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:7586: checking for $ac_word" >&5
+echo "configure:7896: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_ARTS_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -7632,17 +7942,17 @@ if test "${enable_alsa+set}" = set; then
    then
      ac_safe=`echo "alsa/asoundlib.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for alsa/asoundlib.h""... $ac_c" 1>&6
-echo "configure:7636: checking for alsa/asoundlib.h" >&5
+echo "configure:7946: checking for alsa/asoundlib.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7641 "configure"
+#line 7951 "configure"
 #include "confdefs.h"
 #include <alsa/asoundlib.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7646: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7956: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7659,7 +7969,7 @@ fi
 if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   echo $ac_n "checking for main in -lasound""... $ac_c" 1>&6
-echo "configure:7663: checking for main in -lasound" >&5
+echo "configure:7973: checking for main in -lasound" >&5
 ac_lib_var=`echo asound'_'main | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -7667,14 +7977,14 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lasound  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7671 "configure"
+#line 7981 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:7678: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7988: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7751,7 +8061,7 @@ fi
   # Extract the first word of "gtk12-config", so it can be a program name with args.
 set dummy gtk12-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:7755: checking for $ac_word" >&5
+echo "configure:8065: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_GTK12_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -7790,7 +8100,7 @@ fi
     # Extract the first word of "gtk-config", so it can be a program name with args.
 set dummy gtk-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:7794: checking for $ac_word" >&5
+echo "configure:8104: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_GTK_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -7839,17 +8149,17 @@ fi
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:7843: checking for $ac_hdr" >&5
+echo "configure:8153: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7848 "configure"
+#line 8158 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7853: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8163: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7887,6 +8197,164 @@ done
   fi
 fi
 
+# Check whether --enable-familiar or --disable-familiar was given.
+if test "${enable_familiar+set}" = set; then
+  enableval="$enable_familiar"
+  :
+fi
+
+if test "x${enable_familiar}" = "xyes"
+then
+  GTK_PATH="${PATH}"
+  # Check whether --with-gtk-config-path or --without-gtk-config-path was given.
+if test "${with_gtk_config_path+set}" = set; then
+  withval="$with_gtk_config_path"
+   if test "x${with_gtk_config_path}" != "xno"
+      then
+        GTK_PATH="${with_gtk_config_path}:${PATH}"
+      fi 
+fi
+
+  # look for gtk-config
+  # Extract the first word of "gtk12-config", so it can be a program name with args.
+set dummy gtk12-config; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:8223: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_GTK12_CONFIG'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$GTK12_CONFIG" in
+  /*)
+  ac_cv_path_GTK12_CONFIG="$GTK12_CONFIG" # Let the user override the test with a path.
+  ;;
+  ?:/*)                         
+  ac_cv_path_GTK12_CONFIG="$GTK12_CONFIG" # Let the user override the test with a dos path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="${GTK_PATH}"
+  for ac_dir in $ac_dummy; do 
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_GTK12_CONFIG="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_GTK12_CONFIG" && ac_cv_path_GTK12_CONFIG="no"
+  ;;
+esac
+fi
+GTK12_CONFIG="$ac_cv_path_GTK12_CONFIG"
+if test -n "$GTK12_CONFIG"; then
+  echo "$ac_t""$GTK12_CONFIG" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+  GTK_CONFIG=${GTK12_CONFIG}
+  if test "x${GTK_CONFIG}" = "xno"
+  then
+    # Extract the first word of "gtk-config", so it can be a program name with args.
+set dummy gtk-config; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:8262: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_GTK_CONFIG'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$GTK_CONFIG" in
+  /*)
+  ac_cv_path_GTK_CONFIG="$GTK_CONFIG" # Let the user override the test with a path.
+  ;;
+  ?:/*)                         
+  ac_cv_path_GTK_CONFIG="$GTK_CONFIG" # Let the user override the test with a dos path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="${GTK_PATH}"
+  for ac_dir in $ac_dummy; do 
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_GTK_CONFIG="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_GTK_CONFIG" && ac_cv_path_GTK_CONFIG="no"
+  ;;
+esac
+fi
+GTK_CONFIG="$ac_cv_path_GTK_CONFIG"
+if test -n "$GTK_CONFIG"; then
+  echo "$ac_t""$GTK_CONFIG" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+  fi
+  if test "x${GTK_CONFIG}" != "xno"
+  then
+    if expr 1.2.0 \> `${GTK_CONFIG} --version` >/dev/null
+    then
+      { echo "configure: error: Your development package for Gtk+ is too old, you need at least version 1.2.0. Please upgrade and try again. Alternatively you can also configure with --disable-familiar." 1>&2; exit 1; }
+    fi
+    familiar_CFLAGS="${familiar_CFLAGS} `${GTK_CONFIG} --cflags gtk gthread`"
+    familiar_LDFLAGS="${familiar_LDFLAGS} `${GTK_CONFIG} --libs gtk gthread | sed 's,-rdynamic,,'`"
+    # now look for the gtk.h header
+    CPPFLAGS="${save_CPPFLAGS} ${familiar_CFLAGS}"
+    ac_cv_gtk_headers=yes
+    for ac_hdr in gtk/gtk.h glib.h gdk/gdk.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:8311: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 8316 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:8321: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+ac_cv_gtk_headers=no
+      echo "Cannot find gtk development headers."
+    
+fi
+done
+
+    if test "x${ac_cv_gtk_headers}" = "xyes"
+    then
+      PLUGINS="${PLUGINS} familiar"
+      NEED_GTK_MAIN=yes
+    fi
+    CPPFLAGS="${save_CPPFLAGS}"
+  fi
+fi
+
 # Check whether --enable-gnome or --disable-gnome was given.
 if test "${enable_gnome+set}" = set; then
   enableval="$enable_gnome"
@@ -7895,7 +8363,7 @@ if test "${enable_gnome+set}" = set; then
     # Extract the first word of "gnome-config", so it can be a program name with args.
 set dummy gnome-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:7899: checking for $ac_word" >&5
+echo "configure:8367: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_GNOME_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -7939,17 +8407,17 @@ fi
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:7943: checking for $ac_hdr" >&5
+echo "configure:8411: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7948 "configure"
+#line 8416 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7953: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8421: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8023,6 +8491,38 @@ if test "${enable_kde+set}" = set; then
 fi
 
 
+# Check whether --enable-opie or --disable-opie was given.
+if test "${enable_opie+set}" = set; then
+  enableval="$enable_opie"
+  if test "x${enable_opie}" = "xyes"; then
+     # Check whether --with-qte or --without-qte was given.
+if test "${with_qte+set}" = set; then
+  withval="$with_qte"
+  :
+fi
+
+     if test "x${with_qte}" = "x"
+     then
+       test_LDFLAGS="-L${QTDIR}/lib"
+       test_CFLAGS="-I${QTDIR}/include"
+     else
+       test_LDFLAGS="-L${with_qte}/lib"
+       test_CFLAGS="-I${with_qte}/include"
+     fi
+
+     PLUGINS="${PLUGINS} opie"
+     opie_LDFLAGS="${opie_LDFLAGS} ${test_LDFLAGS} -lqpe -lqte"
+     opie_CFLAGS="${opie_CFLAGS} ${test_CFLAGS}-DQT_QWS_IPAQ -DQWS -fno-exceptions -fno-rtti"
+     if test -x ${QTDIR}/bin/moc
+     then
+       MOC=${QTDIR}/bin/moc
+     else
+       MOC=moc
+     fi
+   fi
+fi
+
+
 # Check whether --enable-macosx or --disable-macosx was given.
 if test "${enable_macosx+set}" = set; then
   enableval="$enable_macosx"
@@ -8036,17 +8536,17 @@ else
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:8040: checking for $ac_hdr" >&5
+echo "configure:8540: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8045 "configure"
+#line 8545 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8050: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8550: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8089,17 +8589,17 @@ fi
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:8093: checking for $ac_hdr" >&5
+echo "configure:8593: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8098 "configure"
+#line 8598 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8103: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8603: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8170,17 +8670,17 @@ if test x$enable_lirc = xyes
 then
   ac_safe=`echo "lirc/lirc_client.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for lirc/lirc_client.h""... $ac_c" 1>&6
-echo "configure:8174: checking for lirc/lirc_client.h" >&5
+echo "configure:8674: checking for lirc/lirc_client.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8179 "configure"
+#line 8679 "configure"
 #include "confdefs.h"
 #include <lirc/lirc_client.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8184: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8684: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8197,7 +8697,7 @@ fi
 if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   echo $ac_n "checking for lirc_init in -llirc_client""... $ac_c" 1>&6
-echo "configure:8201: checking for lirc_init in -llirc_client" >&5
+echo "configure:8701: checking for lirc_init in -llirc_client" >&5
 ac_lib_var=`echo lirc_client'_'lirc_init | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -8205,7 +8705,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-llirc_client  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8209 "configure"
+#line 8709 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8216,7 +8716,7 @@ int main() {
 lirc_init()
 ; return 0; }
 EOF
-if { (eval echo configure:8220: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8720: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8271,7 +8771,7 @@ fi
       ;;
     *)
                   echo $ac_n "checking whether the byte order is big-endian""... $ac_c" 1>&6
-echo "configure:8275: checking whether the byte order is big-endian" >&5
+echo "configure:8775: checking whether the byte order is big-endian" >&5
 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -8345,7 +8845,7 @@ if test "${enable_pth+set}" = set; then
   enableval="$enable_pth"
    if test "x$enable_pth" = "xyes"; then
     echo $ac_n "checking for pth_init in -lpth""... $ac_c" 1>&6
-echo "configure:8349: checking for pth_init in -lpth" >&5
+echo "configure:8849: checking for pth_init in -lpth" >&5
 ac_lib_var=`echo pth'_'pth_init | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -8353,7 +8853,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpth  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8357 "configure"
+#line 8857 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8364,7 +8864,7 @@ int main() {
 pth_init()
 ; return 0; }
 EOF
-if { (eval echo configure:8368: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8868: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8392,7 +8892,7 @@ else
 fi
 
     cat > conftest.$ac_ext <<EOF
-#line 8396 "configure"
+#line 8896 "configure"
 #include "confdefs.h"
 #include <pth.h>
 EOF
@@ -8418,7 +8918,7 @@ if test "${enable_st+set}" = set; then
   enableval="$enable_st"
    if test "x$enable_st" = "xyes"; then
     echo $ac_n "checking for st_init in -lst""... $ac_c" 1>&6
-echo "configure:8422: checking for st_init in -lst" >&5
+echo "configure:8922: checking for st_init in -lst" >&5
 ac_lib_var=`echo st'_'st_init | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -8426,7 +8926,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lst  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8430 "configure"
+#line 8930 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8437,7 +8937,7 @@ int main() {
 st_init()
 ; return 0; }
 EOF
-if { (eval echo configure:8441: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8941: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8465,7 +8965,7 @@ else
 fi
 
     cat > conftest.$ac_ext <<EOF
-#line 8469 "configure"
+#line 8969 "configure"
 #include "confdefs.h"
 #include <st.h>
 EOF
@@ -8619,6 +9119,12 @@ PLUGIN_PATH="${ac_tool_prefix}/share/videolan"
 
 
 
+
+
+
+
+
+
 
 
 
@@ -8845,6 +9351,7 @@ s%@dvdread_CFLAGS@%$dvdread_CFLAGS%g
 s%@mpeg_ts_dvbpsi_CFLAGS@%$mpeg_ts_dvbpsi_CFLAGS%g
 s%@directx_CFLAGS@%$directx_CFLAGS%g
 s%@esd_CFLAGS@%$esd_CFLAGS%g
+s%@familiar_CFLAGS@%$familiar_CFLAGS%g
 s%@ffmpeg_CFLAGS@%$ffmpeg_CFLAGS%g
 s%@glide_CFLAGS@%$glide_CFLAGS%g
 s%@gnome_CFLAGS@%$gnome_CFLAGS%g
@@ -8855,7 +9362,9 @@ s%@macosx_CFLAGS@%$macosx_CFLAGS%g
 s%@mad_CFLAGS@%$mad_CFLAGS%g
 s%@memcpyaltivec_CFLAGS@%$memcpyaltivec_CFLAGS%g
 s%@motionaltivec_CFLAGS@%$motionaltivec_CFLAGS%g
+s%@opie_CFLAGS@%$opie_CFLAGS%g
 s%@qt_CFLAGS@%$qt_CFLAGS%g
+s%@qte_CFLAGS@%$qte_CFLAGS%g
 s%@sdl_CFLAGS@%$sdl_CFLAGS%g
 s%@x11_CFLAGS@%$x11_CFLAGS%g
 s%@xvideo_CFLAGS@%$xvideo_CFLAGS%g
@@ -8874,6 +9383,7 @@ s%@dvd_LDFLAGS@%$dvd_LDFLAGS%g
 s%@dvdread_LDFLAGS@%$dvdread_LDFLAGS%g
 s%@mpeg_ts_dvbpsi_LDFLAGS@%$mpeg_ts_dvbpsi_LDFLAGS%g
 s%@esd_LDFLAGS@%$esd_LDFLAGS%g
+s%@familiar_LDFLAGS@%$familiar_LDFLAGS%g
 s%@filter_distort_LDFLAGS@%$filter_distort_LDFLAGS%g
 s%@ffmpeg_LDFLAGS@%$ffmpeg_LDFLAGS%g
 s%@ggi_LDFLAGS@%$ggi_LDFLAGS%g
@@ -8894,8 +9404,10 @@ s%@mad_LDFLAGS@%$mad_LDFLAGS%g
 s%@memcpyaltivec_LDFLAGS@%$memcpyaltivec_LDFLAGS%g
 s%@motionaltivec_LDFLAGS@%$motionaltivec_LDFLAGS%g
 s%@ncurses_LDFLAGS@%$ncurses_LDFLAGS%g
+s%@opie_LDFLAGS@%$opie_LDFLAGS%g
 s%@qnx_LDFLAGS@%$qnx_LDFLAGS%g
 s%@qt_LDFLAGS@%$qt_LDFLAGS%g
+s%@qte_LDFLAGS@%$qte_LDFLAGS%g
 s%@rc_LDFLAGS@%$rc_LDFLAGS%g
 s%@sdl_LDFLAGS@%$sdl_LDFLAGS%g
 s%@vcd_LDFLAGS@%$vcd_LDFLAGS%g
index c26b9f84b8b32faa75405d2d25ab4ed22f49fb1e..f229200e2300d5b824e98481278e25213ff7bc2c 100644 (file)
@@ -4,7 +4,7 @@ AC_CONFIG_HEADER(include/defs.h)
 AC_CANONICAL_SYSTEM
 
 PACKAGE="vlc"
-VERSION="0.4.0"
+VERSION="0.4.5"
 CODENAME=Ourumov
 
 dnl Save CFLAGS and LDFLAGS
@@ -75,7 +75,7 @@ case x"${target_os}" in
   x*mingw32*)
     SYS=mingw32
     AC_CHECK_TOOL(WINDRES, windres, :)
-    save_CFLAGS="${save_CFLAGS} -fnative-struct -D_OFF_T_ -D_off_t=long"
+    save_CFLAGS="${save_CFLAGS} -D_OFF_T_ -D_off_t=long"
     vlc_LDFLAGS="${vlc_LDFLAGS} -mwindows -Xlinker --force-exe-suffix"
     vlc_LDFLAGS="${vlc_LDFLAGS} -lws2_32 -lnetapi32"
     ipv4_LDFLAGS="${ipv4_LDFLAGS} -lws2_32"
@@ -93,7 +93,7 @@ case x"${target_os}" in
     save_CFLAGS="${save_CFLAGS} -Wno-multichar -Wno-ctor-dtor-privacy -Woverloaded-virtual"
     vlc_LDFLAGS="${vlc_LDFLAGS} -lbe"
     plugins_LDFLAGS="${plugins_LDFLAGS} -nostart"
-    beos_LDFLAGS="${beos_LDFLAGS} -lbe -lgame -lroot -ltracker"
+    beos_LDFLAGS="${beos_LDFLAGS} -lbe -lgame -lroot -ltracker -ltranslation -lstdc++.r4"
     ipv4_LDFLAGS="${ipv4_LDFLAGS} -lbind"
     ;;
   x*)
@@ -102,18 +102,25 @@ case x"${target_os}" in
 esac
 
 dnl Flags for plugin compilation
-if test x"${SYS}" = xmingw32
-then
-  plugins_CFLAGS="${plugins_CFLAGS} -fnative-struct"
-else
+if test x"${SYS}" != xmingw32; then
   plugins_CFLAGS="${plugins_CFLAGS} -fPIC"
 fi
 
+dnl Check for the need to include the mingwex lib for mingw32
+if test x$SYS = xmingw32
+then
+    AC_CHECK_LIB(mingwex,opendir,
+        AC_CHECK_LIB(mingw32,opendir,vlc_LDFLAGS="${vlc_LDFLAGS}",
+            [vlc_LDFLAGS="${vlc_LDFLAGS} -lmingwex"
+             gtk_LDFLAGS="${gtk_LDFLAGS} -lmingwex"])
+    )
+fi
+
 dnl The -DSYS_FOO flag
 save_CFLAGS="${save_CFLAGS} -DSYS_`echo ${SYS} | sed -e 's/-.*//' | tr 'abcdefghijklmnopqrstuvwxyz.' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`"
 
 dnl Check for system libs needed
-AC_CHECK_FUNCS(gettimeofday select strerror strtod strtol isatty vasprintf swab sigrelse getpwuid memalign posix_memalign gethostbyname2)
+AC_CHECK_FUNCS(gettimeofday select strerror strtod strtol isatty vasprintf swab sigrelse getpwuid memalign posix_memalign gethostbyname2 atoll)
 
 AC_CHECK_FUNC(connect,,[
   AC_CHECK_LIB(socket,connect,
@@ -126,13 +133,18 @@ AC_CHECK_FUNC(gethostbyname,,[
 AC_CHECK_FUNC(gethostbyname,,[
   AC_CHECK_LIB(bind,gethostbyname,ipv4_LDFLAGS="${ipv4_LDFLAGS} -lbind")
 ])
-AC_CHECK_FUNCS(nanosleep,,[
+have_nanosleep=0
+AC_CHECK_FUNC(nanosleep,have_nanosleep=1,[
   AC_CHECK_LIB(rt,nanosleep,
-    [vlc_LDFLAGS="${vlc_LDFLAGS} -lrt"],
+    [vlc_LDFLAGS="${vlc_LDFLAGS} -lrt"; have_nanosleep=1],
     [AC_CHECK_LIB(posix4,nanosleep,
-        [vlc_LDFLAGS="${vlc_LDFLAGS} -lposix4"])]
+        [vlc_LDFLAGS="${vlc_LDFLAGS} -lposix4"; have_nanosleep=1])]
   )
 ])
+if test x$have_nanosleep = x1; then
+  AC_DEFINE(HAVE_NANOSLEEP, 1,
+            Define if nanosleep is available.)
+fi
 AC_CHECK_FUNC(inet_aton,,[
   AC_CHECK_LIB(resolv,inet_aton,ipv4_LDFLAGS="${ipv4_LDFLAGS} -lresolv")
 ])
@@ -188,7 +200,7 @@ AC_EGREP_HEADER(strncasecmp,strings.h,[
             Define if <strings.h> defines strncasecmp.)])
 
 dnl Check for headers
-AC_CHECK_HEADERS(getopt.h strings.h)
+AC_CHECK_HEADERS(stdint.h getopt.h strings.h inttypes.h sys/int_types.h)
 AC_CHECK_HEADERS(sys/sockio.h fcntl.h sys/types.h sys/time.h sys/times.h)
 AC_CHECK_HEADERS(dlfcn.h image.h)
 AC_CHECK_HEADERS(arpa/inet.h net/if.h netinet/in.h sys/socket.h)
@@ -329,6 +341,23 @@ if test x"$ac_cv_c_omit_frame_pointer" != x"no"; then
     CFLAGS_OPTIM_NODEBUG="${CFLAGS_OPTIM_NODEBUG} -fomit-frame-pointer"
 fi
 
+dnl Check for fnative-struct or mms-bitfields support for mingw32
+if test x$SYS = xmingw32
+then
+    AC_CACHE_CHECK([if \$CC accepts -mms-bitfields],
+        [ac_cv_c_mms_bitfields],
+        [CFLAGS="${save_CFLAGS} -mms-bitfields"
+         AC_TRY_COMPILE([],,ac_cv_c_mms_bitfields=yes,
+                        ac_cv_c_mms_bitfields=no)])
+    if test x"$ac_cv_c_mms_bitfields" != x"no"; then
+        save_CFLAGS="${save_CFLAGS} -mms-bitfields"
+        plugins_CFLAGS="${plugins_CFLAGS} -mms-bitfields"
+    else
+        save_CFLAGS="${save_CFLAGS} -fnative-struct"
+        plugins_CFLAGS="${plugins_CFLAGS} -fnative-struct"
+    fi
+fi
+
 dnl Check for Darwin plugin linking flags
 AC_CACHE_CHECK([if \$CC accepts -bundle -undefined error -lcc_dynamic],
     [ac_cv_ld_darwin],
@@ -422,7 +451,12 @@ dnl
 dnl  default modules
 dnl
 BUILTINS="${BUILTINS} idct idctclassic motion imdct downmix chroma_i420_rgb chroma_i420_yuy2 chroma_i422_yuy2 chroma_i420_ymga mpeg_adec ac3_adec mpeg_vdec"
-PLUGINS="${PLUGINS} dummy null rc logger mpeg_es mpeg_ps mpeg_ts mpeg_audio file udp http ipv4 memcpy lpcm_adec ac3_spdif spudec filter_deinterlace filter_invert filter_wall filter_transform filter_distort filter_clone fx_scope"
+PLUGINS="${PLUGINS} dummy null rc logger mpeg_es mpeg_ps mpeg_ts mpeg_audio file memcpy lpcm_adec ac3_spdif spudec filter_deinterlace filter_invert filter_wall filter_transform filter_distort filter_clone filter_crop fx_scope"
+
+dnl
+dnl  Network modules
+dnl
+NETWORK_MODULES="udp http rtp ipv4"
 
 dnl
 dnl  Accelerated modules
@@ -433,6 +467,11 @@ THREEDNOW_MODULES="memcpy3dn imdct3dn downmix3dn"
 SSE_MODULES="imdctsse downmixsse"
 ALTIVEC_MODULES="idctaltivec motionaltivec memcpyaltivec"
 
+if test x$SYS != xbeos
+then
+    PLUGINS="${PLUGINS} ${NETWORK_MODULES}"
+fi
+
 AC_CACHE_CHECK([if \$CC groks MMX inline assembly],
     [ac_cv_mmx_inline],
     [AC_TRY_COMPILE(,[void *p;asm volatile("packuswb %%mm1,%%mm2"::"r"(p));],
@@ -719,28 +758,68 @@ if test "x$enable_dvbpsi" != "xno"
 then
   AC_ARG_WITH(dvbpsi, 
   [    --with-dvbpsi=PATH    libdvbpsi headers and libraries])
-  if test "x$with_dvbpsi" = x
-  then
-    test_LDFLAGS=""
-    test_CFLAGS=""
-  else
-    test_LDFLAGS="-L${with_dvbpsi}/lib"
-    test_CFLAGS="-I${with_dvbpsi}/include"
-  fi
-  CPPFLAGS="$save_CPPFLAGS $test_CFLAGS"
-  AC_CHECK_HEADER([dvbpsi/dr.h],[
-    PLUGINS="${PLUGINS} mpeg_ts_dvbpsi"
-    mpeg_ts_dvbpsi_LDFLAGS="${mpeg_ts_dvbpsi_LDFLAGS} ${test_LDFLAGS} -ldvbpsi"
-    mpeg_ts_dvbpsi_CFLAGS="${mpeg_ts_dvbpsi_CFLAGS} ${test_CFLAGS}"
-    ],[
-    if test "x$enable_dvbpsi" != x
+  AC_ARG_WITH(dvbpsi,
+  [    --with-dvbpsi-tree=PATH libdvbpsi tree for static linking])
+  case "x$with_dvbpsi" in
+  x|xyes)
+    if test "x$with_dvbpsi_tree" = x
     then
-      AC_MSG_ERROR([Could not find libdvbpsi on your system: you may get it from www.videolan.org, you'll need at least version 0.1.1])
+      AC_CHECK_HEADERS(dvbpsi/dr.h,
+        [ PLUGINS="${PLUGINS} mpeg_ts_dvbpsi"
+          mpeg_ts_dvbpsi_LDFLAGS="${mpeg_ts_dvbpsi_LDFLAGS} -ldvbpsi" ], [],
+        [  AC_MSG_ERROR([cannot find libdvbpsi headers]) ])
+    else
+      AC_MSG_CHECKING(for libdvbpsi.a in ${with_dvbpsi_tree})
+      real_dvbpsi_tree="`cd ${with_dvbpsi_tree} 2>/dev/null && pwd`"
+      if test "x$real_dvbpsi_tree" = x
+      then
+        dnl  The given directory can't be found
+        AC_MSG_RESULT(no)
+        AC_MSG_ERROR([cannot cd to ${with_dvbpsi_tree}])
+      fi
+      if test -f "${real_dvbpsi_tree}/src/.libs/libdvbpsi.a"
+      then
+        dnl  Use a custom libdvbpsi
+        AC_MSG_RESULT(${real_dvbpsi_tree}/src/.libs/libdvbpsi.a)
+        BUILTINS="${BUILTINS} mpeg_ts_dvbpsi"
+        mpeg_ts_dvbpsi_LDFLAGS="${mpeg_ts_dvbpsi_LDFLAGS} ${real_dvbpsi_tree}/src/.libs/libdvbpsi.a"
+        mpeg_ts_dvbpsi_CFLAGS="${mpeg_ts_dvbpsi_CFLAGS} -I${real_dvbpsi_tree}/src"
+      else
+        dnl  The given libdvbpsi wasn't built
+        AC_MSG_RESULT(no)
+        AC_MSG_ERROR([cannot find ${real_dvbpsi_tree}/src/.libs/libdvbpsi.a, make sure you compiled libdvbpsi in ${with_dvbpsi_tree}])
+      fi
     fi
-  ])
-  CPPFLAGS="$save_CPPFLAGS"
+  ;;
+  xno)
+    dnl  Compile without dvbpsi (dlopen version, works only under Linux)
+  ;;
+  *)
+    AC_MSG_CHECKING(for dvbpsi headers in ${with_dvbpsi})
+    if test "x$with_dvbpsi" = x
+    then
+      test_LDFLAGS=""
+      test_CFLAGS=""
+    else
+      test_LDFLAGS="-L${with_dvbpsi}/lib"
+      test_CFLAGS="-I${with_dvbpsi}/include"
+    fi
+    CPPFLAGS="$save_CPPFLAGS $test_CFLAGS"
+    AC_CHECK_HEADER([dvbpsi/dr.h],[
+      PLUGINS="${PLUGINS} mpeg_ts_dvbpsi"
+      mpeg_ts_dvbpsi_LDFLAGS="${mpeg_ts_dvbpsi_LDFLAGS} ${test_LDFLAGS} -ldvbpsi"
+      mpeg_ts_dvbpsi_CFLAGS="${mpeg_ts_dvbpsi_CFLAGS} ${test_CFLAGS}"
+      ],[
+      if test "x$enable_dvbpsi" != x
+      then
+        AC_MSG_ERROR([Could not find libdvbpsi on your system: you may get it from www.videolan.org, you'll need at least version 0.1.1])
+      fi
+    ])
+    CPPFLAGS="$save_CPPFLAGS"
+  ;;
+  esac
 fi
+
 dnl
 dnl  VCD module
 dnl
@@ -903,7 +982,11 @@ then
       dnl  Use a custom libffmpeg
       AC_MSG_RESULT(${real_ffmpeg_tree}/libavcodec/libavcodec.a)
       BUILTINS="${BUILTINS} ffmpeg"
-      ffmpeg_LDFLAGS="${ffmpeg_LDFLAGS} ${real_ffmpeg_tree}/libavcodec/libavcodec.a -lm"
+      ffmpeg_LDFLAGS="${ffmpeg_LDFLAGS} ${real_ffmpeg_tree}/libavcodec/libavcodec.a"
+      if test x$SYS != xbeos
+      then
+        ffmpeg_LDFLAGS="${ffmpeg_LDFLAGS} -lm"
+      fi
       ffmpeg_CFLAGS="${ffmpeg_CFLAGS} -I${real_ffmpeg_tree}/libavcodec"
     else
       dnl  The given libavcodec wasn't built
@@ -914,10 +997,18 @@ then
     save_CFLAGS=$CFLAGS
     save_LDFLAGS=$LDFLAGS
     CFLAGS="$CFLAGS $ffmpeg_CFLAGS"
-    LDFLAGS="$LDFLAGS $ffmpeg_LDFLAGS -lm"
+    LDFLAGS="$LDFLAGS $ffmpeg_LDFLAGS"
+    if test x$SYS != xbeos
+    then
+      ffmpeg_LDFLAGS="${ffmpeg_LDFLAGS} -lm"
+    fi
     AC_CHECK_LIB(avcodec, avcodec_init, [
       BUILTINS="${BUILTINS} ffmpeg"
-      ffmpeg_LDFLAGS="${ffmpeg_LDFLAGS} -lavcodec -lm" ],
+      ffmpeg_LDFLAGS="${ffmpeg_LDFLAGS} -lavcodec"
+      if test x$SYS != xbeos
+      then
+        ffmpeg_LDFLAGS="${ffmpeg_LDFLAGS} -lm"
+      fi ],
       [ AC_MSG_ERROR([Cannot find libavcodec library...]) ])
     CFLAGS=$save_CFLAGS
     LDFLAGS=$save_LDFLAGS
@@ -1117,6 +1208,39 @@ from http://www.libsdl.org/, or configure with --disable-sdl. Have a nice day.
   fi
 fi
 
+dnl
+dnl  Qt Embedded module
+dnl  (disabled by default)
+dnl
+AC_ARG_ENABLE(qte,
+  [  --enable-qte            QT Embedded support (default disabled)])
+if test "x${enable_qte}" != "xno"
+then
+  AC_ARG_WITH(qte,
+  [    --with-qte=PATH    Qt Embedded headers and libraries])
+  if test "x${with_qte}" = "x"
+  then
+    test_LDFLAGS="-L${QTDIR}/lib"
+    test_CFLAGS="-I${QTDIR}/include"
+  else
+    test_LDFLAGS="-L${with_qte}/lib"
+    test_CFLAGS="-I${with_qte}/include"
+  fi
+
+  CPPFLAGS="${save_CPPFLAGS} ${test_CFLAGS}"
+  AC_CHECK_HEADERS(qt.h, [
+    qte_CFLAGS="${qte_CFLAGS} ${test_CFLAGS} -DQT_QWS_IPAQ -DQWS -fno-exceptions -fno-rtti"
+    qte_LDFLAGS="${qte_LDFLAGS} ${test_LDFLAGS} -lqpe -lqte"
+    if test "x${with_qte}" = "x"
+    then
+      PLUGINS="${PLUGINS} qte"
+    else
+      BUILTINS="${BUILTINS} qte"
+    fi
+  ])
+  CPPFLAGS="${save_CPPFLAGS}"
+fi
+
 dnl
 dnl  Windows DirectX module
 dnl
@@ -1353,6 +1477,51 @@ then
   fi
 fi
 
+dnl
+dnl  Familiar module uses Gtk+ library
+dnl
+AC_ARG_ENABLE(familiar,
+  [  --enable-familiar       Familiar Gtk+ support (default disabled)])
+if test "x${enable_familiar}" = "xyes"
+then
+  GTK_PATH="${PATH}"
+  AC_ARG_WITH(gtk-config-path,
+    [    --with-gtk-config-path=PATH gtk-config path (default search in \$PATH)],
+    [ if test "x${with_gtk_config_path}" != "xno"
+      then
+        GTK_PATH="${with_gtk_config_path}:${PATH}"
+      fi ])
+  # look for gtk-config
+  AC_PATH_PROG(GTK12_CONFIG, gtk12-config, no, ${GTK_PATH})
+  GTK_CONFIG=${GTK12_CONFIG}
+  if test "x${GTK_CONFIG}" = "xno"
+  then
+    AC_PATH_PROG(GTK_CONFIG, gtk-config, no, ${GTK_PATH})
+  fi
+  if test "x${GTK_CONFIG}" != "xno"
+  then
+    if expr 1.2.0 \> `${GTK_CONFIG} --version` >/dev/null
+    then
+      AC_MSG_ERROR([Your development package for Gtk+ is too old, you need at least version 1.2.0. Please upgrade and try again. Alternatively you can also configure with --disable-familiar.])
+    fi
+    familiar_CFLAGS="${familiar_CFLAGS} `${GTK_CONFIG} --cflags gtk gthread`"
+    familiar_LDFLAGS="${familiar_LDFLAGS} `${GTK_CONFIG} --libs gtk gthread | sed 's,-rdynamic,,'`"
+    # now look for the gtk.h header
+    CPPFLAGS="${save_CPPFLAGS} ${familiar_CFLAGS}"
+    ac_cv_gtk_headers=yes
+    AC_CHECK_HEADERS(gtk/gtk.h glib.h gdk/gdk.h, , [
+      ac_cv_gtk_headers=no
+      echo "Cannot find gtk development headers."
+    ])
+    if test "x${ac_cv_gtk_headers}" = "xyes"
+    then
+      PLUGINS="${PLUGINS} familiar"
+      NEED_GTK_MAIN=yes
+    fi
+    CPPFLAGS="${save_CPPFLAGS}"
+  fi
+fi
+
 dnl
 dnl  Gnome module
 dnl
@@ -1415,6 +1584,34 @@ AC_ARG_ENABLE(kde,
      fi
    fi])
 
+dnl
+dnl  Opie QT embedded module
+dnl
+AC_ARG_ENABLE(opie,
+  [  --enable-opie           Qt embedded interface support (default disabled)],
+  [if test "x${enable_opie}" = "xyes"; then
+     AC_ARG_WITH(qte,
+     [    --with-qte=PATH    Qt Embedded headers and libraries])
+     if test "x${with_qte}" = "x"
+     then
+       test_LDFLAGS="-L${QTDIR}/lib"
+       test_CFLAGS="-I${QTDIR}/include"
+     else
+       test_LDFLAGS="-L${with_qte}/lib"
+       test_CFLAGS="-I${with_qte}/include"
+     fi
+
+     PLUGINS="${PLUGINS} opie"
+     opie_LDFLAGS="${opie_LDFLAGS} ${test_LDFLAGS} -lqpe -lqte"
+     opie_CFLAGS="${opie_CFLAGS} ${test_CFLAGS}-DQT_QWS_IPAQ -DQWS -fno-exceptions -fno-rtti"
+     if test -x ${QTDIR}/bin/moc
+     then
+       MOC=${QTDIR}/bin/moc
+     else
+       MOC=moc
+     fi
+   fi])
+
 dnl
 dnl  MacOS X module
 dnl
@@ -1666,6 +1863,7 @@ AC_SUBST(dvdread_CFLAGS)
 AC_SUBST(mpeg_ts_dvbpsi_CFLAGS)
 AC_SUBST(directx_CFLAGS)
 AC_SUBST(esd_CFLAGS)
+AC_SUBST(familiar_CFLAGS)
 AC_SUBST(ffmpeg_CFLAGS)
 AC_SUBST(glide_CFLAGS)
 AC_SUBST(gnome_CFLAGS)
@@ -1676,7 +1874,9 @@ AC_SUBST(macosx_CFLAGS)
 AC_SUBST(mad_CFLAGS)
 AC_SUBST(memcpyaltivec_CFLAGS)
 AC_SUBST(motionaltivec_CFLAGS)
+AC_SUBST(opie_CFLAGS)
 AC_SUBST(qt_CFLAGS)
+AC_SUBST(qte_CFLAGS)
 AC_SUBST(sdl_CFLAGS)
 AC_SUBST(x11_CFLAGS)
 AC_SUBST(xvideo_CFLAGS)
@@ -1697,6 +1897,7 @@ AC_SUBST(dvd_LDFLAGS)
 AC_SUBST(dvdread_LDFLAGS)
 AC_SUBST(mpeg_ts_dvbpsi_LDFLAGS)
 AC_SUBST(esd_LDFLAGS)
+AC_SUBST(familiar_LDFLAGS)
 AC_SUBST(filter_distort_LDFLAGS)
 AC_SUBST(ffmpeg_LDFLAGS)
 AC_SUBST(ggi_LDFLAGS)
@@ -1717,8 +1918,10 @@ AC_SUBST(mad_LDFLAGS)
 AC_SUBST(memcpyaltivec_LDFLAGS)
 AC_SUBST(motionaltivec_LDFLAGS)
 AC_SUBST(ncurses_LDFLAGS)
+AC_SUBST(opie_LDFLAGS)
 AC_SUBST(qnx_LDFLAGS)
 AC_SUBST(qt_LDFLAGS)
+AC_SUBST(qte_LDFLAGS)
 AC_SUBST(rc_LDFLAGS)
 AC_SUBST(sdl_LDFLAGS)
 AC_SUBST(vcd_LDFLAGS)
diff --git a/extras/MacOSX/Resources/divx.icns b/extras/MacOSX/Resources/divx.icns
new file mode 100644 (file)
index 0000000..7e2ba65
Binary files /dev/null and b/extras/MacOSX/Resources/divx.icns differ
diff --git a/extras/MacOSX/Resources/generic.icns b/extras/MacOSX/Resources/generic.icns
new file mode 100644 (file)
index 0000000..28dc564
Binary files /dev/null and b/extras/MacOSX/Resources/generic.icns differ
diff --git a/extras/MacOSX/Resources/mpeg.icns b/extras/MacOSX/Resources/mpeg.icns
new file mode 100644 (file)
index 0000000..9af347a
Binary files /dev/null and b/extras/MacOSX/Resources/mpeg.icns differ
diff --git a/extras/MacOSX/Resources/mpeg1.icns b/extras/MacOSX/Resources/mpeg1.icns
new file mode 100644 (file)
index 0000000..a09f3d0
Binary files /dev/null and b/extras/MacOSX/Resources/mpeg1.icns differ
diff --git a/extras/MacOSX/Resources/mpeg2.icns b/extras/MacOSX/Resources/mpeg2.icns
new file mode 100644 (file)
index 0000000..ae8649e
Binary files /dev/null and b/extras/MacOSX/Resources/mpeg2.icns differ
diff --git a/extras/MacOSX/Resources/mpeg4.icns b/extras/MacOSX/Resources/mpeg4.icns
new file mode 100644 (file)
index 0000000..9da18bf
Binary files /dev/null and b/extras/MacOSX/Resources/mpeg4.icns differ
index 9f274bf71b3365f0f027116eee42a5b3c43f5cb5..d32586c1cf73bf97097bd356915a85a690f3cd17 100644 (file)
@@ -1,11 +1,11 @@
 Package: vlc
 Section: graphics
 Priority: optional
-Version: 0.4.0
+Version: 0.4.5
 Release: 1
 Architecture: arm
 Maintainer: Jean-Paul Saman <jpsaman@wxs.nl>,  Christophe Massiot <massiot@via.ecp.fr>
-Depends: libc6, task-x
+Depends: libc6, task-x, sdl, libgtk1.2, libgtk2.0
 Copyright: GPL
 Description: VideoLAN Client is a free network-aware MPEG and DVD player.
  VideoLAN is a free MPEG1/2 software solution licensed under GPL. The original 
diff --git a/ipkg/control.gpe b/ipkg/control.gpe
new file mode 100644 (file)
index 0000000..319ffe7
--- /dev/null
@@ -0,0 +1,16 @@
+Package: vlc
+Section: graphics
+Priority: optional
+Version: 0.4.5
+Release: 1
+Architecture: arm
+Maintainer: Jean-Paul Saman <jpsaman@wxs.nl>,  Christophe Massiot <massiot@via.ecp.fr>
+Depends: libc6, task-x, sdl, libgpewidget0, libgtk1.2, libgtk2.0, esd, esddsp, libesd0
+Copyright: GPL
+Description: VideoLAN Client is a free network-aware MPEG and DVD player.
+ VideoLAN is a free MPEG1/2 software solution licensed under GPL. The original 
+ source can be found on: 
+ http://www.videolan.org/pub/videolan/vlc/
+ The VideoLAN Client allows to play MPEG1, MPEG2 Transport Streams and 
+ Program Streams from the network or from a file, as well as direct DVD 
+ playback. 
diff --git a/ipkg/control.opie b/ipkg/control.opie
new file mode 100644 (file)
index 0000000..63a9256
--- /dev/null
@@ -0,0 +1,16 @@
+Package: vlc
+Section: graphics
+Priority: optional
+Version: 0.4.5
+Release: 1
+Architecture: arm
+Maintainer: Jean-Paul Saman <jpsaman@wxs.nl>,  Christophe Massiot <massiot@via.ecp.fr>
+Depends: libc6
+Copyright: GPL
+Description: VideoLAN Client is a free network-aware MPEG and DVD player.
+ VideoLAN is a free MPEG1/2 software solution licensed under GPL. The original 
+ source can be found on: 
+ http://www.videolan.org/pub/videolan/vlc/
+ The VideoLAN Client allows to play MPEG1, MPEG2 Transport Streams and 
+ Program Streams from the network or from a file, as well as direct DVD 
+ playback. 
diff --git a/ipkg/gpe-configure.in.patch b/ipkg/gpe-configure.in.patch
new file mode 100644 (file)
index 0000000..4040b50
--- /dev/null
@@ -0,0 +1,26 @@
+--- configure.in       Fri Oct  4 13:45:02 2002
++++ configure.gpe.in   Sun Oct  6 22:24:16 2002
+@@ -1508,6 +1508,23 @@
+       PLUGINS="${PLUGINS} familiar"
+       NEED_GTK_MAIN=yes
+     fi
++    GPE_PATH=".."
++    AC_ARG_WITH(gpe,
++    [    --with-gpe=PATH gpe path (default search in \$PATH)],
++    [ if test "x${with_gpe}" != "xno"
++      then
++        GPE_PATH="${with_gpe}:${PATH}"
++      fi ])
++    ac_cv_gpe_headers=yes
++    AC_CHECK_HEADERS(gpe/init.h, , [
++      ac_cv_gpe_headers=no
++      echo "Cannot find gpe development headers."
++    ])
++    if test "x${ac_cv_gtk_headers}" = "xyes"
++    then
++      familiar_CFLAGS="${familiar_CFLAGS} -I${GPE_PATH}/libgpewidget"
++      familiar_LDFLAGS="${familiar_LDFLAGS} -L${GPE_PATH}/libgpewidget -lgpewidget"
++    fi
+     CPPFLAGS="${save_CPPFLAGS}"
+   fi
+ fi
diff --git a/ipkg/gpe.patch b/ipkg/gpe.patch
new file mode 100644 (file)
index 0000000..da36273
--- /dev/null
@@ -0,0 +1,26 @@
+--- familiar.c Wed Oct  2 23:41:50 2002
++++ familiar-gpe.c     Sun Oct  6 22:01:23 2002
+@@ -32,6 +32,7 @@
+ #include <videolan/vlc.h>
+ #include <gtk/gtk.h>
++#include <gpe/init.h>
+ #include "stream_control.h"
+ #include "input_ext-intf.h"
+@@ -178,12 +179,9 @@
+     int    i_args   = 1;
+     int    i_dummy  = 0;
+-    /* Initialize Gtk+ */
+-    gtk_set_locale ();
+-
+-    /* gtk_init will register stuff with g_atexit, so we need to take
+-     * the global lock if we want to be able to intercept the calls */
+-    gtk_init( &i_args, &pp_args );
++   /* Initialize GPE interface */
++   if (gpe_application_init (&argc, &argv) == FALSE)
++        exit (1);     
+     /* Create some useful widgets that will certainly be used */
+ // FIXME: magic path
diff --git a/ipkg/postinst.gpe b/ipkg/postinst.gpe
new file mode 100755 (executable)
index 0000000..fbf2521
--- /dev/null
@@ -0,0 +1,4 @@
+#!/bin/sh
+if [ -x /usr/bin/update-menus ] && [ ! /usr/bin/update-menus ] ; then 
+   exit $?; 
+fi
diff --git a/ipkg/postinst.opie b/ipkg/postinst.opie
new file mode 100755 (executable)
index 0000000..c90ba68
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/sh
+ln -s /usr/share/vlc /opt/QtPalmtop/pics/vlc
+exit 0
diff --git a/ipkg/postrm.gpe b/ipkg/postrm.gpe
new file mode 100755 (executable)
index 0000000..fbf2521
--- /dev/null
@@ -0,0 +1,4 @@
+#!/bin/sh
+if [ -x /usr/bin/update-menus ] && [ ! /usr/bin/update-menus ] ; then 
+   exit $?; 
+fi
diff --git a/ipkg/postrm.opie b/ipkg/postrm.opie
new file mode 100755 (executable)
index 0000000..911eb8d
--- /dev/null
@@ -0,0 +1,4 @@
+#!/bin/sh
+[ -x /opt/QtPalmtop/pics/vlc ] || rm /opt/QtPalmtop/pics/vlc
+exit 0
+
index 9a9d543ea3776842f20ac9de50563a6474b929a2..ab606d0c4a7a962b178cd6bef4048ca779a6f1d3 100755 (executable)
@@ -19,7 +19,7 @@ build-stamp:
                $(shell echo $(CONFIG_FLAGS))
 
 # This is ugly -- I know
-       patch -p 0 < ipkg/patch
+       patch -p 0 < ipkg/sdl.patch
 
        $(MAKE)
 
similarity index 100%
rename from ipkg/patch
rename to ipkg/sdl.patch
diff --git a/ipkg/vlc.desktop b/ipkg/vlc.desktop
new file mode 100644 (file)
index 0000000..5c2b37d
--- /dev/null
@@ -0,0 +1,5 @@
+[Desktop Entry]
+Comment=Multiplatform Multimedia Player
+Exec=vlc.opie
+Icon=vlc/vlc48x48.png
+Name=VideoLAN Client
diff --git a/ipkg/vlc.gpe b/ipkg/vlc.gpe
new file mode 100755 (executable)
index 0000000..9284838
--- /dev/null
@@ -0,0 +1,9 @@
+?package(vlc): \
+ needs=x11 \
+ section=Graphics \
+ logtitle="VideoLAN Client" \
+ title="VideoLAN Client" \
+ command="vlc" \
+ icon48=/usr/share/videolan/vlc48x48.png \
+ windowtitle="VideoLAN Client"
+
diff --git a/ipkg/vlc.opie b/ipkg/vlc.opie
new file mode 100755 (executable)
index 0000000..df756d4
--- /dev/null
@@ -0,0 +1,4 @@
+#!/bin/sh
+export QTDIR=/opt/QtPalmtop
+export LD_LIBRARY_PATH=.:/usr/X11R6/lib:/opt/QtPalmtop/lib:/lib/videolan/vlc
+/usr/bin/vlc
similarity index 95%
rename from MODULES
rename to plugins/LIST
index 29a8edb69b4ec1dda4400ed8342da6aa8b8914f6..05d585d038b0ace979105766dc65bfa67240d45b 100644 (file)
--- a/MODULES
@@ -1,5 +1,5 @@
 List of vlc plugins
-$Id: MODULES,v 1.3 2002/01/30 00:09:49 sam Exp $
+$Id: LIST,v 1.1.2.2 2002/09/30 20:13:19 jpsaman Exp $
 
  * ac3_adec: software AC3 decoder.
 
@@ -41,6 +41,8 @@ $Id: MODULES,v 1.3 2002/01/30 00:09:49 sam Exp $
 
  * esd: audio output module using the Esound sound daemon.
 
+ * familiar: interface for iPaq using the Gtk+ widget set.
+
  * fb: video output module for the Linux framebuffer.
 
  * filter_deinterlace: naive deinterlacing filter.
@@ -123,6 +125,8 @@ $Id: MODULES,v 1.3 2002/01/30 00:09:49 sam Exp $
 
  * qt: interface module using the Qt widget set.
 
+ * qte: video output module for Qt Embedded.
+
  * rc: interface module using stdio.
 
  * sdl: audio output and video output module using the SDL library.
diff --git a/plugins/access/rtp.c b/plugins/access/rtp.c
new file mode 100644 (file)
index 0000000..4fd5067
--- /dev/null
@@ -0,0 +1,338 @@
+/*****************************************************************************
+ * rtp.c: RTP access plug-in
+ *****************************************************************************
+ * Copyright (C) 2001, 2002 VideoLAN
+ * $Id: rtp.c,v 1.1.2.1 2002/10/03 22:14:58 massiot Exp $
+ *
+ * Authors: Tristan Leteurtre <tooney@via.ecp.fr>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ *****************************************************************************/
+
+/*****************************************************************************
+ * Preamble
+ *****************************************************************************/
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <string.h>
+#include <errno.h>
+#include <fcntl.h>
+
+#include <videolan/vlc.h>
+
+#ifdef HAVE_UNISTD_H
+#   include <unistd.h>
+#elif defined( _MSC_VER ) && defined( _WIN32 )
+#   include <io.h>
+#endif
+
+#ifdef HAVE_ALLOCA_H
+#   include <alloca.h>
+#endif
+
+#include "stream_control.h"
+#include "input_ext-intf.h"
+#include "input_ext-dec.h"
+#include "input_ext-plugins.h"
+
+#include "network.h"
+
+#define RTP_HEADER_LEN 12
+
+/*****************************************************************************
+ * Local prototypes
+ *****************************************************************************/
+static void input_getfunctions( function_list_t * );
+static int  Open       ( struct input_thread_s * );
+static ssize_t RTPNetworkRead( input_thread_t *, byte_t *, size_t );
+
+/*****************************************************************************
+ * Module descriptor
+ *****************************************************************************/
+MODULE_CONFIG_START
+MODULE_CONFIG_STOP
+
+MODULE_INIT_START
+    SET_DESCRIPTION( _("RTP access module") )
+    ADD_CAPABILITY( ACCESS, 0 )
+    ADD_SHORTCUT( "rtp" )
+    ADD_SHORTCUT( "rtpstream" )
+    ADD_SHORTCUT( "rtp4" )
+    ADD_SHORTCUT( "rtp6" )
+MODULE_INIT_STOP
+
+MODULE_ACTIVATE_START
+    input_getfunctions( &p_module->p_functions->access );
+MODULE_ACTIVATE_STOP
+
+MODULE_DEACTIVATE_START
+MODULE_DEACTIVATE_STOP
+
+/*****************************************************************************
+ * Functions exported as capabilities. They are declared as static so that
+ * we don't pollute the namespace too much.
+ *****************************************************************************/
+static void input_getfunctions( function_list_t * p_function_list )
+{
+#define input p_function_list->functions.access
+    input.pf_open             = Open;
+    input.pf_read             = RTPNetworkRead;
+    input.pf_close            = input_FDNetworkClose;
+    input.pf_set_program      = input_SetProgram;
+    input.pf_set_area         = NULL;
+    input.pf_seek             = NULL;
+#undef input
+}
+
+/*****************************************************************************
+ * Open: open the socket
+ *****************************************************************************/
+static int Open( struct input_thread_s *p_this )
+{
+    input_thread_t *    p_input = (input_thread_t *)p_this;
+    input_socket_t *    p_access_data;
+    module_t *          p_network;
+    char *              psz_network = "";
+    char *              psz_name = strdup(p_input->psz_name);
+    char *              psz_parser = psz_name;
+    char *              psz_server_addr = "";
+    char *              psz_server_port = "";
+    char *              psz_bind_addr = "";
+    char *              psz_bind_port = "";
+    int                 i_bind_port = 0, i_server_port = 0;
+    network_socket_t    socket_desc;
+
+    if( config_GetIntVariable(  "ipv4" ) )
+    {
+        psz_network = "ipv4";
+    }
+    if( config_GetIntVariable( "ipv6" ) )
+    {
+        psz_network = "ipv6";
+    }
+
+    if( *p_input->psz_access )
+    {
+        /* Find out which shortcut was used */
+        if( !strncmp( p_input->psz_access, "rtp6", 5 ) )
+        {
+            psz_network = "ipv6";
+        }
+        else if( !strncmp( p_input->psz_access, "rtp4", 5 ) )
+        {
+            psz_network = "ipv4";
+        }
+    }
+
+    /* Parse psz_name syntax :
+     * [serveraddr[:serverport]][@[bindaddr]:[bindport]] */
+
+    if( *psz_parser && *psz_parser != '@' )
+    {
+        /* Found server */
+        psz_server_addr = psz_parser;
+
+        while( *psz_parser && *psz_parser != ':' && *psz_parser != '@' )
+        {
+            if( *psz_parser == '[' )
+            {
+                /* IPv6 address */
+                while( *psz_parser && *psz_parser != ']' )
+                {
+                    psz_parser++;
+                }
+            }
+            psz_parser++;
+        }
+
+        if( *psz_parser == ':' )
+        {
+            /* Found server port */
+            *psz_parser = '\0'; /* Terminate server name */
+            psz_parser++;
+            psz_server_port = psz_parser;
+
+            while( *psz_parser && *psz_parser != '@' )
+            {
+                psz_parser++;
+            }
+        }
+    }
+
+    if( *psz_parser == '@' )
+    {
+        /* Found bind address or bind port */
+        *psz_parser = '\0'; /* Terminate server port or name if necessary */
+        psz_parser++;
+
+        if( *psz_parser && *psz_parser != ':' )
+        {
+            /* Found bind address */
+            psz_bind_addr = psz_parser;
+
+            while( *psz_parser && *psz_parser != ':' )
+            {
+                if( *psz_parser == '[' )
+                {
+                    /* IPv6 address */
+                    while( *psz_parser && *psz_parser != ']' )
+                    {
+                        psz_parser++;
+                    }
+                }
+                psz_parser++;
+            }
+        }
+
+        if( *psz_parser == ':' )
+        {
+            /* Found bind port */
+            *psz_parser = '\0'; /* Terminate bind address if necessary */
+            psz_parser++;
+
+            psz_bind_port = psz_parser;
+        }
+    }
+
+    /* Convert ports format */
+    if( *psz_server_port )
+    {
+        i_server_port = strtol( psz_server_port, &psz_parser, 10 );
+        if( *psz_parser )
+        {
+            intf_ErrMsg( "cannot parse server port near %s", psz_parser );
+            free(psz_name);
+            return( -1 );
+        }
+    }
+
+    if( *psz_bind_port )
+    {
+        i_bind_port = strtol( psz_bind_port, &psz_parser, 10 );
+        if( *psz_parser )
+        {
+            intf_ErrMsg( "cannot parse bind port near %s", psz_parser );
+            free(psz_name);
+            return( -1 );
+        }
+    }
+
+    vlc_mutex_lock( &p_input->stream.stream_lock );
+    p_input->stream.b_pace_control = 0;
+    p_input->stream.b_seekable = 0;
+    p_input->stream.p_selected_area->i_tell = 0;
+    p_input->stream.i_method = INPUT_METHOD_NETWORK;
+    vlc_mutex_unlock( &p_input->stream.stream_lock );
+
+    if( *psz_server_addr || i_server_port )
+    {
+        intf_ErrMsg( "this RTP syntax is deprecated; the server argument will be");
+        intf_ErrMsg( "ignored (%s:%d). If you wanted to enter a multicast address",
+                          psz_server_addr, i_server_port);
+        intf_ErrMsg( "or local port, type : %s:@%s:%d",
+                          *p_input->psz_access ? p_input->psz_access : "udp",
+                          psz_server_addr, i_server_port );
+
+        i_server_port = 0;
+        psz_server_addr = "";
+    }
+    intf_WarnMsg( 2, "opening server=%s:%d local=%s:%d",
+             psz_server_addr, i_server_port, psz_bind_addr, i_bind_port );
+
+    /* Prepare the network_socket_t structure */
+    socket_desc.i_type = NETWORK_UDP;
+    socket_desc.psz_bind_addr = psz_bind_addr;
+    socket_desc.i_bind_port = i_bind_port;
+    socket_desc.psz_server_addr = psz_server_addr;
+    socket_desc.i_server_port = i_server_port;
+
+    /* Find an appropriate network module */
+    p_network = module_Need( MODULE_CAPABILITY_NETWORK, psz_network,
+                             &socket_desc );
+    free(psz_name);
+    if( p_network == NULL )
+    {
+        return( -1 );
+    }
+    module_Unneed( p_network );
+    
+    p_access_data = malloc( sizeof(input_socket_t) );
+    p_input->p_access_data = (void *)p_access_data;
+
+    if( p_access_data == NULL )
+    {
+        intf_ErrMsg( "out of memory" );
+        return( -1 );
+    }
+
+    p_access_data->i_handle = socket_desc.i_handle;
+    p_input->i_mtu = socket_desc.i_mtu;
+
+    p_input->psz_demux = "ts";
+    
+    return( 0 );
+}
+
+/*****************************************************************************
+ * RTPNetworkRead : Read for the network, and parses the RTP header
+ *****************************************************************************/
+static ssize_t RTPNetworkRead( input_thread_t * p_input, byte_t * p_buffer,
+                          size_t i_len )
+{
+    int         i_rtp_version;
+    int         i_CSRC_count;
+    int         i_payload_type;
+    
+    byte_t *    p_tmp_buffer = alloca( p_input->i_mtu );
+
+    /* Get the raw data from the socket.
+     * We first assume that RTP header size is the classic RTP_HEADER_LEN. */
+    ssize_t i_ret = input_FDNetworkRead( p_input, p_tmp_buffer,
+                                        p_input->i_mtu );
+    
+    if (!i_ret) return 0;
+            
+    /* Parse the header and make some verifications.
+     * See RFC 1889 & RFC 2250. */
+  
+    i_rtp_version  = ( p_tmp_buffer[0] & 0xC0 ) >> 6;
+    i_CSRC_count   = ( p_tmp_buffer[0] & 0x0F );
+    i_payload_type = ( p_tmp_buffer[1] & 0x7F ); 
+  
+    if ( i_rtp_version != 2 ) 
+        intf_WarnMsg( 1, "RTP version is %u, should be 2", i_rtp_version );
+  
+    if ( i_payload_type != 33 )
+        intf_WarnMsg( 1, "RTP payload type is %u, only 33 (Mpeg2-TS) " \
+                 "is supported", i_payload_type );
+    /* Return the packet without the RTP header. */
+    i_ret -= ( RTP_HEADER_LEN + 4 * i_CSRC_count );
+
+    if ( i_ret > i_len )
+    {
+        /* This should NOT happen. */
+        intf_WarnMsg( 1, "RTP input trashing %d bytes", i_ret - i_len );
+        i_ret = i_len;
+    }
+
+    FAST_MEMCPY( p_buffer, 
+                       p_tmp_buffer + RTP_HEADER_LEN + 4 * i_CSRC_count,
+                       i_ret );
+    
+    return i_ret;
+}
diff --git a/plugins/beos/ListViews.cpp b/plugins/beos/ListViews.cpp
new file mode 100644 (file)
index 0000000..843ae49
--- /dev/null
@@ -0,0 +1,641 @@
+/*****************************************************************************
+ * ListViews.h: BeOS interface list view class implementation
+ *****************************************************************************
+ * Copyright (C) 1999, 2000, 2001 VideoLAN
+ * $Id: ListViews.cpp,v 1.1.2.1 2002/09/29 12:06:08 titer Exp $
+ *
+ * Authors: Stephan Aßmus <stippi@yellowbites.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ *****************************************************************************/
+
+#include <stdio.h>
+
+#include <Bitmap.h>
+#include <String.h>
+
+extern "C"
+{
+#include <videolan/vlc.h>
+
+#include "stream_control.h"
+
+#include "interface.h"
+#include "input_ext-intf.h"
+}
+
+#include "InterfaceWindow.h"
+#include "ListViews.h"
+#include "MsgVals.h"
+#include "intf_vlc_wrapper.h"
+
+
+#define MAX_DRAG_HEIGHT                200.0
+#define ALPHA                          170
+#define TEXT_OFFSET                    20.0
+
+/*****************************************************************************
+ * PlaylistItem class
+ *****************************************************************************/
+PlaylistItem::PlaylistItem( const char *name )
+       : BStringItem( name )
+{
+}
+
+PlaylistItem::~PlaylistItem()
+{
+}
+
+/*****************************************************************************
+ * PlaylistItem::DrawItem
+ *****************************************************************************/
+void
+PlaylistItem::Draw( BView *owner, BRect frame, bool tintedLine,
+                                       bool active, bool playing )
+{
+       rgb_color color = (rgb_color){ 255, 255, 255, 255 };
+       if ( tintedLine )
+               color = tint_color( color, 1.04 );
+       // background
+       if ( IsSelected() )
+               color = tint_color( color, B_DARKEN_2_TINT );
+       owner->SetLowColor( color );
+       owner->FillRect( frame, B_SOLID_LOW );
+       // label
+       owner->SetHighColor( 0, 0, 0, 255 );
+       font_height fh;
+       owner->GetFontHeight( &fh );
+       BString truncatedString( Text() );
+       owner->TruncateString( &truncatedString, B_TRUNCATE_MIDDLE,
+                                                  frame.Width() - TEXT_OFFSET - 4.0 );
+       owner->DrawString( truncatedString.String(),
+                                          BPoint( frame.left + TEXT_OFFSET,
+                                                          frame.top + fh.ascent + 1.0 ) );
+       // playmark
+       if ( active )
+       {
+               rgb_color black = (rgb_color){ 0, 0, 0, 255 };
+               rgb_color green = (rgb_color){ 0, 255, 0, 255 };
+               BRect r( 0.0, 0.0, 10.0, 10.0 );
+               r.OffsetTo( frame.left + 4.0,
+                                       ceilf( ( frame.top + frame.bottom ) / 2.0 ) - 5.0 );
+               if ( !playing )
+                       green = tint_color( color, B_DARKEN_1_TINT );
+               rgb_color lightGreen = tint_color( green, B_LIGHTEN_2_TINT );
+               rgb_color darkGreen = tint_color( green, B_DARKEN_2_TINT );
+               BPoint arrow[3];
+               arrow[0] = r.LeftTop();
+               arrow[1] = r.LeftBottom();
+               arrow[2].x = r.right;
+               arrow[2].y = ( r.top + r.bottom ) / 2.0;
+               owner->BeginLineArray( 6 );
+                       // black outline
+                       owner->AddLine( arrow[0], arrow[1], black );
+                       owner->AddLine( BPoint( arrow[1].x + 1.0, arrow[1].y - 1.0 ),
+                                                       arrow[2], black );
+                       owner->AddLine( arrow[0], arrow[2], black );
+                       // inset arrow
+                       arrow[0].x += 1.0;
+                       arrow[0].y += 2.0;
+                       arrow[1].x += 1.0;
+                       arrow[1].y -= 2.0;
+                       arrow[2].x -= 2.0;
+                       // highlights and shadow
+                       owner->AddLine( arrow[1], arrow[2], darkGreen );
+                       owner->AddLine( arrow[0], arrow[2], lightGreen );
+                       owner->AddLine( arrow[0], arrow[1], lightGreen );
+               owner->EndLineArray();
+               // fill green
+               arrow[0].x += 1.0;
+               arrow[0].y += 1.0;
+               arrow[1].x += 1.0;
+               arrow[1].y -= 1.0;
+               arrow[2].x -= 2.0;
+               owner->SetHighColor( green );
+               owner->FillPolygon( arrow, 3 );
+       }
+}
+
+/*****************************************************************************
+ * DragSortableListView class
+ *****************************************************************************/
+DragSortableListView::DragSortableListView( BRect frame, const char* name,
+                                                                                       list_view_type type, uint32 resizingMode,
+                                                                                       uint32 flags )
+       : BListView( frame, name, type, resizingMode, flags ),
+         fDropIndex( -1 )
+{
+       SetViewColor( B_TRANSPARENT_32_BIT );
+}
+
+DragSortableListView::~DragSortableListView()
+{
+}
+
+/*****************************************************************************
+ * DragSortableListView::Draw
+ *****************************************************************************/
+void
+DragSortableListView::Draw( BRect updateRect )
+{
+       int32 firstIndex = IndexOf( updateRect.LeftTop() );
+       int32 lastIndex = IndexOf( updateRect.RightBottom() );
+       if ( firstIndex >= 0 )
+       {
+               if ( lastIndex < firstIndex )
+                       lastIndex = CountItems() - 1;
+               // update rect contains items
+               BRect r( updateRect );
+               for ( int32 i = firstIndex; i <= lastIndex; i++)
+               {
+                       r = ItemFrame( i );
+                       DrawListItem( this, i, r );
+               }
+               updateRect.top = r.bottom + 1.0;
+               if ( updateRect.IsValid() )
+               {
+                       SetLowColor( 255, 255, 255, 255 );
+                       FillRect( updateRect, B_SOLID_LOW );
+               }
+       }
+       else
+       {
+               SetLowColor( 255, 255, 255, 255 );
+               FillRect( updateRect, B_SOLID_LOW );
+       }
+}
+
+/*****************************************************************************
+ * DragSortableListView::InitiateDrag
+ *****************************************************************************/
+bool
+DragSortableListView::InitiateDrag( BPoint point, int32 index, bool )
+{
+return false;
+       bool success = false;
+       BListItem* item = ItemAt( CurrentSelection( 0 ) );
+       if ( !item )
+       {
+               // workarround a timing problem
+               Select( index );
+               item = ItemAt( index );
+       }
+       if ( item )
+       {
+               // create drag message
+               BMessage msg( B_SIMPLE_DATA );
+               MakeDragMessage( &msg );
+               // figure out drag rect
+               float width = Bounds().Width();
+               BRect dragRect(0.0, 0.0, width, -1.0);
+               // figure out, how many items fit into our bitmap
+               int32 numItems;
+               bool fade = false;
+               for (numItems = 0; BListItem* item = ItemAt( CurrentSelection( numItems ) ); numItems++) {
+                       dragRect.bottom += item->Height();
+                       if ( dragRect.Height() > MAX_DRAG_HEIGHT ) {
+                               fade = true;
+                               dragRect.bottom = MAX_DRAG_HEIGHT;
+                               numItems++;
+                               break;
+                       }
+               }
+               BBitmap* dragBitmap = new BBitmap( dragRect, B_RGB32, true );
+               if ( dragBitmap && dragBitmap->IsValid() ) {
+                       if ( BView *v = new BView( dragBitmap->Bounds(), "helper", B_FOLLOW_NONE, B_WILL_DRAW ) ) {
+                               dragBitmap->AddChild( v );
+                               dragBitmap->Lock();
+                               BRect itemBounds( dragRect) ;
+                               itemBounds.bottom = 0.0;
+                               // let all selected items, that fit into our drag_bitmap, draw
+                               for ( int32 i = 0; i < numItems; i++ ) {
+                                       int32 index = CurrentSelection( i );
+                                       BListItem* item = ItemAt( index );
+                                       itemBounds.bottom = itemBounds.top + item->Height() - 1.0;
+                                       if ( itemBounds.bottom > dragRect.bottom )
+                                               itemBounds.bottom = dragRect.bottom;
+                                       DrawListItem( v, index, itemBounds );
+                                       itemBounds.top = itemBounds.bottom + 1.0;
+                               }
+                               // make a black frame arround the edge
+                               v->SetHighColor( 0, 0, 0, 255 );
+                               v->StrokeRect( v->Bounds() );
+                               v->Sync();
+       
+                               uint8 *bits = (uint8 *)dragBitmap->Bits();
+                               int32 height = (int32)dragBitmap->Bounds().Height() + 1;
+                               int32 width = (int32)dragBitmap->Bounds().Width() + 1;
+                               int32 bpr = dragBitmap->BytesPerRow();
+       
+                               if (fade) {
+                                       for ( int32 y = 0; y < height - ALPHA / 2; y++, bits += bpr ) {
+                                               uint8 *line = bits + 3;
+                                               for (uint8 *end = line + 4 * width; line < end; line += 4)
+                                                       *line = ALPHA;
+                                       }
+                                       for ( int32 y = height - ALPHA / 2; y < height; y++, bits += bpr ) {
+                                               uint8 *line = bits + 3;
+                                               for (uint8 *end = line + 4 * width; line < end; line += 4)
+                                                       *line = (height - y) << 1;
+                                       }
+                               } else {
+                                       for ( int32 y = 0; y < height; y++, bits += bpr ) {
+                                               uint8 *line = bits + 3;
+                                               for (uint8 *end = line + 4 * width; line < end; line += 4)
+                                                       *line = ALPHA;
+                                       }
+                               }
+                               dragBitmap->Unlock();
+                               success = true;
+                       }
+               }
+               if (success)
+                       DragMessage( &msg, dragBitmap, B_OP_ALPHA, BPoint( 0.0, 0.0 ) );
+               else {
+                       delete dragBitmap;
+                       DragMessage( &msg, dragRect.OffsetToCopy( point ), this );
+               }
+       }
+       return success;
+}
+
+/*****************************************************************************
+ * DragSortableListView::WindowActivated
+ *****************************************************************************/
+void
+DragSortableListView::WindowActivated( bool active )
+{
+       // workarround for buggy focus indication of BScrollView
+       if ( BView* view = Parent() )
+               view->Invalidate();
+}
+
+/*****************************************************************************
+ * DragSortableListView::MessageReceived
+ *****************************************************************************/
+void
+DragSortableListView::MessageReceived(BMessage* message)
+{
+       BListItem *item = NULL;
+       DragSortableListView *list = NULL;
+       if ( message->FindPointer( "list", (void **)&list ) == B_OK
+                && list == this )
+       {
+               int32 count = CountItems();
+               if ( fDropIndex < 0 || fDropIndex > count )
+                       fDropIndex = count;
+               bool copy = ( modifiers() & B_SHIFT_KEY );
+               for ( int32 i = 0; message->FindPointer( "item", i, (void **)&item ) == B_OK; i++ )
+               {
+                       
+                       if ( HasItem( item ) )
+                       {
+                               BListItem* itemToAdd = NULL;
+                               int32 index = IndexOf( item );
+                               if ( copy )
+                               {
+                                       // add cloned item
+                                       itemToAdd = CloneItem( index );
+                                       Deselect( IndexOf( item ) );
+                               }
+                               else
+                               {
+                                       // drag sort
+                                       if ( index < fDropIndex )
+                                               fDropIndex--;
+                                       if ( RemoveItem( item ) )
+                                               itemToAdd = item;
+                               }
+                               if ( itemToAdd )
+                               {
+                                       if ( AddItem( itemToAdd, fDropIndex ) )
+                                               Select( IndexOf( itemToAdd ), true );
+                                       else
+                                               delete itemToAdd;
+                               }
+                       }
+                       fDropIndex++;
+               }
+               fDropIndex = -1;
+       } else
+               BListView::MessageReceived( message );
+}
+
+/*****************************************************************************
+ * DragSortableListView::MouseMoved
+ *****************************************************************************/
+void
+DragSortableListView::MouseMoved(BPoint where, uint32 transit, const BMessage *msg)
+{
+       if ( msg && msg->what == B_SIMPLE_DATA )
+       {
+               switch ( transit )
+               {
+                       case B_ENTERED_VIEW:
+                       {
+                               // draw drop mark
+                               BRect r(ItemFrame(0L));
+                               where.y += r.Height() / 2.0;
+                               int32 count = CountItems();
+                               bool found = false;
+                               for (int32 index = 0; index <= count; index++)
+                               {
+                                       r = ItemFrame(index);
+                                       if (r.Contains(where))
+                                       {
+                                               SetHighColor(255, 0, 0, 255);
+                                               StrokeLine(r.LeftTop(), r.RightTop(), B_SOLID_HIGH);
+                                               r.top++;
+                                               StrokeLine(r.LeftTop(), r.RightTop(), B_SOLID_HIGH);
+                                               fDropIndex = index;
+                                               found = true;
+                                               break;
+                                       }
+                               }
+                               if (found)
+                                       break;
+                               // mouse is after last item
+                               fDropIndex = count;
+                               r = Bounds();
+                               if (count > 0)
+                                       r.top = ItemFrame(count - 1).bottom + 1.0;
+                               SetHighColor(255, 0, 0, 255);
+                               StrokeLine(r.LeftTop(), r.RightTop(), B_SOLID_HIGH);
+                               r.top++;
+                               StrokeLine(r.LeftTop(), r.RightTop(), B_SOLID_HIGH);
+                               break;
+                       }
+                       case B_INSIDE_VIEW:
+                       {
+                               // draw drop mark and invalidate previous drop mark
+                               BRect r(ItemFrame(0L));
+                               where.y += r.Height() / 2.0;
+                               int32 count = CountItems();
+                               // mouse still after last item?
+                               if (fDropIndex == count)
+                               {
+                                       r = Bounds();
+                                       if (count > 0)
+                                               r.top = ItemFrame(count - 1).bottom + 1.0;
+                                       if (r.Contains(where))
+                                               break;
+                                       else
+                                       {
+                                               r.bottom = r.top + 2.0;
+                                               Invalidate(r);
+                                       }
+                               }
+                               // mouse still over same item?
+                               if (ItemFrame(fDropIndex).Contains(where))
+                                       break;
+                               else
+                                       InvalidateItem(fDropIndex);
+
+                               // mouse over new item
+                               bool found = false;
+                               for (int32 index = 0; index <= count; index++)
+                               {
+                                       r = ItemFrame(index);
+                                       if (r.Contains(where))
+                                       {
+                                               SetHighColor(255, 0, 0, 255);
+                                               StrokeLine(r.LeftTop(), r.RightTop(), B_SOLID_HIGH);
+                                               r.top++;
+                                               StrokeLine(r.LeftTop(), r.RightTop(), B_SOLID_HIGH);
+                                               fDropIndex = index;
+                                               found = true;
+                                               break;
+                                       }
+                               }
+                               if (found)
+                                       break;
+                               // mouse is after last item
+                               fDropIndex = count;
+                               r = Bounds();
+                               if (count > 0)
+                                       r.top = ItemFrame(count - 1).bottom + 1.0;
+                               SetHighColor(255, 0, 0, 255);
+                               StrokeLine(r.LeftTop(), r.RightTop(), B_SOLID_HIGH);
+                               r.top++;
+                               StrokeLine(r.LeftTop(), r.RightTop(), B_SOLID_HIGH);
+                               break;
+                       }
+                       case B_EXITED_VIEW:
+                       {
+                               int32 count = CountItems();
+                               if (count > 0)
+                               {
+                                       if (fDropIndex == count)
+                                       {
+                                               BRect r(Bounds());
+                                               r.top = ItemFrame(count - 1).bottom + 1.0;
+                                               r.bottom = r.top + 2.0;
+                                               Invalidate(r);
+                                       }
+                                       else
+                                               InvalidateItem(fDropIndex);
+                               }
+                               break;
+                       }
+                       case B_OUTSIDE_VIEW:
+                               break;
+               }
+       }
+       else
+               BListView::MouseMoved(where, transit, msg);
+}
+
+/*****************************************************************************
+ * DragSortableListView::MouseUp
+ *****************************************************************************/
+void
+DragSortableListView::MouseUp( BPoint where )
+{
+       // remove drop mark
+       if ( fDropIndex >= 0 && fDropIndex < CountItems() )
+               InvalidateItem( fDropIndex );
+       BListView::MouseUp( where );
+}
+
+/*****************************************************************************
+ * DragSortableListView::DrawItem
+ *****************************************************************************/
+void
+DragSortableListView::DrawItem( BListItem *item, BRect itemFrame, bool complete )
+{
+       DrawListItem( this, IndexOf( item ), itemFrame );
+}
+
+
+/*****************************************************************************
+ * PlaylistView class
+ *****************************************************************************/
+PlaylistView::PlaylistView( BRect frame, InterfaceWindow* mainWindow )
+       : DragSortableListView( frame, "playlist listview",
+                                                       B_MULTIPLE_SELECTION_LIST, B_FOLLOW_ALL_SIDES,
+                                                       B_WILL_DRAW | B_NAVIGABLE | B_PULSE_NEEDED
+                                                       | B_FRAME_EVENTS | B_FULL_UPDATE_ON_RESIZE ),
+         fCurrentIndex( -1 ),
+         fPlaying( false ),
+         fMainWindow( mainWindow )
+{
+}
+
+PlaylistView::~PlaylistView()
+{
+}
+
+/*****************************************************************************
+ * PlaylistView::AttachedToWindow
+ *****************************************************************************/
+void
+PlaylistView::AttachedToWindow()
+{
+       // get pulse message every two frames
+       Window()->SetPulseRate(80000);
+}
+
+/*****************************************************************************
+ * PlaylistView::MouseDown
+ *****************************************************************************/
+void
+PlaylistView::MouseDown( BPoint where )
+{
+       int32 clicks = 1;
+       Window()->CurrentMessage()->FindInt32( "clicks", &clicks );
+       bool handled = false;
+       for ( int32 i = 0; PlaylistItem* item = (PlaylistItem*)ItemAt( i ); i++ )
+       {
+               BRect r = ItemFrame( i );
+               if ( r.Contains( where ) )
+               {
+                       if ( clicks == 2 )
+                       {
+                               Intf_VLCWrapper::playlistJumpTo( i );
+                               handled = true;
+                       }
+                       else if ( i == fCurrentIndex )
+                       {
+                               r.right = r.left + TEXT_OFFSET;
+                               if ( r.Contains ( where ) )
+                               {
+                                       fMainWindow->PostMessage( PAUSE_PLAYBACK );
+                                       InvalidateItem( i );
+                                       handled = true;
+                               }
+                       }
+                       break;
+               }
+       }
+       if ( !handled )
+               DragSortableListView::MouseDown(where);
+}
+
+/*****************************************************************************
+ * PlaylistView::KeyDown
+ *****************************************************************************/
+void
+PlaylistView::KeyDown( const char* bytes, int32 numBytes )
+{
+       if (numBytes < 1)
+               return;
+               
+       if ( ( bytes[0] == B_BACKSPACE ) || ( bytes[0] == B_DELETE ) )
+       {
+               int32 i = CurrentSelection();
+               if ( BListItem *item = ItemAt( i ) )
+               {
+/*                     if ( RemoveItem( item ) )
+                       {
+                               delete item;
+                               Select( i + 1 );
+                       }*/
+               }
+       }
+       DragSortableListView::KeyDown( bytes, numBytes );
+}
+
+/*****************************************************************************
+ * PlaylistView::Pulse
+ *****************************************************************************/
+void
+PlaylistView::Pulse()
+{
+       if (fMainWindow->IsStopped())
+               SetPlaying( false );
+}
+
+/*****************************************************************************
+ * PlaylistView::CloneItem
+ *****************************************************************************/
+BListItem*
+PlaylistView::CloneItem( int32 atIndex ) const
+{
+       BListItem* clone = NULL;
+       if ( PlaylistItem* item = dynamic_cast<PlaylistItem*>( ItemAt( atIndex ) ) )
+               clone = new PlaylistItem( item->Text() );
+       return clone;
+}
+
+/*****************************************************************************
+ * PlaylistView::DrawListItem
+ *****************************************************************************/
+void
+PlaylistView::DrawListItem( BView* owner, int32 index, BRect frame ) const
+{
+       if ( PlaylistItem* item = dynamic_cast<PlaylistItem*>( ItemAt( index ) ) )
+               item->Draw( owner,  frame, index % 2, index == fCurrentIndex, fPlaying );
+}
+
+/*****************************************************************************
+ * PlaylistView::MakeDragMessage
+ *****************************************************************************/
+void
+PlaylistView::MakeDragMessage( BMessage* message ) const
+{
+       if ( message )
+       {
+               message->AddPointer( "list", (void*)this );
+               for ( int32 i = 0; BListItem* item = ItemAt( CurrentSelection( i ) ); i++ )
+                       message->AddPointer( "item", (void*)item );
+       }
+}
+
+/*****************************************************************************
+ * PlaylistView::SetCurrent
+ *****************************************************************************/
+void
+PlaylistView::SetCurrent( int32 index )
+{
+       if ( fCurrentIndex != index )
+       {
+               InvalidateItem( fCurrentIndex );
+               fCurrentIndex = index;
+               InvalidateItem( fCurrentIndex );
+       }
+}
+
+/*****************************************************************************
+ * PlaylistView::SetPlaying
+ *****************************************************************************/
+void
+PlaylistView::SetPlaying( bool playing )
+{
+       if ( fPlaying != playing )
+       {
+               fPlaying = playing;
+               InvalidateItem( fCurrentIndex );
+       }
+}
diff --git a/plugins/beos/ListViews.h b/plugins/beos/ListViews.h
new file mode 100644 (file)
index 0000000..5ed50e2
--- /dev/null
@@ -0,0 +1,115 @@
+/*****************************************************************************
+ * ListViews.h: BeOS interface list view class prototype
+ *****************************************************************************
+ * Copyright (C) 1999, 2000, 2001 VideoLAN
+ * $Id: ListViews.h,v 1.1.2.1 2002/09/29 12:06:08 titer Exp $
+ *
+ * Authors: Stephan Aßmus <stippi@yellowbites.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ *****************************************************************************/
+
+#ifndef LIST_VIEWS_H
+#define LIST_VIEWS_H
+
+#include <ListItem.h>
+#include <ListView.h>
+
+class InterfaceWindow;
+
+// PlaylistItem
+class PlaylistItem : public BStringItem
+{
+ public:
+                                                       PlaylistItem( const char* name );
+               virtual                         ~PlaylistItem();
+
+               virtual void            Draw( BView* owner, BRect frame,
+                                                                 bool tintedLine,
+                                                                 bool active = false,
+                                                                 bool playing = false );
+
+};
+
+// DragSortableListView
+class DragSortableListView : public BListView
+{
+ public:
+                                                       DragSortableListView( BRect frame,
+                                                                                                 const char* name,
+                                                                                                 list_view_type type
+                                                                                                               = B_SINGLE_SELECTION_LIST,
+                                                                                                 uint32 resizingMode
+                                                                                                               = B_FOLLOW_LEFT
+                                                                                                                 | B_FOLLOW_TOP,
+                                                                                                 uint32 flags
+                                                                                                               = B_WILL_DRAW
+                                                                                                                 | B_NAVIGABLE
+                                                                                                                 | B_FRAME_EVENTS );
+       virtual                                 ~DragSortableListView();
+
+                                                       // BListView
+       virtual void                    Draw( BRect updateRect );
+       virtual bool                    InitiateDrag( BPoint point, int32 index,
+                                                                                 bool wasSelected );
+       virtual void                    MessageReceived( BMessage* message );
+       virtual void                    MouseMoved( BPoint where, uint32 transit,
+                                                                               const BMessage* dragMessage );
+       virtual void                    MouseUp( BPoint where );
+       virtual void                    WindowActivated( bool active );
+       virtual void                    DrawItem( BListItem *item, BRect itemFrame,
+                                                                         bool complete = false);
+
+                                                       // DragSortableListView
+       virtual BListItem*              CloneItem( int32 atIndex ) const = 0;
+       virtual void                    DrawListItem( BView* owner, int32 index,
+                                                                                 BRect itemFrame ) const = 0;
+       virtual void                    MakeDragMessage( BMessage* message ) const = 0;
+
+ private:
+       int32                   fDropIndex;
+};
+
+// PlaylistView
+class PlaylistView : public DragSortableListView
+{
+ public:
+                                                       PlaylistView( BRect frame,
+                                                                                 InterfaceWindow* mainWindow );
+                                                       ~PlaylistView();
+
+                                                       // BListView
+       virtual void                    AttachedToWindow();
+       virtual void                    MouseDown( BPoint where );
+       virtual void                    KeyDown( const char* bytes, int32 numBytes );
+       virtual void                    Pulse();
+
+                                                       // DragSortableListView
+       virtual BListItem*              CloneItem( int32 atIndex ) const;
+       virtual void                    DrawListItem( BView* owner, int32 index,
+                                                                                 BRect itemFrame ) const;
+       virtual void                    MakeDragMessage( BMessage* message ) const;
+
+                                                       // PlaylistView
+                       void                    SetCurrent( int32 index );
+                       void                    SetPlaying( bool playing );
+
+ private:
+       int32                                   fCurrentIndex;
+       bool                                    fPlaying;
+       InterfaceWindow*                fMainWindow;
+};
+
+#endif // LIST_VIEWS_H
diff --git a/plugins/beos/intf_vlc_wrapper.cpp b/plugins/beos/intf_vlc_wrapper.cpp
new file mode 100644 (file)
index 0000000..4f90a72
--- /dev/null
@@ -0,0 +1,852 @@
+/*****************************************************************************
+ * intf_vlc_wrapper.h: BeOS plugin for vlc (derived from MacOS X port )
+ *****************************************************************************
+ * Copyright (C) 2001 VideoLAN
+ * $Id: intf_vlc_wrapper.cpp,v 1.1.2.4 2002/10/09 15:29:51 stippi Exp $
+ *
+ * Authors: Florian G. Pflug <fgp@phlo.org>
+ *          Jon Lech Johansen <jon-vl@nanocrew.net>
+ *          Tony Casltey <tony@castley.net>
+ *          Stephan Aßmus <stippi@yellowbites.com>
+ *
+ * This program is free software{} you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation{} either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY{} without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program{} if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ *****************************************************************************/
+/* VLC headers */
+#include <SupportKit.h>
+
+extern "C"
+{
+#include <videolan/vlc.h>
+
+#include "stream_control.h"
+#include "input_ext-intf.h"
+
+#include "interface.h"
+#include "intf_playlist.h"
+
+#include "audio_output.h"
+
+#include "video.h"
+#include "video_output.h"
+
+}
+
+#include "intf_vlc_wrapper.h"
+
+
+bool Intf_VLCWrapper::manage()
+{
+   p_main->p_intf->pf_manage( p_main->p_intf );
+   
+   if ( p_main->p_intf->b_die )
+   {
+       // exit the lot
+       return( 1 );
+   }
+   
+   if ( p_input_bank->pp_input[0] != NULL )
+   {
+       vlc_mutex_lock( &p_input_bank->pp_input[0]->stream.stream_lock );
+        if( !p_input_bank->pp_input[0]->b_die )
+        {
+            /* New input or stream map change */
+            if( p_input_bank->pp_input[0]->stream.b_changed ||
+                p_main->p_intf->p_sys->i_part !=
+                p_input_bank->pp_input[0]->stream.p_selected_area->i_part )
+            {
+                setupMenus();
+                p_main->p_intf->p_sys->b_disabled_menus = 0;
+            }
+        }
+        vlc_mutex_unlock( &p_input_bank->pp_input[0]->stream.stream_lock );
+    }
+    else if ( !p_main->p_intf->p_sys->b_disabled_menus )
+    {
+        setupMenus();
+        p_main->p_intf->p_sys->b_disabled_menus = 1;
+    }
+    return( 0 );
+}
+
+void Intf_VLCWrapper::quit()
+{
+    p_main->p_intf->b_die = 1;
+}
+    
+/* playlist control */
+bool Intf_VLCWrapper::playlistPlay()
+{
+    if( p_input_bank->pp_input[0] != NULL )
+    {
+               input_SetStatus( p_input_bank->pp_input[0], INPUT_STATUS_PLAY );
+
+               playlistLock();
+               p_main->p_playlist->b_stopped = 0;
+               playlistUnlock();
+
+               p_main->p_intf->p_sys->b_mute = 0;
+    }
+    else
+    {
+        playlistLock();
+
+        if( p_main->p_playlist->b_stopped )
+        {
+            if( p_main->p_playlist->i_size )
+            {
+                playlistUnlock();
+                intf_PlaylistJumpto( p_main->p_playlist,
+                                     p_main->p_playlist->i_index - 1 );
+                               p_main->p_intf->p_sys->b_mute = 0;
+            }
+            else
+                playlistUnlock();
+        }
+        else
+            playlistUnlock();
+    }
+
+    return( true );
+    
+}
+
+void Intf_VLCWrapper::playlistPause()
+{
+    if ( p_input_bank->pp_input[0] != NULL )
+    {
+        input_SetStatus( p_input_bank->pp_input[0], INPUT_STATUS_PAUSE );
+
+        playlistLock();
+        p_main->p_playlist->b_stopped = 0;
+        playlistUnlock();
+    }
+}
+
+void Intf_VLCWrapper::playlistStop()
+{
+    if( p_input_bank->pp_input[0] != NULL )
+    {
+        /* end playing item */
+        input_SetStatus( p_input_bank->pp_input[0], INPUT_STATUS_END );
+
+        /* update playlist */
+        playlistLock();
+        p_main->p_playlist->b_stopped = 1;
+        playlistUnlock();
+    }
+
+}
+
+void Intf_VLCWrapper::playlistNext()
+{
+       playlistJumpTo( playlistCurrentPos() + 1 );
+}
+
+void Intf_VLCWrapper::playlistPrev()
+{
+       playlistJumpTo( playlistCurrentPos() - 1 );
+}
+
+void Intf_VLCWrapper::playlistJumpTo( int pos )
+{
+       // sanity checks
+       if ( pos < 0 )
+               pos = 0;
+       int size = playlistSize();
+       if (pos >= size)
+               pos = size - 1;
+       // weird hack
+    if( p_input_bank->pp_input[0] != NULL )
+               pos--;
+       // stop current stream
+       playlistStop();
+       // modify current position in playlist
+       playlistLock();
+       p_main->p_playlist->i_index = pos;
+       playlistUnlock();
+       // start playing
+       playlistPlay();
+}
+
+int Intf_VLCWrapper::playlistCurrentPos()
+{
+       playlistLock();
+       int pos = p_main->p_playlist->i_index;
+       playlistUnlock();
+       return pos;
+}
+
+int Intf_VLCWrapper::playlistSize()
+{
+       playlistLock();
+       int size = p_main->p_playlist->i_size;
+       playlistUnlock();
+       return size;
+}
+
+void Intf_VLCWrapper::playlistLock()
+{
+       vlc_mutex_lock( &p_main->p_playlist->change_lock );
+}
+
+void Intf_VLCWrapper::playlistUnlock()
+{
+       vlc_mutex_unlock( &p_main->p_playlist->change_lock );
+}
+
+void Intf_VLCWrapper::getNavCapabilities( bool* canSkipPrev,
+                                                                                 bool* canSkipNext )
+{
+       if ( canSkipPrev && canSkipNext )
+       {
+               // init the parameters
+               *canSkipPrev = false;
+               *canSkipNext = false;
+               // get playlist info
+               playlistLock();
+               int pos = p_main->p_playlist->i_index;
+               int size = p_main->p_playlist->i_size;
+               playlistUnlock();
+
+               input_thread_s* input = p_input_bank->pp_input[0];
+               // see if we have got a stream going            
+               if ( input )
+               {
+                       vlc_mutex_lock( &input->stream.stream_lock );
+
+                       bool hasTitles = input->stream.i_area_nb > 1;
+                       int numChapters = input->stream.p_selected_area->i_part_nb;
+                       bool hasChapters = numChapters > 1;
+                       // first, look for chapters
+                       if ( hasChapters )
+                       {
+                               *canSkipPrev = input->stream.p_selected_area->i_part > 1;
+                               *canSkipNext = input->stream.p_selected_area->i_part <
+                                                                        input->stream.p_selected_area->i_part_nb - 1;
+                       }
+                       // if one of the skip capabilities is false,
+                       // make it depend on titles instead
+                       if ( !*canSkipPrev && hasTitles )
+                               *canSkipPrev = input->stream.p_selected_area->i_id > 1;
+                       if ( !*canSkipNext && hasTitles )
+                               *canSkipNext = input->stream.p_selected_area->i_id < input->stream.i_area_nb - 1;
+
+                       vlc_mutex_unlock( &input->stream.stream_lock );
+               }
+               // last but not least, make capabilities depend on playlist
+               if ( !*canSkipPrev )
+                       *canSkipPrev = pos > 0;
+               if ( !*canSkipNext )
+                       *canSkipNext = pos < size - 1;
+       }
+}
+
+void Intf_VLCWrapper::navigatePrev()
+{
+       bool hasSkiped = false;
+
+       input_thread_s* input = p_input_bank->pp_input[0];
+       // see if we have got a stream going            
+       if ( input )
+       {
+               // get information from stream (lock it while looking at it)
+               vlc_mutex_lock( &input->stream.stream_lock );
+
+               int currentTitle = input->stream.p_selected_area->i_id;
+               int currentChapter = input->stream.p_selected_area->i_part;
+               int numTitles = input->stream.i_area_nb;
+               bool hasTitles = numTitles > 1;
+               int numChapters = input->stream.p_selected_area->i_part_nb;
+               bool hasChapters = numChapters > 1;
+
+               vlc_mutex_unlock( &input->stream.stream_lock );
+
+               // first, look for chapters
+               if ( hasChapters )
+               {
+                       // skip to the previous chapter
+                       currentChapter--;
+
+                       if ( currentChapter >= 1 )
+                       {
+                               toggleChapter( currentChapter );
+                               hasSkiped = true;
+                       }
+               }
+               // if we couldn't skip chapters, try titles instead
+               if ( !hasSkiped && hasTitles )
+               {
+                       // skip to the previous title
+                       currentTitle--;
+                       // disallow area 0 since it is used for video_ts.vob
+                       if( currentTitle > 0 )
+                       {
+                               toggleTitle(currentTitle);
+                               hasSkiped = true;
+                       }
+               }
+
+       }
+       // last but not least, skip to previous file
+       if ( !hasSkiped )
+               playlistPrev();
+}
+
+void Intf_VLCWrapper::navigateNext()
+{
+       bool hasSkiped = false;
+
+       input_thread_s* input = p_input_bank->pp_input[0];
+       // see if we have got a stream going            
+       if ( input )
+       {
+               // get information from stream (lock it while looking at it)
+               vlc_mutex_lock( &input->stream.stream_lock );
+
+               int currentTitle = input->stream.p_selected_area->i_id;
+               int currentChapter = input->stream.p_selected_area->i_part;
+               int numTitles = input->stream.i_area_nb;
+               bool hasTitles = numTitles > 1;
+               int numChapters = input->stream.p_selected_area->i_part_nb;
+               bool hasChapters = numChapters > 1;
+
+               vlc_mutex_unlock( &input->stream.stream_lock );
+
+               // first, look for chapters
+               if ( hasChapters )
+               {
+                       // skip to the next chapter
+                       currentChapter++;
+                       if ( currentChapter < numChapters )
+                       {
+                               toggleChapter( currentChapter );
+                               hasSkiped = true;
+                       }
+               }
+               // if we couldn't skip chapters, try titles instead
+               if ( !hasSkiped && hasTitles )
+               {
+                       // skip to the next title
+                       currentTitle++;
+                       // disallow area 0 since it is used for video_ts.vob
+                       if ( currentTitle < numTitles - 1 )
+                       {
+                               toggleTitle(currentTitle);
+                               hasSkiped = true;
+                       }
+               }
+
+       }
+       // last but not least, skip to next file
+       if ( !hasSkiped )
+               playlistNext();
+}
+
+
+//void Intf_VLCWrapper::channelNext()
+//{
+//    intf_thread_t * p_intf = p_main->p_intf;
+//
+//    p_intf->p_sys->i_channel++;
+//
+//    intf_WarnMsg( 3, "intf info: joining channel %d", p_intf->p_sys->i_channel );
+//
+//    vlc_mutex_lock( &p_intf->change_lock );
+//
+//    network_ChannelJoin( p_intf->p_sys->i_channel );
+//    p_intf->pf_manage( p_intf );
+//
+//    vlc_mutex_unlock( &p_intf->change_lock );
+//}
+//
+//void Intf_VLCWrapper::channelPrev()
+//{
+//    intf_thread_t * p_intf = p_main->p_intf;
+//
+//    if ( p_intf->p_sys->i_channel )
+//    {
+//        p_intf->p_sys->i_channel--;
+//    }
+//
+//    intf_WarnMsg( 3, "intf info: joining channel %d", p_intf->p_sys->i_channel );
+//
+//    vlc_mutex_lock( &p_intf->change_lock );
+//
+//    network_ChannelJoin( p_intf->p_sys->i_channel );
+//    p_intf->pf_manage( p_intf );
+//
+//    vlc_mutex_unlock( &p_intf->change_lock );
+//
+//}
+
+void Intf_VLCWrapper::loop()
+{
+    intf_thread_t * p_intf = p_main->p_intf;
+
+    if ( p_intf->p_sys->b_loop )
+    {
+        intf_PlaylistDelete( p_main->p_playlist,
+                             p_main->p_playlist->i_size - 1 );
+    }
+    else
+    {
+        intf_PlaylistAdd( p_main->p_playlist, PLAYLIST_END, 
+                          "vlc:loop" );
+    }
+    p_intf->p_sys->b_loop = !p_intf->p_sys->b_loop;
+}
+
+
+    /* playback control */
+void Intf_VLCWrapper::playSlower()
+{
+    if( p_input_bank->pp_input[0] != NULL )
+    {
+        input_SetStatus( p_input_bank->pp_input[0], INPUT_STATUS_SLOWER );
+
+        vlc_mutex_lock( &p_main->p_playlist->change_lock );
+        p_main->p_playlist->b_stopped = 0;
+        vlc_mutex_unlock( &p_main->p_playlist->change_lock );
+    }
+}
+
+void Intf_VLCWrapper::playFaster()
+{
+    if( p_input_bank->pp_input[0] != NULL )
+    {
+        input_SetStatus( p_input_bank->pp_input[0], INPUT_STATUS_FASTER );
+
+        vlc_mutex_lock( &p_main->p_playlist->change_lock );
+        p_main->p_playlist->b_stopped = 0;
+        vlc_mutex_unlock( &p_main->p_playlist->change_lock );
+    }
+}
+
+void Intf_VLCWrapper::volume_mute()
+{
+    if( p_aout_bank->i_count > 0
+       && p_aout_bank->pp_aout[0] != NULL )
+    {
+           if( !p_main->p_intf->p_sys->b_mute )
+               {
+                   p_main->p_intf->p_sys->i_saved_volume = 
+                                       p_aout_bank->pp_aout[0]->i_volume;
+                   p_aout_bank->pp_aout[0]->i_volume = 0;
+                   p_main->p_intf->p_sys->b_mute = 1;
+               }
+    }
+}
+
+void Intf_VLCWrapper::volume_restore()
+{
+    if( p_aout_bank->i_count > 0
+       && p_aout_bank->pp_aout[0] != NULL )
+    {
+           p_aout_bank->pp_aout[0]->i_volume = 
+                             p_main->p_intf->p_sys->i_saved_volume;
+               p_main->p_intf->p_sys->i_saved_volume = 0;
+           p_main->p_intf->p_sys->b_mute = 0;
+    }
+}
+
+void Intf_VLCWrapper::set_volume(int value)
+{
+    if( p_aout_bank->i_count > 0
+       && p_aout_bank->pp_aout[0] != NULL )
+    {
+               // make sure value is within bounds
+               if (value < 0)
+                       value = 0;
+               if (value > VOLUME_MAX)
+                       value = VOLUME_MAX;
+               vlc_mutex_lock( &p_aout_bank->lock );
+                       // unmute volume if muted
+                       if ( p_main->p_intf->p_sys->b_mute )
+                               p_main->p_intf->p_sys->b_mute = 0;
+                       // set every stream to the given value
+                       for ( int i = 0 ; i < p_aout_bank->i_count ; i++ )
+                       {
+                               if ( p_aout_bank->pp_aout[i] )
+                                       p_aout_bank->pp_aout[i]->i_volume = value;
+                       }
+               vlc_mutex_unlock( &p_aout_bank->lock );
+    }
+}
+
+void Intf_VLCWrapper::toggle_mute()
+{
+    if( p_aout_bank->i_count > 0
+       && p_aout_bank->pp_aout[0] != NULL )
+       {
+           if ( p_main->p_intf->p_sys->b_mute )
+           {
+               Intf_VLCWrapper::volume_restore();
+           }
+           else
+           {
+               Intf_VLCWrapper::volume_mute();
+           }
+       }
+}
+
+bool Intf_VLCWrapper::is_muted()
+{
+       bool muted = true;
+       if ( p_aout_bank->i_count > 0 )
+       {
+               vlc_mutex_lock( &p_aout_bank->lock );
+                       for ( int i = 0 ; i < p_aout_bank->i_count ; i++ )
+                       {
+                               if ( p_aout_bank->pp_aout[i]
+                                        && p_aout_bank->pp_aout[i]->i_volume > 0 )
+                               {
+                                       muted = false;
+                                       break;
+                               }
+                       }
+               vlc_mutex_unlock( &p_aout_bank->lock );
+// unfortunately, this is not reliable!
+//             return p_main->p_intf->p_sys->b_mute;
+       }
+       return muted;
+}
+
+bool Intf_VLCWrapper::is_playing()
+{
+       bool playing = false;
+       if ( p_input_bank->pp_input[0] )
+       {
+               switch ( p_input_bank->pp_input[0]->stream.control.i_status )
+               {
+                       case PLAYING_S:
+                       case FORWARD_S:
+                       case BACKWARD_S:
+                       case START_S:
+                               playing = true;
+                   break;
+                       case PAUSE_S:
+                       case UNDEF_S:
+                       case NOT_STARTED_S:
+                       default:
+                               break;
+               }
+       }
+       return playing;
+}
+
+void Intf_VLCWrapper::maxvolume()
+{
+    if( p_aout_bank->i_count > 0
+       && p_aout_bank->pp_aout[0] != NULL )
+    {
+           if( p_main->p_intf->p_sys->b_mute )
+           {
+               p_main->p_intf->p_sys->i_saved_volume = VOLUME_MAX;
+           }
+           else
+           {
+               p_aout_bank->pp_aout[0]->i_volume = VOLUME_MAX;
+           }
+    }
+}
+
+bool Intf_VLCWrapper::has_audio()
+{
+       return (p_aout_bank->i_count > 0);
+}
+
+//void Intf_VLCWrapper::fullscreen()
+//{
+//    if( p_vout_bank->pp_vout[0] != NULL )
+//    {
+//        p_vout_bank->pp_vout[0]->i_changes |= VOUT_FULLSCREEN_CHANGE;
+//    }
+//}
+
+void Intf_VLCWrapper::eject(){}
+
+    /* playback info */
+
+const char*
+Intf_VLCWrapper::getTimeAsString()
+{
+       static char psz_currenttime[ OFFSETTOTIME_MAX_SIZE ];
+        
+       if( p_input_bank->pp_input[0] == NULL )
+               return ("-:--:--");
+
+       input_OffsetToTime( p_input_bank->pp_input[0],
+                                               psz_currenttime,
+                                               p_input_bank->pp_input[0]->stream.p_selected_area->i_tell );
+
+       return(psz_currenttime);
+}
+
+float  Intf_VLCWrapper::getTimeAsFloat()
+{
+    float f_time = 0.0;
+
+    if( p_input_bank->pp_input[0] != NULL )
+    {
+        f_time = (float)p_input_bank->pp_input[0]->stream.p_selected_area->i_tell / 
+                 (float)p_input_bank->pp_input[0]->stream.p_selected_area->i_size;
+    }    
+
+    return( f_time );
+}
+
+void   Intf_VLCWrapper::setTimeAsFloat(float f_position)
+{
+    if( p_input_bank->pp_input[0] != NULL )
+    {
+        input_Seek( p_input_bank->pp_input[0], 
+                    (long long int)(p_input_bank->pp_input[0]->stream.p_selected_area->i_size * f_position) );
+    }
+}
+
+bool   Intf_VLCWrapper::playlistPlaying()
+{ 
+    return( !p_main->p_playlist->b_stopped );
+}
+
+BList  *Intf_VLCWrapper::playlistAsArray()
+{ 
+    int i;
+    BList* p_list = new BList(p_main->p_playlist->i_size);
+    
+    vlc_mutex_lock( &p_main->p_playlist->change_lock );
+
+    for( i = 0; i < p_main->p_playlist->i_size; i++ )
+    {
+        p_list->AddItem(new BString(p_main->p_playlist->p_item[i].psz_name));
+    }
+
+    vlc_mutex_unlock( &p_main->p_playlist->change_lock );
+        
+    return( p_list );
+}
+
+// getPlaylistInfo
+void
+Intf_VLCWrapper::getPlaylistInfo( int32& currentIndex, int32& maxIndex )
+{
+       currentIndex = -1;
+       maxIndex = -1;
+       if ( playlist_t* list = (playlist_t*)p_main->p_playlist )
+       {
+           vlc_mutex_lock( &list->change_lock );
+
+               maxIndex = list->i_size;
+               if ( maxIndex > 0 )
+                       currentIndex = list->i_index + 1;
+               else
+                       maxIndex = -1;
+
+           vlc_mutex_unlock( &list->change_lock );
+       }
+}
+
+// getTitleInfo
+void  
+Intf_VLCWrapper::getTitleInfo( int32& currentIndex, int32& maxIndex )
+{
+       currentIndex = -1;
+       maxIndex = -1;
+       if ( input_thread_s* input = p_input_bank->pp_input[0] )
+       {
+               vlc_mutex_lock( &input->stream.stream_lock );
+
+               maxIndex = input->stream.i_area_nb - 1;
+               if ( maxIndex > 0)
+                       currentIndex = input->stream.p_selected_area->i_id;
+               else
+                       maxIndex = -1;
+
+               vlc_mutex_unlock( &input->stream.stream_lock );
+       }
+}
+
+// getChapterInfo
+void
+Intf_VLCWrapper::getChapterInfo( int32& currentIndex, int32& maxIndex )
+{
+       currentIndex = -1;
+       maxIndex = -1;
+       if ( input_thread_s* input = p_input_bank->pp_input[0] )
+       {
+               vlc_mutex_lock( &input->stream.stream_lock );
+
+               maxIndex = input->stream.p_selected_area->i_part_nb - 1;
+               if ( maxIndex > 0)
+                       currentIndex = input->stream.p_selected_area->i_part;
+               else
+                       maxIndex = -1;
+
+               vlc_mutex_unlock( &input->stream.stream_lock );
+       }
+}
+
+
+    /* open file/disc/network */
+void Intf_VLCWrapper::openFiles( BList* o_files, bool replace )
+{
+       BString *o_file;
+       int i_end = p_main->p_playlist->i_size;
+       intf_thread_t * p_intf = p_main->p_intf;
+
+       // make sure we remove the "loop" item from the end before mucking arround
+    if ( p_intf->p_sys->b_loop )
+    {
+               intf_PlaylistDelete( p_main->p_playlist, i_end - 1 );
+               i_end--;
+    }
+
+       // add the new files to the playlist
+       while ( ( o_file = (BString *)o_files->LastItem() ) )
+       {
+               o_files->RemoveItem(o_files->CountItems() - 1);
+               intf_PlaylistAdd( p_main->p_playlist, PLAYLIST_END, 
+                                                 o_file->String() );
+               delete o_file;
+    }
+
+       if ( replace || i_end < 1 )
+       {
+               // end current item
+               if ( p_input_bank->pp_input[0] != NULL )
+                       p_input_bank->pp_input[0]->b_eof = 1;
+               // remove everything that was in playlist before
+               for ( int i = 0; i < i_end; i++ )
+                       intf_PlaylistDelete( p_main->p_playlist, 0 );
+               // jump to beginning and start playing
+               intf_PlaylistJumpto( p_main->p_playlist, -1 );
+       }
+
+       // if we were looping, add special "loop" item back to list
+       if ( p_intf->p_sys->b_loop )
+               intf_PlaylistAdd( p_main->p_playlist, PLAYLIST_END, "vlc:loop" );
+}
+
+void Intf_VLCWrapper::openDisc(BString o_type, BString o_device, int i_title, int i_chapter)
+{
+    BString o_source("");
+    int i_end = p_main->p_playlist->i_size;
+    intf_thread_t * p_intf = p_main->p_intf;
+
+    o_source << o_type << ":" << o_device ;
+
+    if ( p_intf->p_sys->b_loop )
+    {
+        intf_PlaylistDelete( p_main->p_playlist,
+                             p_main->p_playlist->i_size - 1 );
+    }
+
+    intf_PlaylistAdd( p_main->p_playlist, PLAYLIST_END,
+                      o_source.String() );
+
+    /* stop current item, select added item */
+    if( p_input_bank->pp_input[0] != NULL )
+    {
+        p_input_bank->pp_input[0]->b_eof = 1;
+    }
+
+    intf_PlaylistJumpto( p_main->p_playlist, i_end - 1 );
+
+    if ( p_intf->p_sys->b_loop )
+    {
+        intf_PlaylistAdd( p_main->p_playlist, PLAYLIST_END, 
+                          "vlc:loop" );
+    }
+}
+
+void Intf_VLCWrapper::openNet(BString o_addr, int i_port)
+{
+}
+
+void Intf_VLCWrapper::openNetChannel(BString o_addr, int i_port)
+{
+}
+
+void Intf_VLCWrapper::openNetHTTP(BString o_addr)
+{
+}
+
+
+    /* menus management */
+    void Intf_VLCWrapper::toggleProgram(int i_program){}
+
+void Intf_VLCWrapper::toggleTitle(int i_title)
+{
+    input_thread_t * p_input = p_input_bank->pp_input[0];
+
+    input_ChangeArea( p_input,
+                      p_input->stream.pp_areas[i_title] );
+
+    vlc_mutex_lock( &p_input->stream.stream_lock );
+    setupMenus();
+
+    vlc_mutex_unlock( &p_input->stream.stream_lock );
+    input_SetStatus( p_input, INPUT_STATUS_PLAY );
+}
+
+void Intf_VLCWrapper::toggleChapter(int i_chapter)
+{
+    input_thread_t * p_input = p_input_bank->pp_input[0];
+    p_input->stream.p_selected_area->i_part = i_chapter;
+    input_ChangeArea( p_input,
+                      p_input->stream.p_selected_area );
+
+    vlc_mutex_lock( &p_input->stream.stream_lock );
+    setupMenus();
+    vlc_mutex_unlock( &p_input->stream.stream_lock );
+
+    input_SetStatus( p_input, INPUT_STATUS_PLAY );
+}
+
+void Intf_VLCWrapper::toggleLanguage( int i_language )
+{
+       if ( input_thread_t * p_input = p_input_bank->pp_input[0] )
+       {
+               if ( i_language == -1 )
+               {
+                       input_ChangeES( p_input, NULL, AUDIO_ES );
+               }
+               else if ( i_language >= 0
+                                 && i_language < p_input->stream.i_es_number )
+               {
+                       input_ChangeES( p_input, p_input->stream.pp_es[i_language], AUDIO_ES );
+               }
+       }
+}
+
+void Intf_VLCWrapper::toggleSubtitle(int i_subtitle)
+{
+       if ( input_thread_t * p_input = p_input_bank->pp_input[0] )
+       {
+               if ( i_subtitle == -1 )
+               {
+                       input_ChangeES( p_input, NULL, SPU_ES );
+               }
+               else if ( i_subtitle >= 0
+                                 && i_subtitle < p_input->stream.i_es_number )
+               {
+                       input_ChangeES( p_input, p_input->stream.pp_es[i_subtitle], SPU_ES );
+               }
+       }
+}
+
+
+    void Intf_VLCWrapper::setupMenus(){}
+    
diff --git a/plugins/beos/intf_vlc_wrapper.h b/plugins/beos/intf_vlc_wrapper.h
new file mode 100644 (file)
index 0000000..23062a1
--- /dev/null
@@ -0,0 +1,114 @@
+/*****************************************************************************
+ * intf_vlc_wrapper.h: BeOS plugin for vlc (derived from MacOS X port )
+ *****************************************************************************
+ * Copyright (C) 2001 VideoLAN
+ * $Id: intf_vlc_wrapper.h,v 1.1.2.4 2002/10/09 15:29:51 stippi Exp $
+ *
+ * Authors: Florian G. Pflug <fgp@phlo.org>
+ *          Jon Lech Johansen <jon-vl@nanocrew.net>
+ *          Tony Casltey <tony@castley.net>
+ *          Stephan Aßmus <stippi@yellowbites.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ *****************************************************************************/
+class InterfaceWindow;
+
+/*****************************************************************************
+ * intf_sys_t: description and status of FB interface
+ *****************************************************************************/
+typedef struct intf_sys_s
+{
+    InterfaceWindow * p_window;
+    char              i_key;
+    int               b_disabled_menus;
+    int                      i_part;
+    int               i_saved_volume;
+    int               b_loop;
+    int               i_channel;
+    int               b_mute;
+} intf_sys_t;
+
+/* Intf_VLCWrapper is a singleton class
+    (only one instance at any time) */
+class Intf_VLCWrapper
+{
+public:
+    static bool manage();
+    static void quit();
+    /* playlist control */
+    static bool playlistPlay();
+    static void playlistPause();
+    static void playlistStop();
+    static void playlistNext();
+    static void playlistPrev();
+    static void playlistJumpTo( int pos );
+    static int playlistCurrentPos();
+    static int playlistSize();
+       static void playlistLock();
+       static void playlistUnlock();
+
+    static void getNavCapabilities( bool* canSkipPrev,
+                                                               bool* canSkipNext );
+       static void     navigatePrev();
+       static void     navigateNext();
+
+//    static void channelNext();
+//    static void channelPrev();
+    static void loop();
+
+    /* playback control */
+    static void playSlower();
+    static void playFaster();
+    static void volume_mute();
+    static void volume_restore();
+    static void set_volume(int value);
+    static void toggle_mute();
+    static bool is_muted();
+    static bool is_playing();
+    static void maxvolume();
+    static bool has_audio();
+//    static void fullscreen();
+    static void eject();
+
+    /* playback info */
+    static const char* getTimeAsString();
+    static float  getTimeAsFloat();
+    static void   setTimeAsFloat( float i_offset );
+    static bool   playlistPlaying();
+    static BList* playlistAsArray();
+    static void   getPlaylistInfo( int32& currentIndex,
+                                                          int32& maxIndex );
+    static void   getTitleInfo( int32& currentIndex,
+                                                       int32& maxIndex );
+    static void   getChapterInfo( int32& currentIndex,
+                                                         int32& maxIndex );
+
+    /* open file/disc/network */
+    static void openFiles( BList *o_files, bool replace = true );
+    static void openDisc( BString o_type, BString o_device,
+                                         int i_title, int i_chapter );
+    static void openNet( BString o_addr, int i_port );
+    static void openNetChannel( BString o_addr, int i_port );
+    static void openNetHTTP( BString o_addr );
+
+    /* menus management */
+    static void toggleProgram( int i_program );
+    static void toggleTitle( int i_title );
+    static void toggleChapter( int i_chapter );
+    static void toggleLanguage( int i_language );
+    static void toggleSubtitle( int i_subtitle );
+    static void setupMenus();
+};
+
diff --git a/plugins/familiar/Makefile b/plugins/familiar/Makefile
new file mode 100644 (file)
index 0000000..f81918f
--- /dev/null
@@ -0,0 +1 @@
+familiar_SOURCES = familiar.c familiar_interface.c familiar_support.c familiar_callbacks.c
diff --git a/plugins/familiar/familiar.c b/plugins/familiar/familiar.c
new file mode 100644 (file)
index 0000000..a65c7b3
--- /dev/null
@@ -0,0 +1,290 @@
+/*****************************************************************************
+ * familiar.c : familiar plugin for vlc
+ *****************************************************************************
+ * Copyright (C) 2002 VideoLAN
+ * $Id: familiar.c,v 1.8.2.8 2002/10/13 20:20:46 jpsaman Exp $
+ *
+ * Authors: Jean-Paul Saman <jpsaman@wxs.nl>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ *****************************************************************************/
+
+/*****************************************************************************
+ * Preamble
+ *****************************************************************************/
+#include <stdlib.h>                                      /* malloc(), free() */
+#include <errno.h>                                                 /* ENOMEM */
+#include <string.h>                                            /* strerror() */
+#include <stdio.h>
+
+#include <videolan/vlc.h>
+
+#include <gtk/gtk.h>
+
+#include "stream_control.h"
+#include "input_ext-intf.h"
+
+#include "interface.h"
+#include "intf_playlist.h"
+
+#include "video.h"
+#include "video_output.h"
+
+#include "familiar_callbacks.h"
+#include "familiar_interface.h"
+#include "familiar_support.h"
+#include "familiar.h"
+
+/*****************************************************************************
+ * Local prototypes.
+ *****************************************************************************/
+static void intf_getfunctions ( function_list_t * p_function_list );
+static int  Open         ( intf_thread_t *p_intf );
+static void Close        ( intf_thread_t *p_intf );
+static void Run          ( intf_thread_t * );
+
+static gint GtkManage         ( gpointer p_data );
+void GtkAutoPlayFile( void );
+
+/*****************************************************************************
+ * Module descriptor
+ *****************************************************************************/
+#define AUTOPLAYFILE_TEXT  N_("autoplay selected file")
+#define AUTOPLAYFILE_LONGTEXT N_("automatically play a file when selected in the "\
+        "file selection list")
+
+MODULE_CONFIG_START
+ADD_CATEGORY_HINT( N_("Miscellaneous"), NULL )
+ADD_BOOL( "familiar-autoplayfile", 1, GtkAutoPlayFile, AUTOPLAYFILE_TEXT, AUTOPLAYFILE_LONGTEXT)
+MODULE_CONFIG_STOP
+
+MODULE_INIT_START
+    SET_DESCRIPTION( _("Familiar Linux Gtk+ interface module") )
+#ifndef WIN32
+    if( getenv( "DISPLAY" ) == NULL )
+    {
+        ADD_CAPABILITY( INTF, 10 )
+    }
+    else
+#endif
+    {
+        ADD_CAPABILITY( INTF, 70 )
+    }
+MODULE_INIT_STOP
+
+MODULE_ACTIVATE_START
+    intf_getfunctions( &p_module->p_functions->intf );
+MODULE_ACTIVATE_STOP
+
+MODULE_DEACTIVATE_START
+MODULE_DEACTIVATE_STOP
+
+/*****************************************************************************
+ * g_atexit: kludge to avoid the Gtk+ thread to segfault at exit
+ *****************************************************************************
+ * gtk_init() makes several calls to g_atexit() which calls atexit() to
+ * register tidying callbacks to be called at program exit. Since the Gtk+
+ * plugin is likely to be unloaded at program exit, we have to export this
+ * symbol to intercept the g_atexit() calls. Talk about crude hack.
+ *****************************************************************************/
+void g_atexit( GVoidFunc func )
+{
+    intf_thread_t *p_intf = p_main->p_intf;
+    int i_dummy;
+
+    for( i_dummy = 0;
+         i_dummy < MAX_ATEXIT && p_intf->p_sys->pf_callback[i_dummy] != NULL;
+         i_dummy++ )
+    {
+        ;
+    }
+
+    if( i_dummy >= MAX_ATEXIT - 1 )
+    {
+        intf_ErrMsg( "too many atexit() callbacks to register" );
+        return;
+    }
+
+    p_intf->p_sys->pf_callback[i_dummy]     = func;
+    p_intf->p_sys->pf_callback[i_dummy + 1] = NULL;
+}
+
+/*****************************************************************************
+ * Functions exported as capabilities. They are declared as static so that
+ * we don't pollute the namespace too much.
+ *****************************************************************************/
+static void intf_getfunctions( function_list_t * p_function_list )
+{
+    p_function_list->functions.intf.pf_open  = Open;
+    p_function_list->functions.intf.pf_close = Close;
+    p_function_list->functions.intf.pf_run   = Run;
+}
+
+/*****************************************************************************
+ * Open: initialize and create window
+ *****************************************************************************/
+static int Open( intf_thread_t *p_intf )
+{   
+    /* Allocate instance and initialize some members */
+    p_intf->p_sys = malloc( sizeof( intf_sys_t ) );
+    if( p_intf->p_sys == NULL )
+    {
+        intf_ErrMsg("error: %s", strerror(ENOMEM));
+        return (1);
+    }
+
+    /* Initialize Gtk+ thread */
+    p_intf->p_sys->b_autoplayfile = 1;
+    p_intf->p_sys->pf_callback[0] = NULL;
+
+    p_intf->pf_run = Run;
+
+    return (0);
+}
+
+/*****************************************************************************
+ * Close: destroy interface window
+ *****************************************************************************/
+static void Close( intf_thread_t *p_intf )
+{   
+    /* Destroy structure */
+    free( p_intf->p_sys );
+}
+
+/*****************************************************************************
+ * Run: Gtk+ thread
+ *****************************************************************************
+ * this part of the interface is in a separate thread so that we can call
+ * gtk_main() from within it without annoying the rest of the program.
+ *****************************************************************************/
+static void Run( intf_thread_t *p_intf )
+{
+    /* gtk_init needs to know the command line. We don't care, so we
+     * give it an empty one */
+    char  *p_args[] = { "" };
+    char **pp_args  = p_args;
+    int    i_args   = 1;
+    int    i_dummy  = 0;
+
+    /* Initialize Gtk+ */
+    gtk_set_locale ();
+
+    /* gtk_init will register stuff with g_atexit, so we need to take
+     * the global lock if we want to be able to intercept the calls */
+    gtk_init( &i_args, &pp_args );
+
+    /* Create some useful widgets that will certainly be used */
+// FIXME: magic path
+    add_pixmap_directory("share");
+    add_pixmap_directory("/usr/share/videolan");
+
+    p_intf->p_sys->p_window = create_familiar();
+    if (p_intf->p_sys->p_window == NULL)
+    {
+        intf_ErrMsg( "unable to create familiar interface" );
+    }
+
+    /* Set the title of the main window */
+    gtk_window_set_title( GTK_WINDOW(p_intf->p_sys->p_window),
+                          VOUT_TITLE " (Familiar Linux interface)");
+
+    p_intf->p_sys->p_notebook = GTK_NOTEBOOK( gtk_object_get_data(
+        GTK_OBJECT( p_intf->p_sys->p_window ), "notebook" ) );
+
+    p_intf->p_sys->p_clist = GTK_CLIST( gtk_object_get_data(
+        GTK_OBJECT( p_intf->p_sys->p_window ), "clistmedia" ) );
+    gtk_clist_set_column_visibility (GTK_CLIST (p_intf->p_sys->p_clist), 2, FALSE);
+    gtk_clist_set_column_visibility (GTK_CLIST (p_intf->p_sys->p_clist), 3, FALSE);
+    gtk_clist_set_column_visibility (GTK_CLIST (p_intf->p_sys->p_clist), 4, FALSE);
+    gtk_clist_column_titles_show (GTK_CLIST (p_intf->p_sys->p_clist));
+
+    /* Store p_intf to keep an eye on it */
+    gtk_object_set_data( GTK_OBJECT(p_intf->p_sys->p_window),
+                         "p_intf", p_intf );
+    /* Show the control window */
+    gtk_widget_show( p_intf->p_sys->p_window );
+    ReadDirectory(p_intf->p_sys->p_clist, ".");
+
+    /* Sleep to avoid using all CPU - since some interfaces needs to access
+     * keyboard events, a 100ms delay is a good compromise */
+    i_dummy = gtk_timeout_add( INTF_IDLE_SLEEP / 1000, GtkManage, p_intf );
+
+    /* Enter Gtk mode */
+    gtk_main();
+
+    /* Remove the timeout */
+    gtk_timeout_remove( i_dummy );
+
+    /* Launch stored callbacks */
+    for( i_dummy = 0;
+         i_dummy < MAX_ATEXIT && p_intf->p_sys->pf_callback[i_dummy] != NULL;
+         i_dummy++ )
+    {
+        p_intf->p_sys->pf_callback[i_dummy]();
+    }
+}
+
+/* following functions are local */
+
+/*****************************************************************************
+ * GtkManage: manage main thread messages
+ *****************************************************************************
+ * In this function, called approx. 10 times a second, we check what the
+ * main program wanted to tell us.
+ *****************************************************************************/
+static gint GtkManage( gpointer p_data )
+{
+#define p_intf ((intf_thread_t *)p_data)
+    vlc_mutex_lock( &p_intf->change_lock );
+
+    /* Manage core vlc functions through the callback */
+    p_intf->pf_manage( p_intf );
+
+    if( p_intf->b_die )
+    {
+        vlc_mutex_unlock( &p_intf->change_lock );
+
+        /* Prepare to die, young Skywalker */
+        gtk_main_quit();
+
+        /* Just in case */
+        return( FALSE );
+    }
+
+    vlc_mutex_unlock( &p_intf->change_lock );
+
+    return( TRUE );
+
+#undef p_intf
+}
+
+/*****************************************************************************
+ * GtkAutoplayFile: Autoplay file depending on configuration settings
+ *****************************************************************************
+ * FIXME: we should get the intf as parameter
+ *****************************************************************************/
+void GtkAutoPlayFile( void )
+{
+    GtkWidget *cbautoplay;
+
+    cbautoplay = GTK_WIDGET( gtk_object_get_data(
+                   GTK_OBJECT( p_main->p_intf->p_sys->p_window ), "cbautoplay" ) );
+    if( !config_GetIntVariable( "familiar-autoplayfile" ) )
+       p_main->p_intf->p_sys->b_autoplayfile=0;
+    else
+       p_main->p_intf->p_sys->b_autoplayfile=1;
+
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(cbautoplay),p_main->p_intf->p_sys->b_autoplayfile);
+}
diff --git a/plugins/familiar/familiar.glade b/plugins/familiar/familiar.glade
new file mode 100644 (file)
index 0000000..91f9b15
--- /dev/null
@@ -0,0 +1,560 @@
+<?xml version="1.0"?>
+<GTK-Interface>
+
+<project>
+  <name>Familiar</name>
+  <program_name>familiar</program_name>
+  <directory></directory>
+  <source_directory></source_directory>
+  <pixmaps_directory>../../share</pixmaps_directory>
+  <language>C</language>
+  <gnome_support>False</gnome_support>
+  <gettext_support>True</gettext_support>
+  <use_widget_names>True</use_widget_names>
+  <output_main_file>False</output_main_file>
+  <output_build_files>False</output_build_files>
+  <main_source_file>familiar_interface.c</main_source_file>
+  <main_header_file>familiar_interface.h</main_header_file>
+  <handler_source_file>familiar_callbacks.c</handler_source_file>
+  <handler_header_file>familiar_callbacks.h</handler_header_file>
+  <support_source_file>familiar_support.c</support_source_file>
+  <support_header_file>familiar_support.h</support_header_file>
+</project>
+
+<widget>
+  <class>GtkWindow</class>
+  <name>familiar</name>
+  <width>240</width>
+  <height>300</height>
+  <signal>
+    <name>delete_event</name>
+    <handler>on_familiar_delete_event</handler>
+    <last_modification_time>Wed, 21 Aug 2002 19:12:40 GMT</last_modification_time>
+  </signal>
+  <title>vlc (familiar)</title>
+  <type>GTK_WINDOW_TOPLEVEL</type>
+  <position>GTK_WIN_POS_NONE</position>
+  <modal>False</modal>
+  <allow_shrink>True</allow_shrink>
+  <allow_grow>True</allow_grow>
+  <auto_shrink>True</auto_shrink>
+
+  <widget>
+    <class>GtkVBox</class>
+    <name>vbox</name>
+    <homogeneous>False</homogeneous>
+    <spacing>0</spacing>
+
+    <widget>
+      <class>GtkToolbar</class>
+      <name>toolbar</name>
+      <border_width>2</border_width>
+      <width>112</width>
+      <height>16</height>
+      <orientation>GTK_ORIENTATION_HORIZONTAL</orientation>
+      <type>GTK_TOOLBAR_ICONS</type>
+      <space_size>5</space_size>
+      <space_style>GTK_TOOLBAR_SPACE_EMPTY</space_style>
+      <relief>GTK_RELIEF_NORMAL</relief>
+      <tooltips>True</tooltips>
+      <child>
+       <padding>0</padding>
+       <expand>True</expand>
+       <fill>True</fill>
+      </child>
+
+      <widget>
+       <class>GtkButton</class>
+       <child_name>Toolbar:button</child_name>
+       <name>toolbar_open</name>
+       <tooltip>Open file</tooltip>
+       <signal>
+         <name>clicked</name>
+         <handler>on_toolbar_open_clicked</handler>
+         <last_modification_time>Wed, 24 Jul 2002 18:28:31 GMT</last_modification_time>
+       </signal>
+       <label>Open</label>
+       <icon>familiar-openb16x16.xpm</icon>
+      </widget>
+
+      <widget>
+       <class>GtkButton</class>
+       <child_name>Toolbar:button</child_name>
+       <name>toolbar_preferences</name>
+       <tooltip>Preferences</tooltip>
+       <signal>
+         <name>clicked</name>
+         <handler>on_toolbar_preferences_clicked</handler>
+         <last_modification_time>Wed, 24 Jul 2002 18:29:05 GMT</last_modification_time>
+       </signal>
+       <label>Preferences</label>
+       <icon>familiar-preferencesb16x16.xpm</icon>
+      </widget>
+
+      <widget>
+       <class>GtkButton</class>
+       <child_name>Toolbar:button</child_name>
+       <name>toolbar_rewind</name>
+       <tooltip>Rewind stream</tooltip>
+       <signal>
+         <name>clicked</name>
+         <handler>on_toolbar_rewind_clicked</handler>
+         <last_modification_time>Wed, 24 Jul 2002 18:28:45 GMT</last_modification_time>
+       </signal>
+       <label>Rewind</label>
+       <icon>familiar-rewindb16x16.xpm</icon>
+       <child>
+         <new_group>True</new_group>
+       </child>
+      </widget>
+
+      <widget>
+       <class>GtkButton</class>
+       <child_name>Toolbar:button</child_name>
+       <name>toolbar_pause</name>
+       <tooltip>Pause stream</tooltip>
+       <signal>
+         <name>clicked</name>
+         <handler>on_toolbar_pause_clicked</handler>
+         <last_modification_time>Wed, 24 Jul 2002 18:28:58 GMT</last_modification_time>
+       </signal>
+       <label>Pause</label>
+       <icon>familiar-pauseb16x16.xpm</icon>
+      </widget>
+
+      <widget>
+       <class>GtkButton</class>
+       <child_name>Toolbar:button</child_name>
+       <name>toolbar_play</name>
+       <tooltip>Play stream</tooltip>
+       <signal>
+         <name>clicked</name>
+         <handler>on_toolbar_play_clicked</handler>
+         <last_modification_time>Wed, 24 Jul 2002 18:29:12 GMT</last_modification_time>
+       </signal>
+       <label>Play</label>
+       <icon>familiar-playb16x16.xpm</icon>
+      </widget>
+
+      <widget>
+       <class>GtkButton</class>
+       <child_name>Toolbar:button</child_name>
+       <name>toolbar_stop</name>
+       <tooltip>Stop stream</tooltip>
+       <signal>
+         <name>clicked</name>
+         <handler>on_toolbar_stop_clicked</handler>
+         <last_modification_time>Wed, 24 Jul 2002 18:29:18 GMT</last_modification_time>
+       </signal>
+       <label>Stop</label>
+       <icon>familiar-stopb16x16.xpm</icon>
+      </widget>
+
+      <widget>
+       <class>GtkButton</class>
+       <child_name>Toolbar:button</child_name>
+       <name>toolbar_forward</name>
+       <tooltip>Forward stream</tooltip>
+       <signal>
+         <name>clicked</name>
+         <handler>on_toolbar_forward_clicked</handler>
+         <last_modification_time>Wed, 24 Jul 2002 18:29:25 GMT</last_modification_time>
+       </signal>
+       <label>Forward</label>
+       <icon>familiar-forwardb16x16.xpm</icon>
+      </widget>
+
+      <widget>
+       <class>GtkButton</class>
+       <child_name>Toolbar:button</child_name>
+       <name>toolbar_about</name>
+       <tooltip>About</tooltip>
+       <signal>
+         <name>clicked</name>
+         <handler>on_toolbar_about_clicked</handler>
+         <last_modification_time>Wed, 24 Jul 2002 18:29:31 GMT</last_modification_time>
+       </signal>
+       <label>About</label>
+       <icon>vlc16x16.xpm</icon>
+       <child>
+         <new_group>True</new_group>
+       </child>
+      </widget>
+    </widget>
+
+    <widget>
+      <class>GtkNotebook</class>
+      <name>notebook</name>
+      <can_focus>True</can_focus>
+      <show_tabs>True</show_tabs>
+      <show_border>True</show_border>
+      <tab_pos>GTK_POS_TOP</tab_pos>
+      <scrollable>False</scrollable>
+      <tab_hborder>2</tab_hborder>
+      <tab_vborder>2</tab_vborder>
+      <popup_enable>False</popup_enable>
+      <child>
+       <padding>0</padding>
+       <expand>True</expand>
+       <fill>True</fill>
+      </child>
+
+      <widget>
+       <class>GtkFixed</class>
+       <name>fixedMedia</name>
+
+       <widget>
+         <class>GtkLabel</class>
+         <name>labelUrl</name>
+         <x>4</x>
+         <y>8</y>
+         <width>38</width>
+         <height>18</height>
+         <label>URL:</label>
+         <justify>GTK_JUSTIFY_CENTER</justify>
+         <wrap>False</wrap>
+         <xalign>0.5</xalign>
+         <yalign>0.5</yalign>
+         <xpad>0</xpad>
+         <ypad>0</ypad>
+       </widget>
+
+       <widget>
+         <class>GtkScrolledWindow</class>
+         <name>scrolledwindow1</name>
+         <x>0</x>
+         <y>32</y>
+         <width>240</width>
+         <height>208</height>
+         <hscrollbar_policy>GTK_POLICY_ALWAYS</hscrollbar_policy>
+         <vscrollbar_policy>GTK_POLICY_ALWAYS</vscrollbar_policy>
+         <hupdate_policy>GTK_UPDATE_CONTINUOUS</hupdate_policy>
+         <vupdate_policy>GTK_UPDATE_CONTINUOUS</vupdate_policy>
+
+         <widget>
+           <class>GtkCList</class>
+           <name>clistmedia</name>
+           <can_focus>True</can_focus>
+           <signal>
+             <name>select_row</name>
+             <handler>on_clistmedia_select_row</handler>
+             <last_modification_time>Sun, 18 Aug 2002 19:40:44 GMT</last_modification_time>
+           </signal>
+           <signal>
+             <name>click_column</name>
+             <handler>on_clistmedia_click_column</handler>
+             <last_modification_time>Sun, 18 Aug 2002 19:41:06 GMT</last_modification_time>
+           </signal>
+           <columns>5</columns>
+           <column_widths>123,80,80,80,80</column_widths>
+           <selection_mode>GTK_SELECTION_SINGLE</selection_mode>
+           <show_titles>True</show_titles>
+           <shadow_type>GTK_SHADOW_IN</shadow_type>
+
+           <widget>
+             <class>GtkLabel</class>
+             <child_name>CList:title</child_name>
+             <name>labelname</name>
+             <label>Name</label>
+             <justify>GTK_JUSTIFY_CENTER</justify>
+             <wrap>False</wrap>
+             <xalign>0.5</xalign>
+             <yalign>0.5</yalign>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+           </widget>
+
+           <widget>
+             <class>GtkLabel</class>
+             <child_name>CList:title</child_name>
+             <name>labeltype</name>
+             <label>Type</label>
+             <justify>GTK_JUSTIFY_CENTER</justify>
+             <wrap>False</wrap>
+             <xalign>0.5</xalign>
+             <yalign>0.5</yalign>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+           </widget>
+
+           <widget>
+             <class>GtkLabel</class>
+             <child_name>CList:title</child_name>
+             <name>labelsize</name>
+             <label>Size</label>
+             <justify>GTK_JUSTIFY_CENTER</justify>
+             <wrap>False</wrap>
+             <xalign>0.5</xalign>
+             <yalign>0.5</yalign>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+           </widget>
+
+           <widget>
+             <class>GtkLabel</class>
+             <child_name>CList:title</child_name>
+             <name>labeluid</name>
+             <label>User</label>
+             <justify>GTK_JUSTIFY_CENTER</justify>
+             <wrap>False</wrap>
+             <xalign>0.5</xalign>
+             <yalign>0.5</yalign>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+           </widget>
+
+           <widget>
+             <class>GtkLabel</class>
+             <child_name>CList:title</child_name>
+             <name>labelgid</name>
+             <label>Group</label>
+             <justify>GTK_JUSTIFY_CENTER</justify>
+             <wrap>False</wrap>
+             <xalign>0.5</xalign>
+             <yalign>0.5</yalign>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+           </widget>
+         </widget>
+       </widget>
+
+       <widget>
+         <class>GtkCombo</class>
+         <name>comboURL</name>
+         <x>40</x>
+         <y>4</y>
+         <width>185</width>
+         <height>24</height>
+         <value_in_list>False</value_in_list>
+         <ok_if_empty>True</ok_if_empty>
+         <case_sensitive>False</case_sensitive>
+         <use_arrows>True</use_arrows>
+         <use_arrows_always>False</use_arrows_always>
+         <items>/mnt
+file://
+ftp://
+http://
+udp://@:1234
+udpstream://@:1234
+</items>
+
+         <widget>
+           <class>GtkEntry</class>
+           <child_name>GtkCombo:entry</child_name>
+           <name>comboURL-entry</name>
+           <can_focus>True</can_focus>
+           <signal>
+             <name>changed</name>
+             <handler>on_comboURL-entry_changed</handler>
+             <last_modification_time>Thu, 01 Aug 2002 19:37:06 GMT</last_modification_time>
+           </signal>
+           <editable>True</editable>
+           <text_visible>True</text_visible>
+           <text_max_length>0</text_max_length>
+           <text>/mnt</text>
+         </widget>
+       </widget>
+      </widget>
+
+      <widget>
+       <class>GtkLabel</class>
+       <child_name>Notebook:tab</child_name>
+       <name>media</name>
+       <label>Media</label>
+       <justify>GTK_JUSTIFY_CENTER</justify>
+       <wrap>False</wrap>
+       <xalign>0.5</xalign>
+       <yalign>0.5</yalign>
+       <xpad>0</xpad>
+       <ypad>0</ypad>
+      </widget>
+
+      <widget>
+       <class>GtkFixed</class>
+       <name>fixedPreferences</name>
+
+       <widget>
+         <class>GtkButton</class>
+         <name>buttonSave</name>
+         <x>8</x>
+         <y>216</y>
+         <width>54</width>
+         <height>24</height>
+         <can_focus>True</can_focus>
+         <signal>
+           <name>clicked</name>
+           <handler>on_buttonSave_clicked</handler>
+           <last_modification_time>Tue, 01 Oct 2002 21:12:20 GMT</last_modification_time>
+         </signal>
+         <label>Save</label>
+         <relief>GTK_RELIEF_NORMAL</relief>
+       </widget>
+
+       <widget>
+         <class>GtkButton</class>
+         <name>buttonApply</name>
+         <x>64</x>
+         <y>216</y>
+         <width>54</width>
+         <height>24</height>
+         <can_focus>True</can_focus>
+         <signal>
+           <name>clicked</name>
+           <handler>on_buttonApply_clicked</handler>
+           <last_modification_time>Tue, 01 Oct 2002 21:12:27 GMT</last_modification_time>
+         </signal>
+         <label>Apply</label>
+         <relief>GTK_RELIEF_NORMAL</relief>
+       </widget>
+
+       <widget>
+         <class>GtkButton</class>
+         <name>buttonCancel</name>
+         <x>176</x>
+         <y>216</y>
+         <width>54</width>
+         <height>24</height>
+         <can_focus>True</can_focus>
+         <signal>
+           <name>clicked</name>
+           <handler>on_buttonCancel_clicked</handler>
+           <last_modification_time>Tue, 01 Oct 2002 21:12:35 GMT</last_modification_time>
+         </signal>
+         <label>Cancel</label>
+         <relief>GTK_RELIEF_NORMAL</relief>
+       </widget>
+
+       <widget>
+         <class>GtkCheckButton</class>
+         <name>cbautoplay</name>
+         <x>8</x>
+         <y>8</y>
+         <width>216</width>
+         <height>24</height>
+         <can_focus>True</can_focus>
+         <signal>
+           <name>toggled</name>
+           <handler>on_cbautoplay_toggled</handler>
+           <last_modification_time>Sun, 18 Aug 2002 20:00:52 GMT</last_modification_time>
+         </signal>
+         <label>Automatically play file.</label>
+         <active>True</active>
+         <draw_indicator>True</draw_indicator>
+       </widget>
+      </widget>
+
+      <widget>
+       <class>GtkLabel</class>
+       <child_name>Notebook:tab</child_name>
+       <name>preferences</name>
+       <label>Preference</label>
+       <justify>GTK_JUSTIFY_CENTER</justify>
+       <wrap>False</wrap>
+       <xalign>0.5</xalign>
+       <yalign>0.5</yalign>
+       <xpad>0</xpad>
+       <ypad>0</ypad>
+      </widget>
+
+      <widget>
+       <class>GtkFixed</class>
+       <name>fixedAbout</name>
+
+       <widget>
+         <class>GtkPixmap</class>
+         <name>logo</name>
+         <x>8</x>
+         <y>0</y>
+         <width>50</width>
+         <height>50</height>
+         <filename>vlc32x32.xpm</filename>
+         <xalign>0.5</xalign>
+         <yalign>0.5</yalign>
+         <xpad>0</xpad>
+         <ypad>0</ypad>
+         <build_insensitive>True</build_insensitive>
+       </widget>
+
+       <widget>
+         <class>GtkLabel</class>
+         <name>labelVlc</name>
+         <x>64</x>
+         <y>8</y>
+         <width>120</width>
+         <height>40</height>
+         <label>VideoLAN Client
+ for familiar Linux</label>
+         <justify>GTK_JUSTIFY_CENTER</justify>
+         <wrap>True</wrap>
+         <xalign>0.5</xalign>
+         <yalign>0.5</yalign>
+         <xpad>0</xpad>
+         <ypad>0</ypad>
+       </widget>
+
+       <widget>
+         <class>GtkLabel</class>
+         <name>labelCopyright</name>
+         <x>16</x>
+         <y>56</y>
+         <width>200</width>
+         <height>18</height>
+         <label>(c) 2002, the VideoLAN Team</label>
+         <justify>GTK_JUSTIFY_CENTER</justify>
+         <wrap>False</wrap>
+         <xalign>0.5</xalign>
+         <yalign>0.5</yalign>
+         <xpad>0</xpad>
+         <ypad>0</ypad>
+       </widget>
+
+       <widget>
+         <class>GtkLabel</class>
+         <name>labelAuthors</name>
+         <x>16</x>
+         <y>80</y>
+         <width>200</width>
+         <height>40</height>
+         <label>Authors: The VideoLAN Team, http://www.videolan.org</label>
+         <justify>GTK_JUSTIFY_CENTER</justify>
+         <wrap>True</wrap>
+         <xalign>0.5</xalign>
+         <yalign>0.5</yalign>
+         <xpad>0</xpad>
+         <ypad>0</ypad>
+       </widget>
+
+       <widget>
+         <class>GtkLabel</class>
+         <name>labelAbout</name>
+         <x>16</x>
+         <y>128</y>
+         <width>200</width>
+         <height>70</height>
+         <label>The VideoLAN Client is a MPEG, MPEG 2, MP3, DivX player, that accepts input from local or network sources.</label>
+         <justify>GTK_JUSTIFY_LEFT</justify>
+         <wrap>True</wrap>
+         <xalign>0.5</xalign>
+         <yalign>0.5</yalign>
+         <xpad>0</xpad>
+         <ypad>0</ypad>
+       </widget>
+      </widget>
+
+      <widget>
+       <class>GtkLabel</class>
+       <child_name>Notebook:tab</child_name>
+       <name>about</name>
+       <label>About</label>
+       <justify>GTK_JUSTIFY_CENTER</justify>
+       <wrap>False</wrap>
+       <xalign>0.5</xalign>
+       <yalign>0.5</yalign>
+       <xpad>0</xpad>
+       <ypad>0</ypad>
+      </widget>
+    </widget>
+  </widget>
+</widget>
+
+</GTK-Interface>
diff --git a/plugins/familiar/familiar.h b/plugins/familiar/familiar.h
new file mode 100644 (file)
index 0000000..d910121
--- /dev/null
@@ -0,0 +1,48 @@
+/*****************************************************************************
+ * familiar.h: private Gtk+ interface description
+ *****************************************************************************
+ * Copyright (C) 1999, 2000 VideoLAN
+ * $Id: familiar.h,v 1.6.2.3 2002/10/07 21:49:53 jpsaman Exp $
+ *
+ * Authors: Jean-Paul Saman <jpsaman@wxs.nl>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ *****************************************************************************/
+
+#define MAX_ATEXIT                 10
+
+/*****************************************************************************
+ * intf_sys_t: description and status of Gtk+ interface
+ *****************************************************************************/
+typedef struct intf_sys_s
+{
+    /* windows and widgets */
+    GtkWidget *         p_window;                             /* main window */
+    GtkNotebook *       p_notebook;
+    GtkCList    *       p_clist;
+//    GHashTable *        config_hash_table;
+    boolean_t           b_autoplayfile;
+
+    /* XXX: Ugly kludge, see gtk.c */
+    void             ( *pf_callback[MAX_ATEXIT] ) ( void );
+} intf_sys_t;
+
+/*****************************************************************************
+ * Useful macro
+ ****************************************************************************/
+#define  GtkGetIntf( widget ) __GtkGetIntf( GTK_WIDGET( widget ) )
+void * __GtkGetIntf( GtkWidget * );
+
+
diff --git a/plugins/familiar/familiar_callbacks.c b/plugins/familiar/familiar_callbacks.c
new file mode 100644 (file)
index 0000000..9c16952
--- /dev/null
@@ -0,0 +1,555 @@
+/*****************************************************************************
+ * familiar_callbacks.c : Callbacks for the Familiar Linux Gtk+ plugin.
+ *****************************************************************************
+ * Copyright (C) 2000, 2001 VideoLAN
+ * $Id: familiar_callbacks.c,v 1.6.2.10 2002/10/13 14:27:49 jpsaman Exp $
+ *
+ * Authors: Jean-Paul Saman <jpsaman@wxs.nl>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ *****************************************************************************/
+
+/*****************************************************************************
+ * Preamble
+ *****************************************************************************/
+#include <sys/types.h>                                              /* off_t */
+#include <stdlib.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <dirent.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include <videolan/vlc.h>
+
+#include "stream_control.h"
+#include "input_ext-intf.h"
+
+#include "interface.h"
+#include "intf_playlist.h"
+
+#include "video.h"
+#include "video_output.h"
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <gtk/gtk.h>
+
+#include "familiar_callbacks.h"
+#include "familiar_interface.h"
+#include "familiar_support.h"
+#include "familiar.h"
+
+#include "netutils.h"
+
+static void MediaURLOpenChanged( GtkWidget *widget, gchar *psz_url );
+static char* get_file_perm(const char *path);
+
+/*****************************************************************************
+ * Useful function to retrieve p_intf
+ ****************************************************************************/
+void * __GtkGetIntf( GtkWidget * widget )
+{
+    void *p_data;
+
+    if( GTK_IS_MENU_ITEM( widget ) )
+    {
+        /* Look for a GTK_MENU */
+        while( widget->parent && !GTK_IS_MENU( widget ) )
+        {
+            widget = widget->parent;
+        }
+
+        /* Maybe this one has the data */
+        p_data = gtk_object_get_data( GTK_OBJECT( widget ), "p_intf" );
+        if( p_data )
+        {
+            return p_data;
+        }
+
+        /* Otherwise, the parent widget has it */
+        widget = gtk_menu_get_attach_widget( GTK_MENU( widget ) );
+    }
+
+    /* We look for the top widget */
+    widget = gtk_widget_get_toplevel( GTK_WIDGET( widget ) );
+
+    p_data = gtk_object_get_data( GTK_OBJECT( widget ), "p_intf" );
+
+    return p_data;
+}
+
+/*****************************************************************************
+ * Helper functions for URL changes in Media and Preferences notebook pages.
+ ****************************************************************************/
+static void MediaURLOpenChanged( GtkWidget *widget, gchar *psz_url )
+{
+    intf_thread_t *p_intf = GtkGetIntf( widget );
+    int            i_end = p_main->p_playlist->i_size;
+
+    // Add p_url to playlist .... but how ?
+    if( p_main->p_playlist )
+    {
+       intf_PlaylistAdd( p_main->p_playlist, PLAYLIST_END, (char*)psz_url );
+    }
+
+    if (p_intf->p_sys->b_autoplayfile)
+    {
+       /* end current item, select added item  */
+       if( p_input_bank->pp_input[0] != NULL )
+       {
+           p_input_bank->pp_input[0]->b_eof = 1;
+       }
+       intf_PlaylistJumpto( p_main->p_playlist, i_end - 1 );
+
+       if( p_input_bank->pp_input[0] != NULL )
+       {
+           input_SetStatus( p_input_bank->pp_input[0], INPUT_STATUS_PLAY );
+           p_main->p_playlist->b_stopped = 0;
+       }
+    }
+}
+
+/*****************************************************************
+ * Read directory helper function.
+ ****************************************************************/
+void ReadDirectory( GtkCList *clist, char *psz_dir )
+{
+    intf_thread_t *p_intf = GtkGetIntf( clist );
+    struct dirent **namelist;
+    int n=-1;
+    int status=-1;
+
+    if (psz_dir)
+    {
+       status = chdir(psz_dir);
+    }
+    if (status<0)
+      intf_ErrMsg("File is not a directory.");
+    else
+      n = scandir(".", &namelist, 0, NULL);
+
+    if (n<0)
+        perror("scandir");
+    else
+    {
+        gchar *ppsz_text[2];
+        int i;
+
+        if( p_intf->p_sys->p_clist == NULL )
+           intf_ErrMsg("ReadDirectory - ERROR p_intf->p_sys->p_clist == NULL");
+        gtk_clist_freeze( p_intf->p_sys->p_clist );
+        gtk_clist_clear( p_intf->p_sys->p_clist );
+        for (i=0; i<n; i++)
+        {
+            /* This is a list of strings. */
+            ppsz_text[0] = namelist[i]->d_name;
+            ppsz_text[1] = get_file_perm(namelist[i]->d_name);
+            if (strcmp(ppsz_text[1],"") == 0)
+                intf_ErrMsg("File system error unknown filetype encountered.");
+            gtk_clist_insert( p_intf->p_sys->p_clist, i, ppsz_text );
+            free(namelist[i]);
+        }
+        gtk_clist_thaw( p_intf->p_sys->p_clist );
+        free(namelist);
+    }
+}
+
+static char* get_file_perm(const char *path)
+{
+    struct stat st;
+    char *perm;
+
+    perm = (char *) malloc(sizeof(char)*10);
+    strncpy( perm, "----------", sizeof("----------"));
+    if (lstat(path, &st)==0)
+    {
+        if (S_ISLNK(st.st_mode))
+            perm[0]= 'l';
+        else if (S_ISDIR(st.st_mode))
+            perm[0]= 'd';
+        else if (S_ISCHR(st.st_mode))
+            perm[0]= 'c';
+        else if (S_ISBLK(st.st_mode))
+            perm[0]= 'b';
+        else if (S_ISFIFO(st.st_mode))
+            perm[0]= 'f';
+        else if (S_ISSOCK(st.st_mode))
+            perm[0]= 's';
+        else if (S_ISREG(st.st_mode))
+            perm[0]= '-';
+        else /* Unknown type is an error */
+            perm[0]= '?';
+        /* Get file permissions */
+        /* User */
+        if (st.st_mode & S_IRUSR)
+            perm[1]= 'r';
+        if (st.st_mode & S_IWUSR)
+            perm[2]= 'w';
+        if (st.st_mode & S_IXUSR)
+        {
+            if (st.st_mode & S_ISUID)
+                perm[3] = 's';
+            else
+                perm[3]= 'x';
+        }
+        else if (st.st_mode & S_ISUID)
+            perm[3] = 'S';
+        /* Group */
+        if (st.st_mode & S_IRGRP)
+            perm[4]= 'r';
+        if (st.st_mode & S_IWGRP)
+            perm[5]= 'w';
+        if (st.st_mode & S_IXGRP)
+        {
+            if (st.st_mode & S_ISGID)
+                perm[6] = 's';
+            else
+                perm[6]= 'x';
+        }
+        else if (st.st_mode & S_ISGID)
+            perm[6] = 'S';
+        /* Other */
+        if (st.st_mode & S_IROTH)
+            perm[7]= 'r';
+        if (st.st_mode & S_IWOTH)
+            perm[8]= 'w';
+        if (st.st_mode & S_IXOTH)
+        {
+            // 'sticky' bit
+            if (st.st_mode &S_ISVTX)
+                perm[9] = 't';
+            else
+                perm[9]= 'x';
+        }
+        else if (st.st_mode &S_ISVTX)
+            perm[9]= 'T';
+    }
+    return perm;
+}
+
+/*
+ * Main interface callbacks
+ */
+
+gboolean GtkExit( GtkWidget       *widget,
+                  gpointer         user_data )
+{
+    intf_thread_t *p_intf = GtkGetIntf( widget );
+
+    vlc_mutex_lock( &p_intf->change_lock );
+    p_intf->b_die = 1;
+    vlc_mutex_unlock( &p_intf->change_lock );
+
+    return TRUE;
+}
+
+void
+on_toolbar_open_clicked                (GtkButton       *button,
+                                        gpointer         user_data)
+{
+    intf_thread_t *p_intf = GtkGetIntf( button );
+
+    if (p_intf->p_sys->p_notebook)
+    {
+       gtk_widget_show( GTK_WIDGET(p_intf->p_sys->p_notebook) );
+       gtk_notebook_set_page(p_intf->p_sys->p_notebook,0);
+    }
+    gdk_window_raise( p_intf->p_sys->p_window->window );
+    if (p_intf->p_sys->p_clist)
+    {
+       ReadDirectory(p_intf->p_sys->p_clist, ".");
+    }
+}
+
+
+void
+on_toolbar_preferences_clicked         (GtkButton       *button,
+                                        gpointer         user_data)
+{
+    intf_thread_t *p_intf = GtkGetIntf( button );
+
+    if (p_intf->p_sys->p_notebook)
+    {
+       gtk_widget_show( GTK_WIDGET(p_intf->p_sys->p_notebook) );
+       gtk_notebook_set_page(p_intf->p_sys->p_notebook,1);
+    }
+    gdk_window_raise( p_intf->p_sys->p_window->window );
+}
+
+
+void
+on_toolbar_rewind_clicked              (GtkButton       *button,
+                                        gpointer         user_data)
+{
+//    intf_thread_t *  p_intf = GtkGetIntf( button );
+
+    if( p_input_bank->pp_input[0] != NULL )
+    {
+        input_SetStatus( p_input_bank->pp_input[0], INPUT_STATUS_SLOWER );
+    }
+}
+
+
+void
+on_toolbar_pause_clicked               (GtkButton       *button,
+                                        gpointer         user_data)
+{
+//    intf_thread_t *  p_intf = GtkGetIntf( button );
+
+    if( p_input_bank->pp_input[0] != NULL )
+    {
+        input_SetStatus( p_input_bank->pp_input[0], INPUT_STATUS_PAUSE );
+    }
+}
+
+
+void
+on_toolbar_play_clicked                (GtkButton       *button,
+                                        gpointer         user_data)
+{
+    intf_thread_t *  p_intf = GtkGetIntf( button );
+
+    if( p_input_bank->pp_input[0] != NULL )
+    {
+        input_SetStatus( p_input_bank->pp_input[0], INPUT_STATUS_PLAY );
+        p_main->p_playlist->b_stopped = 0;
+        gdk_window_lower( p_intf->p_sys->p_window->window );
+    }
+    else
+    {
+        vlc_mutex_lock( &p_main->p_playlist->change_lock );
+
+        if( p_main->p_playlist->b_stopped )
+        {
+            if( p_main->p_playlist->i_size )
+            {
+                vlc_mutex_unlock( &p_main->p_playlist->change_lock );
+                intf_PlaylistJumpto( p_main->p_playlist,
+                                     p_main->p_playlist->i_index );
+            }
+            else
+            {
+                vlc_mutex_unlock( &p_main->p_playlist->change_lock );
+                /* simulate on open button click */
+                on_toolbar_open_clicked(button,user_data);
+            }
+        }
+        else
+        {
+            vlc_mutex_unlock( &p_main->p_playlist->change_lock );
+        }
+    }
+}
+
+
+void
+on_toolbar_stop_clicked                (GtkButton       *button,
+                                        gpointer         user_data)
+{
+    intf_thread_t *  p_intf = GtkGetIntf( button );
+
+    if( p_input_bank->pp_input[0] != NULL )
+    {
+        /* end playing item */
+        p_input_bank->pp_input[0]->b_eof = 1;
+
+        /* update playlist */
+        vlc_mutex_lock( &p_main->p_playlist->change_lock );
+
+        p_main->p_playlist->i_index--;
+        p_main->p_playlist->b_stopped = 1;
+
+        vlc_mutex_unlock( &p_main->p_playlist->change_lock );
+        gdk_window_raise( p_intf->p_sys->p_window->window );
+    }
+}
+
+
+void
+on_toolbar_forward_clicked             (GtkButton       *button,
+                                        gpointer         user_data)
+{
+//    intf_thread_t *  p_intf = GtkGetIntf( button );
+
+    if( p_input_bank->pp_input[0] != NULL )
+    {
+        input_SetStatus( p_input_bank->pp_input[0], INPUT_STATUS_FASTER );
+    }
+}
+
+
+void
+on_toolbar_about_clicked               (GtkButton       *button,
+                                        gpointer         user_data)
+{
+    intf_thread_t *p_intf = GtkGetIntf( button );
+
+    // Toggle notebook
+    if (p_intf->p_sys->p_notebook)
+    {
+        gtk_widget_show( GTK_WIDGET(p_intf->p_sys->p_notebook) );
+        gtk_notebook_set_page(p_intf->p_sys->p_notebook,2);
+    }
+    gdk_window_raise( p_intf->p_sys->p_window->window );
+}
+
+
+void
+on_comboURL_entry_changed              (GtkEditable     *editable,
+                                        gpointer         user_data)
+{
+    intf_thread_t * p_intf = GtkGetIntf( editable );
+    gchar *       psz_url;
+    struct stat st;
+
+    psz_url = gtk_entry_get_text(GTK_ENTRY(editable));
+    if( (strncmp("file://",(const char *) psz_url,7)==0) ||
+                   (strncmp("udp://",(const char *) psz_url,6)==0) ||
+                   (strncmp("udp4://",(const char *) psz_url,7)==0) ||         
+                       (strncmp("udp6://",(const char *) psz_url,7)==0) ||
+                   (strncmp("udpstream://",(const char *) psz_url,12)==0) ||
+                   (strncmp("rtp://",(const char *) psz_url,6)==0) ||
+                   (strncmp("rtp4://",(const char *) psz_url,7)==0) ||
+                   (strncmp("rtp6://",(const char *) psz_url,7)==0) ||
+                   (strncmp("rtpstream://",(const char *) psz_url,12)==0) ||
+                       (strncmp("ftp://",(const char *) psz_url,6)==0) ||
+                   (strncmp("http://",(const char *) psz_url,7)==0) )
+       {
+        MediaURLOpenChanged(GTK_WIDGET(editable), psz_url);
+    }
+    else if (lstat((char*)psz_url, &st)==0)
+    {
+        if (S_ISDIR(st.st_mode))
+           ReadDirectory(p_intf->p_sys->p_clist, psz_url);
+        else if( (S_ISLNK(st.st_mode)) || (S_ISCHR(st.st_mode)) ||
+                 (S_ISBLK(st.st_mode)) || (S_ISFIFO(st.st_mode))||
+                 (S_ISSOCK(st.st_mode))|| (S_ISREG(st.st_mode)) )
+        {
+           MediaURLOpenChanged(GTK_WIDGET(editable), psz_url);
+        }
+   }
+}
+
+void
+on_clistmedia_click_column             (GtkCList        *clist,
+                                        gint             column,
+                                        gpointer         user_data)
+{
+    static GtkSortType sort_type = GTK_SORT_ASCENDING;
+
+    // Should sort on column
+    switch(sort_type)
+    {
+        case GTK_SORT_ASCENDING:
+            sort_type = GTK_SORT_DESCENDING;
+            break;
+        case GTK_SORT_DESCENDING:
+            sort_type = GTK_SORT_ASCENDING;
+            break;
+    }
+    gtk_clist_freeze( clist );
+    gtk_clist_set_sort_type( clist, sort_type );
+    gtk_clist_sort( clist );
+    gtk_clist_thaw( clist );
+}
+
+
+void
+on_clistmedia_select_row               (GtkCList        *clist,
+                                        gint             row,
+                                        gint             column,
+                                        GdkEvent        *event,
+                                        gpointer         user_data)
+{
+//    intf_thread_t *p_intf = GtkGetIntf( clist );
+    intf_thread_t *p_intf = p_main->p_intf;
+    gchar *text[2];
+    gint ret;
+    struct stat st;
+
+    ret = gtk_clist_get_text (p_intf->p_sys->p_clist, row, 0, text);
+    if (ret)
+    {
+        if (lstat((char*)text[0], &st)==0)
+        {
+            if (S_ISDIR(st.st_mode))
+               ReadDirectory(p_intf->p_sys->p_clist, text[0]);
+            else if( (S_ISLNK(st.st_mode)) || (S_ISCHR(st.st_mode)) ||
+                     (S_ISBLK(st.st_mode)) || (S_ISFIFO(st.st_mode))||
+                     (S_ISSOCK(st.st_mode))|| (S_ISREG(st.st_mode)) )
+            {
+               MediaURLOpenChanged(GTK_WIDGET(p_intf->p_sys->p_clist), text[0]);
+            }
+       }
+    }
+}
+
+void
+on_cbautoplay_toggled                  (GtkToggleButton *togglebutton,
+                                        gpointer         user_data)
+{
+};
+
+
+gboolean
+on_familiar_delete_event               (GtkWidget       *widget,
+                                        GdkEvent        *event,
+                                        gpointer         user_data)
+{
+    GtkExit( GTK_WIDGET( widget ), user_data );
+    return TRUE;
+}
+
+
+void
+on_buttonSave_clicked                  (GtkButton       *button,
+                                        gpointer         user_data)
+{
+    intf_thread_t * p_intf = GtkGetIntf( button );
+    on_buttonApply_clicked( button, user_data );
+    config_PutIntVariable( "familiar-autoplayfile", p_intf->p_sys->b_autoplayfile );
+//    config_SaveConfigFile( NULL );
+}
+
+
+void
+on_buttonApply_clicked                 (GtkButton       *button,
+                                        gpointer         user_data)
+{
+    intf_thread_t * p_intf = GtkGetIntf( button );
+    GtkWidget *cbautoplay;
+
+    cbautoplay = GTK_WIDGET( gtk_object_get_data(
+                   GTK_OBJECT( p_intf->p_sys->p_window ), "cbautoplay" ) );
+    p_intf->p_sys->b_autoplayfile = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(cbautoplay));
+}
+
+
+void
+on_buttonCancel_clicked                (GtkButton       *button,
+                                        gpointer         user_data)
+{
+    intf_thread_t * p_intf = GtkGetIntf( button );
+    GtkWidget *cbautoplay;
+
+    cbautoplay = GTK_WIDGET( gtk_object_get_data(
+                 GTK_OBJECT( p_intf->p_sys->p_window ), "cbautoplay" ) );
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(cbautoplay),p_intf->p_sys->b_autoplayfile);
+}
+
diff --git a/plugins/familiar/familiar_callbacks.h b/plugins/familiar/familiar_callbacks.h
new file mode 100644 (file)
index 0000000..80c55cd
--- /dev/null
@@ -0,0 +1,99 @@
+/*****************************************************************************
+ * familiar_callbacks.h : familiar plugin for vlc
+ *****************************************************************************
+ * Copyright (C) 2002 VideoLAN
+ * $Id: familiar_callbacks.h,v 1.7.2.5 2002/10/07 21:37:11 jpsaman Exp $
+ *
+ * Authors: Jean-Paul Saman <jpsaman@wxs.nl>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ *****************************************************************************/
+
+#include <gtk/gtk.h>
+
+gboolean GtkExit                ( GtkWidget *, gpointer );
+
+void ReadDirectory(GtkCList *clist, char *psz_dir);
+
+void
+on_toolbar_open_clicked                (GtkButton       *button,
+                                        gpointer         user_data);
+
+void
+on_toolbar_preferences_clicked         (GtkButton       *button,
+                                        gpointer         user_data);
+
+void
+on_toolbar_rewind_clicked              (GtkButton       *button,
+                                        gpointer         user_data);
+
+void
+on_toolbar_pause_clicked               (GtkButton       *button,
+                                        gpointer         user_data);
+
+void
+on_toolbar_play_clicked                (GtkButton       *button,
+                                        gpointer         user_data);
+
+void
+on_toolbar_stop_clicked                (GtkButton       *button,
+                                        gpointer         user_data);
+
+void
+on_toolbar_forward_clicked             (GtkButton       *button,
+                                        gpointer         user_data);
+
+void
+on_toolbar_about_clicked               (GtkButton       *button,
+                                        gpointer         user_data);
+
+void
+on_comboURL_entry_changed              (GtkEditable     *editable,
+                                        gpointer         user_data);
+
+
+void
+on_clistmedia_click_column             (GtkCList        *clist,
+                                        gint             column,
+                                        gpointer         user_data);
+
+void
+on_clistmedia_select_row               (GtkCList        *clist,
+                                        gint             row,
+                                        gint             column,
+                                        GdkEvent        *event,
+                                        gpointer         user_data);
+
+void
+on_cbautoplay_toggled                  (GtkToggleButton *togglebutton,
+                                        gpointer         user_data);
+
+
+gboolean
+on_familiar_delete_event               (GtkWidget       *widget,
+                                        GdkEvent        *event,
+                                        gpointer         user_data);
+
+void
+on_buttonSave_clicked                  (GtkButton       *button,
+                                        gpointer         user_data);
+
+void
+on_buttonApply_clicked                 (GtkButton       *button,
+                                        gpointer         user_data);
+
+void
+on_buttonCancel_clicked                (GtkButton       *button,
+                                        gpointer         user_data);
diff --git a/plugins/familiar/familiar_interface.c b/plugins/familiar/familiar_interface.c
new file mode 100644 (file)
index 0000000..f7be8f1
--- /dev/null
@@ -0,0 +1,499 @@
+/*
+ * DO NOT EDIT THIS FILE - it is generated by Glade.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <string.h>
+
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtk.h>
+
+#include "familiar_callbacks.h"
+#include "familiar_interface.h"
+#include "familiar_support.h"
+
+GtkWidget*
+create_familiar (void)
+{
+  GtkWidget *familiar;
+  GtkWidget *vbox;
+  GtkWidget *toolbar;
+  GtkWidget *tmp_toolbar_icon;
+  GtkWidget *toolbar_open;
+  GtkWidget *toolbar_preferences;
+  GtkWidget *toolbar_rewind;
+  GtkWidget *toolbar_pause;
+  GtkWidget *toolbar_play;
+  GtkWidget *toolbar_stop;
+  GtkWidget *toolbar_forward;
+  GtkWidget *toolbar_about;
+  GtkWidget *notebook;
+  GtkWidget *fixedMedia;
+  GtkWidget *labelUrl;
+  GtkWidget *scrolledwindow1;
+  GtkWidget *clistmedia;
+  GtkWidget *labelname;
+  GtkWidget *labeltype;
+  GtkWidget *labelsize;
+  GtkWidget *labeluid;
+  GtkWidget *labelgid;
+  GtkWidget *comboURL;
+  GList *comboURL_items = NULL;
+  GtkWidget *comboURL_entry;
+  GtkWidget *media;
+  GtkWidget *fixedPreferences;
+  GtkWidget *buttonSave;
+  GtkWidget *buttonApply;
+  GtkWidget *buttonCancel;
+  GtkWidget *cbautoplay;
+  GtkWidget *preferences;
+  GtkWidget *fixedAbout;
+  GtkWidget *logo;
+  GtkWidget *labelVlc;
+  GtkWidget *labelCopyright;
+  GtkWidget *labelAuthors;
+  GtkWidget *labelAbout;
+  GtkWidget *about;
+
+  familiar = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_widget_set_name (familiar, "familiar");
+  gtk_object_set_data (GTK_OBJECT (familiar), "familiar", familiar);
+  gtk_widget_set_usize (familiar, 240, 300);
+  gtk_window_set_title (GTK_WINDOW (familiar), _("vlc (familiar)"));
+  gtk_window_set_policy (GTK_WINDOW (familiar), TRUE, TRUE, TRUE);
+
+  vbox = gtk_vbox_new (FALSE, 0);
+  gtk_widget_set_name (vbox, "vbox");
+  gtk_widget_ref (vbox);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "vbox", vbox,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (vbox);
+  gtk_container_add (GTK_CONTAINER (familiar), vbox);
+
+  toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS);
+  gtk_widget_set_name (toolbar, "toolbar");
+  gtk_widget_ref (toolbar);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "toolbar", toolbar,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (toolbar);
+  gtk_box_pack_start (GTK_BOX (vbox), toolbar, TRUE, TRUE, 0);
+  gtk_widget_set_usize (toolbar, 112, 16);
+  gtk_container_set_border_width (GTK_CONTAINER (toolbar), 2);
+
+  tmp_toolbar_icon = create_pixmap (familiar, "familiar-openb16x16.xpm");
+  toolbar_open = gtk_toolbar_append_element (GTK_TOOLBAR (toolbar),
+                                GTK_TOOLBAR_CHILD_BUTTON,
+                                NULL,
+                                _("Open"),
+                                _("Open file"), NULL,
+                                tmp_toolbar_icon, NULL, NULL);
+  gtk_widget_set_name (toolbar_open, "toolbar_open");
+  gtk_widget_ref (toolbar_open);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "toolbar_open", toolbar_open,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (toolbar_open);
+
+  tmp_toolbar_icon = create_pixmap (familiar, "familiar-preferencesb16x16.xpm");
+  toolbar_preferences = gtk_toolbar_append_element (GTK_TOOLBAR (toolbar),
+                                GTK_TOOLBAR_CHILD_BUTTON,
+                                NULL,
+                                _("Preferences"),
+                                _("Preferences"), NULL,
+                                tmp_toolbar_icon, NULL, NULL);
+  gtk_widget_set_name (toolbar_preferences, "toolbar_preferences");
+  gtk_widget_ref (toolbar_preferences);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "toolbar_preferences", toolbar_preferences,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (toolbar_preferences);
+
+  gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
+
+  tmp_toolbar_icon = create_pixmap (familiar, "familiar-rewindb16x16.xpm");
+  toolbar_rewind = gtk_toolbar_append_element (GTK_TOOLBAR (toolbar),
+                                GTK_TOOLBAR_CHILD_BUTTON,
+                                NULL,
+                                _("Rewind"),
+                                _("Rewind stream"), NULL,
+                                tmp_toolbar_icon, NULL, NULL);
+  gtk_widget_set_name (toolbar_rewind, "toolbar_rewind");
+  gtk_widget_ref (toolbar_rewind);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "toolbar_rewind", toolbar_rewind,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (toolbar_rewind);
+
+  tmp_toolbar_icon = create_pixmap (familiar, "familiar-pauseb16x16.xpm");
+  toolbar_pause = gtk_toolbar_append_element (GTK_TOOLBAR (toolbar),
+                                GTK_TOOLBAR_CHILD_BUTTON,
+                                NULL,
+                                _("Pause"),
+                                _("Pause stream"), NULL,
+                                tmp_toolbar_icon, NULL, NULL);
+  gtk_widget_set_name (toolbar_pause, "toolbar_pause");
+  gtk_widget_ref (toolbar_pause);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "toolbar_pause", toolbar_pause,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (toolbar_pause);
+
+  tmp_toolbar_icon = create_pixmap (familiar, "familiar-playb16x16.xpm");
+  toolbar_play = gtk_toolbar_append_element (GTK_TOOLBAR (toolbar),
+                                GTK_TOOLBAR_CHILD_BUTTON,
+                                NULL,
+                                _("Play"),
+                                _("Play stream"), NULL,
+                                tmp_toolbar_icon, NULL, NULL);
+  gtk_widget_set_name (toolbar_play, "toolbar_play");
+  gtk_widget_ref (toolbar_play);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "toolbar_play", toolbar_play,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (toolbar_play);
+
+  tmp_toolbar_icon = create_pixmap (familiar, "familiar-stopb16x16.xpm");
+  toolbar_stop = gtk_toolbar_append_element (GTK_TOOLBAR (toolbar),
+                                GTK_TOOLBAR_CHILD_BUTTON,
+                                NULL,
+                                _("Stop"),
+                                _("Stop stream"), NULL,
+                                tmp_toolbar_icon, NULL, NULL);
+  gtk_widget_set_name (toolbar_stop, "toolbar_stop");
+  gtk_widget_ref (toolbar_stop);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "toolbar_stop", toolbar_stop,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (toolbar_stop);
+
+  tmp_toolbar_icon = create_pixmap (familiar, "familiar-forwardb16x16.xpm");
+  toolbar_forward = gtk_toolbar_append_element (GTK_TOOLBAR (toolbar),
+                                GTK_TOOLBAR_CHILD_BUTTON,
+                                NULL,
+                                _("Forward"),
+                                _("Forward stream"), NULL,
+                                tmp_toolbar_icon, NULL, NULL);
+  gtk_widget_set_name (toolbar_forward, "toolbar_forward");
+  gtk_widget_ref (toolbar_forward);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "toolbar_forward", toolbar_forward,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (toolbar_forward);
+
+  gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
+
+  tmp_toolbar_icon = create_pixmap (familiar, "vlc16x16.xpm");
+  toolbar_about = gtk_toolbar_append_element (GTK_TOOLBAR (toolbar),
+                                GTK_TOOLBAR_CHILD_BUTTON,
+                                NULL,
+                                _("About"),
+                                _("About"), NULL,
+                                tmp_toolbar_icon, NULL, NULL);
+  gtk_widget_set_name (toolbar_about, "toolbar_about");
+  gtk_widget_ref (toolbar_about);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "toolbar_about", toolbar_about,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (toolbar_about);
+
+  notebook = gtk_notebook_new ();
+  gtk_widget_set_name (notebook, "notebook");
+  gtk_widget_ref (notebook);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "notebook", notebook,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (notebook);
+  gtk_box_pack_start (GTK_BOX (vbox), notebook, TRUE, TRUE, 0);
+
+  fixedMedia = gtk_fixed_new ();
+  gtk_widget_set_name (fixedMedia, "fixedMedia");
+  gtk_widget_ref (fixedMedia);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "fixedMedia", fixedMedia,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (fixedMedia);
+  gtk_container_add (GTK_CONTAINER (notebook), fixedMedia);
+
+  labelUrl = gtk_label_new (_("URL:"));
+  gtk_widget_set_name (labelUrl, "labelUrl");
+  gtk_widget_ref (labelUrl);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "labelUrl", labelUrl,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (labelUrl);
+  gtk_fixed_put (GTK_FIXED (fixedMedia), labelUrl, 4, 8);
+  gtk_widget_set_uposition (labelUrl, 4, 8);
+  gtk_widget_set_usize (labelUrl, 38, 18);
+
+  scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
+  gtk_widget_set_name (scrolledwindow1, "scrolledwindow1");
+  gtk_widget_ref (scrolledwindow1);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "scrolledwindow1", scrolledwindow1,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (scrolledwindow1);
+  gtk_fixed_put (GTK_FIXED (fixedMedia), scrolledwindow1, 0, 32);
+  gtk_widget_set_uposition (scrolledwindow1, 0, 32);
+  gtk_widget_set_usize (scrolledwindow1, 240, 208);
+
+  clistmedia = gtk_clist_new (5);
+  gtk_widget_set_name (clistmedia, "clistmedia");
+  gtk_widget_ref (clistmedia);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "clistmedia", clistmedia,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (clistmedia);
+  gtk_container_add (GTK_CONTAINER (scrolledwindow1), clistmedia);
+  gtk_clist_set_column_width (GTK_CLIST (clistmedia), 0, 123);
+  gtk_clist_set_column_width (GTK_CLIST (clistmedia), 1, 80);
+  gtk_clist_set_column_width (GTK_CLIST (clistmedia), 2, 80);
+  gtk_clist_set_column_width (GTK_CLIST (clistmedia), 3, 80);
+  gtk_clist_set_column_width (GTK_CLIST (clistmedia), 4, 80);
+  gtk_clist_column_titles_show (GTK_CLIST (clistmedia));
+
+  labelname = gtk_label_new (_("Name"));
+  gtk_widget_set_name (labelname, "labelname");
+  gtk_widget_ref (labelname);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "labelname", labelname,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (labelname);
+  gtk_clist_set_column_widget (GTK_CLIST (clistmedia), 0, labelname);
+
+  labeltype = gtk_label_new (_("Type"));
+  gtk_widget_set_name (labeltype, "labeltype");
+  gtk_widget_ref (labeltype);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "labeltype", labeltype,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (labeltype);
+  gtk_clist_set_column_widget (GTK_CLIST (clistmedia), 1, labeltype);
+
+  labelsize = gtk_label_new (_("Size"));
+  gtk_widget_set_name (labelsize, "labelsize");
+  gtk_widget_ref (labelsize);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "labelsize", labelsize,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (labelsize);
+  gtk_clist_set_column_widget (GTK_CLIST (clistmedia), 2, labelsize);
+
+  labeluid = gtk_label_new (_("User"));
+  gtk_widget_set_name (labeluid, "labeluid");
+  gtk_widget_ref (labeluid);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "labeluid", labeluid,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (labeluid);
+  gtk_clist_set_column_widget (GTK_CLIST (clistmedia), 3, labeluid);
+
+  labelgid = gtk_label_new (_("Group"));
+  gtk_widget_set_name (labelgid, "labelgid");
+  gtk_widget_ref (labelgid);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "labelgid", labelgid,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (labelgid);
+  gtk_clist_set_column_widget (GTK_CLIST (clistmedia), 4, labelgid);
+
+  comboURL = gtk_combo_new ();
+  gtk_widget_set_name (comboURL, "comboURL");
+  gtk_widget_ref (comboURL);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "comboURL", comboURL,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (comboURL);
+  gtk_fixed_put (GTK_FIXED (fixedMedia), comboURL, 40, 4);
+  gtk_widget_set_uposition (comboURL, 40, 4);
+  gtk_widget_set_usize (comboURL, 185, 24);
+  comboURL_items = g_list_append (comboURL_items, (gpointer) _("/mnt"));
+  comboURL_items = g_list_append (comboURL_items, (gpointer) _("file://"));
+  comboURL_items = g_list_append (comboURL_items, (gpointer) _("ftp://"));
+  comboURL_items = g_list_append (comboURL_items, (gpointer) _("http://"));
+  comboURL_items = g_list_append (comboURL_items, (gpointer) _("udp://@:1234"));
+  comboURL_items = g_list_append (comboURL_items, (gpointer) _("udpstream://@:1234"));
+  gtk_combo_set_popdown_strings (GTK_COMBO (comboURL), comboURL_items);
+  g_list_free (comboURL_items);
+
+  comboURL_entry = GTK_COMBO (comboURL)->entry;
+  gtk_widget_set_name (comboURL_entry, "comboURL_entry");
+  gtk_widget_ref (comboURL_entry);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "comboURL_entry", comboURL_entry,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (comboURL_entry);
+  gtk_entry_set_text (GTK_ENTRY (comboURL_entry), _("/mnt"));
+
+  media = gtk_label_new (_("Media"));
+  gtk_widget_set_name (media, "media");
+  gtk_widget_ref (media);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "media", media,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (media);
+  gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 0), media);
+
+  fixedPreferences = gtk_fixed_new ();
+  gtk_widget_set_name (fixedPreferences, "fixedPreferences");
+  gtk_widget_ref (fixedPreferences);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "fixedPreferences", fixedPreferences,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (fixedPreferences);
+  gtk_container_add (GTK_CONTAINER (notebook), fixedPreferences);
+
+  buttonSave = gtk_button_new_with_label (_("Save"));
+  gtk_widget_set_name (buttonSave, "buttonSave");
+  gtk_widget_ref (buttonSave);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "buttonSave", buttonSave,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (buttonSave);
+  gtk_fixed_put (GTK_FIXED (fixedPreferences), buttonSave, 8, 216);
+  gtk_widget_set_uposition (buttonSave, 8, 216);
+  gtk_widget_set_usize (buttonSave, 54, 24);
+
+  buttonApply = gtk_button_new_with_label (_("Apply"));
+  gtk_widget_set_name (buttonApply, "buttonApply");
+  gtk_widget_ref (buttonApply);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "buttonApply", buttonApply,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (buttonApply);
+  gtk_fixed_put (GTK_FIXED (fixedPreferences), buttonApply, 64, 216);
+  gtk_widget_set_uposition (buttonApply, 64, 216);
+  gtk_widget_set_usize (buttonApply, 54, 24);
+
+  buttonCancel = gtk_button_new_with_label (_("Cancel"));
+  gtk_widget_set_name (buttonCancel, "buttonCancel");
+  gtk_widget_ref (buttonCancel);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "buttonCancel", buttonCancel,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (buttonCancel);
+  gtk_fixed_put (GTK_FIXED (fixedPreferences), buttonCancel, 176, 216);
+  gtk_widget_set_uposition (buttonCancel, 176, 216);
+  gtk_widget_set_usize (buttonCancel, 54, 24);
+
+  cbautoplay = gtk_check_button_new_with_label (_("Automatically play file."));
+  gtk_widget_set_name (cbautoplay, "cbautoplay");
+  gtk_widget_ref (cbautoplay);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "cbautoplay", cbautoplay,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (cbautoplay);
+  gtk_fixed_put (GTK_FIXED (fixedPreferences), cbautoplay, 8, 8);
+  gtk_widget_set_uposition (cbautoplay, 8, 8);
+  gtk_widget_set_usize (cbautoplay, 216, 24);
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cbautoplay), TRUE);
+
+  preferences = gtk_label_new (_("Preference"));
+  gtk_widget_set_name (preferences, "preferences");
+  gtk_widget_ref (preferences);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "preferences", preferences,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences);
+  gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 1), preferences);
+
+  fixedAbout = gtk_fixed_new ();
+  gtk_widget_set_name (fixedAbout, "fixedAbout");
+  gtk_widget_ref (fixedAbout);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "fixedAbout", fixedAbout,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (fixedAbout);
+  gtk_container_add (GTK_CONTAINER (notebook), fixedAbout);
+
+  logo = create_pixmap (familiar, "vlc32x32.xpm");
+  gtk_widget_set_name (logo, "logo");
+  gtk_widget_ref (logo);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "logo", logo,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (logo);
+  gtk_fixed_put (GTK_FIXED (fixedAbout), logo, 8, 0);
+  gtk_widget_set_uposition (logo, 8, 0);
+  gtk_widget_set_usize (logo, 50, 50);
+
+  labelVlc = gtk_label_new (_("VideoLAN Client\n for familiar Linux"));
+  gtk_widget_set_name (labelVlc, "labelVlc");
+  gtk_widget_ref (labelVlc);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "labelVlc", labelVlc,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (labelVlc);
+  gtk_fixed_put (GTK_FIXED (fixedAbout), labelVlc, 64, 8);
+  gtk_widget_set_uposition (labelVlc, 64, 8);
+  gtk_widget_set_usize (labelVlc, 120, 40);
+  gtk_label_set_line_wrap (GTK_LABEL (labelVlc), TRUE);
+
+  labelCopyright = gtk_label_new (_("(c) 2002, the VideoLAN Team"));
+  gtk_widget_set_name (labelCopyright, "labelCopyright");
+  gtk_widget_ref (labelCopyright);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "labelCopyright", labelCopyright,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (labelCopyright);
+  gtk_fixed_put (GTK_FIXED (fixedAbout), labelCopyright, 16, 56);
+  gtk_widget_set_uposition (labelCopyright, 16, 56);
+  gtk_widget_set_usize (labelCopyright, 200, 18);
+
+  labelAuthors = gtk_label_new (_("Authors: The VideoLAN Team, http://www.videolan.org"));
+  gtk_widget_set_name (labelAuthors, "labelAuthors");
+  gtk_widget_ref (labelAuthors);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "labelAuthors", labelAuthors,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (labelAuthors);
+  gtk_fixed_put (GTK_FIXED (fixedAbout), labelAuthors, 16, 80);
+  gtk_widget_set_uposition (labelAuthors, 16, 80);
+  gtk_widget_set_usize (labelAuthors, 200, 40);
+  gtk_label_set_line_wrap (GTK_LABEL (labelAuthors), TRUE);
+
+  labelAbout = gtk_label_new (_("The VideoLAN Client is a MPEG, MPEG 2, MP3, DivX player, that accepts input from local or network sources."));
+  gtk_widget_set_name (labelAbout, "labelAbout");
+  gtk_widget_ref (labelAbout);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "labelAbout", labelAbout,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (labelAbout);
+  gtk_fixed_put (GTK_FIXED (fixedAbout), labelAbout, 16, 128);
+  gtk_widget_set_uposition (labelAbout, 16, 128);
+  gtk_widget_set_usize (labelAbout, 200, 70);
+  gtk_label_set_justify (GTK_LABEL (labelAbout), GTK_JUSTIFY_LEFT);
+  gtk_label_set_line_wrap (GTK_LABEL (labelAbout), TRUE);
+
+  about = gtk_label_new (_("About"));
+  gtk_widget_set_name (about, "about");
+  gtk_widget_ref (about);
+  gtk_object_set_data_full (GTK_OBJECT (familiar), "about", about,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (about);
+  gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 2), about);
+
+  gtk_signal_connect (GTK_OBJECT (familiar), "delete_event",
+                      GTK_SIGNAL_FUNC (on_familiar_delete_event),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (toolbar_open), "clicked",
+                      GTK_SIGNAL_FUNC (on_toolbar_open_clicked),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (toolbar_preferences), "clicked",
+                      GTK_SIGNAL_FUNC (on_toolbar_preferences_clicked),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (toolbar_rewind), "clicked",
+                      GTK_SIGNAL_FUNC (on_toolbar_rewind_clicked),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (toolbar_pause), "clicked",
+                      GTK_SIGNAL_FUNC (on_toolbar_pause_clicked),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (toolbar_play), "clicked",
+                      GTK_SIGNAL_FUNC (on_toolbar_play_clicked),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (toolbar_stop), "clicked",
+                      GTK_SIGNAL_FUNC (on_toolbar_stop_clicked),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (toolbar_forward), "clicked",
+                      GTK_SIGNAL_FUNC (on_toolbar_forward_clicked),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (toolbar_about), "clicked",
+                      GTK_SIGNAL_FUNC (on_toolbar_about_clicked),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (clistmedia), "select_row",
+                      GTK_SIGNAL_FUNC (on_clistmedia_select_row),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (clistmedia), "click_column",
+                      GTK_SIGNAL_FUNC (on_clistmedia_click_column),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (comboURL_entry), "changed",
+                      GTK_SIGNAL_FUNC (on_comboURL_entry_changed),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (buttonSave), "clicked",
+                      GTK_SIGNAL_FUNC (on_buttonSave_clicked),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (buttonApply), "clicked",
+                      GTK_SIGNAL_FUNC (on_buttonApply_clicked),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (buttonCancel), "clicked",
+                      GTK_SIGNAL_FUNC (on_buttonCancel_clicked),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (cbautoplay), "toggled",
+                      GTK_SIGNAL_FUNC (on_cbautoplay_toggled),
+                      NULL);
+
+  return familiar;
+}
+
diff --git a/plugins/familiar/familiar_interface.h b/plugins/familiar/familiar_interface.h
new file mode 100644 (file)
index 0000000..27a3bcf
--- /dev/null
@@ -0,0 +1,5 @@
+/*
+ * DO NOT EDIT THIS FILE - it is generated by Glade.
+ */
+
+GtkWidget* create_familiar (void);
diff --git a/plugins/familiar/familiar_support.c b/plugins/familiar/familiar_support.c
new file mode 100644 (file)
index 0000000..22ca931
--- /dev/null
@@ -0,0 +1,162 @@
+/*
+ * DO NOT EDIT THIS FILE - it is generated by Glade.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <string.h>
+
+#include <gtk/gtk.h>
+
+#include "familiar_support.h"
+
+/* This is an internally used function to check if a pixmap file exists. */
+static gchar* check_file_exists        (const gchar     *directory,
+                                        const gchar     *filename);
+
+/* This is an internally used function to create pixmaps. */
+static GtkWidget* create_dummy_pixmap  (GtkWidget       *widget);
+
+GtkWidget*
+lookup_widget                          (GtkWidget       *widget,
+                                        const gchar     *widget_name)
+{
+  GtkWidget *parent, *found_widget;
+
+  for (;;)
+    {
+      if (GTK_IS_MENU (widget))
+        parent = gtk_menu_get_attach_widget (GTK_MENU (widget));
+      else
+        parent = widget->parent;
+      if (parent == NULL)
+        break;
+      widget = parent;
+    }
+
+  found_widget = (GtkWidget*) gtk_object_get_data (GTK_OBJECT (widget),
+                                                   widget_name);
+  if (!found_widget)
+    g_warning ("Widget not found: %s", widget_name);
+  return found_widget;
+}
+
+/* This is a dummy pixmap we use when a pixmap can't be found. */
+static char *dummy_pixmap_xpm[] = {
+/* columns rows colors chars-per-pixel */
+"1 1 1 1",
+"  c None",
+/* pixels */
+" "
+};
+
+/* This is an internally used function to create pixmaps. */
+static GtkWidget*
+create_dummy_pixmap                    (GtkWidget       *widget)
+{
+  GdkColormap *colormap;
+  GdkPixmap *gdkpixmap;
+  GdkBitmap *mask;
+  GtkWidget *pixmap;
+
+  colormap = gtk_widget_get_colormap (widget);
+  gdkpixmap = gdk_pixmap_colormap_create_from_xpm_d (NULL, colormap, &mask,
+                                                     NULL, dummy_pixmap_xpm);
+  if (gdkpixmap == NULL)
+    g_error ("Couldn't create replacement pixmap.");
+  pixmap = gtk_pixmap_new (gdkpixmap, mask);
+  gdk_pixmap_unref (gdkpixmap);
+  gdk_bitmap_unref (mask);
+  return pixmap;
+}
+
+static GList *pixmaps_directories = NULL;
+
+/* Use this function to set the directory containing installed pixmaps. */
+void
+add_pixmap_directory                   (const gchar     *directory)
+{
+  pixmaps_directories = g_list_prepend (pixmaps_directories,
+                                        g_strdup (directory));
+}
+
+/* This is an internally used function to create pixmaps. */
+GtkWidget*
+create_pixmap                          (GtkWidget       *widget,
+                                        const gchar     *filename)
+{
+  gchar *found_filename = NULL;
+  GdkColormap *colormap;
+  GdkPixmap *gdkpixmap;
+  GdkBitmap *mask;
+  GtkWidget *pixmap;
+  GList *elem;
+
+  if (!filename || !filename[0])
+      return create_dummy_pixmap (widget);
+
+  /* We first try any pixmaps directories set by the application. */
+  elem = pixmaps_directories;
+  while (elem)
+    {
+      found_filename = check_file_exists ((gchar*)elem->data, filename);
+      if (found_filename)
+        break;
+      elem = elem->next;
+    }
+
+  /* If we haven't found the pixmap, try the source directory. */
+  if (!found_filename)
+    {
+      found_filename = check_file_exists ("../../share", filename);
+    }
+
+  if (!found_filename)
+    {
+      g_warning (_("Couldn't find pixmap file: %s"), filename);
+      return create_dummy_pixmap (widget);
+    }
+
+  colormap = gtk_widget_get_colormap (widget);
+  gdkpixmap = gdk_pixmap_colormap_create_from_xpm (NULL, colormap, &mask,
+                                                   NULL, found_filename);
+  if (gdkpixmap == NULL)
+    {
+      g_warning (_("Error loading pixmap file: %s"), found_filename);
+      g_free (found_filename);
+      return create_dummy_pixmap (widget);
+    }
+  g_free (found_filename);
+  pixmap = gtk_pixmap_new (gdkpixmap, mask);
+  gdk_pixmap_unref (gdkpixmap);
+  gdk_bitmap_unref (mask);
+  return pixmap;
+}
+
+/* This is an internally used function to check if a pixmap file exists. */
+static gchar*
+check_file_exists                      (const gchar     *directory,
+                                        const gchar     *filename)
+{
+  gchar *full_filename;
+  struct stat s;
+  gint status;
+
+  full_filename = (gchar*) g_malloc (strlen (directory) + 1
+                                     + strlen (filename) + 1);
+  strcpy (full_filename, directory);
+  strcat (full_filename, G_DIR_SEPARATOR_S);
+  strcat (full_filename, filename);
+
+  status = stat (full_filename, &s);
+  if (status == 0 && S_ISREG (s.st_mode))
+    return full_filename;
+  g_free (full_filename);
+  return NULL;
+}
+
diff --git a/plugins/familiar/familiar_support.h b/plugins/familiar/familiar_support.h
new file mode 100644 (file)
index 0000000..931bc5a
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * DO NOT EDIT THIS FILE - it is generated by Glade.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <gtk/gtk.h>
+
+/*
+ * Standard gettext macros.
+ */
+#ifdef ENABLE_NLS
+#  include <libintl.h>
+#  undef _
+#  define _(String) dgettext (PACKAGE, String)
+#  ifdef gettext_noop
+#    define N_(String) gettext_noop (String)
+#  else
+#    define N_(String) (String)
+#  endif
+#else
+#  define textdomain(String) (String)
+#  define gettext(String) (String)
+#  define dgettext(Domain,Message) (Message)
+#  define dcgettext(Domain,Message,Type) (Message)
+#  define bindtextdomain(Domain,Directory) (Domain)
+#  define _(String) (String)
+#  define N_(String) (String)
+#endif
+
+
+/*
+ * Public Functions.
+ */
+
+/*
+ * This function returns a widget in a component created by Glade.
+ * Call it with the toplevel widget in the component (i.e. a window/dialog),
+ * or alternatively any widget in the component, and the name of the widget
+ * you want returned.
+ */
+GtkWidget*  lookup_widget              (GtkWidget       *widget,
+                                        const gchar     *widget_name);
+
+/* get_widget() is deprecated. Use lookup_widget instead. */
+#define get_widget lookup_widget
+
+/* Use this function to set the directory containing installed pixmaps. */
+void        add_pixmap_directory       (const gchar     *directory);
+
+
+/*
+ * Private Functions.
+ */
+
+/* This is used to create the pixmaps in the interface. */
+GtkWidget*  create_pixmap              (GtkWidget       *widget,
+                                        const gchar     *filename);
+
diff --git a/plugins/filter/crop.c b/plugins/filter/crop.c
new file mode 100644 (file)
index 0000000..da94655
--- /dev/null
@@ -0,0 +1,502 @@
+/*****************************************************************************
+ * crop.c : Crop video plugin for vlc
+ *****************************************************************************
+ * Copyright (C) 2002 VideoLAN
+ * $Id: crop.c,v 1.1.2.2 2002/06/02 02:04:37 sam Exp $
+ *
+ * Authors: Samuel Hocevar <sam@zoy.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ *****************************************************************************/
+
+/*****************************************************************************
+ * Preamble
+ *****************************************************************************/
+#include <errno.h>
+#include <stdlib.h>                                      /* malloc(), free() */
+#include <string.h>
+
+#include <videolan/vlc.h>
+
+#include "video.h"
+#include "video_output.h"
+
+#include "filter_common.h"
+
+/*****************************************************************************
+ * Capabilities defined in the other files.
+ *****************************************************************************/
+static void vout_getfunctions( function_list_t * p_function_list );
+
+/*****************************************************************************
+ * Build configuration tree.
+ *****************************************************************************/
+MODULE_CONFIG_START
+ADD_CATEGORY_HINT( N_("Miscellaneous"), NULL )
+ADD_STRING ( "crop-geometry", NULL, NULL, N_("Crop geometry"), N_("Set the geometry of the zone to crop") )
+ADD_BOOL ( "autocrop", 0, NULL, N_("Automatic cropping"), N_("Activate automatic black border cropping") )
+MODULE_CONFIG_STOP
+
+MODULE_INIT_START
+    SET_DESCRIPTION( _("image crop video module") )
+    /* Capability score set to 0 because we don't want to be spawned
+     * as a video output unless explicitly requested to */
+    ADD_CAPABILITY( VOUT, 0 )
+    ADD_SHORTCUT( "crop" )
+MODULE_INIT_STOP
+
+MODULE_ACTIVATE_START
+    vout_getfunctions( &p_module->p_functions->vout );
+MODULE_ACTIVATE_STOP
+
+MODULE_DEACTIVATE_START
+MODULE_DEACTIVATE_STOP
+
+/*****************************************************************************
+ * vout_sys_t: Crop video output method descriptor
+ *****************************************************************************
+ * This structure is part of the video output thread descriptor.
+ * It describes the Crop specific properties of an output thread.
+ *****************************************************************************/
+typedef struct vout_sys_s
+{
+    vout_thread_t *p_vout;
+
+    unsigned int i_x, i_y;
+    unsigned int i_width, i_height, i_aspect;
+
+    boolean_t b_autocrop;
+
+    /* Autocrop specific variables */
+    unsigned int i_lastchange;
+    boolean_t    b_changed;
+
+} vout_sys_t;
+
+/*****************************************************************************
+ * Local prototypes
+ *****************************************************************************/
+static int  vout_Create    ( vout_thread_t * );
+static int  vout_Init      ( vout_thread_t * );
+static void vout_End       ( vout_thread_t * );
+static void vout_Destroy   ( vout_thread_t * );
+static int  vout_Manage    ( vout_thread_t * );
+static void vout_Render    ( vout_thread_t *, picture_t * );
+static void vout_Display   ( vout_thread_t *, picture_t * );
+
+static void UpdateStats    ( vout_thread_t *, picture_t * );
+
+/*****************************************************************************
+ * Functions exported as capabilities. They are declared as static so that
+ * we don't pollute the namespace too much.
+ *****************************************************************************/
+static void vout_getfunctions( function_list_t * p_function_list )
+{
+    p_function_list->functions.vout.pf_create     = vout_Create;
+    p_function_list->functions.vout.pf_init       = vout_Init;
+    p_function_list->functions.vout.pf_end        = vout_End;
+    p_function_list->functions.vout.pf_destroy    = vout_Destroy;
+    p_function_list->functions.vout.pf_manage     = vout_Manage;
+    p_function_list->functions.vout.pf_render     = vout_Render;
+    p_function_list->functions.vout.pf_display    = vout_Display;
+}
+
+/*****************************************************************************
+ * vout_Create: allocates Crop video thread output method
+ *****************************************************************************
+ * This function allocates and initializes a Crop vout method.
+ *****************************************************************************/
+static int vout_Create( vout_thread_t *p_vout )
+{
+    /* Allocate structure */
+    p_vout->p_sys = malloc( sizeof( vout_sys_t ) );
+    if( p_vout->p_sys == NULL )
+    {
+        intf_ErrMsg( "vout error: out of memory" );
+        return 1;
+    }
+
+    return 0;
+}
+
+/*****************************************************************************
+ * vout_Init: initialize Crop video thread output method
+ *****************************************************************************/
+static int vout_Init( vout_thread_t *p_vout )
+{
+    int   i_index;
+    char *psz_var;
+    picture_t *p_pic;
+    
+    I_OUTPUTPICTURES = 0;
+
+    p_vout->p_sys->i_lastchange = 0;
+    p_vout->p_sys->b_changed = 0;
+
+    /* Initialize the output structure */
+    p_vout->output.i_chroma = p_vout->render.i_chroma;
+    p_vout->output.i_width  = p_vout->render.i_width;
+    p_vout->output.i_height = p_vout->render.i_height;
+    p_vout->output.i_aspect = p_vout->render.i_aspect;
+
+    /* Shall we use autocrop ? */
+    p_vout->p_sys->b_autocrop = config_GetIntVariable( "autocrop" );
+
+    /* Get geometry value from the user */
+    psz_var = config_GetPszVariable( "crop-geometry" );
+    if( psz_var )
+    {
+        char *psz_parser, *psz_tmp;
+
+        psz_parser = psz_tmp = psz_var;
+        while( *psz_tmp && *psz_tmp != 'x' ) psz_tmp++;
+
+        if( *psz_tmp )
+        {
+            psz_tmp[0] = '\0';
+            p_vout->p_sys->i_width = atoi( psz_parser );
+
+            psz_parser = ++psz_tmp;
+            while( *psz_tmp && *psz_tmp != '+' ) psz_tmp++;
+
+            if( *psz_tmp )
+            {
+                psz_tmp[0] = '\0';
+                p_vout->p_sys->i_height = atoi( psz_parser );
+
+                psz_parser = ++psz_tmp;
+                while( *psz_tmp && *psz_tmp != '+' ) psz_tmp++;
+
+                if( *psz_tmp )
+                {
+                    psz_tmp[0] = '\0';
+                    p_vout->p_sys->i_x = atoi( psz_parser );
+                    p_vout->p_sys->i_y = atoi( ++psz_tmp );
+                }
+                else
+                {
+                    p_vout->p_sys->i_x = atoi( psz_parser );
+                    p_vout->p_sys->i_y =
+                     ( p_vout->output.i_height - p_vout->p_sys->i_height ) / 2;
+                }
+            }
+            else
+            {
+                p_vout->p_sys->i_height = atoi( psz_parser );
+                p_vout->p_sys->i_x =
+                     ( p_vout->output.i_width - p_vout->p_sys->i_width ) / 2;
+                p_vout->p_sys->i_y =
+                     ( p_vout->output.i_height - p_vout->p_sys->i_height ) / 2;
+            }
+        }
+        else
+        {
+            p_vout->p_sys->i_width = atoi( psz_parser );
+            p_vout->p_sys->i_height = p_vout->output.i_height;
+            p_vout->p_sys->i_x =
+                     ( p_vout->output.i_width - p_vout->p_sys->i_width ) / 2;
+            p_vout->p_sys->i_y =
+                     ( p_vout->output.i_height - p_vout->p_sys->i_height ) / 2;
+        }
+
+        /* Check for validity */
+        if( p_vout->p_sys->i_x + p_vout->p_sys->i_width
+                                                   > p_vout->output.i_width )
+        {
+            p_vout->p_sys->i_x = 0;
+            if( p_vout->p_sys->i_width > p_vout->output.i_width )
+            {
+                p_vout->p_sys->i_width = p_vout->output.i_width;
+            }
+        }
+
+        if( p_vout->p_sys->i_y + p_vout->p_sys->i_height
+                                                   > p_vout->output.i_height )
+        {
+            p_vout->p_sys->i_y = 0;
+            if( p_vout->p_sys->i_height > p_vout->output.i_height )
+            {
+                p_vout->p_sys->i_height = p_vout->output.i_height;
+            }
+        }
+
+        free( psz_var );
+    }
+    else
+    {
+        p_vout->p_sys->i_width  = p_vout->output.i_width;
+        p_vout->p_sys->i_height = p_vout->output.i_height;
+        p_vout->p_sys->i_x = p_vout->p_sys->i_y = 0;
+    }
+
+    /* Pheeew. Parsing done. */
+    intf_WarnMsg( 3, "vout info: cropping at %ix%i+%i+%i, %sautocropping",
+                  p_vout->p_sys->i_width, p_vout->p_sys->i_height,
+                  p_vout->p_sys->i_x, p_vout->p_sys->i_y,
+                  p_vout->p_sys->b_autocrop ? "" : "not " );
+
+    /* Set current output image properties */
+    p_vout->p_sys->i_aspect = p_vout->output.i_aspect
+                            * p_vout->output.i_height / p_vout->p_sys->i_height
+                            * p_vout->p_sys->i_width / p_vout->output.i_width;
+
+    /* Try to open the real video output */
+    psz_var = config_GetPszVariable( "filter" );
+    config_PutPszVariable( "filter", NULL );
+
+    intf_WarnMsg( 3, "vout info: spawning the real video outputs" );
+
+    p_vout->p_sys->p_vout =
+        vout_CreateThread( NULL,
+                    p_vout->p_sys->i_width, p_vout->p_sys->i_height,
+                    p_vout->render.i_chroma, p_vout->p_sys->i_aspect );
+    if( p_vout->p_sys->p_vout == NULL )
+    {
+        intf_ErrMsg( "vout error: failed to create vout" );
+        config_PutPszVariable( "filter", psz_var );
+        if( psz_var ) free( psz_var );
+        return 0;
+    }
+
+    config_PutPszVariable( "filter", psz_var );
+    if( psz_var ) free( psz_var );
+
+    ALLOCATE_DIRECTBUFFERS( VOUT_MAX_PICTURES );
+
+    return 0;
+}
+
+/*****************************************************************************
+ * vout_End: terminate Crop video thread output method
+ *****************************************************************************/
+static void vout_End( vout_thread_t *p_vout )
+{
+    int i_index;
+
+    /* Free the fake output buffers we allocated */
+    for( i_index = I_OUTPUTPICTURES ; i_index ; )
+    {
+        i_index--;
+        free( PP_OUTPUTPICTURE[ i_index ]->p_data_orig );
+    }
+}
+
+/*****************************************************************************
+ * vout_Destroy: destroy Crop video thread output method
+ *****************************************************************************
+ * Terminate an output method created by CropCreateOutputMethod
+ *****************************************************************************/
+static void vout_Destroy( vout_thread_t *p_vout )
+{
+    vout_DestroyThread( p_vout->p_sys->p_vout, NULL );
+    free( p_vout->p_sys );
+}
+
+/*****************************************************************************
+ * vout_Manage: handle Crop events
+ *****************************************************************************
+ * This function should be called regularly by video output thread. It manages
+ * console events. It returns a non null value on error.
+ *****************************************************************************/
+static int vout_Manage( vout_thread_t *p_vout )
+{
+    if( !p_vout->p_sys->b_changed )
+    {
+        return 0;
+    }
+
+    vout_DestroyThread( p_vout->p_sys->p_vout, NULL );
+
+    p_vout->p_sys->p_vout =
+        vout_CreateThread( NULL,
+                    p_vout->p_sys->i_width, p_vout->p_sys->i_height,
+                    p_vout->render.i_chroma, p_vout->p_sys->i_aspect );
+    if( p_vout->p_sys->p_vout == NULL )
+    {
+        intf_ErrMsg( "vout error: failed to create vout" );
+        return 1;
+    }
+
+    p_vout->p_sys->b_changed = 0;
+    p_vout->p_sys->i_lastchange = 0;
+
+    return 0;
+}
+
+/*****************************************************************************
+ * vout_Render: display previously rendered output
+ *****************************************************************************
+ * This function sends the currently rendered image to Crop image, waits
+ * until it is displayed and switches the two rendering buffers, preparing next
+ * frame.
+ *****************************************************************************/
+static void vout_Render( vout_thread_t *p_vout, picture_t *p_pic )
+{
+    picture_t *p_outpic = NULL;
+    int i_plane;
+
+    if( p_vout->p_sys->b_changed )
+    {
+        return;
+    }
+
+    while( ( p_outpic =
+                 vout_CreatePicture( p_vout->p_sys->p_vout, 0, 0, 0 )
+           ) == NULL )
+    {
+        if( p_vout->b_die || p_vout->b_error )
+        {
+            vout_DestroyPicture( p_vout->p_sys->p_vout, p_outpic );
+            return;
+        }
+
+        msleep( VOUT_OUTMEM_SLEEP );
+    }
+
+    vout_DatePicture( p_vout->p_sys->p_vout, p_outpic, p_pic->date );
+    vout_LinkPicture( p_vout->p_sys->p_vout, p_outpic );
+
+    for( i_plane = 0 ; i_plane < p_pic->i_planes ; i_plane++ )
+    {
+        u8 *p_in, *p_out, *p_out_end;
+        int i_in_pitch = p_pic->p[i_plane].i_pitch;
+        const int i_out_pitch = p_outpic->p[i_plane].i_pitch;
+
+        p_in = p_pic->p[i_plane].p_pixels
+                /* Skip the right amount of lines */
+                + i_in_pitch * ( p_pic->p[i_plane].i_lines * p_vout->p_sys->i_y
+                                  / p_vout->output.i_height )
+                /* Skip the right amount of columns */
+                + i_in_pitch * p_vout->p_sys->i_x / p_vout->output.i_width;
+
+        p_out = p_outpic->p[i_plane].p_pixels;
+        p_out_end = p_out + i_out_pitch * p_outpic->p[i_plane].i_lines;
+
+        while( p_out < p_out_end )
+        {
+            FAST_MEMCPY( p_out, p_in, i_out_pitch );
+            p_in += i_in_pitch;
+            p_out += i_out_pitch;
+        }
+    }
+
+    vout_UnlinkPicture( p_vout->p_sys->p_vout, p_outpic );
+    vout_DisplayPicture( p_vout->p_sys->p_vout, p_outpic );
+
+    /* The source image may still be in the cache ... parse it! */
+    if( !p_vout->p_sys->b_autocrop )
+    {
+        return;
+    }
+
+    UpdateStats( p_vout, p_pic );
+}
+
+/*****************************************************************************
+ * vout_Display: displays previously rendered output
+ *****************************************************************************
+ * This function send the currently rendered image to Invert image, waits
+ * until it is displayed and switch the two rendering buffers, preparing next
+ * frame.
+ *****************************************************************************/
+static void vout_Display( vout_thread_t *p_vout, picture_t *p_pic )
+{
+    ;
+}
+
+static void UpdateStats( vout_thread_t *p_vout, picture_t *p_pic )
+{
+    u8 *p_in = p_pic->p[0].p_pixels;
+    int i_pitch = p_pic->p[0].i_pitch;
+    int i_lines = p_pic->p[0].i_lines;
+    int i_firstwhite = -1, i_lastwhite = -1, i;
+
+    /* Determine where black borders are */
+    switch( p_vout->output.i_chroma )
+    {
+    case FOURCC_I420:
+        /* XXX: Do not laugh ! I know this is very naive. But it's just a
+         *      proof of concept code snippet... */
+        for( i = i_lines ; i-- ; )
+        {
+            const int i_col = i * i_pitch / i_lines;
+
+            if( p_in[i_col/2] > 40
+                 && p_in[i_pitch / 2] > 40
+                 && p_in[i_pitch/2 + i_col/2] > 40 )
+            {
+                if( i_lastwhite == -1 )
+                {
+                    i_lastwhite = i;
+                }
+                i_firstwhite = i;
+            }
+            p_in += i_pitch;
+        }
+        break;
+
+    default:
+        break;
+    }
+
+    /* Decide whether it's worth changing the size */
+    if( i_lastwhite == -1 )
+    {
+        p_vout->p_sys->i_lastchange = 0;
+        return;
+    }
+
+    if( i_lastwhite - i_firstwhite < p_vout->p_sys->i_height / 2 )
+    {
+        p_vout->p_sys->i_lastchange = 0;
+        return;
+    }
+
+    if( i_lastwhite - i_firstwhite < p_vout->p_sys->i_height + 16
+         && i_lastwhite - i_firstwhite + 16 > p_vout->p_sys->i_height )
+    {
+        p_vout->p_sys->i_lastchange = 0;
+        return;
+    }
+
+    /* We need at least 25 images to make up our mind */
+    p_vout->p_sys->i_lastchange++;
+    if( p_vout->p_sys->i_lastchange < 25 )
+    {
+        return;
+    }
+
+    /* Tune a few values */
+    if( i_firstwhite & 1 )
+    {
+        i_firstwhite--;
+    }
+
+    if( !(i_lastwhite & 1) )
+    {
+        i_lastwhite++;
+    }
+
+    /* Change size */
+    p_vout->p_sys->i_y = i_firstwhite;
+    p_vout->p_sys->i_height = i_lastwhite - i_firstwhite + 1;
+
+    p_vout->p_sys->i_aspect = p_vout->output.i_aspect
+                            * p_vout->output.i_height / p_vout->p_sys->i_height
+                            * p_vout->p_sys->i_width / p_vout->output.i_width;
+
+    p_vout->p_sys->b_changed = 1;
+}
+
diff --git a/plugins/qte/Makefile b/plugins/qte/Makefile
new file mode 100644 (file)
index 0000000..291719c
--- /dev/null
@@ -0,0 +1,3 @@
+qte_SOURCES = qte.c qte.cpp
+#qte_CFLAGS = -I$(QTDIR)/include -DQT_QWS_IPAQ -DQWS -fno-exceptions -fno-rtti
+#qte_LDFLAGS = -L$(QTDIR)/lib -lqpe -lqte
diff --git a/plugins/qte/qte.c b/plugins/qte/qte.c
new file mode 100644 (file)
index 0000000..3f1a129
--- /dev/null
@@ -0,0 +1,54 @@
+/*****************************************************************************
+ * qte.c : Qt Embedded video output
+ *****************************************************************************
+ * Copyright (C) 2002 VideoLAN
+ * $Id: qte.c,v 1.1.2.1 2002/09/30 20:32:46 jpsaman Exp $
+ *
+ * Authors: Gerald Hansink <gerald.hansink@ordina.nl>
+ *          Jean-Paul Saman <jpsaman@wxs.nl>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ *****************************************************************************/
+
+/*****************************************************************************
+ * Preamble
+ *****************************************************************************/
+#include <errno.h>                                                 /* ENOMEM */
+#include <stdlib.h>                                                /* free() */
+#include <string.h>                                                /* strerror() */
+
+#include <videolan/vlc.h>
+
+void _M( vout_getfunctions )( function_list_t * p_function_list );
+
+MODULE_CONFIG_START
+ADD_CATEGORY_HINT( N_("Miscellaneous"), NULL )
+ADD_STRING  ( "qte-display", NULL, NULL, NULL, NULL )
+ADD_BOOL    ( "qte-altfullscreen", NULL, NULL, NULL, NULL )
+MODULE_CONFIG_STOP
+
+MODULE_INIT_START
+    SET_DESCRIPTION( _("Qt Embedded video output module") )
+    ADD_CAPABILITY( VOUT, 150 )
+    ADD_SHORTCUT( "qtevlc" )
+MODULE_INIT_STOP
+
+MODULE_ACTIVATE_START
+    _M( vout_getfunctions )( &p_module->p_functions->vout );
+MODULE_ACTIVATE_STOP
+
+MODULE_DEACTIVATE_START
+MODULE_DEACTIVATE_STOP
+
diff --git a/plugins/qte/qte.cpp b/plugins/qte/qte.cpp
new file mode 100644 (file)
index 0000000..8b78872
--- /dev/null
@@ -0,0 +1,593 @@
+/*****************************************************************************
+ * qte.cpp : Qt Embedded video output plugin implementation
+ *****************************************************************************
+ * Copyright (C) 2002 VideoLAN
+ * $Id: qte.cpp,v 1.1.2.1 2002/09/30 20:32:46 jpsaman Exp $
+ *
+ * Authors: Gerald Hansink <gerald.hansink@ordina.nl>
+ *          Jean-Paul Saman <jpsaman@wxs.nl>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ *****************************************************************************/
+
+/*****************************************************************************
+ * notes:
+ * - written for ipaq, so hardcoded assumptions specific for ipaq...
+ * - runs full screen
+ * - no "mouse events" handling
+ * - etc.
+ *****************************************************************************/
+
+/*****************************************************************************
+ * Preamble
+ *****************************************************************************/
+
+#include <qapplication.h>
+#include <qpainter.h>
+
+#ifdef Q_WS_QWS
+# define USE_DIRECT_PAINTER
+# include <qdirectpainter_qws.h>
+# include <qgfxraster_qws.h>
+#endif
+
+#include <errno.h>                                                 /* ENOMEM */
+#include <stdlib.h>                                                /* free() */
+#include <string.h>                                                /* strerror() */
+
+#include <videolan/vlc.h>
+
+#ifdef HAVE_MACHINE_PARAM_H
+    /* BSD */
+#   include <machine/param.h>
+#   include <sys/types.h>                                  /* typedef ushort */
+#   include <sys/ipc.h>
+#endif
+
+#ifndef WIN32
+#   include <netinet/in.h>                            /* BSD: struct in_addr */
+#endif
+
+#ifdef HAVE_SYS_SHM_H
+#   include <sys/shm.h>                                /* shmget(), shmctl() */
+#endif
+
+
+#include "video.h"
+#include "video_output.h"
+
+#include "interface.h"
+#include "netutils.h"                                 /* network_ChannelJoin */
+
+#include "stream_control.h"                 /* needed by input_ext-intf.h... */
+#include "input_ext-intf.h"
+
+
+/*****************************************************************************
+ * Local prototypes
+ *****************************************************************************/
+static int  vout_Create    ( vout_thread_t * );
+static void vout_Destroy   ( vout_thread_t * );
+static void vout_Render    ( vout_thread_t *, picture_t * );
+static void vout_Display   ( vout_thread_t *, picture_t * );
+static int  vout_Manage    ( vout_thread_t * );
+static int  vout_Init      ( vout_thread_t * );
+static void vout_End       ( vout_thread_t * );
+
+
+static int  CreateQtWindow ( vout_thread_t * );
+static void DestroyQtWindow( vout_thread_t * );
+
+static int  NewPicture     ( vout_thread_t *, picture_t * );
+static void FreePicture    ( vout_thread_t *, picture_t * );
+
+static void ToggleFullScreen      ( vout_thread_t * );
+
+static void* vout_run_qtapp_exec (void* pVoid);
+
+/*****************************************************************************
+ * vout_sys_t: video output method descriptor
+ *****************************************************************************
+ * This structure is part of the video output thread descriptor.
+ * It describes the specific properties of an video output plugin
+ *****************************************************************************/
+typedef struct vout_sys_s
+{
+    /* Internal settings and properties */
+    int                 i_width;
+    int                 i_height;
+
+    bool                bRunning;
+    bool                bOwnsQApp;
+
+    QApplication*       pcQApplication;
+    QWidget*            pcVoutWidget;
+} vout_sys_t;
+
+
+/*****************************************************************************
+ * picture_sys_t: direct buffer method descriptor
+ *****************************************************************************/
+typedef struct picture_sys_s
+{
+    QImage*             pQImage;
+} picture_sys_t;
+
+
+/*****************************************************************************
+ * Chroma defines
+ *****************************************************************************/
+#define QTE_MAX_DIRECTBUFFERS    2
+
+
+/*****************************************************************************
+ * Seeking function TODO: put this in a generic location !
+ *****************************************************************************/
+static inline void vout_Seek( off_t i_seek )
+{
+}
+
+extern "C"
+{
+
+void _M( vout_getfunctions )( function_list_t * p_function_list );
+
+/*****************************************************************************
+ * Functions exported as capabilities. They are declared as static so that
+ * we don't pollute the namespace too much.
+ *****************************************************************************/
+void _M( vout_getfunctions )( function_list_t * p_function_list )
+{
+    p_function_list->functions.vout.pf_create     = vout_Create;
+    p_function_list->functions.vout.pf_init       = vout_Init;
+    p_function_list->functions.vout.pf_end        = vout_End;
+    p_function_list->functions.vout.pf_destroy    = vout_Destroy;
+    p_function_list->functions.vout.pf_manage     = vout_Manage;
+    p_function_list->functions.vout.pf_render     = vout_Render;
+    p_function_list->functions.vout.pf_display    = vout_Display;
+}
+
+}
+
+
+/*****************************************************************************
+ * vout_Create: allocate video thread output method
+ *****************************************************************************/
+static int vout_Create( vout_thread_t *p_vout )
+{
+    //intf_ErrMsg( "+vout_Create::qte" );
+
+    /* Allocate structure */
+    p_vout->p_sys = (vout_sys_s*) malloc( sizeof( vout_sys_t ) );
+
+    if( p_vout->p_sys == NULL )
+    {
+        intf_ErrMsg( "vout error: %s", strerror(ENOMEM) );
+        return( 1 );
+    }
+
+    memset(p_vout->p_sys, 0, sizeof( vout_sys_t ));
+
+    CreateQtWindow(p_vout);
+
+    //intf_ErrMsg( "-vout_Create::qte\n" );
+    return( 0 );
+}
+
+/*****************************************************************************
+ * vout_Destroy: destroy video thread output method
+ *****************************************************************************
+ * Terminate an output method created by vout_Create
+ *****************************************************************************/
+static void vout_Destroy( vout_thread_t *p_vout )
+{
+    //intf_ErrMsg( "+vout_Destroy::qte\n" );
+    DestroyQtWindow(p_vout);
+    free(p_vout->p_sys);
+}
+
+/*****************************************************************************
+ * vout_Init: initialize video thread output method
+ *****************************************************************************
+ * This function create the buffers needed by the output thread. It is called
+ * at the beginning of the thread, but also each time the window is resized.
+ *****************************************************************************/
+static int vout_Init( vout_thread_t *p_vout )
+{
+    int         i_index;
+    picture_t*  p_pic;
+
+    int         dd = QPixmap::defaultDepth();
+
+    //intf_ErrMsg( "+vout_Init::qte\n" );
+
+    I_OUTPUTPICTURES = 0;
+
+    p_vout->output.i_chroma = (dd == 16) ? FOURCC_RV16 : FOURCC_RV32;
+    p_vout->output.i_rmask  = 0xf800;
+    p_vout->output.i_gmask  = 0x07e0;
+    p_vout->output.i_bmask  = 0x001f;
+    //p_vout->output.i_width  = p_vout->render.i_width;
+    //p_vout->output.i_height = p_vout->render.i_height;
+    p_vout->output.i_width  = p_vout->p_sys->i_width;
+    p_vout->output.i_height = p_vout->p_sys->i_height;
+    p_vout->output.i_aspect = p_vout->render.i_aspect;
+
+    /* Try to initialize MAX_DIRECTBUFFERS direct buffers */
+    while( I_OUTPUTPICTURES < QTE_MAX_DIRECTBUFFERS )
+    {
+        p_pic = NULL;
+
+        /* Find an empty picture slot */
+        for( i_index = 0 ; i_index < VOUT_MAX_PICTURES ; i_index++ )
+        {
+            if( p_vout->p_picture[ i_index ].i_status == FREE_PICTURE )
+            {
+                p_pic = p_vout->p_picture + i_index;
+                break;
+            }
+        }
+
+        /* Allocate the picture */
+        if( p_pic == NULL ||  NewPicture( p_vout, p_pic ) )
+        {
+            break;
+        }
+
+        p_pic->i_status = DESTROYED_PICTURE;
+        p_pic->i_type   = DIRECT_PICTURE;
+
+        PP_OUTPUTPICTURE[ I_OUTPUTPICTURES ] = p_pic;
+
+        I_OUTPUTPICTURES++;
+    }
+
+    //intf_ErrMsg( "-vout_Init::qte %d output pictures\n", I_OUTPUTPICTURES);
+
+    return( 0 );
+}
+
+
+/*****************************************************************************
+ * vout_Render: render previously calculated output
+ *****************************************************************************/
+static void vout_Render( vout_thread_t *p_vout, picture_t *p_pic )
+{
+    //intf_ErrMsg( "+vout_Render::qte\n" );
+    ;
+}
+
+/*****************************************************************************
+ * vout_Display: displays previously rendered output
+ *****************************************************************************
+ * This function sends the currently rendered image to screen.
+ *****************************************************************************/
+static void vout_Display( vout_thread_t *p_vout, picture_t *p_pic )
+{
+    int x, y, w, h;
+
+    vout_PlacePicture( p_vout, p_vout->p_sys->i_width, p_vout->p_sys->i_height,
+                       &x, &y, &w, &h );
+
+    if(p_vout->p_sys->pcVoutWidget)
+    {
+// shameless borrowed from opie mediaplayer....
+#ifndef USE_DIRECT_PAINTER
+        QPainter p(p_vout->p_sys->pcVoutWidget);
+
+        /* rotate frame */
+        int dd      = QPixmap::defaultDepth();
+        int bytes   = ( dd == 16 ) ? 2 : 4;
+        int rw = h, rh = w;
+
+        QImage rotatedFrame( rw, rh, bytes << 3 );
+
+        ushort* in  = (ushort*)p_pic->p_sys->pQImage->bits();
+        ushort* out = (ushort*)rotatedFrame.bits();
+
+        int spl = rotatedFrame.bytesPerLine() / bytes;
+        for (int x=0; x<h; x++)
+        {
+            if ( bytes == 2 )
+            {
+                ushort* lout = out++ + (w - 1)*spl;
+                for (int y=0; y<w; y++)
+                {
+                    *lout=*in++;
+                    lout-=spl;
+                }
+            }
+            else
+            {
+                ulong* lout = ((ulong *)out)++ + (w - 1)*spl;
+                for (int y=0; y<w; y++)
+                {
+                    *lout=*((ulong*)in)++;
+                    lout-=spl;
+                }
+            }
+        }
+
+        p.drawImage( x, y, rotatedFrame, 0, 0, rw, rh );
+#else
+        QDirectPainter p(p_vout->p_sys->pcVoutWidget);
+
+        // just copy the image to the frame buffer...
+        memcpy(p.frameBuffer(), (p_pic->p_sys->pQImage->jumpTable())[0], h * p.lineStep());
+#endif
+    }
+}
+
+/*****************************************************************************
+ * vout_Manage: handle X11 events
+ *****************************************************************************
+ * This function should be called regularly by video output thread. It manages
+ * X11 events and allows window resizing. It returns a non null value on
+ * error.
+ *****************************************************************************/
+static int vout_Manage( vout_thread_t *p_vout )
+{
+    //intf_ErrMsg( "+vout_Manage::qte\n" );
+    return 0;
+}
+
+/*****************************************************************************
+ * vout_End: terminate video thread output method
+ *****************************************************************************
+ * Destroy the buffers created by vout_Init. It is called at the end of
+ * the thread, but also each time the window is resized.
+ *****************************************************************************/
+static void vout_End( vout_thread_t *p_vout )
+{
+    int i_index;
+
+    //intf_ErrMsg( "+vout_End::qte\n" );
+
+    /* Free the direct buffers we allocated */
+    for( i_index = I_OUTPUTPICTURES ; i_index ; )
+    {
+        i_index--;
+        FreePicture( p_vout, PP_OUTPUTPICTURE[ i_index ] );
+    }
+}
+
+
+/*****************************************************************************
+ * NewPicture: allocate a picture
+ *****************************************************************************
+ * Returns 0 on success, -1 otherwise
+ *****************************************************************************/
+static int NewPicture( vout_thread_t *p_vout, picture_t *p_pic )
+{
+    int dd = QPixmap::defaultDepth();
+
+    //intf_ErrMsg( "+NewPicture::dd = %d\n",dd );
+
+    p_pic->p_sys = (picture_sys_t*) malloc( sizeof( picture_sys_t ) );
+
+    if( p_pic->p_sys == NULL )
+    {
+        return -1;
+    }
+
+    switch(p_vout->output.i_chroma)
+    {
+    case FOURCC_RV16:
+        if(dd == 16)
+        {
+            p_pic->p_sys->pQImage = new QImage(p_vout->output.i_width,
+                                               p_vout->output.i_height,
+                                               dd );
+
+            if(p_pic->p_sys->pQImage == NULL)
+            {
+                return -1;
+            }
+
+            p_pic->p->p_pixels = (p_pic->p_sys->pQImage->jumpTable())[0];
+
+            p_pic->p->i_pitch = p_pic->p_sys->pQImage->bytesPerLine();
+
+            p_pic->p->i_lines = p_vout->output.i_height;
+            p_pic->p->i_pixel_bytes = 2;
+            p_pic->p->b_margin      = 0;
+            p_pic->i_planes         = 1;
+        }
+        else
+        {
+            return -1;
+        }
+        break;
+    case FOURCC_RV32:
+        if(dd == 32)
+        {
+            p_pic->p_sys->pQImage = new QImage(p_vout->output.i_width,
+                                               p_vout->output.i_height,
+                                               dd );
+
+            if(p_pic->p_sys->pQImage == NULL)
+            {
+                return -1;
+            }
+
+            p_pic->p->p_pixels = (p_pic->p_sys->pQImage->jumpTable())[0];
+
+            p_pic->p->i_pitch = p_pic->p_sys->pQImage->bytesPerLine();
+
+            p_pic->p->i_lines = p_vout->output.i_height;
+            p_pic->p->i_pixel_bytes = 4;
+            p_pic->p->b_margin      = 0;
+            p_pic->i_planes         = 1;
+        }
+        else
+        {
+            return -1;
+        }
+        break;
+    default:
+        return -1;
+        break;
+    }
+
+/*
+    intf_ErrMsg( "NewPicture: %d %d %d\n",p_vout->output.i_width,
+                                 p_vout->output.i_height,
+                                 p_vout->output.i_chroma );
+*/
+    return 0;
+}
+
+/*****************************************************************************
+ * FreePicture: destroy a picture allocated with NewPicture
+ *****************************************************************************/
+static void FreePicture( vout_thread_t *p_vout, picture_t *p_pic )
+{
+    delete p_pic->p_sys->pQImage;
+}
+
+/*****************************************************************************
+ * ToggleFullScreen: Enable or disable full screen mode
+ *****************************************************************************
+ * This function will switch between fullscreen and window mode.
+ *
+ *****************************************************************************/
+static void ToggleFullScreen ( vout_thread_t *p_vout )
+{
+}
+
+
+/*****************************************************************************
+ * CreateQtWindow: create qte applicaton / window
+ *****************************************************************************
+ * Create a window according to video output given size, and set other
+ * properties according to the display properties.
+ *****************************************************************************/
+static int CreateQtWindow( vout_thread_t *p_vout )
+{
+    //intf_ErrMsg( "vout_qt: +init qt window");
+
+    /* for displaying the vout in a qt window we need the QtApplication */
+    vlc_thread_t    thread_id;
+    //intf_ErrMsg( "vout_qt: +init qt window, creating qpe application");
+
+    p_vout->p_sys->pcVoutWidget = NULL;
+
+    /* create thread to exec the qpe application */
+    if ( vlc_thread_create( &thread_id, "vout qte",
+                            (vlc_thread_func_t)vout_run_qtapp_exec,
+                            (void *)p_vout) )
+    {
+        intf_ErrMsg( "input error: can't spawn vout thread");
+        return( -1 );
+    }
+
+    p_vout->p_sys->i_width  = 320;
+    p_vout->p_sys->i_height = 240;
+
+    // just wait until the crew is complete...
+    while(p_vout->p_sys->pcVoutWidget == NULL)
+    {
+        msleep(1);
+    }
+
+    //intf_ErrMsg( "vout_qt: -init qt window");
+
+    return( 0 );
+}
+
+
+/*****************************************************************************
+ * DestroyQtWindow: destroy the window
+ *****************************************************************************/
+static void DestroyQtWindow( vout_thread_t *p_vout )
+{
+    // quit qt application loop
+    if(p_vout->p_sys->pcQApplication)
+    {
+        if(p_vout->p_sys->bOwnsQApp)
+        {
+            p_vout->p_sys->pcQApplication->quit();
+        }
+        else
+        {
+            p_vout->p_sys->bRunning = FALSE;
+        }
+
+        while(p_vout->p_sys->pcVoutWidget)
+        {
+            msleep(1);
+        }
+    }
+}
+
+/*****************************************************************************
+ * main loop of qtapplication
+ *****************************************************************************/
+static void*
+vout_run_qtapp_exec(void* pVoid)
+{
+    int     argc    = 0;
+    char    arg0[]  = "vout qte";
+
+    vout_thread_t* p_vout = (vout_thread_t*) pVoid;
+
+    if(qApp == NULL)
+    {
+        QApplication* pApp = new QApplication(argc, NULL);
+        if(pApp)
+        {
+            p_vout->p_sys->pcQApplication = pApp;
+            p_vout->p_sys->bOwnsQApp = TRUE;
+        }
+        else
+        {
+            return NULL;
+        }
+    }
+    else
+    {
+        p_vout->p_sys->pcQApplication = qApp;
+    }
+
+    {
+        QWidget vo(0, "vout");
+        vo.showFullScreen();
+        vo.show();
+        p_vout->p_sys->pcVoutWidget = &vo;
+
+        p_vout->p_sys->bRunning = TRUE;
+
+        if(p_vout->p_sys->bOwnsQApp)
+        {
+            // run the main loop of qtapplication until someone says: 'quit'
+            p_vout->p_sys->pcQApplication->exec();
+        }
+        else
+        {
+            while(p_vout->p_sys->bRunning) msleep(100);
+        }
+    }
+
+    p_vout->p_sys->pcVoutWidget = NULL;
+
+    if(p_vout->p_sys->bOwnsQApp)
+    {
+        delete p_vout->p_sys->pcQApplication;
+        p_vout->p_sys->pcQApplication = NULL;
+    }
+
+    return 0;
+}
+
diff --git a/share/familiar-forwardb16x16.xpm b/share/familiar-forwardb16x16.xpm
new file mode 100644 (file)
index 0000000..d4e2515
--- /dev/null
@@ -0,0 +1,21 @@
+/* XPM */
+static char * familiar_forwardb16x16_xpm[] = {
+"16 16 2 1",
+"      c None",
+".     c #000000",
+"                ",
+"                ",
+"    ..    ...   ",
+"    ...   ...   ",
+"    ....  ...   ",
+"    ..... ...   ",
+"    .........   ",
+"    .........   ",
+"    .........   ",
+"    ..... ...   ",
+"    ....  ...   ",
+"    ...   ...   ",
+"    ..    ...   ",
+"                ",
+"                ",
+"                "};
diff --git a/share/familiar-openb16x16.xpm b/share/familiar-openb16x16.xpm
new file mode 100644 (file)
index 0000000..343de04
--- /dev/null
@@ -0,0 +1,21 @@
+/* XPM */
+static char * familiar_openb16x16_xpm[] = {
+"16 16 2 1",
+"      c None",
+".     c #000000",
+"                ",
+"                ",
+"       ..       ",
+"      ....      ",
+"     ......     ",
+"    ........    ",
+"   ..........   ",
+"  ............  ",
+"  ............  ",
+"                ",
+"  ............  ",
+"  ............  ",
+"  ............  ",
+"  ............  ",
+"                ",
+"                "};
diff --git a/share/familiar-pauseb16x16.xpm b/share/familiar-pauseb16x16.xpm
new file mode 100644 (file)
index 0000000..bce7c6c
--- /dev/null
@@ -0,0 +1,21 @@
+/* XPM */
+static char * familiar_pauseb16x16_xpm[] = {
+"16 16 2 1",
+"      c None",
+".     c #000000",
+"                ",
+"                ",
+"   ....  ....   ",
+"   ....  ....   ",
+"   ....  ....   ",
+"   ....  ....   ",
+"   ....  ....   ",
+"   ....  ....   ",
+"   ....  ....   ",
+"   ....  ....   ",
+"   ....  ....   ",
+"   ....  ....   ",
+"   ....  ....   ",
+"   ....  ....   ",
+"                ",
+"                "};
diff --git a/share/familiar-playb16x16.xpm b/share/familiar-playb16x16.xpm
new file mode 100644 (file)
index 0000000..3bf1e46
--- /dev/null
@@ -0,0 +1,21 @@
+/* XPM */
+static char * familiar_playb16x16_xpm[] = {
+"16 16 2 1",
+"      c None",
+".     c #000000",
+"                ",
+"                ",
+"  ..            ",
+"  ....          ",
+"  ......        ",
+"  ........      ",
+"  ..........    ",
+"  ...........   ",
+"  ...........   ",
+"  ..........    ",
+"  ........      ",
+"  ......        ",
+"  ....          ",
+"  ..            ",
+"                ",
+"                "};
diff --git a/share/familiar-preferencesb16x16.xpm b/share/familiar-preferencesb16x16.xpm
new file mode 100644 (file)
index 0000000..3b5a318
--- /dev/null
@@ -0,0 +1,21 @@
+/* XPM */
+static char * familiar_preferencesb16x16_xpm[] = {
+"16 16 2 1",
+"      c None",
+".     c #000000",
+"                ",
+"                ",
+"     .......    ",
+"    .........   ",
+"   ...........  ",
+"  .....   ..... ",
+"  .....   ..... ",
+"  .....   ..... ",
+"  .....   ..... ",
+"  .....   ..... ",
+"  .....   ..... ",
+"  .....   ..... ",
+"   ...........  ",
+"    .........   ",
+"     .......    ",
+"                "};
diff --git a/share/familiar-rewindb16x16.xpm b/share/familiar-rewindb16x16.xpm
new file mode 100644 (file)
index 0000000..bb8027a
--- /dev/null
@@ -0,0 +1,21 @@
+/* XPM */
+static char * familiar_rewindb16x16_xpm[] = {
+"16 16 2 1",
+"      c None",
+".     c #000000",
+"                ",
+"                ",
+"   ...    ..    ",
+"   ...   ...    ",
+"   ...  ....    ",
+"   ... .....    ",
+"   .........    ",
+"   .........    ",
+"   .........    ",
+"   ... .....    ",
+"   ...  ....    ",
+"   ...   ...    ",
+"   ...    ..    ",
+"                ",
+"                ",
+"                "};
diff --git a/share/familiar-stopb16x16.xpm b/share/familiar-stopb16x16.xpm
new file mode 100644 (file)
index 0000000..4f0d07f
--- /dev/null
@@ -0,0 +1,21 @@
+/* XPM */
+static char * familiar_stopb16x16_xpm[] = {
+"16 16 2 1",
+"      c None",
+".     c #000000",
+"                ",
+"                ",
+"                ",
+"    ........    ",
+"    ........    ",
+"    ........    ",
+"    ........    ",
+"    ........    ",
+"    ........    ",
+"    ........    ",
+"    ........    ",
+"    ........    ",
+"    ........    ",
+"                ",
+"                ",
+"                "};
diff --git a/share/vlc16x16.xpm b/share/vlc16x16.xpm
new file mode 100644 (file)
index 0000000..d343f4d
--- /dev/null
@@ -0,0 +1,90 @@
+/* XPM */
+static char * vlc16x16_xpm[] = {
+"16 16 71 1",
+"      c None",
+".     c #3E2201",
+"+     c #B07732",
+"@     c #483622",
+"#     c #653D0D",
+"$     c #FFC462",
+"%     c #B68653",
+"&     c #9D815F",
+"*     c #F8CB8B",
+"=     c #F1CEA8",
+"-     c #BDB8B3",
+";     c #E4ECF7",
+">     c #FFFFFF",
+",     c #75706B",
+"'     c #F19827",
+")     c #F1B670",
+"!     c #FED69D",
+"~     c #B78F65",
+"{     c #693D07",
+"]     c #FF9000",
+"^     c #FD8E0B",
+"/     c #FEAA46",
+"(     c #F1B36D",
+"_     c #918576",
+":     c #EDC797",
+"<     c #F1AE5F",
+"[     c #FCC382",
+"}     c #FFECCE",
+"|     c #908B88",
+"1     c #B6A38C",
+"2     c #DADCDF",
+"3     c #DFE9F5",
+"4     c #FDFFFF",
+"5     c #FEFFFF",
+"6     c #D6C4B3",
+"7     c #F18A09",
+"8     c #F79822",
+"9     c #F2A84F",
+"0     c #FDBC71",
+"a     c #FCC079",
+"b     c #FABF7B",
+"c     c #362819",
+"d     c #8F4E00",
+"e     c #FB8C00",
+"f     c #FF8900",
+"g     c #FF8800",
+"h     c #FF9410",
+"i     c #FFAC4D",
+"j     c #F8C382",
+"k     c #AA7233",
+"l     c #A25500",
+"m     c #7B4300",
+"n     c #BA6600",
+"o     c #D17300",
+"p     c #D97B02",
+"q     c #E48102",
+"r     c #DC830F",
+"s     c #D88C2D",
+"t     c #DF8E27",
+"u     c #E38003",
+"v     c #884A00",
+"w     c #000000",
+"x     c #231300",
+"y     c #492800",
+"z     c #7B4500",
+"A     c #B66500",
+"B     c #C16900",
+"C     c #693600",
+"D     c #1F1000",
+"E     c #090400",
+"F     c #070400",
+"                ",
+"      .         ",
+"      +@        ",
+"     #$%        ",
+"     &*=        ",
+"     -;>,       ",
+"     ')!~       ",
+"    {]^/(       ",
+"    _:<[}|      ",
+"    123456      ",
+"    7890abc     ",
+"   defghijkl    ",
+"  mnopqrstuv    ",
+"   wxyzABCDw    ",
+"       EF       ",
+"                "};
index 3ddbe2af0a97436752ba289bb440b6fab41e2d84..a3b5186c3954956e2885a80995e5b5ca42224898 100644 (file)
--- a/vlc.spec
+++ b/vlc.spec
@@ -1,7 +1,7 @@
 
 
 %define name           vlc
-%define vlc_ver        0.4.0
+%define vlc_ver        0.4.5
 %define version                %vlc_ver
 
 %define cvs            0
@@ -287,6 +287,8 @@ rm -fr %buildroot
 %{_libdir}/videolan/vlc/filter_invert.so
 %{_libdir}/videolan/vlc/filter_transform.so
 %{_libdir}/videolan/vlc/filter_wall.so
+%{_libdir}/videolan/vlc/filter_clone.so
+%{_libdir}/videolan/vlc/filter_crop.so
 %{_libdir}/videolan/vlc/fx_scope.so
 %{_libdir}/videolan/vlc/http.so
 %{_libdir}/videolan/vlc/ipv4.so
@@ -409,6 +411,21 @@ rm -fr %buildroot
 %{_libdir}/videolan/vlc/alsa.so
 
 %changelog
+* Fri Oct 11 2002 Yves Duret <yduret@mandrakesoft.com> 0.4.5-1mdk
+- new upstream release
+
+* Sun Aug 11 2002 Yves Duret <yduret@mandrakesoft.com> 0.4.4-1mdk
+- new upstream release
+
+* Fri Jul 26 2002 Yves Duret <yduret@mandrakesoft.com> 0.4.3-1mdk
+- new upstream release
+
+* Sun Jul 7 2002 Yves Duret <yduret@mandrakesoft.com> 0.4.2-1mdk
+- new upstream release
+
+* Mon Jun 3 2002 Yves Duret <yduret@mandrakesoft.com> 0.4.1-1mdk
+- new upstream release
+
 * Thu May 23 2002 Yves Duret <yduret@mandrakesoft.com> 0.4.0-1mdk
 - version 0.4.0 with MPEG4 (DivX) support thx ffmpeg.
   thus s/MPEG, MPEG2 and DVD/multimedia/g